diff --git a/ArmPkg/Drivers/CpuDxe/CpuDxe.c b/ArmPkg/Drivers/CpuDxe/CpuDxe.c index 7e863f3936..cea333f91d 100644 --- a/ArmPkg/Drivers/CpuDxe/CpuDxe.c +++ b/ArmPkg/Drivers/CpuDxe/CpuDxe.c @@ -1,6 +1,7 @@ /** @file Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
+ Copyright (c) 2011, ARM Limited. All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -14,6 +15,8 @@ #include "CpuDxe.h" +#include + BOOLEAN mInterruptState = FALSE; @@ -194,6 +197,23 @@ CpuGetTimerValue ( return EFI_UNSUPPORTED; } +/** + Callback function for idle events. + + @param Event Event whose notification function is being invoked. + @param Context The pointer to the notification function's context, + which is implementation-dependent. + +**/ +VOID +EFIAPI +IdleLoopEventCallback ( + IN EFI_EVENT Event, + IN VOID *Context + ) +{ + CpuSleep (); +} // // Globals used to initialize the protocol @@ -219,10 +239,10 @@ CpuDxeInitialize ( ) { EFI_STATUS Status; + EFI_EVENT IdleLoopEvent; InitializeExceptions (&mCpu); - Status = gBS->InstallMultipleProtocolInterfaces ( &mCpuHandle, &gEfiCpuArchProtocolGuid, &mCpu, @@ -237,6 +257,18 @@ CpuDxeInitialize ( // SyncCacheConfig (&mCpu); + // + // Setup a callback for idle events + // + Status = gBS->CreateEventEx ( + EVT_NOTIFY_SIGNAL, + TPL_NOTIFY, + IdleLoopEventCallback, + NULL, + &gIdleLoopEventGuid, + &IdleLoopEvent + ); + ASSERT_EFI_ERROR (Status); + return Status; } - diff --git a/ArmPkg/Drivers/CpuDxe/CpuDxe.inf b/ArmPkg/Drivers/CpuDxe/CpuDxe.inf index 94e91c1ebd..3cf4036cfb 100644 --- a/ArmPkg/Drivers/CpuDxe/CpuDxe.inf +++ b/ArmPkg/Drivers/CpuDxe/CpuDxe.inf @@ -3,6 +3,8 @@ # DXE CPU driver # # Copyright (c) 2009, Apple Inc. All rights reserved.
+# Copyright (c) 2011, ARM Limited. All rights reserved. +# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -45,6 +47,7 @@ ArmPkg/ArmPkg.dec EmbeddedPkg/EmbeddedPkg.dec MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec [LibraryClasses] BaseMemoryLib @@ -65,6 +68,7 @@ [Guids] gEfiDebugImageInfoTableGuid + gIdleLoopEventGuid [Pcd.common] gArmTokenSpaceGuid.PcdVFPEnabled