80 lines
1.6 KiB
ArmAsm
80 lines
1.6 KiB
ArmAsm
// TITLE("Processor Idle")
|
||
//++
|
||
//
|
||
// Copyright (c) 1994 Microsoft Corporation
|
||
//
|
||
// Module Name:
|
||
//
|
||
// xxidle.s
|
||
//
|
||
// Abstract:
|
||
//
|
||
// This module implements system platform dependent power management
|
||
// support.
|
||
//
|
||
// Author:
|
||
//
|
||
// David N. Cutler (davec) 5-Mar-1994
|
||
//
|
||
// 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 ra // return
|
||
|
||
.end HalProcessorIdle
|