OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
OcBootManagementLib.h
Go to the documentation of this file.
1
6#ifndef OC_BOOT_MANAGEMENT_LIB_H
7#define OC_BOOT_MANAGEMENT_LIB_H
8
9#include <PiDxe.h>
10#include <Guid/AppleVariable.h>
17#include <Library/OcStringLib.h>
19#include <Library/OcTypingLib.h>
21#include <Protocol/LoadedImage.h>
23#include <Protocol/OcAudio.h>
24#include <Protocol/GraphicsOutput.h>
26
27#if defined (OC_TARGET_DEBUG) || defined (OC_TARGET_NOOPT)
28// #define BUILTIN_DEMONSTRATE_TYPING
29#endif
30
31#if !defined (OC_TRACE_PARSE_VARS)
32#define OC_TRACE_PARSE_VARS DEBUG_VERBOSE
33#endif
34
38#define OC_MAX_INSTANCE_IDENTIFIER_SIZE 64
39
43#define OC_MAX_CONTENT_VISIBILITY_SIZE 512
44
49
54
58#define OC_MENU_BOOT_MENU L"OpenCore Boot Menu"
59#define OC_MENU_UEFI_SHELL_ENTRY L"UEFI Shell"
60#define OC_MENU_PASSWORD_REQUEST L"Password: "
61#define OC_MENU_PASSWORD_PROCESSING L"Verifying password..."
62#define OC_MENU_PASSWORD_RETRY_LIMIT L"Password retry limit exceeded."
63#define OC_MENU_CHOOSE_OS L"Choose the Operating System: "
64#define OC_MENU_SHOW_AUXILIARY L"Show Auxiliary"
65#define OC_MENU_RELOADING L"Reloading"
66#define OC_MENU_TIMEOUT L"Timeout"
67#define OC_MENU_OK L"OK"
68#define OC_MENU_EXTERNAL L" (external)"
69#define OC_MENU_DISK_IMAGE L" (dmg)"
70#define OC_MENU_SHUTDOWN L"Shutting Down"
71#define OC_MENU_RESTART L"Restarting"
72
76#define OC_FLAVOUR_AUTO "Auto"
77#define OC_FLAVOUR_RESET_NVRAM "ResetNVRAM:NVRAMTool"
78#define OC_FLAVOUR_TOGGLE_SIP "ToggleSIP:NVRAMTool"
79#define OC_FLAVOUR_TOGGLE_SIP_ENABLED "ToggleSIP_Enabled:ToggleSIP:NVRAMTool"
80#define OC_FLAVOUR_TOGGLE_SIP_DISABLED "ToggleSIP_Disabled:ToggleSIP:NVRAMTool"
81#define OC_FLAVOUR_FIRMWARE_SETTINGS "FirmwareSettings"
82#define OC_FLAVOUR_HTTP_BOOT4 "HttpBoot4:HttpBoot:NetworkBoot"
83#define OC_FLAVOUR_HTTP_BOOT6 "HttpBoot6:HttpBoot:NetworkBoot"
84#define OC_FLAVOUR_PXE_BOOT4 "PxeBoot4:PxeBoot:NetworkBoot"
85#define OC_FLAVOUR_PXE_BOOT6 "PxeBoot6:PxeBoot:NetworkBoot"
86#define OC_FLAVOUR_APPLE_OS "Apple"
87#define OC_FLAVOUR_APPLE_RECOVERY "AppleRecv:Apple"
88#define OC_FLAVOUR_APPLE_FW "AppleRecv:Apple"
89#define OC_FLAVOUR_APPLE_TIME_MACHINE "AppleTM:Apple"
90#define OC_FLAVOUR_WINDOWS "Windows"
91
95#define OC_FLAVOUR_ID_RESET_NVRAM "ResetNVRAM"
96#define OC_FLAVOUR_ID_UEFI_SHELL "UEFIShell"
97#define OC_FLAVOUR_ID_TOGGLE_SIP_ENABLED "ToggleSIP_Enabled"
98#define OC_FLAVOUR_ID_TOGGLE_SIP_DISABLED "ToggleSIP_Disabled"
99#define OC_FLAVOUR_ID_FIRMWARE_SETTINGS "FirmwareSettings"
100#define OC_FLAVOUR_ID_NETWORK_BOOT "NetworkBoot"
101
105#define OPEN_CORE_IMAGE_PATH L"Resources\\Image\\"
106#define OPEN_CORE_LABEL_PATH L"Resources\\Label\\"
107#define OPEN_CORE_AUDIO_PATH L"Resources\\Audio\\"
108#define OPEN_CORE_FONT_PATH L"Resources\\Font\\"
109
113#define OC_ATTR_USE_VOLUME_ICON BIT0
114#define OC_ATTR_USE_DISK_LABEL_FILE BIT1
115#define OC_ATTR_USE_GENERIC_LABEL_IMAGE BIT2
116#define OC_ATTR_HIDE_THEMED_ICONS BIT3
117#define OC_ATTR_USE_POINTER_CONTROL BIT4
118#define OC_ATTR_SHOW_DEBUG_DISPLAY BIT5
119#define OC_ATTR_USE_MINIMAL_UI BIT6
120#define OC_ATTR_USE_FLAVOUR_ICON BIT7
121#define OC_ATTR_USE_REVERSED_UI BIT8
122#define OC_ATTR_REDUCE_MOTION BIT9
123#define OC_ATTR_ALL_BITS (\
124 OC_ATTR_USE_VOLUME_ICON | OC_ATTR_USE_DISK_LABEL_FILE | \
125 OC_ATTR_USE_GENERIC_LABEL_IMAGE | OC_ATTR_HIDE_THEMED_ICONS | \
126 OC_ATTR_USE_POINTER_CONTROL | OC_ATTR_SHOW_DEBUG_DISPLAY | \
127 OC_ATTR_USE_MINIMAL_UI | OC_ATTR_USE_FLAVOUR_ICON | \
128 OC_ATTR_USE_REVERSED_UI | OC_ATTR_REDUCE_MOTION )
129
134#define OC_VOICE_OVER_IDLE_TIMEOUT_MS 700
135
139#define OC_VOICE_OVER_SIGNAL_NORMAL_MS 200
140#define OC_VOICE_OVER_SILENCE_NORMAL_MS 150
141#define OC_VOICE_OVER_SIGNALS_NORMAL 1
142#define OC_VOICE_OVER_SIGNALS_PASSWORD 2
143#define OC_VOICE_OVER_SIGNALS_PASSWORD_OK 3
144
145#define OC_VOICE_OVER_SIGNAL_ERROR_MS 1000
146#define OC_VOICE_OVER_SILENCE_ERROR_MS 150
147#define OC_VOICE_OVER_SIGNALS_ERROR 1
148#define OC_VOICE_OVER_SIGNALS_HWERROR 3
149
154typedef UINT32 OC_BOOT_ENTRY_TYPE;
155
156#define OC_BOOT_UNKNOWN BIT0
157#define OC_BOOT_APPLE_OS BIT1
158#define OC_BOOT_APPLE_RECOVERY BIT2
159#define OC_BOOT_APPLE_TIME_MACHINE BIT3
160#define OC_BOOT_APPLE_FW_UPDATE BIT4
161#define OC_BOOT_APPLE_ANY (OC_BOOT_APPLE_OS | OC_BOOT_APPLE_RECOVERY | OC_BOOT_APPLE_TIME_MACHINE | OC_BOOT_APPLE_FW_UPDATE)
162#define OC_BOOT_WINDOWS BIT5
163#define OC_BOOT_EXTERNAL_OS BIT6
164#define OC_BOOT_EXTERNAL_TOOL BIT7
165#define OC_BOOT_SYSTEM BIT8
166#define OC_BOOT_UNMANAGED BIT9
167
176
191#define OC_KERN_CAPABILITY_K32_U32 BIT0
192#define OC_KERN_CAPABILITY_K32_U64 BIT1
193#define OC_KERN_CAPABILITY_K64_U64 BIT2
194
195#define OC_KERN_CAPABILITY_K32_K64_U64 (OC_KERN_CAPABILITY_K32_U64 | OC_KERN_CAPABILITY_K64_U64)
196#define OC_KERN_CAPABILITY_K32_U32_U64 (OC_KERN_CAPABILITY_K32_U32 | OC_KERN_CAPABILITY_K32_U64)
197#define OC_KERN_CAPABILITY_ALL (OC_KERN_CAPABILITY_K32_U32 | OC_KERN_CAPABILITY_K32_K64_U64)
198
204#define OC_SCAN_FILE_SYSTEM_LOCK BIT0
205
211#define OC_SCAN_DEVICE_LOCK BIT1
212
216#define OC_SCAN_ALLOW_FS_APFS BIT8
217
221#define OC_SCAN_ALLOW_FS_HFS BIT9
222
226#define OC_SCAN_ALLOW_FS_ESP BIT10
227
231#define OC_SCAN_ALLOW_FS_NTFS BIT11
232
237#define OC_SCAN_ALLOW_FS_LINUX_ROOT BIT12
238
243#define OC_SCAN_ALLOW_FS_LINUX_DATA BIT13
244
248#define OC_SCAN_ALLOW_FS_XBOOTLDR BIT14
249
253#define OC_SCAN_ALLOW_DEVICE_SATA BIT16
254
258#define OC_SCAN_ALLOW_DEVICE_SASEX BIT17
259
263#define OC_SCAN_ALLOW_DEVICE_SCSI BIT18
264
268#define OC_SCAN_ALLOW_DEVICE_NVME BIT19
269
273#define OC_SCAN_ALLOW_DEVICE_ATAPI BIT20
274
278#define OC_SCAN_ALLOW_DEVICE_USB BIT21
279
283#define OC_SCAN_ALLOW_DEVICE_FIREWIRE BIT22
284
288#define OC_SCAN_ALLOW_DEVICE_SDCARD BIT23
289
293#define OC_SCAN_ALLOW_DEVICE_PCI BIT24
294
298#define OC_SCAN_DEVICE_BITS (\
299 OC_SCAN_ALLOW_DEVICE_SATA | OC_SCAN_ALLOW_DEVICE_SASEX | \
300 OC_SCAN_ALLOW_DEVICE_SCSI | OC_SCAN_ALLOW_DEVICE_NVME | \
301 OC_SCAN_ALLOW_DEVICE_ATAPI | OC_SCAN_ALLOW_DEVICE_USB | \
302 OC_SCAN_ALLOW_DEVICE_FIREWIRE | OC_SCAN_ALLOW_DEVICE_SDCARD | \
303 OC_SCAN_ALLOW_DEVICE_PCI)
304
308#define OC_SCAN_FILE_SYSTEM_BITS (\
309 OC_SCAN_ALLOW_FS_APFS | OC_SCAN_ALLOW_FS_HFS | OC_SCAN_ALLOW_FS_ESP | \
310 OC_SCAN_ALLOW_FS_NTFS | OC_SCAN_ALLOW_FS_LINUX_ROOT | \
311 OC_SCAN_ALLOW_FS_LINUX_DATA | OC_SCAN_ALLOW_FS_XBOOTLDR )
312
316#define OC_SCAN_DEFAULT_POLICY (\
317 OC_SCAN_FILE_SYSTEM_LOCK | OC_SCAN_DEVICE_LOCK | \
318 OC_SCAN_ALLOW_FS_APFS | \
319 OC_SCAN_ALLOW_DEVICE_SATA | OC_SCAN_ALLOW_DEVICE_SASEX | \
320 OC_SCAN_ALLOW_DEVICE_SCSI | OC_SCAN_ALLOW_DEVICE_NVME | \
321 OC_SCAN_ALLOW_DEVICE_PCI)
322
331
335typedef
336EFI_STATUS
338 IN OUT OC_PICKER_CONTEXT *PickerContext
339 );
340
344typedef
345EFI_STATUS
347 IN OUT OC_PICKER_CONTEXT *PickerContext,
348 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
349 );
350
354typedef
355EFI_STATUS
357 IN OUT OC_PICKER_CONTEXT *PickerContext,
358 IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
359 );
360
365
370typedef
371EFI_STATUS
372(EFIAPI *OC_CUSTOM_READ)(
373 IN OC_STORAGE_CONTEXT *Storage,
374 IN OC_BOOT_ENTRY *ChosenEntry,
375 OUT VOID **Data,
376 OUT UINT32 *DataSize,
377 OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath,
378 OUT EFI_HANDLE *StorageHandle,
379 OUT EFI_DEVICE_PATH_PROTOCOL **StoragePath,
380 IN OC_DMG_LOADING_SUPPORT DmgLoading,
381 OUT OC_APPLE_DISK_IMAGE_PRELOAD_CONTEXT *DmgPreloadContext,
382 OUT VOID **CustomFreeContext
383 );
384
388typedef
389EFI_STATUS
390(EFIAPI *OC_CUSTOM_FREE)(
391 IN VOID *CustomFreeContext
392 );
393
399 //
400 // Link in entry list in OC_BOOT_FILESYSTEM.
401 //
402 LIST_ENTRY Link;
403 //
404 // Device path to booter or its directory.
405 // Can be NULL, for example, for custom or system entries.
406 //
407 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
408 //
409 // Action to perform on execution. Only valid for system entries.
410 //
412 //
413 // Action to perform on execution. Only valid for unmanaged boot entries.
414 //
416 //
417 // Get final Device Path for boot entry. Only valid for unmanaged boot entries.
418 //
420 //
421 // Custom entry image read routine, optional for non-custom entries.
422 //
424 //
425 // Custom entry routine to free custom items. Optional.
426 //
428 //
429 // Id under which to save entry as default.
430 //
431 CHAR16 *Id;
432 //
433 // Obtained human visible name.
434 //
435 CHAR16 *Name;
436 //
437 // Obtained boot path directory.
438 // For custom entries this contains tool path.
439 //
440 CHAR16 *PathName;
441 //
442 // Content flavour.
443 //
444 CHAR8 *Flavour;
445 //
446 // Heuristical value signaling inferred type of booted os.
447 // WARNING: Non-definitive, do not rely on for any security purposes.
448 //
450 //
451 // Entry index number, assigned by picker.
452 //
454 //
455 // Set when this entry is an externally available entry (e.g. USB).
456 //
457 BOOLEAN IsExternal;
458 //
459 // Should try booting from first dmg found in DevicePath.
460 //
461 BOOLEAN IsFolder;
462 //
463 // Set when this entry refers to a generic booter (e.g. BOOTx64.EFI).
464 //
465 BOOLEAN IsGeneric;
466 //
467 // Set when this entry refers to a custom boot entry.
468 //
469 BOOLEAN IsCustom;
470 //
471 // Set when entry was created by OC_BOOT_ENTRY_PROTOCOL.
472 //
474 //
475 // Set when entry is identified as macOS installer.
476 //
478 //
479 // Should make this option default boot option.
480 //
481 BOOLEAN SetDefault;
482 //
483 // Should launch this entry in text mode.
484 //
486 //
487 // Should expose real device path when dealing with custom entries.
488 //
490 //
491 // Should disable OpenRuntime NVRAM protection around invocation of tool.
492 //
494 //
495 // Partition UUID of entry device.
496 // Set for non-system action boot entry protocol boot entries only.
497 //
499 //
500 // Load option data (usually "boot args") size.
501 //
503 //
504 // Load option data (usually "boot args").
505 //
507 //
508 // Audio base path for system action. Boot Entry Protocol only.
509 //
511 //
512 // Audio base type for system action. Boot Entry Protocol only.
513 //
515};
516
524
529
534
540 //
541 // Link in filesystem list in OC_BOOT_CONTEXT.
542 //
543 LIST_ENTRY Link;
544 //
545 // Filesystem handle.
546 //
547 EFI_HANDLE Handle;
548 //
549 // List of boot entries (OC_BOOT_ENTRY).
550 //
551 LIST_ENTRY BootEntries;
552 //
553 // Pointer to APFS Recovery partition (if any).
554 //
556 //
557 // External filesystem.
558 //
559 BOOLEAN External;
560 //
561 // Loader filesystem.
562 //
563 BOOLEAN LoaderFs;
564 //
565 // Contains recovery on the filesystem.
566 //
568};
569
573typedef struct OC_BOOT_CONTEXT_ {
574 //
575 // Total boot entry count.
576 //
578 //
579 // Total filesystem count.
580 //
582 //
583 // List of filesystems containing boot entries (OC_BOOT_FILESYSTEM).
584 //
585 LIST_ENTRY FileSystems;
586 //
587 // GUID namespace for boot entries.
588 //
590 //
591 // Default entry to be booted.
592 //
594 //
595 // Picker context for externally configured parameters.
596 //
599
604typedef
605EFI_STATUS
606(EFIAPI *OC_IMAGE_START)(
607 IN OC_BOOT_ENTRY *ChosenEntry,
608 IN EFI_HANDLE ImageHandle,
609 OUT UINTN *ExitDataSize,
610 OUT CHAR16 **ExitData OPTIONAL,
611 IN BOOLEAN LaunchInText
612 );
613
619typedef struct {
620 //
621 // Used by OC_BOOT_ENTRY_PROTOCOL to reidentify entry.
622 // Multiple entries may share an id - allows e.g. newest version
623 // of Linux install to automatically become selected default.
624 //
625 CONST CHAR8 *Id;
626 //
627 // Entry name.
628 //
629 CONST CHAR8 *Name;
630 //
631 // Absolute device path to file for user custom entries,
632 // file path relative to device root for boot entry protocol.
633 //
634 CONST CHAR8 *Path;
635 //
636 // Entry boot arguments.
637 //
638 CONST CHAR8 *Arguments;
639 //
640 // Content flavour.
641 //
642 CONST CHAR8 *Flavour;
643 //
644 // Whether this entry is auxiliary.
645 //
646 BOOLEAN Auxiliary;
647 //
648 // Whether this entry is a tool.
649 //
650 BOOLEAN Tool;
651 //
652 // Whether it should be started in text mode.
653 //
654 BOOLEAN TextMode;
655 //
656 // Whether we should pass the actual device path (if possible).
657 //
658 BOOLEAN RealPath;
659 //
660 // Should disable OpenRuntime NVRAM protection around invocation of tool.
661 //
663 //
664 // System action. Boot Entry Protocol only. Optional.
665 //
667 //
668 // Audio base path for system action. Boot Entry Protocol only. Optional.
669 //
671 //
672 // Audio base type for system action. Boot Entry Protocol only. Optional.
673 //
675 //
676 // Unmanaged boot action. Boot Entry Protocol unmanaged boot entries only.
677 //
679 //
680 // Get final Device Path for unmanaged boot entry. Boot Entry Protocol unmanaged boot entries only.
681 //
683 //
684 // Absolute Device Path. May be used instead of text Path above for Boot Entry Protocol entries. Optional.
685 //
686 EFI_DEVICE_PATH_PROTOCOL *UnmanagedDevicePath;
687 //
688 // Custom entry image read routine, optional for non-custom entries.
689 //
691 //
692 // Custom entry routine to free custom items. Optional.
693 //
695 //
696 // Whether this entry should be labeled as external to the system. Boot Entry Protocol only. Optional.
697 //
698 BOOLEAN External;
700
708
712typedef INTN OC_KEY_CODE;
713
717typedef UINT16 OC_MODIFIER_MAP;
718
722typedef UINTN OC_PICKER_KEY_MAP;
723
734
738typedef
739EFI_STATUS
740(EFIAPI *OC_REQ_PRIVILEGE)(
741 IN OC_PICKER_CONTEXT *Context,
742 IN OC_PRIVILEGE_LEVEL Level
743 );
744
748typedef
749EFI_STATUS
750(EFIAPI *OC_SHOW_MENU)(
751 IN OC_BOOT_CONTEXT *BootContext,
752 IN OC_BOOT_ENTRY **BootEntries,
753 OUT OC_BOOT_ENTRY **ChosenBootEntry
754 );
755
759typedef
760EFI_STATUS
762 IN OC_PICKER_CONTEXT *Context,
763 IN OC_BOOT_ENTRY *BootEntry,
764 IN UINT8 Scale,
765 OUT VOID **ImageData,
766 OUT UINT32 *DataLength
767 );
768
772typedef
773EFI_STATUS
774(EFIAPI *OC_GET_ENTRY_ICON)(
775 IN OC_PICKER_CONTEXT *Context,
776 IN OC_BOOT_ENTRY *BootEntry,
777 OUT VOID **ImageData,
778 OUT UINT32 *DataLength
779 );
780
784typedef
785VOID
786(EFIAPI *OC_GET_KEY_INFO)(
787 IN OUT OC_PICKER_CONTEXT *Context,
788 IN OC_PICKER_KEY_MAP KeyFilter,
789 OUT OC_PICKER_KEY_INFO *PickerKeyInfo
790 );
791
795typedef
796UINT64
798 IN UINT64 Timeout
799 );
800
804typedef
805BOOLEAN
806(EFIAPI *OC_WAIT_FOR_KEY_INFO)(
807 IN OUT OC_PICKER_CONTEXT *Context,
808 IN UINT64 EndTime,
809 IN OC_PICKER_KEY_MAP KeyFilter,
810 IN OUT OC_PICKER_KEY_INFO *PickerKeyInfo
811 );
812
816typedef
817VOID
818(EFIAPI *OC_FLUSH_TYPING_BUFFER)(
819 IN OUT OC_PICKER_CONTEXT *Context
820 );
821
825typedef
826EFI_STATUS
827(EFIAPI *OC_PLAY_AUDIO_FILE)(
828 IN OC_PICKER_CONTEXT *Context,
829 IN CONST CHAR8 *BasePath,
830 IN CONST CHAR8 *BaseType,
831 IN BOOLEAN Fallback
832 );
833
837typedef
838EFI_STATUS
839(EFIAPI *OC_PLAY_AUDIO_BEEP)(
840 IN OC_PICKER_CONTEXT *Context,
841 IN UINT32 ToneCount,
842 IN UINT32 ToneLength,
843 IN UINT32 SilenceLength
844 );
845
849typedef
850EFI_STATUS
851(EFIAPI *OC_PLAY_AUDIO_ENTRY)(
852 IN OC_PICKER_CONTEXT *Context,
853 IN OC_BOOT_ENTRY *Entry
854 );
855
859typedef
860VOID
861(EFIAPI *OC_TOGGLE_VOICE_OVER)(
862 IN OC_PICKER_CONTEXT *Context,
863 IN CONST CHAR8 *BasePath OPTIONAL,
864 IN CONST CHAR8 *BaseType OPTIONAL
865 );
866
877
884typedef
885VOID
887 UINT64 LoopDelayStart,
888 UINT64 LoopDelayEnd
889 );
890
898typedef
899VOID
900(EFIAPI *OC_KB_DEBUG_SHOW)(
901 UINTN NumKeysDown,
902 UINTN NumKeysHeld,
903 APPLE_MODIFIER_MAP Modifiers
904 );
905
910
911typedef struct {
913 CONST UINT8 *Salt;
914 UINT32 SaltSize;
915 CONST UINT8 *Hash;
917
921typedef
922BOOLEAN
923(EFIAPI *OC_VERIFY_PASSWORD)(
924 IN CONST UINT8 *Password,
925 IN UINT32 PasswordSize,
926 IN CONST OC_PRIVILEGE_CONTEXT *PrivilegeContext
927 );
928
933 //
934 // Scan policy (e.g. OC_SCAN_DEFAULT_POLICY).
935 //
937 //
938 // DMG loading mode (e.g. OcDmgLoadingAppleSigned).
939 //
941 //
942 // Default entry selection timeout (pass 0 to ignore).
943 //
945 //
946 // Default delay prior to handling hotkeys (pass 0 to ignore).
947 //
949 //
950 // Define picker behaviour.
951 // For example, show boot menu or just boot the default option.
952 //
954 //
955 // Non-NULL if PickerCommand is OcPickerProtocolHotKey.
956 //
958 //
959 // Non-NULL if PickerCommand is OcPickerProtocolHotKey.
960 //
962 //
963 // Use custom (gOcVendorVariableGuid) for Boot#### variables.
964 //
966 //
967 // Custom entry image read routine, optional for non-custom entries.
968 //
970 //
971 // Storage context.
972 //
974 //
975 // Image starting routine used, required.
976 //
978 //
979 // Handle to perform loader detection, optional.
980 //
981 EFI_HANDLE LoaderHandle;
982 //
983 // Get entry label image.
984 //
986 //
987 // Get entry icon.
988 //
990 //
991 // Entry display routine.
992 //
994 //
995 // Privilege escalation requesting routine.
996 //
998 //
999 // Password verification.
1000 //
1002 //
1003 // Picker typing context.
1004 //
1006 //
1007 // Keyboard debug methods.
1008 //
1010 //
1011 // Context to pass to RequestPrivilege, optional.
1012 //
1014 //
1015 // Additional suffix to include by the interface.
1016 //
1017 CONST CHAR8 *TitleSuffix;
1018 //
1019 // Used picker mode.
1020 //
1022 //
1023 // Console attributes. 0 is reserved as disabled.
1024 //
1026 //
1027 // Picker attribues:
1028 // - BIT0~BIT15 are OpenCore reserved.
1029 // - BIT16~BIT31 are OEM-specific.
1030 //
1032 //
1033 // Picker icon set variant (refer to docs for requested behaviour).
1034 //
1035 CONST CHAR8 *PickerVariant;
1036 //
1037 // Boot loader instance identifier.
1038 //
1040 //
1041 // Enable polling boot arguments.
1042 //
1044 //
1045 // Allow setting default boot option from boot menu.
1046 //
1048 //
1049 // Hide and do not scan auxiliary entries.
1050 //
1052 //
1053 // Enable audio assistant during picker playback.
1054 //
1056 //
1057 // Set when Apple picker cannot be used on this system.
1058 //
1060 //
1061 // Ignore Apple peripheral firmware updates.
1062 //
1064 //
1065 // Recommended audio protocol, optional.
1066 //
1068 //
1069 // Recommended beeper protocol, optional.
1070 //
1072 //
1073 // Play audio file function.
1074 //
1076 //
1077 // Play audio beep function.
1078 //
1080 //
1081 // Play audio entry function.
1082 //
1084 //
1085 // Toggle VoiceOver function.
1086 //
1088 //
1089 // Recovery initiator if present.
1090 //
1091 EFI_DEVICE_PATH_PROTOCOL *RecoveryInitiator;
1092 //
1093 // Custom boot order updated during scanning allocated from pool.
1094 // Preserved here to avoid situations with losing BootNext on rescan.
1095 //
1096 UINT16 *BootOrder;
1097 //
1098 // Number of entries in boot order.
1099 //
1101 //
1102 // Additional boot arguments for Apple loaders.
1103 //
1105 //
1106 // Number of custom boot paths (bless override).
1107 //
1109 //
1110 // Custom boot paths (bless override). Must start with '\'.
1111 //
1113 //
1114 // Number of absolute custom entries.
1115 //
1117 //
1118 // Number of total custom entries (absolute and tools).
1119 //
1121 //
1122 // Custom picker entries. Absolute entries come first.
1123 //
1125};
1126
1131 //
1132 // Get pressed key info.
1133 //
1135 //
1136 // Request end time in units appropriate for WaitForKeyInfo.
1137 //
1139 //
1140 // Wait for pressed key info.
1141 //
1143 //
1144 // Flush typing buffer.
1145 //
1147 //
1148 // Apple Key Map protocol.
1149 //
1151 //
1152 // Non-repeating key context.
1153 //
1155 //
1156 // Typing context.
1157 //
1159};
1160
1164#define HIBERNATE_MODE_NONE 0U
1165#define HIBERNATE_MODE_RTC 1U
1166#define HIBERNATE_MODE_NVRAM 2U
1167
1178EFI_STATUS
1179EFIAPI
1181 IN OC_PICKER_CONTEXT *Context,
1182 IN OC_BOOT_ENTRY *BootEntry,
1183 IN UINT8 Scale,
1184 OUT VOID **ImageData,
1185 OUT UINT32 *DataLength
1186 );
1187
1197EFI_STATUS
1198EFIAPI
1200 IN OC_PICKER_CONTEXT *Context,
1201 IN OC_BOOT_ENTRY *BootEntry,
1202 OUT VOID **ImageData,
1203 OUT UINT32 *DataLength
1204 );
1205
1215 IN OC_PICKER_CONTEXT *Context
1216 );
1217
1230 IN OC_PICKER_CONTEXT *Context,
1231 IN BOOLEAN UseBootNextOnly
1232 );
1233
1243 IN OC_BOOT_CONTEXT *BootContext
1244 );
1245
1251VOID
1253 IN OUT OC_BOOT_CONTEXT *Context
1254 );
1255
1265UINT32
1267 IN OC_PICKER_CONTEXT *Context,
1268 IN OUT OC_BOOT_ENTRY *BootEntries,
1269 IN UINTN NumBootEntries
1270 );
1271
1280EFI_STATUS
1282 IN OC_PICKER_CONTEXT *Context,
1283 IN OC_BOOT_ENTRY *Entry
1284 );
1285
1297EFI_STATUS
1298EFIAPI
1300 IN OC_PICKER_CONTEXT *Context,
1301 IN OC_PRIVILEGE_LEVEL Level
1302 );
1303
1318BOOLEAN
1319EFIAPI
1321 IN CONST UINT8 *Password,
1322 IN UINT32 PasswordSize,
1323 IN CONST OC_PRIVILEGE_CONTEXT *PrivilegeContext
1324 );
1325
1336EFI_STATUS
1337EFIAPI
1339 IN OC_BOOT_CONTEXT *BootContext,
1340 IN OC_BOOT_ENTRY **BootEntries,
1341 OUT OC_BOOT_ENTRY **ChosenBootEntry
1342 );
1343
1353EFI_STATUS
1355 IN OC_PICKER_CONTEXT *Context,
1356 IN OC_BOOT_ENTRY *BootEntry,
1357 IN EFI_HANDLE ParentHandle
1358 );
1359
1367EFI_STATUS
1369 IN UINT32 HibernateMask
1370 );
1371
1381EFI_STATUS
1383 OUT EFI_DEVICE_PATH_PROTOCOL **Initiator OPTIONAL
1384 );
1385
1394VOID *
1396 OUT UINT32 *PanicSize
1397 );
1398
1404BOOLEAN
1406 VOID
1407 );
1408
1414VOID
1416 IN OUT OC_PICKER_CONTEXT *Context
1417 );
1418
1423#define OC_INPUT_STR "123456789ABCDEFGHIJKLMNOPQRSTUVXWZ"
1424#define OC_INPUT_MAX L_STR_LEN (OC_INPUT_STR)
1425#define OC_INPUT_ABORTED -1
1426#define OC_INPUT_NO_ACTION -2
1427#define OC_INPUT_TIMEOUT -3
1428#define OC_INPUT_CONTINUE -4
1429#define OC_INPUT_UP -5
1430#define OC_INPUT_DOWN -6
1431#define OC_INPUT_LEFT -7
1432#define OC_INPUT_RIGHT -8
1433#define OC_INPUT_TOP -9
1434#define OC_INPUT_BOTTOM -10
1435#define OC_INPUT_MORE -11
1436#define OC_INPUT_VOICE_OVER -12
1437#define OC_INPUT_INTERNAL -13
1438#define OC_INPUT_TYPING_CLEAR_ALL -14
1439#define OC_INPUT_TYPING_BACKSPACE -15
1440#define OC_INPUT_TYPING_LEFT -16
1441#define OC_INPUT_TYPING_RIGHT -17
1442#define OC_INPUT_TYPING_CONFIRM -18
1443#define OC_INPUT_SWITCH_FOCUS -19
1444#define OC_INPUT_FUNCTIONAL(x) (-50 - (x))
1445
1449#define OC_MODIFIERS_NONE 0
1450#define OC_MODIFIERS_SET_DEFAULT BIT0
1451#define OC_MODIFIERS_REVERSE_SWITCH_FOCUS BIT1
1452
1453#define OC_PICKER_KEYS_TYPING BIT0
1454#define OC_PICKER_KEYS_HOTKEYS BIT1
1455#define OC_PICKER_KEYS_VOICE_OVER BIT2
1456#define OC_PICKER_KEYS_TAB_CONTROL BIT3
1457
1458#define OC_PICKER_KEYS_FOR_TYPING \
1459 (OC_PICKER_KEYS_TYPING | OC_PICKER_KEYS_VOICE_OVER | OC_PICKER_KEYS_TAB_CONTROL)
1460
1461#define OC_PICKER_KEYS_FOR_PICKER \
1462 (OC_PICKER_KEYS_HOTKEYS | OC_PICKER_KEYS_VOICE_OVER | OC_PICKER_KEYS_TAB_CONTROL)
1463
1475EFI_STATUS
1477 IN OUT OC_PICKER_CONTEXT *Context
1478 );
1479
1485VOID
1487 IN OC_PICKER_CONTEXT *Context
1488 );
1489
1497EFI_STATUS
1499 IN OC_PICKER_CONTEXT *Context
1500 );
1501
1510UINT32
1512 IN EFI_HANDLE Handle,
1513 OUT BOOLEAN *External OPTIONAL
1514 );
1515
1523UINT32
1525 IN EFI_HANDLE Handle
1526 );
1527
1540 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
1541 OUT BOOLEAN *IsFolder OPTIONAL,
1542 OUT BOOLEAN *IsGeneric OPTIONAL
1543 );
1544
1552EFI_LOADED_IMAGE_PROTOCOL *
1554 IN EFI_HANDLE ImageHandle
1555 );
1556
1577
1578//
1579// Sanity check max. size for LoadOptions. We need to pass PEM certificates
1580// to some drivers (e.g. OpenNetworkBoot), so this has to be quite large.
1581//
1582#define MAX_LOAD_OPTIONS_SIZE SIZE_16KB
1583
1592BOOLEAN
1593EFIAPI
1595 IN UINT32 LoadOptionsSize,
1596 IN CONST VOID *LoadOptions
1597 );
1598
1607BOOLEAN
1608EFIAPI
1610 IN UINT32 LoadOptionsSize,
1611 IN CONST VOID *LoadOptions
1612 );
1613
1620VOID
1622 OUT OC_BOOT_ARGUMENTS *Arguments,
1623 IN VOID *BootArgs
1624 );
1625
1637BOOLEAN
1639 IN EFI_LOADED_IMAGE *LoadedImage OPTIONAL,
1640 IN EFI_GET_VARIABLE GetVariable OPTIONAL,
1641 IN CONST CHAR8 *Argument,
1642 IN CONST UINTN ArgumentLength,
1643 IN OUT CHAR8 **Value OPTIONAL
1644 );
1645
1656CONST CHAR8 *
1658 IN CONST CHAR8 *CommandLine,
1659 IN CONST CHAR8 *Argument,
1660 IN CONST UINTN ArgumentLength,
1661 OUT UINTN *ValueLength OPTIONAL
1662 );
1663
1670VOID
1672 IN OUT CHAR8 *CommandLine,
1673 IN CONST CHAR8 *Argument
1674 );
1675
1686BOOLEAN
1688 IN OUT OC_PICKER_CONTEXT *Context OPTIONAL,
1689 IN OUT CHAR8 *CommandLine,
1690 IN CONST CHAR8 *Argument,
1691 IN CONST UINTN ArgumentLength
1692 );
1693
1704BOOLEAN
1706 IN OUT EFI_LOADED_IMAGE_PROTOCOL *LoadedImage,
1707 IN CONST CHAR8 **Arguments,
1708 IN UINT32 ArgumentCount,
1709 IN BOOLEAN Replace
1710 );
1711
1720EFI_STATUS
1722 IN EFI_GUID *ApplicationGuid,
1723 IN BOOLEAN SetReason
1724 );
1725
1735EFI_STATUS
1736EFIAPI
1738 IN OC_PICKER_CONTEXT *Context
1739 );
1740
1751EFI_STATUS
1752EFIAPI
1754 IN OC_PICKER_CONTEXT *Context,
1755 IN CONST CHAR8 *BasePath,
1756 IN CONST CHAR8 *BaseType,
1757 IN BOOLEAN Fallback
1758 );
1759
1770EFI_STATUS
1771EFIAPI
1773 IN OC_PICKER_CONTEXT *Context,
1774 IN UINT32 ToneCount,
1775 IN UINT32 ToneLength,
1776 IN UINT32 SilenceLength
1777 );
1778
1787EFI_STATUS
1788EFIAPI
1790 IN OC_PICKER_CONTEXT *Context,
1791 IN OC_BOOT_ENTRY *Entry
1792 );
1793
1801VOID
1802EFIAPI
1804 IN OC_PICKER_CONTEXT *Context,
1805 IN CONST CHAR8 *BasePath OPTIONAL,
1806 IN CONST CHAR8 *BaseType OPTIONAL
1807 );
1808
1821UINT16 *
1823 IN EFI_GUID *BootVariableGuid,
1824 IN BOOLEAN WithBootNext,
1825 OUT UINTN *BootOrderCount,
1826 OUT BOOLEAN *Deduplicated OPTIONAL,
1827 OUT BOOLEAN *HasBootNext OPTIONAL,
1828 IN BOOLEAN UseBootNextOnly
1829 );
1830
1847EFI_STATUS
1849 IN CONST CHAR16 *OptionName,
1850 IN EFI_HANDLE DeviceHandle,
1851 IN CONST CHAR16 *FilePath,
1852 IN BOOLEAN ShortForm,
1853 IN CONST CHAR16 *MatchSuffix,
1854 IN UINTN MatchSuffixLen
1855 );
1856
1860VOID
1862 IN CONST BOOLEAN ProtectUefiServices,
1863 IN CONST BOOLEAN FixupAppleEfiImages
1864 );
1865
1869VOID
1871 VOID
1872 );
1873
1877typedef
1878VOID
1880 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath OPTIONAL,
1881 IN VOID *SourceBuffer,
1882 IN UINTN SourceSize
1883 );
1884
1888typedef
1889VOID
1891 IN OUT EFI_LOADED_IMAGE_PROTOCOL *LoadedImage,
1892 IN UINT32 Capabilities
1893 );
1894
1900VOID
1902 IN OC_IMAGE_LOADER_PATCH Patch OPTIONAL
1903 );
1904
1910VOID
1912 IN OC_IMAGE_LOADER_CONFIGURE Configure OPTIONAL
1913 );
1914
1927EFI_STATUS
1928EFIAPI
1930 IN BOOLEAN BootPolicy,
1931 IN EFI_HANDLE ParentImageHandle,
1932 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
1933 IN VOID *SourceBuffer OPTIONAL,
1934 IN UINTN SourceSize,
1935 OUT EFI_HANDLE *ImageHandle
1936 );
1937
1961EFI_STATUS
1963 IN CONST EFI_LOADED_IMAGE_PROTOCOL *LoadedImage,
1964 OUT OC_FLEX_ARRAY **ParsedVars
1965 );
1966
1993EFI_STATUS
1995 IN VOID *StrVars,
1996 OUT OC_FLEX_ARRAY **ParsedVars,
1997 IN CONST OC_STRING_FORMAT StringFormat,
1998 IN CONST BOOLEAN TokensOnly
1999 );
2000
2011 IN CONST OC_FLEX_ARRAY *ParsedVars,
2012 IN CONST UINTN Index
2013 );
2014
2032BOOLEAN
2034 IN CONST OC_FLEX_ARRAY *ParsedVars,
2035 IN CONST VOID *Name,
2036 OUT VOID **StrValue,
2037 IN CONST OC_STRING_FORMAT StringFormat
2038 );
2039
2055BOOLEAN
2057 IN CONST OC_FLEX_ARRAY *ParsedVars,
2058 IN CONST CHAR16 *Name,
2059 OUT CHAR16 **StrValue
2060 );
2061
2077BOOLEAN
2079 IN CONST OC_FLEX_ARRAY *ParsedVars,
2080 IN CONST CHAR8 *Name,
2081 OUT CHAR8 **StrValue
2082 );
2083
2094BOOLEAN
2096 IN CONST OC_FLEX_ARRAY *ParsedVars,
2097 IN CONST VOID *Name,
2098 IN CONST OC_STRING_FORMAT StringFormat
2099 );
2100
2113EFI_STATUS
2115 IN CONST OC_FLEX_ARRAY *ParsedVars,
2116 IN CONST VOID *Name,
2117 OUT UINTN *Value,
2118 IN CONST OC_STRING_FORMAT StringFormat
2119 );
2120
2133EFI_STATUS
2135 IN CONST OC_FLEX_ARRAY *ParsedVars,
2136 IN CONST VOID *Name,
2137 OUT EFI_GUID *Value,
2138 IN CONST OC_STRING_FORMAT StringFormat
2139 );
2140
2147VOID
2149 IN OUT EFI_HANDLE **EntryProtocolHandles,
2150 IN OUT UINTN *EntryProtocolHandleCount
2151 );
2152
2158VOID
2160 EFI_HANDLE **EntryProtocolHandles
2161 );
2162
2177EFI_STATUS
2179 IN OUT OC_BOOT_CONTEXT *BootContext,
2180 IN OUT OC_BOOT_FILESYSTEM *FileSystem,
2181 IN EFI_HANDLE *EntryProtocolHandles,
2182 IN UINTN EntryProtocolHandleCount,
2183 IN CONST VOID *DefaultEntryId, OPTIONAL
2184 IN BOOLEAN CreateDefault,
2185 IN BOOLEAN CreateForHotKey
2186 );
2187
2194EFI_STATUS
2196 VOID
2197 );
2198
2205EFI_STATUS
2207 VOID
2208 );
2209
2228EFI_STATUS
2229EFIAPI
2231 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
2232 IN CONST CHAR16 *FileName,
2233 IN CONST CHAR8 *DebugFileType,
2234 IN UINT32 MaxFileSize,
2235 IN UINT32 MinFileSize,
2236 OUT VOID **FileData,
2237 OUT UINT32 *DataLength OPTIONAL,
2238 IN BOOLEAN SearchAtLeaf,
2239 IN BOOLEAN SearchAtRoot
2240 );
2241
2260EFI_STATUS
2261EFIAPI
2263 IN OC_BOOT_ENTRY *BootEntry,
2264 IN CONST CHAR16 *FileName,
2265 IN CONST CHAR8 *DebugFileType,
2266 IN UINT32 MaxFileSize,
2267 IN UINT32 MinFileSize,
2268 OUT VOID **FileData,
2269 OUT UINT32 *DataLength OPTIONAL,
2270 IN BOOLEAN SearchAtLeaf,
2271 IN BOOLEAN SearchAtRoot
2272 );
2273
2280EFI_STATUS
2281EFIAPI
2283 VOID
2284 );
2285
2299EFI_STATUS
2300EFIAPI
2302 IN CHAR16 *Mode
2303 );
2304
2305#endif // OC_BOOT_MANAGEMENT_LIB_H
#define BOOT_LINE_LENGTH
UINT16 APPLE_MODIFIER_MAP
Definition AppleHid.h:102
DMG_FILEPATH_DEVICE_PATH FilePath
UINT32 OcGetDefaultBootEntry(IN OC_PICKER_CONTEXT *Context, IN OUT OC_BOOT_ENTRY *BootEntries, IN UINTN NumBootEntries)
EFI_STATUS OcRegisterBootstrapBootOption(IN CONST CHAR16 *OptionName, IN EFI_HANDLE DeviceHandle, IN CONST CHAR16 *FilePath, IN BOOLEAN ShortForm, IN CONST CHAR16 *MatchSuffix, IN UINTN MatchSuffixLen)
VOID(EFIAPI * OC_KB_DEBUG_INSTRUMENT_LOOP_DELAY)(UINT64 LoopDelayStart, UINT64 LoopDelayEnd)
struct OC_PARSED_VAR_ASCII_ OC_PARSED_VAR_ASCII
VOID OcRemoveArgumentFromCmd(IN OUT CHAR8 *CommandLine, IN CONST CHAR8 *Argument)
union OC_PARSED_VAR_ OC_PARSED_VAR
BOOLEAN(EFIAPI * OC_WAIT_FOR_KEY_INFO)(IN OUT OC_PICKER_CONTEXT *Context, IN UINT64 EndTime, IN OC_PICKER_KEY_MAP KeyFilter, IN OUT OC_PICKER_KEY_INFO *PickerKeyInfo)
EFI_STATUS EFIAPI OcGetBootEntryIcon(IN OC_PICKER_CONTEXT *Context, IN OC_BOOT_ENTRY *BootEntry, OUT VOID **ImageData, OUT UINT32 *DataLength)
@ OcPickerShowPicker
@ OcPickerBootAppleRecovery
@ OcPickerDefault
@ OcPickerProtocolHotKey
@ OcPickerBootApple
UINT32 OcGetFileSystemPolicyType(IN EFI_HANDLE Handle)
EFI_STATUS OcActivateHibernateWake(IN UINT32 HibernateMask)
EFI_STATUS(EFIAPI * OC_GET_ENTRY_LABEL_IMAGE)(IN OC_PICKER_CONTEXT *Context, IN OC_BOOT_ENTRY *BootEntry, IN UINT8 Scale, OUT VOID **ImageData, OUT UINT32 *DataLength)
EFI_STATUS(* OC_BOOT_UNMANAGED_ACTION)(IN OUT OC_PICKER_CONTEXT *PickerContext, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath)
VOID OcImageLoaderInit(IN CONST BOOLEAN ProtectUefiServices, IN CONST BOOLEAN FixupAppleEfiImages)
BOOLEAN OcParsedVarsGetAsciiStr(IN CONST OC_FLEX_ARRAY *ParsedVars, IN CONST CHAR8 *Name, OUT CHAR8 **StrValue)
VOID * OcReadApplePanicLog(OUT UINT32 *PanicSize)
Definition ApplePanic.c:242
UINT64(EFIAPI * OC_GET_KEY_WAIT_END_TIME)(IN UINT64 Timeout)
OC_PARSED_VAR * OcParsedVarsItemAt(IN CONST OC_FLEX_ARRAY *ParsedVars, IN CONST UINTN Index)
VOID OcLocateBootEntryProtocolHandles(IN OUT EFI_HANDLE **EntryProtocolHandles, IN OUT UINTN *EntryProtocolHandleCount)
EFI_STATUS EFIAPI OcShowSimplePasswordRequest(IN OC_PICKER_CONTEXT *Context, IN OC_PRIVILEGE_LEVEL Level)
VOID(EFIAPI * OC_TOGGLE_VOICE_OVER)(IN OC_PICKER_CONTEXT *Context, IN CONST CHAR8 *BasePath OPTIONAL, IN CONST CHAR8 *BaseType OPTIONAL)
VOID(* OC_IMAGE_LOADER_CONFIGURE)(IN OUT EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, IN UINT32 Capabilities)
EFI_LOADED_IMAGE_PROTOCOL * OcGetAppleBootLoadedImage(IN EFI_HANDLE ImageHandle)
VOID EFIAPI OcToggleVoiceOver(IN OC_PICKER_CONTEXT *Context, IN CONST CHAR8 *BasePath OPTIONAL, IN CONST CHAR8 *BaseType OPTIONAL)
Definition BootAudio.c:255
VOID OcFreeHotKeys(IN OC_PICKER_CONTEXT *Context)
EFI_STATUS EFIAPI OcResetSystem(IN CHAR16 *Mode)
BOOLEAN EFIAPI OcHasLoadOptions(IN UINT32 LoadOptionsSize, IN CONST VOID *LoadOptions)
BOOLEAN OcParsedVarsGetStr(IN CONST OC_FLEX_ARRAY *ParsedVars, IN CONST VOID *Name, OUT VOID **StrValue, IN CONST OC_STRING_FORMAT StringFormat)
OC_BOOT_CONTEXT * OcScanForBootEntries(IN OC_PICKER_CONTEXT *Context)
OC_BOOT_CONTEXT * OcScanForDefaultBootEntry(IN OC_PICKER_CONTEXT *Context, IN BOOLEAN UseBootNextOnly)
EFI_STATUS(* OC_BOOT_SYSTEM_ACTION)(IN OUT OC_PICKER_CONTEXT *PickerContext)
EFI_STATUS OcParseLoadOptions(IN CONST EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, OUT OC_FLEX_ARRAY **ParsedVars)
VOID OcFreeBootEntryProtocolHandles(EFI_HANDLE **EntryProtocolHandles)
EFI_STATUS(EFIAPI * OC_GET_ENTRY_ICON)(IN OC_PICKER_CONTEXT *Context, IN OC_BOOT_ENTRY *BootEntry, OUT VOID **ImageData, OUT UINT32 *DataLength)
EFI_STATUS EFIAPI OcImageLoaderLoad(IN BOOLEAN BootPolicy, IN EFI_HANDLE ParentImageHandle, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN VOID *SourceBuffer OPTIONAL, IN UINTN SourceSize, OUT EFI_HANDLE *ImageHandle)
VOID OcImageLoaderRegisterConfigure(IN OC_IMAGE_LOADER_CONFIGURE Configure OPTIONAL)
EFI_STATUS OcRunBootPicker(IN OC_PICKER_CONTEXT *Context)
EFI_STATUS OcParsedVarsGetInt(IN CONST OC_FLEX_ARRAY *ParsedVars, IN CONST VOID *Name, OUT UINTN *Value, IN CONST OC_STRING_FORMAT StringFormat)
EFI_STATUS OcRunFirmwareApplication(IN EFI_GUID *ApplicationGuid, IN BOOLEAN SetReason)
BOOLEAN(EFIAPI * OC_VERIFY_PASSWORD)(IN CONST UINT8 *Password, IN UINT32 PasswordSize, IN CONST OC_PRIVILEGE_CONTEXT *PrivilegeContext)
UINTN OC_PICKER_KEY_MAP
VOID(* OC_IMAGE_LOADER_PATCH)(IN EFI_DEVICE_PATH_PROTOCOL *DevicePath OPTIONAL, IN VOID *SourceBuffer, IN UINTN SourceSize)
EFI_STATUS EFIAPI OcGetBootEntryFileFromDevicePath(IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN CONST CHAR16 *FileName, IN CONST CHAR8 *DebugFileType, IN UINT32 MaxFileSize, IN UINT32 MinFileSize, OUT VOID **FileData, OUT UINT32 *DataLength OPTIONAL, IN BOOLEAN SearchAtLeaf, IN BOOLEAN SearchAtRoot)
EFI_STATUS EFIAPI OcGetBootEntryLabelImage(IN OC_PICKER_CONTEXT *Context, IN OC_BOOT_ENTRY *BootEntry, IN UINT8 Scale, OUT VOID **ImageData, OUT UINT32 *DataLength)
UINT32 OC_BOOT_ENTRY_TYPE
EFI_STATUS EFIAPI OcPlayAudioFile(IN OC_PICKER_CONTEXT *Context, IN CONST CHAR8 *BasePath, IN CONST CHAR8 *BaseType, IN BOOLEAN Fallback)
Definition BootAudio.c:77
enum OC_PICKER_MODE_ OC_PICKER_MODE
EFI_STATUS OcSetDefaultBootEntry(IN OC_PICKER_CONTEXT *Context, IN OC_BOOT_ENTRY *Entry)
struct OC_BOOT_CONTEXT_ OC_BOOT_CONTEXT
VOID OcImageLoaderActivate(VOID)
struct OC_PARSED_VAR_UNICODE_ OC_PARSED_VAR_UNICODE
OC_BOOT_ENTRY_TYPE OcGetBootDevicePathType(IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, OUT BOOLEAN *IsFolder OPTIONAL, OUT BOOLEAN *IsGeneric OPTIONAL)
EFI_STATUS EFIAPI OcPreLocateAudioProtocol(IN OC_PICKER_CONTEXT *Context)
Definition BootAudio.c:53
OC_DMG_LOADING_SUPPORT
@ OcDmgLoadingAnyImage
@ OcDmgLoadingDisabled
@ OcDmgLoadingAppleSigned
BOOLEAN OcHasParsedVar(IN CONST OC_FLEX_ARRAY *ParsedVars, IN CONST VOID *Name, IN CONST OC_STRING_FORMAT StringFormat)
EFI_STATUS(EFIAPI * OC_CUSTOM_READ)(IN OC_STORAGE_CONTEXT *Storage, IN OC_BOOT_ENTRY *ChosenEntry, OUT VOID **Data, OUT UINT32 *DataSize, OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath, OUT EFI_HANDLE *StorageHandle, OUT EFI_DEVICE_PATH_PROTOCOL **StoragePath, IN OC_DMG_LOADING_SUPPORT DmgLoading, OUT OC_APPLE_DISK_IMAGE_PRELOAD_CONTEXT *DmgPreloadContext, OUT VOID **CustomFreeContext)
CONST CHAR8 * OcGetArgumentFromCmd(IN CONST CHAR8 *CommandLine, IN CONST CHAR8 *Argument, IN CONST UINTN ArgumentLength, OUT UINTN *ValueLength OPTIONAL)
EFI_STATUS EFIAPI OcGetBootEntryFile(IN OC_BOOT_ENTRY *BootEntry, IN CONST CHAR16 *FileName, IN CONST CHAR8 *DebugFileType, IN UINT32 MaxFileSize, IN UINT32 MinFileSize, OUT VOID **FileData, OUT UINT32 *DataLength OPTIONAL, IN BOOLEAN SearchAtLeaf, IN BOOLEAN SearchAtRoot)
EFI_STATUS OcInitHotKeys(IN OUT OC_PICKER_CONTEXT *Context)
EFI_STATUS(* OC_BOOT_UNMANAGED_GET_FINAL_DP)(IN OUT OC_PICKER_CONTEXT *PickerContext, IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath)
EFI_STATUS EFIAPI OcShowSimpleBootMenu(IN OC_BOOT_CONTEXT *BootContext, IN OC_BOOT_ENTRY **BootEntries, OUT OC_BOOT_ENTRY **ChosenBootEntry)
UINT32 OcGetDevicePolicyType(IN EFI_HANDLE Handle, OUT BOOLEAN *External OPTIONAL)
EFI_STATUS(EFIAPI * OC_SHOW_MENU)(IN OC_BOOT_CONTEXT *BootContext, IN OC_BOOT_ENTRY **BootEntries, OUT OC_BOOT_ENTRY **ChosenBootEntry)
EFI_STATUS(EFIAPI * OC_PLAY_AUDIO_FILE)(IN OC_PICKER_CONTEXT *Context, IN CONST CHAR8 *BasePath, IN CONST CHAR8 *BaseType, IN BOOLEAN Fallback)
BOOLEAN OcIsAppleHibernateWake(VOID)
UINT16 * OcGetBootOrder(IN EFI_GUID *BootVariableGuid, IN BOOLEAN WithBootNext, OUT UINTN *BootOrderCount, OUT BOOLEAN *Deduplicated OPTIONAL, OUT BOOLEAN *HasBootNext OPTIONAL, IN BOOLEAN UseBootNextOnly)
struct OC_BOOT_ARGUMENTS_ OC_BOOT_ARGUMENTS
EFI_STATUS EFIAPI OcPlayAudioBeep(IN OC_PICKER_CONTEXT *Context, IN UINT32 ToneCount, IN UINT32 ToneLength, IN UINT32 SilenceLength)
Definition BootAudio.c:155
OC_BOOT_ENTRY ** OcEnumerateEntries(IN OC_BOOT_CONTEXT *BootContext)
BOOLEAN OcAppendArgumentToCmd(IN OUT OC_PICKER_CONTEXT *Context OPTIONAL, IN OUT CHAR8 *CommandLine, IN CONST CHAR8 *Argument, IN CONST UINTN ArgumentLength)
EFI_STATUS(EFIAPI * OC_CUSTOM_FREE)(IN VOID *CustomFreeContext)
BOOLEAN EFIAPI OcVerifyPassword(IN CONST UINT8 *Password, IN UINT32 PasswordSize, IN CONST OC_PRIVILEGE_CONTEXT *PrivilegeContext)
BOOLEAN OcParsedVarsGetUnicodeStr(IN CONST OC_FLEX_ARRAY *ParsedVars, IN CONST CHAR16 *Name, OUT CHAR16 **StrValue)
INTN OC_KEY_CODE
EFI_STATUS EFIAPI OcResetToFirmwareSettingsSupported(VOID)
BOOLEAN OcAppendArgumentsToLoadedImage(IN OUT EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, IN CONST CHAR8 **Arguments, IN UINT32 ArgumentCount, IN BOOLEAN Replace)
EFI_STATUS OcParseVars(IN VOID *StrVars, OUT OC_FLEX_ARRAY **ParsedVars, IN CONST OC_STRING_FORMAT StringFormat, IN CONST BOOLEAN TokensOnly)
BOOLEAN OcCheckArgumentFromEnv(IN EFI_LOADED_IMAGE *LoadedImage OPTIONAL, IN EFI_GET_VARIABLE GetVariable OPTIONAL, IN CONST CHAR8 *Argument, IN CONST UINTN ArgumentLength, IN OUT CHAR8 **Value OPTIONAL)
VOID(EFIAPI * OC_GET_KEY_INFO)(IN OUT OC_PICKER_CONTEXT *Context, IN OC_PICKER_KEY_MAP KeyFilter, OUT OC_PICKER_KEY_INFO *PickerKeyInfo)
EFI_STATUS OcParsedVarsGetGuid(IN CONST OC_FLEX_ARRAY *ParsedVars, IN CONST VOID *Name, OUT EFI_GUID *Value, IN CONST OC_STRING_FORMAT StringFormat)
EFI_STATUS OcUnlockAppleFirmwareUI(VOID)
EFI_STATUS(EFIAPI * OC_PLAY_AUDIO_BEEP)(IN OC_PICKER_CONTEXT *Context, IN UINT32 ToneCount, IN UINT32 ToneLength, IN UINT32 SilenceLength)
VOID OcImageLoaderRegisterPatch(IN OC_IMAGE_LOADER_PATCH Patch OPTIONAL)
BOOLEAN EFIAPI OcValidLoadOptions(IN UINT32 LoadOptionsSize, IN CONST VOID *LoadOptions)
EFI_STATUS OcHandleRecoveryRequest(OUT EFI_DEVICE_PATH_PROTOCOL **Initiator OPTIONAL)
VOID(EFIAPI * OC_KB_DEBUG_SHOW)(UINTN NumKeysDown, UINTN NumKeysHeld, APPLE_MODIFIER_MAP Modifiers)
@ OcPickerModeExternal
@ OcPickerModeApple
@ OcPickerModeBuiltin
VOID OcParseBootArgs(OUT OC_BOOT_ARGUMENTS *Arguments, IN VOID *BootArgs)
EFI_STATUS(EFIAPI * OC_REQ_PRIVILEGE)(IN OC_PICKER_CONTEXT *Context, IN OC_PRIVILEGE_LEVEL Level)
OC_PRIVILEGE_LEVEL
@ OcPrivilegeAuthorized
@ OcPrivilegeUnauthorized
EFI_STATUS(EFIAPI * OC_PLAY_AUDIO_ENTRY)(IN OC_PICKER_CONTEXT *Context, IN OC_BOOT_ENTRY *Entry)
EFI_STATUS OcAddEntriesFromBootEntryProtocol(IN OUT OC_BOOT_CONTEXT *BootContext, IN OUT OC_BOOT_FILESYSTEM *FileSystem, IN EFI_HANDLE *EntryProtocolHandles, IN UINTN EntryProtocolHandleCount, IN CONST VOID *DefaultEntryId, OPTIONAL IN BOOLEAN CreateDefault, IN BOOLEAN CreateForHotKey)
EFI_STATUS(EFIAPI * OC_IMAGE_START)(IN OC_BOOT_ENTRY *ChosenEntry, IN EFI_HANDLE ImageHandle, OUT UINTN *ExitDataSize, OUT CHAR16 **ExitData OPTIONAL, IN BOOLEAN LaunchInText)
EFI_STATUS EFIAPI OcPlayAudioEntry(IN OC_PICKER_CONTEXT *Context, IN OC_BOOT_ENTRY *Entry)
Definition BootAudio.c:188
EFI_STATUS OcLoadBootEntry(IN OC_PICKER_CONTEXT *Context, IN OC_BOOT_ENTRY *BootEntry, IN EFI_HANDLE ParentHandle)
VOID OcLoadPickerHotKeys(IN OUT OC_PICKER_CONTEXT *Context)
EFI_STATUS OcLaunchAppleBootPicker(VOID)
VOID OcFreeBootContext(IN OUT OC_BOOT_CONTEXT *Context)
UINT16 OC_MODIFIER_MAP
VOID(EFIAPI * OC_FLUSH_TYPING_BUFFER)(IN OUT OC_PICKER_CONTEXT *Context)
enum _OC_STRING_FORMAT OC_STRING_FORMAT
PACKED struct @7 OC_TYPING_CONTEXT
APPLE_EVENT_HANDLE Handle
Definition OcTypingLib.h:45
EFI_SYSTEM_TABLE * SystemTable
OC_BOOT_ENTRY * DefaultEntry
OC_PICKER_CONTEXT * PickerContext
OC_BOOT_SYSTEM_ACTION SystemAction
EFI_DEVICE_PATH_PROTOCOL * DevicePath
OC_CUSTOM_READ CustomRead
OC_BOOT_UNMANAGED_ACTION UnmanagedBootAction
OC_BOOT_ENTRY_TYPE Type
OC_CUSTOM_FREE CustomFree
OC_BOOT_UNMANAGED_GET_FINAL_DP UnmanagedBootGetFinalDevicePath
OC_BOOT_FILESYSTEM * RecoveryFs
OC_TYPING_CONTEXT * TypingContext
OC_KEY_REPEAT_CONTEXT * DoNotRepeatContext
OC_FLUSH_TYPING_BUFFER FlushTypingBuffer
APPLE_KEY_MAP_AGGREGATOR_PROTOCOL * KeyMap
OC_WAIT_FOR_KEY_INFO WaitForKeyInfo
OC_GET_KEY_WAIT_END_TIME GetKeyWaitEndTime
OC_KB_DEBUG_INSTRUMENT_LOOP_DELAY InstrumentLoopDelay
OC_PLAY_AUDIO_ENTRY PlayAudioEntry
OC_PICKER_ENTRY CustomEntries[]
OC_PLAY_AUDIO_BEEP PlayAudioBeep
OC_GET_ENTRY_ICON GetEntryIcon
OC_STORAGE_CONTEXT * StorageContext
OC_PLAY_AUDIO_FILE PlayAudioFile
OC_REQ_PRIVILEGE RequestPrivilege
OC_KB_DEBUG_CALLBACKS * KbDebug
OC_HOTKEY_CONTEXT * HotKeyContext
OC_AUDIO_PROTOCOL * OcAudio
CHAR8 AppleBootArgs[BOOT_LINE_LENGTH]
OC_PRIVILEGE_CONTEXT * PrivilegeContext
EFI_DEVICE_PATH_PROTOCOL * RecoveryInitiator
OC_DMG_LOADING_SUPPORT DmgLoading
OC_GET_ENTRY_LABEL_IMAGE GetEntryLabelImage
APPLE_BEEP_GEN_PROTOCOL * BeepGen
OC_VERIFY_PASSWORD VerifyPassword
OC_TOGGLE_VOICE_OVER ToggleVoiceOver
CONST CHAR8 * InstanceIdentifier
OC_BOOT_UNMANAGED_ACTION UnmanagedBootAction
OC_BOOT_UNMANAGED_GET_FINAL_DP UnmanagedBootGetFinalDevicePath
OC_CUSTOM_READ CustomRead
CONST CHAR8 * Arguments
EFI_DEVICE_PATH_PROTOCOL * UnmanagedDevicePath
OC_CUSTOM_FREE CustomFree
OC_BOOT_SYSTEM_ACTION SystemAction
OC_MODIFIER_MAP OcModifiers
OC_PRIVILEGE_LEVEL CurrentLevel
OC_PARSED_VAR_ASCII Ascii
OC_PARSED_VAR_UNICODE Unicode