2020-09-30 17:17:25 +02:00

92 lines
2.0 KiB
NASM

TITLE "System Management Bus Interupt Service Routine"
;++
;
; Copyright (c) 2001 Microsoft Corporation
;
; Module Name:
;
; smbinta.asm
;
; Abstract:
;
; This module implements the routines to handle a SMBus interrupt.
;
; Environment:
;
; Kernel mode only.
;
;--
.586p
.xlist
INCLUDE ks386.inc
INCLUDE callconv.inc
INCLUDE i386\kimacro.inc
INCLUDE i386\ix8259.inc
INCLUDE i386\mcpxsmb.inc
.list
EXTRNP HalBeginSMBusInterrupt,2,,FASTCALL
EXTRNP HalEndSystemLevelInterrupt,1,,FASTCALL
EXTRNP _KeInsertQueueDpc,3
EXTRNP _KeStallExecutionProcessor,1
EXTRN _KiPCR:DWORD
EXTRN _HalpSMBusInterruptDpc:DWORD
_TEXT SEGMENT DWORD PUBLIC 'CODE'
ASSUME DS:FLAT, ES:FLAT, SS:NOTHING, FS:NOTHING, GS:NOTHING
;++
;
; VOID
; HalpSMBusInterrupt(
; VOID
; )
;
; Routine Description:
;
; This routine is entered as the result of an interrupt generated by the
; SMBus controller.
;
; Arguments:
;
; None.
;
; Return Value:
;
; None.
;
;--
cPublicProc _HalpSMBusInterrupt, 0
ENTER_INTERRUPT
mov ecx, SMBUS_VECTOR - PRIMARY_VECTOR_BASE
mov edx, SMBUS_LEVEL
push 0 ; allocate space to save OldIrql
fstCall HalBeginSMBusInterrupt
;
; Read the status from the SMBus controller and dismiss the interrupt by writing
; the status back out the SMBus controller.
;
mov edx, XPCICFG_SMBUS_IO_REGISTER_BASE_1 + MCPX_SMBUS_HOST_STATUS_REGISTER
in al, dx
out dx, al
;
; Queue a DPC to finish processing of the transaction. Pass the SMBus status as
; the first parameter to the DPC.
;
stdCall _KeInsertQueueDpc,<offset _HalpSMBusInterruptDpc, eax, 0>
mov eax, SMBUS_VECTOR - PRIMARY_VECTOR_BASE
LEVEL_INTERRUPT_EXIT
stdENDP _HalpSMBusInterrupt
_TEXT ends
end