2020-09-30 17:12:29 +02:00

109 lines
2.3 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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