19#include <Guid/GlobalVariable.h>
21#include <Library/BaseLib.h>
22#include <Library/DevicePathLib.h>
23#include <Library/MemoryAllocationLib.h>
54#include <Library/PrintLib.h>
55#include <Library/UefiBootServicesTableLib.h>
56#include <Library/UefiLib.h>
57#include <Library/UefiRuntimeServicesTableLib.h>
59#include <Protocol/DevicePath.h>
60#include <Protocol/GraphicsOutput.h>
61#include <Protocol/Security.h>
62#include <Protocol/Security2.h>
63#include <Protocol/SimplePointer.h>
65#define OC_EXIT_BOOT_SERVICES_HANDLER_MAX 5
73 IN EFI_EVENT_NOTIFY Handler,
90 IN OC_GLOBAL_CONFIG *Config,
91 OUT EFI_HANDLE **DriversToConnect OPTIONAL,
100 EFI_HANDLE ImageHandle;
101 EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
102 EFI_HANDLE *DriversToConnectIterator;
105 OC_UEFI_DRIVER_ENTRY *DriverEntry;
106 CONST CHAR8 *DriverComment;
107 CHAR8 *DriverFileName;
108 CONST CHAR8 *DriverArguments;
109 CONST CHAR8 *UnescapedArguments;
111 ASSERT (!LoadEarly || DriversToConnect == NULL);
113 DriversToConnectIterator = NULL;
114 if (DriversToConnect != NULL) {
115 *DriversToConnect = NULL;
118 DEBUG ((DEBUG_INFO,
"OC: Got %u drivers\n", Config->Uefi.Drivers.Count));
120 for (Index = 0; Index < Config->Uefi.Drivers.Count; ++Index) {
121 DriverEntry = Config->Uefi.Drivers.Values[Index];
122 DriverComment =
OC_BLOB_GET (&DriverEntry->Comment);
124 DriverArguments =
OC_BLOB_GET (&DriverEntry->Arguments);
126 SkipDriver = ( !DriverEntry->Enabled
127 || (DriverFileName == NULL)
128 || (DriverFileName[0] ==
'\0')
129 || (LoadEarly != DriverEntry->LoadEarly)
137 if (!LoadEarly || !SkipDriver) {
140 "OC: Driver %a at %u (%a) is %a\n",
144 SkipDriver ?
"skipped!" :
"being loaded..."
161 if (EFI_ERROR (Status)) {
164 "OC: Driver %s%a does not fit path!\n",
172 if (Driver == NULL) {
175 "OC: Driver %a at %u cannot be found!\n",
189 Status =
gBS->LoadImage (
197 if (EFI_ERROR (Status)) {
200 "OC: Driver %a at %u cannot be loaded - %r!\n",
209 if ((DriverArguments != NULL) && (DriverArguments[0] !=
'\0')) {
210 Status =
gBS->HandleProtocol (
213 (VOID **)&LoadedImage
215 if (EFI_ERROR (Status)) {
218 "OC: Failed to locate loaded image for driver %a at %u - %r!\n",
223 gBS->UnloadImage (ImageHandle);
229 if (UnescapedArguments == NULL) {
232 "OC: Cannot unescape arguments for driver %a at %u\n",
236 gBS->UnloadImage (ImageHandle);
244 "OC: Unable to apply arguments to driver %a at %u - %r!\n",
249 gBS->UnloadImage (ImageHandle);
251 FreePool ((CHAR8 *)UnescapedArguments);
255 FreePool ((CHAR8 *)UnescapedArguments);
258 Status =
gBS->StartImage (
264 if (EFI_ERROR (Status)) {
267 "OC: Driver %a at %u cannot be started - %r!\n",
272 gBS->UnloadImage (ImageHandle);
275 if (!EFI_ERROR (Status)) {
278 "OC: Driver %a at %u is successfully loaded!\n",
283 if (DriversToConnect != NULL) {
284 Status =
gBS->HandleProtocol (
287 (VOID **)&DriverBinding
290 if (!EFI_ERROR (Status)) {
291 if (*DriversToConnect == NULL) {
295 *DriversToConnect = AllocatePool (
296 (Config->Uefi.Drivers.Count + 1 - Index) * sizeof (**DriversToConnect)
299 if (*DriversToConnect != NULL) {
300 DriversToConnectIterator = *DriversToConnect;
302 DEBUG ((DEBUG_ERROR,
"OC: Failed to allocate memory for drivers to connect\n"));
308 *DriversToConnectIterator = ImageHandle;
309 ++DriversToConnectIterator;
313 "OC: Driver %a at %u needs connection.\n",
327 if (DriversToConnectIterator != NULL) {
328 *DriversToConnectIterator = NULL;
341 OC_GLOBAL_CONFIG *Config;
343 Config = (OC_GLOBAL_CONFIG *)Context;
351 if (Config->Uefi.Quirks.ReleaseUsbOwnership) {
353 if (EFI_ERROR (Status)) {
354 DEBUG ((DEBUG_INFO,
"OC: ReleaseUsbOwnership - %r\n", Status));
367 if (Config->Uefi.Quirks.ExitBootServicesDelay > 0) {
368 gBS->Stall (Config->Uefi.Quirks.ExitBootServicesDelay);
375 IN OC_GLOBAL_CONFIG *Config
378 CONST CHAR8 *AppleEventMode;
379 BOOLEAN InstallAppleEvent;
380 BOOLEAN OverrideAppleEvent;
383 Config->Uefi.ProtocolOverrides.AppleAudio,
384 Config->Uefi.Audio.DisconnectHda
387 DEBUG ((DEBUG_INFO,
"OC: Disabling audio in favour of firmware implementation\n"));
391 DEBUG ((DEBUG_INFO,
"OC: Failed to install boot policy protocol\n"));
395 DEBUG ((DEBUG_INFO,
"OC: Failed to install data hub protocol\n"));
399 DEBUG ((DEBUG_INFO,
"OC: Failed to install device properties protocol\n"));
403 DEBUG ((DEBUG_INFO,
"OC: Failed to install image conversion protocol\n"));
407 DEBUG ((DEBUG_INFO,
"OC: Failed to install debug log protocol\n"));
410 if (
OcSmcIoInstallProtocol (Config->Uefi.ProtocolOverrides.AppleSmcIo, Config->Misc.Security.AuthRestart) == NULL) {
411 DEBUG ((DEBUG_INFO,
"OC: Failed to install smc i/o protocol\n"));
415 DEBUG ((DEBUG_INFO,
"OC: Failed to install user interface theme protocol\n"));
419 DEBUG ((DEBUG_INFO,
"OC: Failed to install unicode collation protocol\n"));
423 DEBUG ((DEBUG_INFO,
"OC: Failed to install hash services protocol\n"));
427 DEBUG ((DEBUG_INFO,
"OC: Failed to install key map protocols\n"));
431 DEBUG ((DEBUG_INFO,
"OC: Failed to install cpuio/pcirootbridgeio overrides\n"));
434 InstallAppleEvent = TRUE;
435 OverrideAppleEvent = FALSE;
437 AppleEventMode =
OC_BLOB_GET (&Config->Uefi.AppleInput.AppleEvent);
439 if (AsciiStrCmp (AppleEventMode,
"Auto") == 0) {
440 }
else if (AsciiStrCmp (AppleEventMode,
"OEM") == 0) {
441 InstallAppleEvent = FALSE;
442 }
else if (AsciiStrCmp (AppleEventMode,
"Builtin") == 0) {
443 OverrideAppleEvent = TRUE;
445 DEBUG ((DEBUG_INFO,
"OC: Invalid AppleInput AppleEvent setting %a, using Auto\n", AppleEventMode));
451 Config->Uefi.AppleInput.CustomDelays,
452 Config->Uefi.AppleInput.KeyInitialDelay,
453 Config->Uefi.AppleInput.KeySubsequentDelay,
454 Config->Uefi.AppleInput.GraphicsInputMirroring,
455 Config->Uefi.AppleInput.PointerPollMin,
456 Config->Uefi.AppleInput.PointerPollMax,
457 Config->Uefi.AppleInput.PointerPollMask,
458 Config->Uefi.AppleInput.PointerSpeedDiv,
459 Config->Uefi.AppleInput.PointerSpeedMul,
460 Config->Uefi.AppleInput.PointerDwellClickTimeout,
461 Config->Uefi.AppleInput.PointerDwellDoubleClickTimeout,
462 Config->Uefi.AppleInput.PointerDwellRadius
464 && InstallAppleEvent)
466 DEBUG ((DEBUG_INFO,
"OC: Failed to install apple event protocol\n"));
470 DEBUG ((DEBUG_INFO,
"OC: Failed to install firmware volume protocol\n"));
474 DEBUG ((DEBUG_INFO,
"OC: Failed to install os info protocol\n"));
478 DEBUG ((DEBUG_INFO,
"OC: Failed to install rtc ram protocol\n"));
482 DEBUG ((DEBUG_INFO,
"OC: Failed to install fb info protocol\n"));
486 DEBUG ((DEBUG_INFO,
"OC: Failed to install eg2 info protocol\n"));
493 IN OC_GLOBAL_CONFIG *Config,
499 CONST CHAR8 *SecureBootModel;
500 CONST CHAR8 *RealSecureBootModel;
501 CONST CHAR8 *DmgLoading;
502 UINT8 SecureBootPolicy;
504 SecureBootModel =
OC_BLOB_GET (&Config->Misc.Security.SecureBootModel);
505 if ((AsciiStrCmp (SecureBootModel,
OC_SB_MODEL_DEFAULT) == 0) || (SecureBootModel[0] ==
'\0')) {
513 }
else if ( (Config->Misc.Security.ApECID != 0)
514 && ( (RealSecureBootModel == NULL)
531 DmgLoading =
OC_BLOB_GET (&Config->Misc.Security.DmgLoading);
535 if ( (AsciiStrCmp (DmgLoading,
"Signed") != 0)
536 && (AsciiStrCmp (DmgLoading,
"Disabled") != 0)
537 && (DmgLoading[0] !=
'\0'))
539 DEBUG ((DEBUG_ERROR,
"OC: Cannot use Secure Boot with Any DmgLoading!\n"));
547 "OC: Loading Apple Secure Boot with %a (level %u)\n",
553 if (RealSecureBootModel == NULL) {
554 DEBUG ((DEBUG_ERROR,
"OC: Failed to find SB model %a\n", SecureBootModel));
563 && (Config->Misc.Security.ApECID == 0))
565 DEBUG ((DEBUG_INFO,
"OC: Discovered x86legacy with zero ECID, using system-id\n"));
574 Config->Booter.Quirks.DisableSingleUser = TRUE;
577 if (EFI_ERROR (Status)) {
578 DEBUG ((DEBUG_ERROR,
"OC: Failed to bootstrap IMG4 NVRAM values - %r\n", Status));
583 if (EFI_ERROR (Status)) {
584 DEBUG ((DEBUG_ERROR,
"OC: Failed to bootstrap SB NVRAM values - %r\n", Status));
593 DEBUG ((DEBUG_ERROR,
"OC: Failed to install im4m protocol\n"));
601 Config->Uefi.ProtocolOverrides.AppleSecureBoot,
606 if (SecureBoot == NULL) {
607 DEBUG ((DEBUG_ERROR,
"OC: Failed to install secure boot protocol\n"));
615 IN CONST EFI_SECURITY_ARCH_PROTOCOL *This,
616 IN UINT32 AuthenticationStatus,
617 IN CONST EFI_DEVICE_PATH_PROTOCOL *File
620 DEBUG ((DEBUG_VERBOSE,
"OC: Security V1 %u\n", AuthenticationStatus));
628 IN CONST EFI_SECURITY2_ARCH_PROTOCOL *This,
629 IN CONST EFI_DEVICE_PATH_PROTOCOL *File OPTIONAL,
632 IN BOOLEAN BootPolicy
635 DEBUG ((DEBUG_VERBOSE,
"OC: Security V2 %u\n", BootPolicy));
646 EFI_SECURITY_ARCH_PROTOCOL *Security;
647 EFI_SECURITY2_ARCH_PROTOCOL *Security2;
649 DEBUG ((DEBUG_INFO,
"OC: Installing DISABLING secure boot policy overrides\n"));
651 Status =
gBS->LocateProtocol (
652 &gEfiSecurityArchProtocolGuid,
657 DEBUG ((DEBUG_INFO,
"OC: Security arch protocol - %r\n", Status));
659 if (!EFI_ERROR (Status)) {
663 Status =
gBS->LocateProtocol (
664 &gEfiSecurity2ArchProtocolGuid,
669 DEBUG ((DEBUG_INFO,
"OC: Security2 arch protocol - %r\n", Status));
671 if (!EFI_ERROR (Status)) {
678 IN OC_GLOBAL_CONFIG *Config,
686 OC_BOOTER_PATCH_ENTRY *UserPatch;
689 ZeroMem (&AbcSettings,
sizeof (AbcSettings));
712 AbcSettings.
SignalAppleOS = Config->Booter.Quirks.SignalAppleOS;
718 if (AbcSettings.
DevirtualiseMmio && (Config->Booter.MmioWhitelist.Count > 0)) {
720 Config->Booter.MmioWhitelist.Count * sizeof (AbcSettings.
MmioWhitelist[0])
725 for (Index = 0; Index < Config->Booter.MmioWhitelist.Count; ++Index) {
726 if (Config->Booter.MmioWhitelist.Values[Index]->Enabled) {
727 AbcSettings.
MmioWhitelist[NextIndex] = Config->Booter.MmioWhitelist.Values[Index]->Address;
736 "OC: Failed to allocate %u slots for mmio addresses\n",
737 (UINT32)Config->Booter.MmioWhitelist.Count
745 if (Config->Booter.Patch.Count > 0) {
747 Config->Booter.Patch.Count * sizeof (AbcSettings.
BooterPatches[0])
752 for (Index = 0; Index < Config->Booter.Patch.Count; ++Index) {
754 UserPatch = Config->Booter.Patch.Values[Index];
756 if (!UserPatch->Enabled) {
766 if ( (UserPatch->Replace.Size == 0)
767 || (UserPatch->Find.Size != UserPatch->Replace.Size)
768 || ((UserPatch->Mask.Size > 0) && (UserPatch->Find.Size != UserPatch->Mask.Size))
769 || ((UserPatch->ReplaceMask.Size > 0) && (UserPatch->Find.Size != UserPatch->ReplaceMask.Size)))
771 DEBUG ((DEBUG_ERROR,
"OC: Booter patch %u is borked\n", Index));
779 if ((Patch->
Arch[0] !=
'\0') && (AsciiStrCmp (Patch->
Arch,
"Any") != 0)) {
780 #if defined (MDE_CPU_X64)
781 if (AsciiStrCmp (Patch->
Arch,
"x86_64") != 0) {
785 #elif defined (MDE_CPU_IA32)
786 if (AsciiStrCmp (Patch->
Arch,
"i386") != 0) {
791 #error "Unsupported architecture"
806 if (UserPatch->Mask.Size > 0) {
810 if (UserPatch->ReplaceMask.Size > 0) {
814 Patch->
Size = UserPatch->Replace.Size;
815 Patch->
Count = UserPatch->Count;
816 Patch->
Skip = UserPatch->Skip;
817 Patch->
Limit = UserPatch->Limit;
826 "OC: Failed to allocate %u slots for user booter patches\n",
827 (UINT32)Config->Booter.Patch.Count
840 IN OC_GLOBAL_CONFIG *Config
845 EFI_PHYSICAL_ADDRESS ReservedAddress;
846 EFI_MEMORY_TYPE RsvdMemoryType;
847 CHAR8 *RsvdMemoryTypeStr;
849 for (Index = 0; Index < Config->Uefi.ReservedMemory.Count; ++Index) {
850 if (!Config->Uefi.ReservedMemory.Values[Index]->Enabled) {
854 if ( ((Config->Uefi.ReservedMemory.Values[Index]->Address & (BASE_4KB - 1)) != 0)
855 || ((Config->Uefi.ReservedMemory.Values[Index]->Size & (BASE_4KB - 1)) != 0))
857 Status = EFI_INVALID_PARAMETER;
859 RsvdMemoryTypeStr =
OC_BLOB_GET (&Config->Uefi.ReservedMemory.Values[Index]->Type);
862 if (EFI_ERROR (Status)) {
863 DEBUG ((DEBUG_INFO,
"OC: Invalid ReservedMemory Type: %a\n", RsvdMemoryTypeStr));
864 RsvdMemoryType = EfiReservedMemoryType;
867 ReservedAddress = Config->Uefi.ReservedMemory.Values[Index]->Address;
868 Status =
gBS->AllocatePages (
871 (UINTN)EFI_SIZE_TO_PAGES (Config->Uefi.ReservedMemory.Values[Index]->Size),
878 "OC: Reserving region %Lx of %Lx size - %r\n",
879 Config->Uefi.ReservedMemory.Values[Index]->Address,
880 Config->Uefi.ReservedMemory.Values[Index]->Size,
889 IN OC_GLOBAL_CONFIG *Config,
895 EFI_HANDLE *DriversToConnect;
896 EFI_HANDLE *HandleBuffer;
899 BOOLEAN AccelEnabled;
905 OcImageLoaderInit (Config->Booter.Quirks.ProtectUefiServices, Config->Booter.Quirks.FixupAppleEfiImages);
916 if (Config->Uefi.Quirks.ActivateHpetSupport) {
920 if (Config->Uefi.Quirks.IgnoreInvalidFlexRatio) {
924 if (Config->Uefi.Quirks.EnableVmx) {
926 DEBUG ((EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_INFO,
"OC: Enable VMX - %r\n", Status));
929 if (Config->Uefi.Quirks.TscSyncTimeout > 0) {
935 "OC: RequestBootVarRouting %d\n",
936 Config->Uefi.Quirks.RequestBootVarRouting
945 sizeof (Config->Uefi.Quirks.RequestBootVarRouting),
946 &Config->Uefi.Quirks.RequestBootVarRouting,
950 if (Config->Uefi.Quirks.UnblockFsConnect) {
954 if (Config->Uefi.Quirks.DisableSecurityPolicy) {
960 if (Config->Uefi.Quirks.ReloadOptionRoms) {
964 if (Config->Uefi.Quirks.EnableVectorAcceleration) {
966 DEBUG ((DEBUG_INFO,
"OC: AVX enabled - %u\n", AccelEnabled));
969 if ( (Config->Uefi.Quirks.ResizeGpuBars >= 0)
970 && (Config->Uefi.Quirks.ResizeGpuBars <
PciBarTotal))
972 DEBUG ((DEBUG_INFO,
"OC: Setting GPU BARs to %d\n", Config->Uefi.Quirks.ResizeGpuBars));
973 ResizeGpuBars (Config->Uefi.Quirks.ResizeGpuBars, TRUE, Config->Uefi.Quirks.ResizeUsePciRbIo);
983 if (Config->Uefi.ConnectDrivers) {
985 DEBUG ((DEBUG_INFO,
"OC: Connecting drivers...\n"));
986 if (DriversToConnect != NULL) {
993 if (Config->Uefi.Output.ReconnectGraphicsOnConnect) {
994 DEBUG ((DEBUG_INFO,
"OC: Disconnecting graphics drivers...\n"));
996 DEBUG ((DEBUG_INFO,
"OC: Disconnecting graphics drivers done...\n"));
1000 DEBUG ((DEBUG_INFO,
"OC: Connecting drivers done...\n"));
1005 DEBUG_CODE_BEGIN ();
1007 HandleBuffer = NULL;
1008 Status =
gBS->LocateHandleBuffer (
1015 DEBUG ((DEBUG_INFO,
"OC: Found %u pointer devices - %r\n", HandleCount, Status));
1016 if (!EFI_ERROR (Status)) {
1017 FreePool (HandleBuffer);
1022 if (Config->Uefi.Apfs.EnableJumpstart) {
1024 Config->Uefi.Apfs.MinVersion,
1025 Config->Uefi.Apfs.MinDate,
1026 Config->Misc.Security.ScanPolicy,
1027 Config->Uefi.Apfs.GlobalConnect,
1028 Config->Uefi.Quirks.UnblockFsConnect,
1029 Config->Uefi.Apfs.HideVerbose
1033 Config->Uefi.Apfs.JumpstartHotPlug
1042 EVT_SIGNAL_EXIT_BOOT_SERVICES,
@ AppleImg4SbModeDisabled
EFI_STATUS OcAbcInitialize(IN OC_ABC_SETTINGS *Settings, IN OC_CPU_INFO *CpuInfo)
EFI_STATUS OcApfsConnectDevices(IN BOOLEAN Monitor)
VOID OcApfsConfigure(IN UINT64 MinVersion, IN UINT32 MinDate, IN UINT32 ScanPolicy, IN BOOLEAN GlobalConnect, IN BOOLEAN DisconnectHandles, IN BOOLEAN IgnoreVerbose)
APPLE_BOOT_POLICY_PROTOCOL * OcAppleBootPolicyInstallProtocol(IN BOOLEAN Reinstall)
APPLE_EVENT_PROTOCOL * OcAppleEventInstallProtocol(IN BOOLEAN Install, IN BOOLEAN Reinstall, IN BOOLEAN CustomDelays, IN UINT16 KeyInitialDelay, IN UINT16 KeySubsequentDelay, IN BOOLEAN GraphicsInputMirroring, IN UINT32 PointerPollMin, IN UINT32 PointerPollMax, IN UINT32 PointerPollMask, IN UINT16 PointerSpeedDiv, IN UINT16 PointerSpeedMul, IN UINT16 PointerDwellClickTimeout, IN UINT16 PointerDwellDoubleClickTimeout, IN UINT16 PointerDwellRadius)
APPLE_IMAGE_CONVERSION_PROTOCOL * OcAppleImageConversionInstallProtocol(IN BOOLEAN Reinstall)
CONST CHAR8 * OcAppleImg4GetHardwareModel(IN CONST CHAR8 *ModelRequest)
#define OC_SB_MODEL_DEFAULT
APPLE_IMG4_VERIFICATION_PROTOCOL * OcAppleImg4VerificationInstallProtocol(IN BOOLEAN Reinstall)
EFI_STATUS OcAppleImg4BootstrapValues(IN CONST CHAR8 *Model, IN UINT64 Ecid OPTIONAL)
#define OC_SB_MODEL_DISABLED
#define OC_SB_MODEL_LEGACY
APPLE_KEY_MAP_AGGREGATOR_PROTOCOL * OcAppleKeyMapInstallProtocols(IN BOOLEAN Reinstall)
APPLE_SECURE_BOOT_PROTOCOL * OcAppleSecureBootInstallProtocol(IN BOOLEAN Reinstall, IN UINT8 SbPolicy, IN UINT8 SbWinPolicy OPTIONAL, IN BOOLEAN SbWinPolicyValid)
EFI_STATUS OcAppleSecureBootBootstrapValues(IN CONST CHAR8 *Model, IN UINT64 Ecid OPTIONAL)
EFI_USER_INTERFACE_THEME_PROTOCOL * OcAppleUserInterfaceThemeInstallProtocol(IN BOOLEAN Reinstall)
OC_AUDIO_PROTOCOL * OcAudioInstallProtocols(IN BOOLEAN Reinstall, IN BOOLEAN DisconnectHda)
VOID OcImageLoaderInit(IN CONST BOOLEAN ProtectUefiServices, IN CONST BOOLEAN FixupAppleEfiImages)
BOOLEAN OcAppendArgumentsToLoadedImage(IN OUT EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, IN CONST CHAR8 **Arguments, IN UINT32 ArgumentCount, IN BOOLEAN Replace)
APPLE_EG2_INFO_PROTOCOL * OcAppleEg2InfoInstallProtocol(IN BOOLEAN Reinstall)
APPLE_FRAMEBUFFER_INFO_PROTOCOL * OcAppleFbInfoInstallProtocol(IN BOOLEAN Reinstall)
EFI_STATUS OcCpuEnableVmx(VOID)
EFI_STATUS OcCpuCorrectTscSync(IN OC_CPU_INFO *Cpu, IN UINTN Timeout)
VOID OcCpuCorrectFlexRatio(IN OC_CPU_INFO *Cpu)
BOOLEAN EFIAPI TryEnableAccel(VOID)
EFI_DATA_HUB_PROTOCOL * OcDataHubInstallProtocol(IN BOOLEAN Reinstall)
EFI_STATUS OcForgeUefiSupport(IN BOOLEAN Forge, IN BOOLEAN Trash)
VOID ActivateHpetSupport(VOID)
EFI_STATUS ReleaseUsbOwnership(VOID)
EFI_STATUS ResizeGpuBars(IN PCI_BAR_SIZE Size, IN BOOLEAN Increase, IN BOOLEAN UseRbIo)
EFI_STATUS OcReloadOptionRoms(VOID)
EFI_DEVICE_PATH_PROPERTY_DATABASE_PROTOCOL * OcDevicePathPropertyInstallProtocol(IN BOOLEAN Reinstall)
VOID OcUnblockUnmountedPartitions(VOID)
VOID OcDisconnectGraphicsDrivers(VOID)
EFI_STATUS OcRegisterDriversToHighestPriority(IN EFI_HANDLE *PriorityDrivers)
EFI_STATUS OcConnectDrivers(VOID)
EFI_FIRMWARE_VOLUME_PROTOCOL * OcFirmwareVolumeInstallProtocol(IN BOOLEAN Reinstall)
EFI_SERVICE_BINDING_PROTOCOL * OcHashServicesInstallProtocol(IN BOOLEAN Reinstall)
APPLE_DEBUG_LOG_PROTOCOL * OcAppleDebugLogInstallProtocol(IN BOOLEAN Reinstall)
#define OPEN_CORE_UEFI_DRIVER_PATH
CONST CHAR8 * OcGetDefaultSecureBootModel(IN OC_GLOBAL_CONFIG *Config, IN OC_CPU_INFO *CpuInfo)
VOID OcLoadUefiInputSupport(IN OC_GLOBAL_CONFIG *Config)
VOID OcUnloadDrivers(IN OC_GLOBAL_CONFIG *Config)
VOID OcLoadUefiAudioSupport(IN OC_STORAGE_CONTEXT *Storage, IN OC_GLOBAL_CONFIG *Config)
VOID OcGetLegacySecureBootECID(IN OC_GLOBAL_CONFIG *Config, OUT UINT64 *ApECID)
VOID OcLoadUefiOutputSupport(IN OC_STORAGE_CONTEXT *Storage, IN OC_GLOBAL_CONFIG *Config)
VOID OcMiscUefiQuirksLoaded(IN OC_GLOBAL_CONFIG *Config)
EFI_STATUS OcDescToMemoryType(IN CHAR8 *MemoryTypeDesc, OUT EFI_MEMORY_TYPE *MemoryType)
EFI_OS_INFO_PROTOCOL * OcOSInfoInstallProtocol(IN BOOLEAN Reinstall)
EFI_CPU_IO2_PROTOCOL * OcPciIoInstallProtocol(IN BOOLEAN Reinstall)
APPLE_RTC_RAM_PROTOCOL * OcAppleRtcRamInstallProtocol(IN BOOLEAN Reinstall)
APPLE_SMC_IO_PROTOCOL * OcSmcIoInstallProtocol(IN BOOLEAN Reinstall, IN BOOLEAN AuthRestart)
VOID * OcStorageReadFileUnicode(IN OC_STORAGE_CONTEXT *Context, IN CONST CHAR16 *FilePath, OUT UINT32 *FileSize OPTIONAL)
#define OC_STORAGE_SAFE_PATH_MAX
EFI_STATUS EFIAPI OcUnicodeSafeSPrint(OUT CHAR16 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR16 *FormatString,...)
#define OC_BLOB_GET(Blob)
EFI_UNICODE_COLLATION_PROTOCOL * OcUnicodeCollationEngInstallProtocol(IN BOOLEAN Reinstall)
#define OC_BOOT_REDIRECT_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_INT_NVRAM_ATTR
CONST CHAR8 * XmlUnescapeString(IN CONST CHAR8 *String)
STATIC VOID EFIAPI OcExitBootServicesHandler(IN EFI_EVENT Event, IN VOID *Context)
STATIC EFI_STATUS EFIAPI OcSecurity2FileAuthentication(IN CONST EFI_SECURITY2_ARCH_PROTOCOL *This, IN CONST EFI_DEVICE_PATH_PROTOCOL *File OPTIONAL, IN VOID *FileBuffer, IN UINTN FileSize, IN BOOLEAN BootPolicy)
VOID OcLoadDrivers(IN OC_STORAGE_CONTEXT *Storage, IN OC_GLOBAL_CONFIG *Config, OUT EFI_HANDLE **DriversToConnect OPTIONAL, IN BOOLEAN LoadEarly)
VOID OcLoadBooterUefiSupport(IN OC_GLOBAL_CONFIG *Config, IN OC_CPU_INFO *CpuInfo, IN UINT8 *Signature)
VOID OcScheduleExitBootServices(IN EFI_EVENT_NOTIFY Handler, IN VOID *Context)
VOID OcLoadUefiSupport(IN OC_STORAGE_CONTEXT *Storage, IN OC_GLOBAL_CONFIG *Config, IN OC_CPU_INFO *CpuInfo, IN UINT8 *Signature)
STATIC UINTN mOcExitBootServicesIndex
STATIC EFI_STATUS EFIAPI OcSecurityFileAuthentication(IN CONST EFI_SECURITY_ARCH_PROTOCOL *This, IN UINT32 AuthenticationStatus, IN CONST EFI_DEVICE_PATH_PROTOCOL *File)
STATIC VOID OcLoadAppleSecureBoot(IN OC_GLOBAL_CONFIG *Config, IN OC_CPU_INFO *CpuInfo)
STATIC EFI_EVENT_NOTIFY mOcExitBootServicesHandlers[OC_EXIT_BOOT_SERVICES_HANDLER_MAX+1]
#define OC_EXIT_BOOT_SERVICES_HANDLER_MAX
STATIC VOID OcReinstallProtocols(IN OC_GLOBAL_CONFIG *Config)
VOID OcReserveMemory(IN OC_GLOBAL_CONFIG *Config)
STATIC VOID OcInstallPermissiveSecurityPolicy(VOID)
STATIC VOID * mOcExitBootServicesContexts[OC_EXIT_BOOT_SERVICES_HANDLER_MAX]
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
EFI_GUID gEfiDriverBindingProtocolGuid
EFI_GUID gEfiSimplePointerProtocolGuid
EFI_GUID gEfiLoadedImageProtocolGuid
BOOLEAN ProtectSecureBoot
BOOLEAN ProtectUefiServices
EFI_EVENT_NOTIFY * ExitBootServicesHandlers
BOOLEAN ForceExitBootServices
BOOLEAN ForceBooterSignature
BOOLEAN RebuildAppleMemoryMap
BOOLEAN DisableVariableWrite
BOOLEAN ProvideCustomSlide
BOOLEAN AllowRelocationBlock
EFI_PHYSICAL_ADDRESS * MmioWhitelist
BOOLEAN ClearTaskSwitchBit
UINT8 BooterSignature[SHA1_DIGEST_SIZE]
BOOLEAN EnableSafeModeSlide
VOID ** ExitBootServicesHandlerContexts
BOOLEAN EnableWriteUnprotector
OC_BOOTER_PATCH * BooterPatches
BOOLEAN SyncRuntimePermissions
BOOLEAN AvoidRuntimeDefrag
BOOLEAN DiscardHibernateMap
BOOLEAN DisableSingleUser
BOOLEAN ProtectMemoryRegions
CONST UINT8 * ReplaceMask