mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.4 KiB
85 lines
1.4 KiB
/*++
|
|
TITLE("Processor Idle")
|
|
|
|
|
|
Copyright (c) 1994 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
pxidle.c
|
|
|
|
abstract:
|
|
|
|
This module implements system platform dependent power management
|
|
support.
|
|
|
|
Author:
|
|
|
|
Jim Wooldridge
|
|
|
|
Environment:
|
|
|
|
Kernel mode only.
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "halp.h"
|
|
#include "pxmp.h"
|
|
|
|
|
|
VOID
|
|
HalProcessorIdle(
|
|
VOID
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This function is called when the current processor is idle with
|
|
interrupts disabled. There is no thread active and there are no
|
|
DPCs to process. Therefore, power can be switched to a standby
|
|
mode until the the next interrupt occurs on the current processor.
|
|
|
|
N.B. This routine is entered with EE in MSR clear. This routine
|
|
must do any power management enabling necessary, set the EE
|
|
bit in MSR, then either return or wait for an interrupt.
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
//
|
|
// If this processor is newly IDLE, drop the MPIC TaskPriority register
|
|
// for this processor to 0 to make it a desirable target for interrupts.
|
|
//
|
|
|
|
if ( HALPCR->HardPriority ) {
|
|
HALPCR->MpicProcessorBase->TaskPriority = 0;
|
|
HALPCR->HardPriority = 0;
|
|
}
|
|
|
|
#ifdef POWER_MANAGEMENT
|
|
|
|
if(HalpProcessorIdleEx != NULL) {
|
|
HalpProcessorIdleEx();
|
|
} else {
|
|
HalpProcessorIdle();
|
|
}
|
|
|
|
#else
|
|
|
|
HalpEnableInterrupts();
|
|
|
|
#endif // POWER_MANAGEMENT
|
|
}
|