/** Creates an event for each entry in a table that is fired everytime a Protocol of a specific type is installed. @param Entry Pointer to EFI_CORE_PROTOCOL_NOTIFY_ENTRY. **/ VOID CoreNotifyOnProtocolEntryTable ( EFI_CORE_PROTOCOL_NOTIFY_ENTRY *Entry ) { EFI_STATUS Status; for (; Entry->ProtocolGuid != NULL; Entry++) { // // Create the event // Status = CoreCreateEvent ( EVT_NOTIFY_SIGNAL, TPL_CALLBACK, GenericProtocolNotify, Entry, &Entry->Event ); ASSERT_EFI_ERROR(Status); // // Register for protocol notifactions on this event // Status = CoreRegisterProtocolNotify ( Entry->ProtocolGuid, Entry->Event, &Entry->Registration ); ASSERT_EFI_ERROR(Status); } }
/** Initializes timer support. **/ VOID CoreInitializeTimer ( VOID ) { EFI_STATUS Status; Status = CoreCreateEvent ( EVT_NOTIFY_SIGNAL, TPL_HIGH_LEVEL - 1, CoreCheckTimers, NULL, &mEfiCheckTimerEvent ); ASSERT_EFI_ERROR (Status); }
/** Initialize Memory Protection support. **/ VOID EFIAPI CoreInitializeMemoryProtection ( VOID ) { EFI_STATUS Status; EFI_EVENT Event; EFI_EVENT EndOfDxeEvent; VOID *Registration; mImageProtectionPolicy = PcdGet32(PcdImageProtectionPolicy); InitializeListHead (&mProtectedImageRecordList); // // Sanity check the PcdDxeNxMemoryProtectionPolicy setting: // - code regions should have no EFI_MEMORY_XP attribute // - EfiConventionalMemory and EfiBootServicesData should use the // same attribute // ASSERT ((GetPermissionAttributeForMemoryType (EfiBootServicesCode) & EFI_MEMORY_XP) == 0); ASSERT ((GetPermissionAttributeForMemoryType (EfiRuntimeServicesCode) & EFI_MEMORY_XP) == 0); ASSERT ((GetPermissionAttributeForMemoryType (EfiLoaderCode) & EFI_MEMORY_XP) == 0); ASSERT (GetPermissionAttributeForMemoryType (EfiBootServicesData) == GetPermissionAttributeForMemoryType (EfiConventionalMemory)); if (mImageProtectionPolicy != 0 || PcdGet64 (PcdDxeNxMemoryProtectionPolicy) != 0) { Status = CoreCreateEvent ( EVT_NOTIFY_SIGNAL, TPL_CALLBACK, MemoryProtectionCpuArchProtocolNotify, NULL, &Event ); ASSERT_EFI_ERROR(Status); // // Register for protocol notifactions on this event // Status = CoreRegisterProtocolNotify ( &gEfiCpuArchProtocolGuid, Event, &Registration ); ASSERT_EFI_ERROR(Status); } // // Register a callback to disable NULL pointer detection at EndOfDxe // if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & (BIT0|BIT7)) == (BIT0|BIT7)) { Status = CoreCreateEventEx ( EVT_NOTIFY_SIGNAL, TPL_NOTIFY, DisableNullDetectionAtTheEndOfDxe, NULL, &gEfiEndOfDxeEventGroupGuid, &EndOfDxeEvent ); ASSERT_EFI_ERROR (Status); } return ; }