summaryrefslogtreecommitdiffstats
path: root/UefiCpuPkg
diff options
context:
space:
mode:
authorjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>2011-06-16 23:28:16 +0000
committerjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>2011-06-16 23:28:16 +0000
commit323940278e0c94d18b3824764236162e2b0dcfcf (patch)
treebc4c8e569d674e90dc1db82627341c60e526f530 /UefiCpuPkg
parent54cd17e9842d82dae3cd78686e05c4dc37a3540d (diff)
downloadedk2-323940278e0c94d18b3824764236162e2b0dcfcf.tar.gz
edk2-323940278e0c94d18b3824764236162e2b0dcfcf.tar.bz2
edk2-323940278e0c94d18b3824764236162e2b0dcfcf.zip
UefiCpuPkg/CpuDxe: Put CPU to sleep during Idle events
When the MdeModulePkg gCoreEventIdleGuid event is signaled, CpuSleep is called. This will cause the CPU to sleep until the next interrupt occurs. Signed-off-by: jljusten Reviewed-by: mdkinney Reviewed-by: rsun3 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11842 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'UefiCpuPkg')
-rw-r--r--UefiCpuPkg/CpuDxe/CpuDxe.c33
-rw-r--r--UefiCpuPkg/CpuDxe/CpuDxe.h3
-rw-r--r--UefiCpuPkg/CpuDxe/CpuDxe.inf6
3 files changed, 40 insertions, 2 deletions
diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c
index 04d76a5ceb..ad4599dab9 100644
--- a/UefiCpuPkg/CpuDxe/CpuDxe.c
+++ b/UefiCpuPkg/CpuDxe/CpuDxe.c
@@ -1155,6 +1155,25 @@ InitInterruptDescriptorTable (
/**
+ 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 ();
+}
+
+
+/**
Initialize the state information for the CPU Architectural Protocol.
@param ImageHandle Image handle this driver.
@@ -1173,6 +1192,7 @@ InitializeCpu (
)
{
EFI_STATUS Status;
+ EFI_EVENT IdleLoopEvent;
//
// Make sure interrupts are disabled
@@ -1204,6 +1224,19 @@ InitializeCpu (
//
RefreshGcdMemoryAttributes ();
+ //
+ // 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/UefiCpuPkg/CpuDxe/CpuDxe.h b/UefiCpuPkg/CpuDxe/CpuDxe.h
index d42f82e0bd..e36cf1c82c 100644
--- a/UefiCpuPkg/CpuDxe/CpuDxe.h
+++ b/UefiCpuPkg/CpuDxe/CpuDxe.h
@@ -1,7 +1,7 @@
/** @file
CPU DXE Module.
- Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2008 - 2011, Intel Corporation. All rights reserved.<BR>
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
@@ -28,6 +28,7 @@
#include <Library/MemoryAllocationLib.h>
#include <Library/DebugLib.h>
#include <Library/MtrrLib.h>
+#include <Guid/IdleLoopEvent.h>
//
//
diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.inf b/UefiCpuPkg/CpuDxe/CpuDxe.inf
index 7790d3505d..0c70b3276d 100644
--- a/UefiCpuPkg/CpuDxe/CpuDxe.inf
+++ b/UefiCpuPkg/CpuDxe/CpuDxe.inf
@@ -2,7 +2,7 @@
#
# Component description file for simple CPU driver
#
-# Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2008 - 2011, Intel Corporation. All rights reserved.<BR>
# 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
@@ -24,6 +24,7 @@
[Packages]
MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
UefiCpuPkg/UefiCpuPkg.dec
[LibraryClasses]
@@ -59,6 +60,9 @@
[Protocols]
gEfiCpuArchProtocolGuid
+[Guids]
+ gIdleLoopEventGuid ## CONSUMES ## GUID
+
[Depex]
TRUE