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.
@@ -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;
}