summaryrefslogtreecommitdiff
path: root/ArmPkg/Drivers/CpuDxe
diff options
context:
space:
mode:
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>2011-06-20 21:35:50 +0000
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>2011-06-20 21:35:50 +0000
commit8513037f2c02fceeff8ced9ecae2e9afc9ce6a78 (patch)
tree403a63f0862f0dd75da27ff4f4d9b709dfdd9ab6 /ArmPkg/Drivers/CpuDxe
parent149daa615f6225740549b5516fc1cd8627cae23f (diff)
downloadedk2-platforms-8513037f2c02fceeff8ced9ecae2e9afc9ce6a78.tar.xz
ArmPkg/CpuDxe: Register a callback for the gIdleLoopEventGuid event
This gIdleLoopEventGuid event signals the Cpu that it should go into the idle state waiting for any events. CpuSleep() is used in this implementation to make the Cpu wait for the next interrupt (WFI instruction). git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11863 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPkg/Drivers/CpuDxe')
-rw-r--r--ArmPkg/Drivers/CpuDxe/CpuDxe.c36
-rw-r--r--ArmPkg/Drivers/CpuDxe/CpuDxe.inf4
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