]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Core/DxeIplPeim/Ia32/IdtVectorAsm.S
43359f6f0c783dbcaae16a8e7c0119836c7a145e
[mirror_edk2.git] / MdeModulePkg / Core / DxeIplPeim / Ia32 / IdtVectorAsm.S
1 #/** @file
2 #
3 # IDT vector entry.
4 #
5 # Copyright (c) 2007 - 2009, Intel Corporation. <BR>
6 # All rights reserved. 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 */
30 VectorTemplateBase:
31 pushl %eax
32 .byte 0x6a # push #VectorNum
33 VectorNum:
34 .byte 0
35 movl CommonInterruptEntry, %eax
36 jmp *%eax
37 VectorTemplateEnd:
38
39
40 ASM_PFX(AsmGetVectorTemplatInfo):
41 movl 4(%esp), %ecx
42 movl $VectorTemplateBase, (%ecx)
43 movl $(VectorTemplateEnd - VectorTemplateBase), %eax
44 ret
45
46 ASM_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
73 CommonInterruptEntry:
74 cli
75 1:
76 jmp 1b
77
78
79
80