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.
108 lines
2.3 KiB
108 lines
2.3 KiB
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
|