diff options
-rw-r--r-- | ArmPkg/Drivers/CpuDxe/CpuDxe.c | 36 | ||||
-rw-r--r-- | ArmPkg/Drivers/CpuDxe/CpuDxe.inf | 4 |
2 files changed, 38 insertions, 2 deletions
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.<BR>
+ 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 <Guid/IdleLoopEvent.h>
+
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.<BR>
+# 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
|