90 lines
1.9 KiB
NASM
90 lines
1.9 KiB
NASM
title "Hal Processor Idle"
|
|
;++
|
|
;
|
|
;Copyright (c) 1991 Microsoft Corporation
|
|
;
|
|
;Module Name:
|
|
;
|
|
; ixidle.asm
|
|
;
|
|
;Abstract:
|
|
;
|
|
;
|
|
;Author:
|
|
;
|
|
;
|
|
;Revision History:
|
|
;
|
|
;--
|
|
|
|
.386p
|
|
.xlist
|
|
include hal386.inc
|
|
include callconv.inc ; calling convention macros
|
|
include i386\kimacro.inc
|
|
include mac386.inc
|
|
.list
|
|
|
|
_TEXT$01 SEGMENT DWORD PUBLIC 'CODE'
|
|
ASSUME DS:FLAT, ES:FLAT, SS:NOTHING, FS:NOTHING, GS:NOTHING
|
|
|
|
page ,132
|
|
subttl "HalProcessorIdle"
|
|
;++
|
|
;
|
|
; VOID
|
|
; HalProcessorIdle(
|
|
; VOID
|
|
; )
|
|
;
|
|
; Routine Description:
|
|
;
|
|
; This function is called when the current processor is idle.
|
|
;
|
|
; This function is called with interrupts disabled, and the processor
|
|
; is idle until it receives an interrupt. The does not need to return
|
|
; until an interrupt is received by the current processor.
|
|
;
|
|
; This is the lowest level of processor idle. It occurs frequently,
|
|
; and this function (alone) should not put the processor into a
|
|
; power savings mode which requeres large amount of time to enter & exit.
|
|
;
|
|
; Return Value:
|
|
;
|
|
;--
|
|
|
|
cPublicProc _HalProcessorIdle, 0
|
|
cPublicFpo 0,0
|
|
|
|
;
|
|
; the following code sequence "sti-halt" puts the processor
|
|
; into a Halted state, with interrupts enabled, without processing
|
|
; an interrupt before halting. The STI instruction has a delay
|
|
; slot such that it does not take effect until after the instruction
|
|
; following it - this has the effect of HALTing without allowing
|
|
; a possible interrupt and then enabling interrupts while HALTed.
|
|
;
|
|
|
|
;
|
|
; On an MP hal we don't stop the processor, since that causes
|
|
; the SNOOP to slow down as well
|
|
;
|
|
|
|
sti
|
|
|
|
ifdef NT_UP
|
|
hlt
|
|
endif
|
|
|
|
;
|
|
; Now return to the system. If there's still no work, then it
|
|
; will call us back to halt again.
|
|
;
|
|
|
|
stdRET _HalProcessorIdle
|
|
|
|
stdENDP _HalProcessorIdle
|
|
|
|
_TEXT$01 ends
|
|
end
|