1#/** @file 2# 3# IDT vector entry. 4# 5# Copyright (c) 2007 - 2009, Intel Corporation. All rights reserved.<BR> 6# This program and the accompanying materials 7# are licensed and made available under the terms and conditions of the BSD License 8# which accompanies this distribution. The full text of the license may be found at 9# http://opensource.org/licenses/bsd-license.php 10# 11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13# 14#**/ 15 16 .text 17 .code32 18 19 20 .p2align 3 21 ASM_GLOBAL ASM_PFX(AsmGetVectorTemplatInfo) 22 ASM_GLOBAL ASM_PFX(AsmVectorFixup) 23/* 24; 25;----------------------------------------------------------------------- 26; Template of IDT Vector Handlers. 27; 28;----------------------------------------------------------------------- 29*/ 30VectorTemplateBase: 31 pushl %eax 32 .byte 0x6a # push #VectorNum 33VectorNum: 34 .byte 0 35 movl CommonInterruptEntry, %eax 36 jmp *%eax 37VectorTemplateEnd: 38 39 40ASM_PFX(AsmGetVectorTemplatInfo): 41 movl 4(%esp), %ecx 42 movl $VectorTemplateBase, (%ecx) 43 movl $(VectorTemplateEnd - VectorTemplateBase), %eax 44 ret 45 46ASM_PFX(AsmVectorFixup): 47 movl 8(%esp), %eax 48 movl 4(%esp), %ecx 49 movb %al, (VectorNum - VectorTemplateBase)(%ecx) 50 ret 51 52/* 53; The follow algorithm is used for the common interrupt routine. 54 55; 56; +---------------------+ <-- 16-byte aligned ensured by processor 57; + Old SS + 58; +---------------------+ 59; + Old RSP + 60; +---------------------+ 61; + RFlags + 62; +---------------------+ 63; + CS + 64; +---------------------+ 65; + RIP + 66; +---------------------+ 67; + Error Code + 68; +---------------------+ 69; + Vector Number + 70; +---------------------+ 71*/ 72 73CommonInterruptEntry: 74 cli 751: 76 jmp 1b 77 78 79 80 81