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
This commit is contained in:
jljusten 2011-06-16 23:28:16 +00:00
parent 54cd17e984
commit 323940278e
3 changed files with 40 additions and 2 deletions

View File

@ -1154,6 +1154,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. Initialize the state information for the CPU Architectural Protocol.
@ -1173,6 +1192,7 @@ InitializeCpu (
) )
{ {
EFI_STATUS Status; EFI_STATUS Status;
EFI_EVENT IdleLoopEvent;
// //
// Make sure interrupts are disabled // Make sure interrupts are disabled
@ -1204,6 +1224,19 @@ InitializeCpu (
// //
RefreshGcdMemoryAttributes (); 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; return Status;
} }

View File

@ -1,7 +1,7 @@
/** @file /** @file
CPU DXE Module. 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 This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -28,6 +28,7 @@
#include <Library/MemoryAllocationLib.h> #include <Library/MemoryAllocationLib.h>
#include <Library/DebugLib.h> #include <Library/DebugLib.h>
#include <Library/MtrrLib.h> #include <Library/MtrrLib.h>
#include <Guid/IdleLoopEvent.h>
// //
// //

View File

@ -2,7 +2,7 @@
# #
# Component description file for simple CPU driver # 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 # This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # 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 # which accompanies this distribution. The full text of the license may be found at
@ -24,6 +24,7 @@
[Packages] [Packages]
MdePkg/MdePkg.dec MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
UefiCpuPkg/UefiCpuPkg.dec UefiCpuPkg/UefiCpuPkg.dec
[LibraryClasses] [LibraryClasses]
@ -59,6 +60,9 @@
[Protocols] [Protocols]
gEfiCpuArchProtocolGuid gEfiCpuArchProtocolGuid
[Guids]
gIdleLoopEventGuid ## CONSUMES ## GUID
[Depex] [Depex]
TRUE TRUE