Publish the files
This commit is contained in:
105
Sources/Platform/EFI/EfiAsm.asm
Normal file
105
Sources/Platform/EFI/EfiAsm.asm
Normal file
@@ -0,0 +1,105 @@
|
||||
;
|
||||
; @file EfiAsm.asm
|
||||
;
|
||||
; @brief EFI specific MASM-written functions.
|
||||
;
|
||||
; @author Satoshi Tanda
|
||||
;
|
||||
; @copyright Copyright (c) 2020 - , Satoshi Tanda. All rights reserved.
|
||||
;
|
||||
include AsmCommon.inc
|
||||
.code
|
||||
|
||||
extern HandleHostException : proc
|
||||
|
||||
;
|
||||
; The index to track an interrupt number for generating AsmDefaultExceptionHandlers.
|
||||
;
|
||||
Index = 0
|
||||
|
||||
;
|
||||
; Generates the default exception handler code for the given interrupt/exception
|
||||
; number. The generated code assumes that the interrupt/exception does not push
|
||||
; error code.
|
||||
;
|
||||
; Index is incremented whenever this macro is used.
|
||||
;
|
||||
INTERRUPT_HANDLER macro InterruptNumber
|
||||
push 0 ; Push dummy error code for consistent stack layout.
|
||||
push InterruptNumber
|
||||
jmp AsmCommonExceptionHandler
|
||||
Index = Index + 1
|
||||
endm
|
||||
|
||||
;
|
||||
; Generates the default exception handler code for the given interrupt/exception
|
||||
; number. The generated code assumes that the interrupt/exception pushes error code.
|
||||
;
|
||||
; Index is incremented whenever this macro is used.
|
||||
;
|
||||
INTERRUPT_HANDLER_WITH_CODE macro InterruptNumber
|
||||
nop ; Error code is expected to be pushed by the processor.
|
||||
nop
|
||||
push InterruptNumber
|
||||
jmp AsmCommonExceptionHandler
|
||||
Index = Index + 1
|
||||
endm
|
||||
|
||||
;
|
||||
; @brief The default host exception handlers.
|
||||
;
|
||||
; @details This is the function containing actually 256 stub functions generated
|
||||
; with the INTERRUPT_HANDLER and INTERRUPT_HANDLER_WITH_CODE macros. Each function
|
||||
; works as a hendler of the corresponding interrupt/exception in the host.
|
||||
;
|
||||
AsmDefaultExceptionHandlers proc
|
||||
repeat 8
|
||||
INTERRUPT_HANDLER Index ; INT0-7
|
||||
endm
|
||||
|
||||
INTERRUPT_HANDLER_WITH_CODE Index ; INT8
|
||||
INTERRUPT_HANDLER Index ; INT9
|
||||
|
||||
repeat 5
|
||||
INTERRUPT_HANDLER_WITH_CODE Index ; INT10-14
|
||||
endm
|
||||
|
||||
repeat 2
|
||||
INTERRUPT_HANDLER Index ; INT15-16
|
||||
endm
|
||||
|
||||
INTERRUPT_HANDLER_WITH_CODE Index ; INT17
|
||||
|
||||
repeat 238
|
||||
INTERRUPT_HANDLER Index ; INT18-255
|
||||
endm
|
||||
AsmDefaultExceptionHandlers endp
|
||||
|
||||
;
|
||||
; @brief The common logic for the exception handlers.
|
||||
;
|
||||
; @details This function pushes register values into the stack and calls the
|
||||
; high-level handler written in C.
|
||||
;
|
||||
AsmCommonExceptionHandler proc
|
||||
PUSHAQ
|
||||
mov rcx, rsp
|
||||
sub rsp, 20h
|
||||
call HandleHostException
|
||||
add rsp, 20h
|
||||
POPAQ
|
||||
add rsp, 10h ; Remove the error code and interrupt number.
|
||||
iretq
|
||||
AsmCommonExceptionHandler endp
|
||||
|
||||
;
|
||||
; @brief The NMI handler for the host.
|
||||
;
|
||||
; @details This implementation is incomplete. When NMI occurs while the host is
|
||||
; executed, it should be injected to the guest.
|
||||
;
|
||||
AsmNmiExceptionHandler proc
|
||||
iretq
|
||||
AsmNmiExceptionHandler endp
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user