35 IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL,
36 IN CONST VOID *NotifyContext OPTIONAL,
37 IN CONST EFI_GUID *EventGroup OPTIONAL,
41 if ((Type == EVT_NOTIFY_SIGNAL) &&
CompareGuid (EventGroup, &gEfiEventExitBootServicesGuid)) {
42 return gBS->CreateEvent (
43 EVT_SIGNAL_EXIT_BOOT_SERVICES,
46 (VOID *)NotifyContext,
51 if ((Type == EVT_NOTIFY_SIGNAL) &&
CompareGuid (EventGroup, &gEfiEventVirtualAddressChangeGuid)) {
52 return gBS->CreateEvent (
53 EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE,
56 (VOID *)NotifyContext,
65 (VOID *)NotifyContext,
86 EFI_BOOT_SERVICES *NewBS;
90 "OCDM: Found 0x%X/0x%X UEFI version (%u bytes, %u %a to %u) gST %p gBS %p gBS->CreateEventEx %p &gBS %p\n",
95 Trash ?
"trashing" :
"rebuilding",
96 (UINT32)sizeof (EFI_BOOT_SERVICES),
112 if (
gST->Hdr.Revision >= EFI_2_30_SYSTEM_TABLE_REVISION) {
113 return EFI_ALREADY_STARTED;
116 if (
gBS->Hdr.HeaderSize > OFFSET_OF (EFI_BOOT_SERVICES, CreateEventEx)) {
117 return EFI_INVALID_PARAMETER;
121 if ((VOID *)&
gBS->CreateEventEx != (VOID *)gDS) {
124 "OCDM: Aborting trash strategy, gDS does not follow gBS\n"
126 return EFI_UNSUPPORTED;
131 "OCDM: Trashing gDS->Hdr.Signature with gBS->CreateEventEx\n"
135 NewBS = AllocateZeroPool (
sizeof (EFI_BOOT_SERVICES));
137 DEBUG ((DEBUG_INFO,
"OCDM: Failed to allocate BS copy\n"));
138 return EFI_OUT_OF_RESOURCES;
145 NewBS->Hdr.HeaderSize =
sizeof (EFI_BOOT_SERVICES);
146 NewBS->Hdr.Revision = EFI_2_30_SYSTEM_TABLE_REVISION;
147 NewBS->Hdr.CRC32 = 0;
148 NewBS->Hdr.CRC32 = CalculateCrc32 (NewBS, NewBS->Hdr.HeaderSize);
151 gST->BootServices = NewBS;
152 gST->Hdr.Revision = EFI_2_30_SYSTEM_TABLE_REVISION;
154 gST->Hdr.CRC32 = CalculateCrc32 (
gST,
gST->Hdr.HeaderSize);
158 gDS->Hdr.CRC32 = CalculateCrc32 (gDS, gDS->Hdr.HeaderSize);
STATIC EFI_STATUS EFIAPI OcCreateEventEx(IN UINT32 Type, IN EFI_TPL NotifyTpl, IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, IN CONST VOID *NotifyContext OPTIONAL, IN CONST EFI_GUID *EventGroup OPTIONAL, OUT EFI_EVENT *Event)