94 lines
1.8 KiB
NASM
94 lines
1.8 KiB
NASM
title "Trap Processing"
|
|
;++
|
|
;
|
|
; Copyright (c) 1989 Microsoft Corporation
|
|
;
|
|
; Module Name:
|
|
;
|
|
; int.asm
|
|
;
|
|
; Abstract:
|
|
;
|
|
; This module implements the code necessary to field and process i386
|
|
; interrupt.
|
|
;
|
|
; Author:
|
|
;
|
|
; Shie-Lin Tzong (shielint) 8-Jan-1990
|
|
;
|
|
; Environment:
|
|
;
|
|
; Kernel mode only.
|
|
;
|
|
; Revision History:
|
|
;
|
|
;--
|
|
|
|
.386p
|
|
.xlist
|
|
include ks386.inc
|
|
include i386\kimacro.inc
|
|
include callconv.inc
|
|
.list
|
|
|
|
;
|
|
; Interrupt flag bit maks for EFLAGS
|
|
;
|
|
|
|
EFLAGS_IF equ 200H
|
|
EFLAGS_SHIFT equ 9
|
|
|
|
_TEXT SEGMENT DWORD PUBLIC 'CODE'
|
|
ASSUME DS:FLAT, ES:FLAT, SS:FLAT, FS:NOTHING, GS:NOTHING
|
|
|
|
; NOTE This routine is never actually called on standard x86 hardware,
|
|
; because passive level doesn't actually exist. It's here to
|
|
; fill out the portable skeleton.
|
|
;
|
|
; The following code is called when a passive release occurs and there is
|
|
; no interrupt to process.
|
|
;
|
|
|
|
cPublicProc _KiPassiveRelease ,0
|
|
stdRET _KiPassiveRelease ; cReturn
|
|
stdENDP _KiPassiveRelease
|
|
|
|
|
|
page ,132
|
|
subttl "Disable Processor Interrupts"
|
|
;++
|
|
;
|
|
; BOOLEAN
|
|
; KeDisableInterrupts(
|
|
; VOID
|
|
; )
|
|
;
|
|
; Routine Description:
|
|
;
|
|
; This routine disables interrupts at the processor level. It does not
|
|
; edit the PICS or adjust IRQL, it is for use in the debugger only.
|
|
;
|
|
; Arguments:
|
|
;
|
|
; None
|
|
;
|
|
; Return Value:
|
|
;
|
|
; (eax) = !0 if interrupts were on, 0 if they were off
|
|
;
|
|
;--
|
|
|
|
cPublicProc _KeDisableInterrupts ,0
|
|
cPublicFpo 0, 0
|
|
pushfd
|
|
pop eax
|
|
and eax,EFLAGS_IF ; (eax) = the interrupt bit
|
|
shr eax,EFLAGS_SHIFT ; low bit of (eax) == interrupt bit
|
|
cli
|
|
stdRET _KeDisableInterrupts
|
|
|
|
stdENDP _KeDisableInterrupts
|
|
|
|
_TEXT ends
|
|
end
|