| ;/** @file | |
| ; | |
| ; IDT vector entry. | |
| ; | |
| ; Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR> | |
| ; SPDX-License-Identifier: BSD-2-Clause-Patent | |
| ; | |
| ;**/ | |
| SECTION .text | |
| ; | |
| ;------------------------------------------------------------------------------ | |
| ; Generic IDT Vector Handlers for the Host. | |
| ; | |
| ;------------------------------------------------------------------------------ | |
| ALIGN 8 | |
| global ASM_PFX(AsmGetVectorTemplatInfo) | |
| global ASM_PFX(AsmVectorFixup) | |
| @VectorTemplateBase: | |
| push eax | |
| db 0x6a ; push #VectorNumber | |
| @VectorNum: | |
| db 0 | |
| mov eax, CommonInterruptEntry | |
| jmp eax | |
| @VectorTemplateEnd: | |
| global ASM_PFX(AsmGetVectorTemplatInfo) | |
| ASM_PFX(AsmGetVectorTemplatInfo): | |
| mov ecx, [esp + 4] | |
| mov dword [ecx], @VectorTemplateBase | |
| mov eax, (@VectorTemplateEnd - @VectorTemplateBase) | |
| ret | |
| global ASM_PFX(AsmVectorFixup) | |
| ASM_PFX(AsmVectorFixup): | |
| mov eax, dword [esp + 8] | |
| mov ecx, [esp + 4] | |
| mov [ecx + (@VectorNum - @VectorTemplateBase)], al | |
| ret | |
| ;---------------------------------------; | |
| ; CommonInterruptEntry ; | |
| ;---------------------------------------; | |
| ; The follow algorithm is used for the common interrupt routine. | |
| ; | |
| ; +---------------------+ <-- 16-byte aligned ensured by processor | |
| ; + Old SS + | |
| ; +---------------------+ | |
| ; + Old RSP + | |
| ; +---------------------+ | |
| ; + RFlags + | |
| ; +---------------------+ | |
| ; + CS + | |
| ; +---------------------+ | |
| ; + RIP + | |
| ; +---------------------+ | |
| ; + Error Code + | |
| ; +---------------------+ | |
| ; + Vector Number + | |
| ; +---------------------+ | |
| CommonInterruptEntry: | |
| cli | |
| jmp $ | |