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.
78 lines
1.7 KiB
78 lines
1.7 KiB
//#pragma comment(exestr, "$Header: /usr4/winnt/SOURCES/ddk35/src/hal/halsni/mips/RCS/xxidle.s,v 1.5 1995/04/07 10:04:26 flo Exp $")
|
|
// TITLE("Processor Idle")
|
|
//++
|
|
//
|
|
// Copyright (c) 1994 Microsoft Corporation
|
|
//
|
|
// Module Name:
|
|
//
|
|
// xxidle.s
|
|
//
|
|
// Abstract:
|
|
//
|
|
// This module implements system platform dependent power management
|
|
// support.
|
|
//
|
|
// Environment:
|
|
//
|
|
// Kernel mode only.
|
|
//
|
|
// Revision History:
|
|
//
|
|
//--
|
|
|
|
#include "halmips.h"
|
|
|
|
SBTTL("Processor Idle")
|
|
//++
|
|
//
|
|
// 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 IE in PSR clear. This routine
|
|
// must do any power management enabling necessary, set the IE
|
|
// bit in PSR, then either return or wait for an interrupt.
|
|
//
|
|
// Arguments:
|
|
//
|
|
// None.
|
|
//
|
|
// Return Value:
|
|
//
|
|
// None.
|
|
//
|
|
//--
|
|
|
|
LEAF_ENTRY(HalProcessorIdle)
|
|
|
|
//
|
|
// Perform power management enabling.
|
|
//
|
|
|
|
.set noreorder
|
|
.set noat
|
|
mfc0 v0,psr // get current PSR
|
|
nop // fill
|
|
or v0,v0,1 << PSR_IE // set interrupt enable.
|
|
mtc0 v0,psr // enable interrupts
|
|
|
|
.set at
|
|
.set reorder
|
|
|
|
//
|
|
// Wait for an interrupt if supported.
|
|
//
|
|
|
|
j HalpCheckSpuriousInt // return
|
|
|
|
.end HalProcessorIdle
|
|
|