blob: 1bf044c0f47104c11a6dbf02d11a295aca3747e3 (
plain) (
tree)
|
|
title "Wyse7000i NMI Handler"
;++
;
; Copyright (c) 1989 Microsoft Corporation
;
; Module Name:
;
; wynmi.asm
;
; Abstract:
;
; Provides Wyse7000 x86 NMI handler
;
; Author:
;
; Environment:
;
; Kernel mode only.
;
; Revision History:
;
.386p
.xlist
include hal386.inc
include i386\wy7000mp.inc
include callconv.inc
extrn ReadMyCpuReg:NEAR
extrn WriteMyCpuReg:NEAR
_TEXT SEGMENT DWORD PUBLIC 'CODE'
ASSUME DS:FLAT, ES:FLAT, SS:NOTHING, FS:NOTHING, GS:NOTHING
;++
; NTSTATUS
; HalHandleNMI(
; IN OUT PVOID NmiInfo
; )
;
; Routine Description:
;
; Called DURING an NMI. The system will BugCheck when an NMI occurs.
; This function can return the proper bugcheck code, bugcheck itself,
; or return success which will cause the system to iret from the nmi.
;
; This function is called during an NMI - no system services are available.
; In addition, you don't want to touch any spinlock which is normally
; used since we may have been interrupted while owning it, etc, etc...
;
;Arguments:
;
; NmiInfo - Pointer to NMI information structure (TBD)
; - NULL means no NMI information structure was passed
;
;Return Value:
;
; BugCheck code
;
;--
cPublicProc _HalHandleNMI,1
push BCU_STAT1
call ReadMyCpuReg
test al, NMISRC_EXT
jnz short WyseDebugNmiButtonPressed
;
; Decode other Wyse7000 NMI causes here...
;
mov eax, MPFW_FuncTable ;point to firmware entry points
call dword ptr [eax][fnOS_Panic * 4] ;display NMI code to user
mov eax, 0f002h ; SYSTEM_FATAL_TRAP
stdRET _HalHandleNMI
public WyseDebugNmiButtonPressed
WyseDebugNmiButtonPressed:
;
; Recessed NMI button on back of CPU card was pressed
; Go to the debugger, then allow the system to continue
;
int 3
and eax, NOT NMISRC_EXT
push eax
push BCU_STAT1
call WriteMyCpuReg
;
; Re-enable NMIs
;
push BCU_ERRCTLR
call ReadMyCpuReg
or al, NMI_ENB ;this bit was cleared by the NMI
push eax
push BCU_ERRCTLR
call WriteMyCpuReg
xor eax, eax ; STATUS_SUCCESS
stdRET _HalHandleNMI
stdENDP _HalHandleNMI
_TEXT ends
end
|