22#include <Library/BaseLib.h>
23#include <Library/DebugLib.h>
24#include <Library/DevicePathLib.h>
25#include <Library/MemoryAllocationLib.h>
39#include <Library/PcdLib.h>
40#include <Library/PrintLib.h>
41#include <Library/SerialPortLib.h>
42#include <Library/UefiBootServicesTableLib.h>
43#include <Library/UefiRuntimeServicesTableLib.h>
52 IN EFI_DEVICE_PATH_PROTOCOL *LoadPath OPTIONAL
59 if (LoadPath != NULL) {
60 DevicePath = ConvertDevicePathToText (LoadPath, FALSE, FALSE);
61 if (DevicePath != NULL) {
62 AsciiSPrint (OutPath,
sizeof (OutPath),
"%s", DevicePath);
63 FreePool (DevicePath);
69 if (LoadPath == NULL) {
70 AsciiSPrint (OutPath,
sizeof (OutPath),
"Unknown");
76 AsciiStrSize (OutPath),
82 EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_INFO,
83 "OC: Setting NVRAM %g:%s = %a - %r\n",
94 IN EFI_HANDLE VolumeHandle
98 EFI_FILE_PROTOCOL *Fs;
99 EFI_FILE_PROTOCOL *SysReport;
100 EFI_FILE_PROTOCOL *SubReport;
105 if (VolumeHandle != NULL) {
113 if (EFI_ERROR (Status)) {
114 DEBUG ((DEBUG_INFO,
"OC: No usable filesystem for report - %r\n", Status));
115 return EFI_NOT_FOUND;
123 EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE,
126 if (!EFI_ERROR (Status)) {
127 DEBUG ((DEBUG_INFO,
"OC: Report is already created, skipping\n"));
128 SysReport->Close (SysReport);
130 return EFI_ALREADY_STARTED;
137 EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE,
140 if (EFI_ERROR (Status)) {
141 DEBUG ((DEBUG_INFO,
"OC: Cannot create SysReport - %r\n", Status));
150 EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE,
153 if (!EFI_ERROR (Status)) {
154 DEBUG ((DEBUG_INFO,
"OC: Dumping ACPI for report...\n"));
156 SubReport->Close (SubReport);
159 DEBUG ((DEBUG_INFO,
"OC: ACPI dumping - %r\n", Status));
165 EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE,
168 if (!EFI_ERROR (Status)) {
169 DEBUG ((DEBUG_INFO,
"OC: Dumping SMBIOS for report...\n"));
171 SubReport->Close (SubReport);
174 DEBUG ((DEBUG_INFO,
"OC: SMBIOS dumping - %r\n", Status));
180 EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE,
183 if (!EFI_ERROR (Status)) {
184 DEBUG ((DEBUG_INFO,
"OC: Dumping audio for report...\n"));
186 SubReport->Close (SubReport);
189 DEBUG ((DEBUG_INFO,
"OC: Audio dumping - %r\n", Status));
195 EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE,
198 if (!EFI_ERROR (Status)) {
199 DEBUG ((DEBUG_INFO,
"OC: Dumping CPUInfo for report...\n"));
201 SubReport->Close (SubReport);
204 DEBUG ((DEBUG_INFO,
"OC: CPUInfo dumping - %r\n", Status));
210 EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE,
213 if (!EFI_ERROR (Status)) {
214 DEBUG ((DEBUG_INFO,
"OC: Dumping PCIInfo for report...\n"));
216 SubReport->Close (SubReport);
219 DEBUG ((DEBUG_INFO,
"OC: PCIInfo dumping - %r\n", Status));
225 EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE,
228 if (!EFI_ERROR (Status)) {
229 DEBUG ((DEBUG_INFO,
"OC: Dumping GOPInfo for report...\n"));
231 SubReport->Close (SubReport);
234 DEBUG ((DEBUG_INFO,
"OC: GOPInfo dumping - %r\n", Status));
240 EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE,
243 if (!EFI_ERROR (Status)) {
244 DEBUG ((DEBUG_INFO,
"OC: Dumping DriverImageNames for report...\n"));
246 SubReport->Close (SubReport);
249 DEBUG ((DEBUG_INFO,
"OC: DriverImageNames dumping - %r\n", Status));
251 SysReport->Close (SysReport);
264 OUT UINT32 *DataSize,
265 OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath,
266 OUT EFI_HANDLE *StorageHandle,
267 OUT EFI_DEVICE_PATH_PROTOCOL **StoragePath,
270 OUT VOID **CustomFreeContext
280 ChosenEntry->PathName
282 if (EFI_ERROR (Status)) {
285 "OC: Tool %s%s does not fit path!\n",
287 ChosenEntry->PathName
289 return EFI_NOT_FOUND;
300 "OC: Tool %s cannot be found!\n",
303 return EFI_NOT_FOUND;
312 ChosenEntry->ExposeDevicePath
314 if (!EFI_ERROR (Status)) {
315 DEBUG ((DEBUG_INFO,
"OC: Returning tool %s\n", ToolPath));
331 EFI_FILE_PROTOCOL *RootFs;
333 EFI_TIME PanicLogDate;
334 CHAR16 PanicLogName[32];
337 if (PanicLog != NULL) {
338 Status =
gRT->GetTime (&PanicLogDate, NULL);
339 if (EFI_ERROR (Status)) {
340 ZeroMem (&PanicLogDate,
sizeof (PanicLogDate));
345 sizeof (PanicLogName),
346 L
"panic-%04u-%02u-%02u-%02u%02u%02u.txt",
347 (UINT32)PanicLogDate.Year,
348 (UINT32)PanicLogDate.Month,
349 (UINT32)PanicLogDate.Day,
350 (UINT32)PanicLogDate.Hour,
351 (UINT32)PanicLogDate.Minute,
352 (UINT32)PanicLogDate.Second
355 Status = Storage->FileSystem->OpenVolume (
359 if (!EFI_ERROR (Status)) {
360 Status =
OcSetFileData (RootFs, PanicLogName, PanicLog, PanicLogSize);
361 RootFs->Close (RootFs);
364 DEBUG ((DEBUG_INFO,
"OC: Saving %u byte panic log %s - %r\n", PanicLogSize, PanicLogName, Status));
367 DEBUG ((DEBUG_INFO,
"OC: Panic log does not exist\n"));
383 "OPEN_CORE_VERSION must follow X.Y.Z format, where X.Y.Z are single digits."
388 "OPEN_CORE_TARGET must follow XYZ format, where XYZ is build target."
391 STATIC CHAR8 mOpenCoreVersion[] = {
401 STATIC BOOLEAN mOpenCoreVersionReady;
403 if (!mOpenCoreVersionReady) {
408 mOpenCoreVersion[8] = __DATE__[7];
409 mOpenCoreVersion[9] = __DATE__[8];
410 mOpenCoreVersion[10] = __DATE__[9];
411 mOpenCoreVersion[11] = __DATE__[10];
414 (__DATE__[0] ==
'J' && __DATE__[1] ==
'a' && __DATE__[2] ==
'n') ? 1 :
415 (__DATE__[0] ==
'F' && __DATE__[1] ==
'e' && __DATE__[2] ==
'b') ? 2 :
416 (__DATE__[0] ==
'M' && __DATE__[1] ==
'a' && __DATE__[2] ==
'r') ? 3 :
417 (__DATE__[0] ==
'A' && __DATE__[1] ==
'p' && __DATE__[2] ==
'r') ? 4 :
418 (__DATE__[0] ==
'M' && __DATE__[1] ==
'a' && __DATE__[2] ==
'y') ? 5 :
419 (__DATE__[0] ==
'J' && __DATE__[1] ==
'u' && __DATE__[2] ==
'n') ? 6 :
420 (__DATE__[0] ==
'J' && __DATE__[1] ==
'u' && __DATE__[2] ==
'l') ? 7 :
421 (__DATE__[0] ==
'A' && __DATE__[1] ==
'u' && __DATE__[2] ==
'g') ? 8 :
422 (__DATE__[0] ==
'S' && __DATE__[1] ==
'e' && __DATE__[2] ==
'p') ? 9 :
423 (__DATE__[0] ==
'O' && __DATE__[1] ==
'c' && __DATE__[2] ==
't') ? 10 :
424 (__DATE__[0] ==
'N' && __DATE__[1] ==
'o' && __DATE__[2] ==
'v') ? 11 :
425 (__DATE__[0] ==
'D' && __DATE__[1] ==
'e' && __DATE__[2] ==
'c') ? 12 : 0;
427 mOpenCoreVersion[13] = Month < 10 ?
'0' :
'1';
428 mOpenCoreVersion[14] =
'0' + (Month % 10);
429 mOpenCoreVersion[16] = __DATE__[4] >=
'0' ? __DATE__[4] :
'0';
430 mOpenCoreVersion[17] = __DATE__[5];
432 mOpenCoreVersionReady = TRUE;
435 return mOpenCoreVersion;
441 OUT OC_GLOBAL_CONFIG *Config,
447 UINT32 ConfigDataSize;
449 CONST CHAR8 *AsciiVault;
451 UINTN PciDeviceInfoSize;
459 if (ConfigData != NULL) {
460 DEBUG ((DEBUG_INFO,
"OC: Loaded configuration of %u bytes\n", ConfigDataSize));
463 if (EFI_ERROR (Status)) {
464 DEBUG ((DEBUG_ERROR,
"OC: Failed to parse configuration!\n"));
466 return EFI_UNSUPPORTED;
469 FreePool (ConfigData);
471 DEBUG ((DEBUG_ERROR,
"OC: Failed to load configuration!\n"));
473 return EFI_UNSUPPORTED;
477 if (EFI_ERROR (Status)) {
485 AsciiVault =
OC_BLOB_GET (&Config->Misc.Security.Vault);
486 if (AsciiStrCmp (AsciiVault,
"Secure") == 0) {
488 }
else if (AsciiStrCmp (AsciiVault,
"Optional") == 0) {
490 }
else if (AsciiStrCmp (AsciiVault,
"Basic") == 0) {
493 DEBUG ((DEBUG_ERROR,
"OC: Invalid Vault mode: %a\n", AsciiVault));
495 return EFI_UNSUPPORTED;
502 DEBUG ((DEBUG_ERROR,
"OC: Configuration requires vault but no vault provided!\n"));
504 return EFI_SECURITY_VIOLATION;
508 DEBUG ((DEBUG_ERROR,
"OC: Configuration requires signed vault but no public key provided!\n"));
510 return EFI_SECURITY_VIOLATION;
513 DEBUG ((DEBUG_INFO,
"OC: Watchdog status is %d\n", Config->Misc.Debug.DisableWatchDog == FALSE));
515 if (Config->Misc.Debug.DisableWatchDog) {
519 gBS->SetWatchdogTimer (0, 0, 0, NULL);
522 if (Config->Misc.Serial.Override) {
526 PciDeviceInfoSize = Config->Misc.Serial.Custom.PciDeviceInfo.Size;
528 DEBUG ((DEBUG_INFO,
"OC: Aborting overriding serial port properties with borked PciDeviceInfo size %u\n", PciDeviceInfoSize));
530 PatchPcdSetPtr (PcdSerialPciDeviceInfo, &PciDeviceInfoSize,
OC_BLOB_GET (&Config->Misc.Serial.Custom.PciDeviceInfo));
531 PatchPcdSet8 (PcdSerialRegisterAccessWidth, Config->Misc.Serial.Custom.RegisterAccessWidth);
532 PatchPcdSetBool (PcdSerialUseMmio, Config->Misc.Serial.Custom.UseMmio);
533 PatchPcdSetBool (PcdSerialUseHardwareFlowControl, Config->Misc.Serial.Custom.UseHardwareFlowControl);
534 PatchPcdSetBool (PcdSerialDetectCable, Config->Misc.Serial.Custom.DetectCable);
535 PatchPcdSet64 (PcdSerialRegisterBase, Config->Misc.Serial.Custom.RegisterBase);
536 PatchPcdSet32 (PcdSerialBaudRate, Config->Misc.Serial.Custom.BaudRate);
537 PatchPcdSet8 (PcdSerialLineControl, Config->Misc.Serial.Custom.LineControl);
538 PatchPcdSet8 (PcdSerialFifoControl, Config->Misc.Serial.Custom.FifoControl);
539 PatchPcdSet32 (PcdSerialClockRate, Config->Misc.Serial.Custom.ClockRate);
540 PatchPcdSet32 (PcdSerialExtendedTxFifoSize, Config->Misc.Serial.Custom.ExtendedTxFifoSize);
541 PatchPcdSet32 (PcdSerialRegisterStride, Config->Misc.Serial.Custom.RegisterStride);
545 if (Config->Misc.Serial.Init) {
546 SerialPortInitialize ();
550 Config->Misc.Debug.Target,
552 Config->Misc.Debug.DisplayDelay,
553 (UINTN)Config->Misc.Debug.DisplayLevel,
554 (UINTN)Config->Misc.Security.HaltLevel,
561 "OC: OpenCore %a is loading in %a mode (%d/%d)...\n",
568 Status =
gRT->GetTime (&BootTime, NULL);
569 if (!EFI_ERROR (Status)) {
572 "OC: Boot timestamp - %04u.%02u.%02u %02u:%02u:%02u\n",
583 "OC: Boot timestamp - %r\n",
603 IN CONST CHAR16 *RootPath,
604 IN CONST CHAR8 *LauncherPath,
605 OUT CONST CHAR16 **MatchSuffix
608 CHAR16 *BootstrapPath;
617 if (AsciiStrCmp (LauncherPath,
"Default") == 0) {
619 BootstrapPath = AllocatePool (BootstrapSize);
620 if (BootstrapPath == NULL) {
624 UnicodeSPrint (BootstrapPath, BootstrapSize, L
"%s\\%s", RootPath,
OPEN_CORE_APP_PATH);
628 if (BootstrapPath == NULL) {
632 *MatchSuffix = BootstrapPath;
635 return BootstrapPath;
641 IN OC_GLOBAL_CONFIG *Config,
642 IN CONST CHAR16 *RootPath,
643 IN EFI_DEVICE_PATH_PROTOCOL *LoadPath,
644 IN EFI_HANDLE StorageHandle,
649 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileSystem;
650 CONST CHAR8 *LauncherOption;
651 CONST CHAR8 *LauncherPath;
652 CHAR16 *FullLauncherPath;
653 CONST CHAR16 *MatchSuffix;
656 UINT32 BootProtectFlag;
657 BOOLEAN HasFullLauncher;
658 BOOLEAN HasShortLauncher;
659 BOOLEAN HasSystemLauncher;
666 LauncherOption =
OC_BLOB_GET (&Config->Misc.Boot.LauncherOption);
667 LauncherPath =
OC_BLOB_GET (&Config->Misc.Boot.LauncherPath);
670 "OC: StorageHandle %p with %a LauncherOption pointing to %a\n",
679 HasFullLauncher = AsciiStrCmp (LauncherOption,
"Full") == 0;
680 HasShortLauncher = !HasFullLauncher && AsciiStrCmp (LauncherOption,
"Short") == 0;
681 HasSystemLauncher = !HasFullLauncher && !HasShortLauncher && AsciiStrCmp (LauncherOption,
"System") == 0;
682 if (!HasFullLauncher && !HasShortLauncher && !HasSystemLauncher) {
683 LauncherPath =
"Default";
687 if (FullLauncherPath != NULL) {
688 if (HasFullLauncher || HasShortLauncher) {
704 Status =
gBS->HandleProtocol (
709 if (!EFI_ERROR (Status)) {
710 LauncherData =
OcReadFile (FileSystem, FullLauncherPath, &LauncherSize, BASE_32MB);
711 if (LauncherData != NULL) {
715 "OC: Launcher %s signature is %02X%02X%02X%02X\n",
722 FreePool (LauncherData);
727 FreePool (FullLauncherPath);
736 sizeof (BootProtectFlag),
745 IN OC_GLOBAL_CONFIG *Config
748 EFI_STATUS HibernateStatus;
749 CONST CHAR8 *HibernateMode;
750 UINT32 HibernateMask;
752 HibernateMode =
OC_BLOB_GET (&Config->Misc.Boot.HibernateMode);
754 if (AsciiStrCmp (HibernateMode,
"None") == 0) {
756 }
else if (AsciiStrCmp (HibernateMode,
"Auto") == 0) {
758 }
else if (AsciiStrCmp (HibernateMode,
"RTC") == 0) {
760 }
else if (AsciiStrCmp (HibernateMode,
"NVRAM") == 0) {
763 DEBUG ((DEBUG_INFO,
"OC: Invalid HibernateMode: %a\n", HibernateMode));
767 DEBUG ((DEBUG_INFO,
"OC: Translated HibernateMode %a to %u\n", HibernateMode, HibernateMask));
772 "OC: Hibernation activation - %r, hibernation wake - %a\n",
777 if (Config->Misc.Debug.ApplePanic) {
788 IN OC_GLOBAL_CONFIG *Config,
789 IN EFI_HANDLE LoadHandle OPTIONAL
792 if ((LoadHandle != NULL) && Config->Misc.Debug.SysReport) {
800 IN OC_GLOBAL_CONFIG *Config,
803 IN BOOLEAN CustomBootGuid,
804 IN EFI_HANDLE LoadHandle
815 UINTN BlessOverrideSize;
816 CHAR16 **BlessOverride;
817 CONST CHAR8 *AsciiPicker;
818 CONST CHAR8 *AsciiPickerVariant;
819 CONST CHAR8 *AsciiInstanceIdentifier;
820 CONST CHAR8 *AsciiDmg;
822 AsciiPicker =
OC_BLOB_GET (&Config->Misc.Boot.PickerMode);
824 if (AsciiStrCmp (AsciiPicker,
"Builtin") == 0) {
826 }
else if (AsciiStrCmp (AsciiPicker,
"External") == 0) {
828 }
else if (AsciiStrCmp (AsciiPicker,
"Apple") == 0) {
831 DEBUG ((DEBUG_WARN,
"OC: Unknown PickerMode: %a, using builtin\n", AsciiPicker));
835 AsciiPickerVariant =
OC_BLOB_GET (&Config->Misc.Boot.PickerVariant);
836 AsciiInstanceIdentifier =
OC_BLOB_GET (&Config->Misc.Boot.InstanceIdentifier);
838 AsciiDmg =
OC_BLOB_GET (&Config->Misc.Security.DmgLoading);
840 if (AsciiStrCmp (AsciiDmg,
"Disabled") == 0) {
842 }
else if (AsciiStrCmp (AsciiDmg,
"Any") == 0) {
844 }
else if (AsciiStrCmp (AsciiDmg,
"Signed") == 0) {
847 DEBUG ((DEBUG_WARN,
"OC: Unknown DmgLoading: %a, using Signed\n", AsciiDmg));
855 DEBUG ((DEBUG_INFO,
"OC: Handing off to external boot controller\n"));
857 Status =
gBS->LocateProtocol (
862 if (!EFI_ERROR (Status)) {
866 "OC: Incompatible external GUI protocol - %u vs %u\n",
873 DEBUG ((DEBUG_INFO,
"OC: Missing external GUI protocol - %r\n", Status));
884 if (!BaseOverflowMulAddUN (
886 Config->Misc.Entries.Count + Config->Misc.Tools.Count,
891 Context = AllocateZeroPool (ContextSize);
896 if (Context == NULL) {
897 DEBUG ((DEBUG_ERROR,
"OC: Failed to allocate boot picker context!\n"));
901 if (Config->Misc.BlessOverride.Count > 0) {
902 if (!BaseOverflowMulUN (
903 Config->Misc.BlessOverride.Count,
904 sizeof (*BlessOverride),
908 BlessOverride = AllocateZeroPool (BlessOverrideSize);
910 BlessOverride = NULL;
913 if (BlessOverride == NULL) {
915 DEBUG ((DEBUG_ERROR,
"OC: Failed to allocate bless overrides!\n"));
919 for (Index = 0; Index < Config->Misc.BlessOverride.Count; ++Index) {
922 Config->Misc.BlessOverride.Values[Index]
926 if (BlessOverride[Index] == NULL) {
927 for (EntryIndex = 0; EntryIndex < Index; ++EntryIndex) {
928 FreePool (BlessOverride[EntryIndex]);
931 FreePool (BlessOverride);
933 DEBUG ((DEBUG_ERROR,
"OC: Failed to allocate bless overrides!\n"));
942 Context->
ScanPolicy = Config->Misc.Security.ScanPolicy;
976 if (!EFI_ERROR (Status)) {
978 }
else if (Config->Misc.Boot.ShowPicker && !Config->Misc.Boot.HibernateSkipsPicker) {
980 }
else if (Config->Misc.Boot.ShowPicker && Config->Misc.Boot.HibernateSkipsPicker) {
990 for (Index = 0, EntryIndex = 0; Index < Config->Misc.Entries.Count; ++Index) {
991 if (Config->Misc.Entries.Values[Index]->Enabled) {
1010 for (Index = 0; Index < Config->Misc.Tools.Count; ++Index) {
1011 if (Config->Misc.Tools.Values[Index]->Enabled) {
1032 DEBUG ((DEBUG_INFO,
"OC: Ready for takeoff in %u us\n", (UINT32)Context->
TakeoffDelay));
1038 if (Interface != NULL) {
1040 if (EFI_ERROR (Status)) {
1041 DEBUG ((DEBUG_WARN,
"OC: External interface failure, fallback to builtin - %r\n", Status));
1047 if (EFI_ERROR (Status)) {
1048 DEBUG ((DEBUG_ERROR,
"OC: Failed to show boot menu!\n"));
1054 IN OC_GLOBAL_CONFIG *Config
1062 DEBUG ((DEBUG_ERROR,
"OC: Invalid ScanPolicy %X\n", Config->Misc.Security.ScanPolicy));
1072 sizeof (Config->Misc.Security.ScanPolicy),
1073 &Config->Misc.Security.ScanPolicy,
EFI_STATUS AcpiDumpTables(IN EFI_FILE_PROTOCOL *Root)
EFI_STATUS OcAudioDump(IN EFI_FILE_PROTOCOL *Root)
STATIC_ASSERT(BYTES_PER_PIXEL==sizeof(UINT32), "Non 4-byte pixels are unsupported!")
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)
EFI_STATUS EFIAPI OcGetBootEntryIcon(IN OC_PICKER_CONTEXT *Context, IN OC_BOOT_ENTRY *BootEntry, OUT VOID **ImageData, OUT UINT32 *DataLength)
#define HIBERNATE_MODE_NONE
@ OcPickerBootAppleRecovery
EFI_STATUS OcActivateHibernateWake(IN UINT32 HibernateMask)
VOID * OcReadApplePanicLog(OUT UINT32 *PanicSize)
#define HIBERNATE_MODE_NVRAM
EFI_STATUS EFIAPI OcShowSimplePasswordRequest(IN OC_PICKER_CONTEXT *Context, IN OC_PRIVILEGE_LEVEL Level)
VOID EFIAPI OcToggleVoiceOver(IN OC_PICKER_CONTEXT *Context, IN CONST CHAR8 *BasePath OPTIONAL, IN CONST CHAR8 *BaseType OPTIONAL)
#define HIBERNATE_MODE_RTC
#define OC_SCAN_DEVICE_LOCK
EFI_STATUS OcRunBootPicker(IN OC_PICKER_CONTEXT *Context)
EFI_STATUS EFIAPI OcGetBootEntryLabelImage(IN OC_PICKER_CONTEXT *Context, IN OC_BOOT_ENTRY *BootEntry, IN UINT8 Scale, OUT VOID **ImageData, OUT UINT32 *DataLength)
EFI_STATUS EFIAPI OcPlayAudioFile(IN OC_PICKER_CONTEXT *Context, IN CONST CHAR8 *BasePath, IN CONST CHAR8 *BaseType, IN BOOLEAN Fallback)
enum OC_PICKER_MODE_ OC_PICKER_MODE
EFI_STATUS EFIAPI OcPreLocateAudioProtocol(IN OC_PICKER_CONTEXT *Context)
@ OcDmgLoadingAppleSigned
EFI_STATUS EFIAPI OcShowSimpleBootMenu(IN OC_BOOT_CONTEXT *BootContext, IN OC_BOOT_ENTRY **BootEntries, OUT OC_BOOT_ENTRY **ChosenBootEntry)
BOOLEAN OcIsAppleHibernateWake(VOID)
EFI_STATUS EFIAPI OcPlayAudioBeep(IN OC_PICKER_CONTEXT *Context, IN UINT32 ToneCount, IN UINT32 ToneLength, IN UINT32 SilenceLength)
BOOLEAN EFIAPI OcVerifyPassword(IN CONST UINT8 *Password, IN UINT32 PasswordSize, IN CONST OC_PRIVILEGE_CONTEXT *PrivilegeContext)
#define OC_SCAN_FILE_SYSTEM_LOCK
EFI_STATUS OcHandleRecoveryRequest(OUT EFI_DEVICE_PATH_PROTOCOL **Initiator OPTIONAL)
#define OC_SCAN_DEVICE_BITS
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)
VOID OcLoadPickerHotKeys(IN OUT OC_PICKER_CONTEXT *Context)
#define OC_SCAN_FILE_SYSTEM_BITS
#define OCS_EXPOSE_VERSION_UI
#define OC_SERIAL_PCI_DEVICE_INFO_MAX_SIZE
EFI_STATUS OcConfigurationInit(OUT OC_GLOBAL_CONFIG *Config, IN VOID *Buffer, IN UINT32 Size, IN OUT UINT32 *ErrorCount OPTIONAL)
#define OCS_EXPOSE_BOOT_PATH
EFI_STATUS OcGopInfoDump(IN EFI_FILE_PROTOCOL *Root)
VOID OcCpuScanProcessor(IN OUT OC_CPU_INFO *Cpu)
VOID Sha1(UINT8 *Hash, UINT8 *Data, UINTN Len)
VOID DebugPrintDevicePath(IN UINTN ErrorLevel, IN CONST CHAR8 *Message, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath OPTIONAL)
EFI_STATUS OcPciInfoDump(IN EFI_FILE_PROTOCOL *Root)
EFI_STATUS OcCpuInfoDump(IN OC_CPU_INFO *CpuInfo, IN EFI_FILE_PROTOCOL *Root)
EFI_FILE_PROTOCOL * OcLocateRootVolume(IN EFI_HANDLE DeviceHandle OPTIONAL, IN EFI_DEVICE_PATH_PROTOCOL *FilePath OPTIONAL)
VOID * OcReadFile(IN CONST EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileSystem, IN CONST CHAR16 *FilePath, OUT UINT32 *FileSize OPTIONAL, IN CONST UINT32 MaxFileSize OPTIONAL)
EFI_STATUS OcSetFileData(IN EFI_FILE_PROTOCOL *WritableFs OPTIONAL, IN CONST CHAR16 *FileName, IN CONST VOID *Buffer, IN UINT32 Size)
EFI_STATUS OcSafeFileOpen(IN CONST EFI_FILE_PROTOCOL *Directory, OUT EFI_FILE_PROTOCOL **NewHandle, IN CONST CHAR16 *FileName, IN CONST UINT64 OpenMode, IN CONST UINT64 Attributes)
EFI_STATUS OcFindWritableFileSystem(IN OUT EFI_FILE_PROTOCOL **WritableFs)
#define OC_INTERFACE_REVISION
EFI_GUID gOcInterfaceProtocolGuid
VOID OcAppleDebugLogConfigure(IN BOOLEAN Enable)
EFI_STATUS OcConfigureLogProtocol(IN OC_LOG_OPTIONS Options, IN CONST CHAR8 *LogModules, IN UINT32 DisplayDelay, IN UINTN DisplayLevel, IN UINTN HaltLevel, IN CONST CHAR16 *LogPrefixPath OPTIONAL, IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *LogFileSystem OPTIONAL)
VOID OcLoadDrivers(IN OC_STORAGE_CONTEXT *Storage, IN OC_GLOBAL_CONFIG *Config, OUT EFI_HANDLE **DriversToConnect OPTIONAL, IN BOOLEAN LoadEarly)
#define OPEN_CORE_LOG_PREFIX_PATH
#define OPEN_CORE_TOOL_PATH
#define OPEN_CORE_APP_PATH
#define OPEN_CORE_CONFIG_PATH
EFI_STATUS OcDriverInfoDump(IN EFI_FILE_PROTOCOL *Root)
#define OPEN_CORE_VERSION
EFI_STATUS OcSmbiosDump(IN EFI_FILE_PROTOCOL *Root)
VOID * OcStorageReadFileUnicode(IN OC_STORAGE_CONTEXT *Context, IN CONST CHAR16 *FilePath, OUT UINT32 *FileSize OPTIONAL)
#define OC_STORAGE_SAFE_PATH_MAX
EFI_STATUS OcStorageGetInfo(IN OC_STORAGE_CONTEXT *Context, IN CONST CHAR16 *FilePath, OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath, OUT EFI_HANDLE *StorageHandle, OUT EFI_DEVICE_PATH_PROTOCOL **StoragePath, IN BOOLEAN RealPath)
#define L_STR_LEN(String)
#define L_STR_SIZE(String)
CHAR16 * AsciiStrCopyToUnicode(IN CONST CHAR8 *String, IN UINTN Length)
EFI_STATUS EFIAPI OcUnicodeSafeSPrint(OUT CHAR16 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR16 *FormatString,...)
#define OC_BLOB_GET(Blob)
#define OC_LOG_VARIABLE_PATH
#define OC_BOOT_PROTECT_VARIABLE_BOOTSTRAP
EFI_GUID gOcVendorVariableGuid
#define OC_BOOT_PROTECT_VARIABLE_NAME
#define OC_SCAN_POLICY_VARIABLE_NAME
EFI_STATUS OcSetSystemVariable(IN CHAR16 *VariableName, IN UINT32 Attributes, IN UINTN DataSize, IN VOID *Data, IN EFI_GUID *VendorGuid OPTIONAL)
#define OPEN_CORE_NVRAM_ATTR
#define OPEN_CORE_INT_NVRAM_ATTR
EFI_STATUS OcShimRetainProtocol(IN BOOLEAN Required)
VOID OcVariableInit(IN BOOLEAN ForceOcWriteFlash)
VOID OcMiscBoot(IN OC_STORAGE_CONTEXT *Storage, IN OC_GLOBAL_CONFIG *Config, IN OC_PRIVILEGE_CONTEXT *Privilege OPTIONAL, IN OC_IMAGE_START StartImage, IN BOOLEAN CustomBootGuid, IN EFI_HANDLE LoadHandle)
STATIC CHAR16 * BuildLauncherPath(IN CONST CHAR16 *RootPath, IN CONST CHAR8 *LauncherPath, OUT CONST CHAR16 **MatchSuffix)
EFI_STATUS OcMiscEarlyInit(IN OC_STORAGE_CONTEXT *Storage, OUT OC_GLOBAL_CONFIG *Config, IN OC_RSA_PUBLIC_KEY *VaultKey OPTIONAL)
CONST CHAR8 * OcMiscGetVersionString(VOID)
STATIC VOID SavePanicLog(IN OC_STORAGE_CONTEXT *Storage)
STATIC EFI_STATUS ProduceDebugReport(IN EFI_HANDLE VolumeHandle)
STATIC VOID OcStoreLoadPath(IN EFI_DEVICE_PATH_PROTOCOL *LoadPath OPTIONAL)
EFI_STATUS OcMiscLateInit(IN OC_STORAGE_CONTEXT *Storage, IN OC_GLOBAL_CONFIG *Config)
VOID OcMiscLoadSystemReport(IN OC_GLOBAL_CONFIG *Config, IN EFI_HANDLE LoadHandle OPTIONAL)
VOID OcMiscMiddleInit(IN OC_STORAGE_CONTEXT *Storage, IN OC_GLOBAL_CONFIG *Config, IN CONST CHAR16 *RootPath, IN EFI_DEVICE_PATH_PROTOCOL *LoadPath, IN EFI_HANDLE StorageHandle, OUT UINT8 *Signature OPTIONAL)
STATIC EFI_STATUS EFIAPI OcToolLoadEntry(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)
VOID OcMiscUefiQuirksLoaded(IN OC_GLOBAL_CONFIG *Config)
#define SHIM_RETAIN_PROTOCOL
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
EFI_RUNTIME_SERVICES * gRT
EFI_GUID gEfiSimpleFileSystemProtocolGuid
OC_POPULATE_CONTEXT PopulateContext
A pointer to the PopulateContext function.
OC_IMAGE_START StartImage
BOOLEAN PickerAudioAssist
OC_PLAY_AUDIO_ENTRY PlayAudioEntry
OC_PICKER_ENTRY CustomEntries[]
OC_PLAY_AUDIO_BEEP PlayAudioBeep
OC_PICKER_MODE PickerMode
UINT32 AllCustomEntryCount
OC_GET_ENTRY_ICON GetEntryIcon
OC_STORAGE_CONTEXT * StorageContext
OC_PLAY_AUDIO_FILE PlayAudioFile
OC_REQ_PRIVILEGE RequestPrivilege
CHAR16 ** CustomBootPaths
BOOLEAN BlacklistAppleUpdate
OC_PRIVILEGE_CONTEXT * PrivilegeContext
EFI_DEVICE_PATH_PROTOCOL * RecoveryInitiator
CONST CHAR8 * PickerVariant
OC_DMG_LOADING_SUPPORT DmgLoading
OC_GET_ENTRY_LABEL_IMAGE GetEntryLabelImage
OC_VERIFY_PASSWORD VerifyPassword
OC_PICKER_CMD PickerCommand
UINT32 AbsoluteEntryCount
OC_TOGGLE_VOICE_OVER ToggleVoiceOver
OC_CUSTOM_READ CustomRead
CONST CHAR8 * InstanceIdentifier
CONST CHAR8 * TitleSuffix