exectos/xtoskrnl/po/idle.c

103 lines
2.4 KiB
C

/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/po/idle.c
* DESCRIPTION: Processor idle functionality support
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
*/
#include <xtos.h>
/**
* Initializes Processor Control Block's (PRCB) power state structures.
*
* @param Prcb
* Supplies a pointer to the PRCB being initialized.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTAPI
VOID
PoInitializeProcessorControlBlock(IN OUT PKPROCESSOR_CONTROL_BLOCK Prcb)
{
/* Zero memory */
RtlZeroMemory(&Prcb->PowerState, sizeof(Prcb->PowerState));
/* Initialize default power state */
Prcb->PowerState.Idle0TimeLimit = 0xFFFFFFFF;
Prcb->PowerState.CurrentThrottle = 100;
Prcb->PowerState.CurrentThrottleIndex = 0;
Prcb->PowerState.IdleFunction = PopIdle0Function;
/* Initialize DPC and Timer */
KeInitializeDpc(&Prcb->PowerState.PerfDpc, PopPerfIdleDpc, Prcb);
KeSetTargetProcessorDpc(&Prcb->PowerState.PerfDpc, Prcb->CpuNumber);
KeInitializeTimer(&Prcb->PowerState.PerfTimer, SynchronizationTimer);
}
/**
* Processor idle loop routine.
*
* @param PowerState
* Supplies a pointer to the structere containing current processor power state.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTFASTCALL
VOID
PopIdle0Function(IN PPROCESSOR_POWER_STATE PowerState)
{
UNIMPLEMENTED;
}
/**
* Switches CPU between different performance levels.
*
* @param PowerState
* Supplies a pointer to the structure containing IDLE processor power state.
*
* @return This routine does not return any value.
*
* @since NT 5.1
*/
XTAPI
VOID
PopPerfIdle(PPROCESSOR_POWER_STATE PowerState)
{
UNIMPLEMENTED;
}
/**
* Checks if CPU is running at the maximum (performance) frequency.
*
* @param Dpc
* Supplies a pointer to the DPC object.
*
* @param DeferredContext
* Supplies a pointer to memory area containing current CPU's PRCB.
*
* @param SystemArgument1
* Supplies a pointer to an unused system argument.
*
* @param SystemArgument2
* Supplies a pointer to an unused system argument.
*
* @return This routine does not return any value.
*
* @since NT 5.1
*/
XTAPI
VOID
PopPerfIdleDpc(IN PKDPC Dpc,
IN PVOID DeferredContext,
IN PVOID SystemArgument1,
IN PVOID SystemArgument2)
{
UNIMPLEMENTED;
}