From d326412cce0672a81852813532b0b1d18fc8cdbc Mon Sep 17 00:00:00 2001 From: oliviermartin Date: Mon, 4 Jul 2011 10:09:04 +0000 Subject: [PATCH] Omap35xxPkg/InterruptDxe: Fix dependency chain with the Arch Cpu Dxe The CPU Dxe should be loaded before the Interrupt Dxe. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11969 6f19259b-4bc3-4df7-8a09-765794883524 --- Omap35xxPkg/InterruptDxe/HardwareInterrupt.c | 51 ++++++-------------- Omap35xxPkg/InterruptDxe/InterruptDxe.inf | 4 +- 2 files changed, 17 insertions(+), 38 deletions(-) diff --git a/Omap35xxPkg/InterruptDxe/HardwareInterrupt.c b/Omap35xxPkg/InterruptDxe/HardwareInterrupt.c index 0ddedb4c79..5040c4b152 100644 --- a/Omap35xxPkg/InterruptDxe/HardwareInterrupt.c +++ b/Omap35xxPkg/InterruptDxe/HardwareInterrupt.c @@ -31,8 +31,6 @@ // // Notifications // -VOID *CpuProtocolNotificationToken = NULL; -EFI_EVENT CpuProtocolNotificationEvent = (EFI_EVENT)NULL; EFI_EVENT EfiExitBootServicesEvent = (EFI_EVENT)NULL; @@ -298,37 +296,6 @@ EFI_HARDWARE_INTERRUPT_PROTOCOL gHardwareInterruptProtocol = { EndOfInterrupt }; -// -// Notification routines -// -VOID -CpuProtocolInstalledNotification ( - IN EFI_EVENT Event, - IN VOID *Context - ) -{ - EFI_STATUS Status; - EFI_CPU_ARCH_PROTOCOL *Cpu; - - // - // Get the cpu protocol that this driver requires. - // - Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)&Cpu); - ASSERT_EFI_ERROR(Status); - - // - // Unregister the default exception handler. - // - Status = Cpu->RegisterInterruptHandler (Cpu, EXCEPT_ARM_IRQ, NULL); - ASSERT_EFI_ERROR(Status); - - // - // Register to receive interrupts - // - Status = Cpu->RegisterInterruptHandler (Cpu, EXCEPT_ARM_IRQ, IrqInterruptHandler); - ASSERT_EFI_ERROR(Status); -} - /** Initialize the state information for the CPU Architectural Protocol @@ -347,6 +314,7 @@ InterruptDxeInitialize ( ) { EFI_STATUS Status; + EFI_CPU_ARCH_PROTOCOL *Cpu; // Make sure the Interrupt Controller Protocol is not already installed in the system. ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gHardwareInterruptProtocolGuid); @@ -362,11 +330,22 @@ InterruptDxeInitialize ( NULL); ASSERT_EFI_ERROR(Status); - // Set up to be notified when the Cpu protocol is installed. - Status = gBS->CreateEvent(EVT_NOTIFY_SIGNAL, TPL_CALLBACK, CpuProtocolInstalledNotification, NULL, &CpuProtocolNotificationEvent); + // + // Get the CPU protocol that this driver requires. + // + Status = gBS->LocateProtocol(&gEfiCpuArchProtocolGuid, NULL, (VOID **)&Cpu); ASSERT_EFI_ERROR(Status); - Status = gBS->RegisterProtocolNotify(&gEfiCpuArchProtocolGuid, CpuProtocolNotificationEvent, (VOID *)&CpuProtocolNotificationToken); + // + // Unregister the default exception handler. + // + Status = Cpu->RegisterInterruptHandler(Cpu, EXCEPT_ARM_IRQ, NULL); + ASSERT_EFI_ERROR(Status); + + // + // Register to receive interrupts + // + Status = Cpu->RegisterInterruptHandler(Cpu, EXCEPT_ARM_IRQ, IrqInterruptHandler); ASSERT_EFI_ERROR(Status); // Register for an ExitBootServicesEvent diff --git a/Omap35xxPkg/InterruptDxe/InterruptDxe.inf b/Omap35xxPkg/InterruptDxe/InterruptDxe.inf index f6142417e5..16caa2e4f1 100644 --- a/Omap35xxPkg/InterruptDxe/InterruptDxe.inf +++ b/Omap35xxPkg/InterruptDxe/InterruptDxe.inf @@ -53,5 +53,5 @@ [FixedPcd.common] gEmbeddedTokenSpaceGuid.PcdInterruptBaseAddress -[depex] - TRUE +[Depex] + gEfiCpuArchProtocolGuid