#------------------------------------------------------------------------------\r
#*\r
-#* Copyright 2006, Intel Corporation \r
-#* All rights reserved. This program and the accompanying materials \r
+#* Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
+#* This program and the accompanying materials \r
#* are licensed and made available under the terms and conditions of the BSD License \r
#* which accompanies this distribution. The full text of the license may be found at \r
#* http://opensource.org/licenses/bsd-license.php \r
#EXTERN ExceptionHandler: NEAR\r
#EXTERN mTimerVector: DWORD\r
\r
- .data\r
- ASM_GLOBAL ASM_PFX(mExceptionCodeSize)\r
+ .data\r
+ ASM_GLOBAL ASM_PFX(mExceptionCodeSize)\r
ASM_PFX(mExceptionCodeSize): .long 9\r
\r
- .text\r
- ASM_GLOBAL ASM_PFX(InitDescriptor)\r
+ .text\r
+ ASM_GLOBAL ASM_PFX(InitDescriptor)\r
\r
ASM_PFX(InitDescriptor):\r
movq $GDT_BASE,%rax # EAX=PHYSICAL address of gdt\r
# UINTN Vector,\r
# VOID (*Handler)(VOID)\r
# )\r
- ASM_GLOBAL ASM_PFX(InstallInterruptHandler)\r
+ ASM_GLOBAL ASM_PFX(InstallInterruptHandler)\r
ASM_PFX(InstallInterruptHandler):\r
# Vector:DWORD @ 4(%esp)\r
# Handler:DWORD @ 8(%esp)\r
pop %rbx\r
ret\r
\r
- .macro JmpCommonIdtEntry\r
+ .macro JmpCommonIdtEntry\r
# jmp commonIdtEntry - this must be hand coded to keep the assembler from\r
# using a 8 bit reletive jump when the entries are\r
# within 255 bytes of the common entry. This must\r
# of entry points...\r
.byte 0xe9 # jmp 16 bit reletive \r
.long commonIdtEntry - . - 4 # offset to jump to\r
- .endm\r
+ .endm\r
\r
- .align 2\r
- ASM_GLOBAL ASM_PFX(SystemExceptionHandler)\r
+ .p2align 1\r
+ ASM_GLOBAL ASM_PFX(SystemExceptionHandler)\r
ASM_PFX(SystemExceptionHandler):\r
INT0:\r
push $0x0 # push error code place holder on the stack\r
JmpCommonIdtEntry\r
\r
INTUnknown:\r
- .rept (32 - 20)\r
+ # The following segment repeats (32 - 20) times:\r
+ # macro .rept isn't used here because Apple GAS compiler doesn't support it.\r
+ # No. 1\r
push $0x0 # push error code place holder on the stack\r
# push xxh # push vector number\r
.byte 0x6a\r
.byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
JmpCommonIdtEntry\r
- .endr\r
+ # No. 2\r
+ push $0x0 # push error code place holder on the stack\r
+# push xxh # push vector number\r
+ .byte 0x6a\r
+ .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
+ JmpCommonIdtEntry\r
+ # No. 3\r
+ push $0x0 # push error code place holder on the stack\r
+# push xxh # push vector number\r
+ .byte 0x6a\r
+ .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
+ JmpCommonIdtEntry\r
+ # No. 4\r
+ push $0x0 # push error code place holder on the stack\r
+# push xxh # push vector number\r
+ .byte 0x6a\r
+ .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
+ JmpCommonIdtEntry\r
+ # No. 5\r
+ push $0x0 # push error code place holder on the stack\r
+# push xxh # push vector number\r
+ .byte 0x6a\r
+ .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
+ JmpCommonIdtEntry\r
+ # No. 6\r
+ push $0x0 # push error code place holder on the stack\r
+# push xxh # push vector number\r
+ .byte 0x6a\r
+ .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
+ JmpCommonIdtEntry\r
+ # No. 7\r
+ push $0x0 # push error code place holder on the stack\r
+# push xxh # push vector number\r
+ .byte 0x6a\r
+ .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
+ JmpCommonIdtEntry\r
+ # No. 8\r
+ push $0x0 # push error code place holder on the stack\r
+# push xxh # push vector number\r
+ .byte 0x6a\r
+ .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
+ JmpCommonIdtEntry\r
+ # No. 9\r
+ push $0x0 # push error code place holder on the stack\r
+# push xxh # push vector number\r
+ .byte 0x6a\r
+ .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
+ JmpCommonIdtEntry\r
+ # No. 10\r
+ push $0x0 # push error code place holder on the stack\r
+# push xxh # push vector number\r
+ .byte 0x6a\r
+ .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
+ JmpCommonIdtEntry\r
+ # No. 11\r
+ push $0x0 # push error code place holder on the stack\r
+# push xxh # push vector number\r
+ .byte 0x6a\r
+ .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
+ JmpCommonIdtEntry\r
+ # No. 12\r
+ push $0x0 # push error code place holder on the stack\r
+# push xxh # push vector number\r
+ .byte 0x6a\r
+ .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
+ JmpCommonIdtEntry\r
+\r
\r
- ASM_GLOBAL ASM_PFX(SystemTimerHandler)\r
+ ASM_GLOBAL ASM_PFX(SystemTimerHandler)\r
ASM_PFX(SystemTimerHandler):\r
push $0\r
push $ASM_PFX(mTimerVector)\r
addq $(4*8+8), %rsp\r
\r
cli\r
- \r
## UINT64 ExceptionData#\r
addq $8, %rsp\r
\r
# data\r
##############################################################################\r
\r
- .data\r
- .align 0x10\r
+ .data\r
\r
-gdtr: .short GDT_END - GDT_BASE - 1 # GDT limit\r
- .quad 0 # (GDT base gets set above)\r
+gdtr: .short GDT_END - GDT_BASE - 1 # GDT limit\r
+ .quad 0 # (GDT base gets set above)\r
##############################################################################\r
# global descriptor table (GDT)\r
##############################################################################\r
\r
- .align 0x10\r
+ .p2align 4 # make GDT 16-byte align\r
\r
GDT_BASE:\r
# null descriptor\r
-NULL_SEL = .-GDT_BASE\r
- .short 0 # limit 15:0\r
- .short 0 # base 15:0\r
- .byte 0 # base 23:16\r
- .byte 0 # type\r
- .byte 0 # limit 19:16, flags\r
- .byte 0 # base 31:24\r
+NULL_SEL = .-GDT_BASE # Selector [0x0]\r
+ .short 0 # limit 15:0\r
+ .short 0 # base 15:0\r
+ .byte 0 # base 23:16\r
+ .byte 0 # type\r
+ .byte 0 # limit 19:16, flags\r
+ .byte 0 # base 31:24\r
\r
# linear data segment descriptor\r
-LINEAR_SEL = .-GDT_BASE\r
+LINEAR_SEL = .-GDT_BASE # Selector [0x8]\r
.short 0x0FFFF # limit 0xFFFFF\r
.short 0 # base 0\r
.byte 0\r
.byte 0\r
\r
# linear code segment descriptor\r
-LINEAR_CODE_SEL = .-GDT_BASE\r
+LINEAR_CODE_SEL = .-GDT_BASE # Selector [0x10]\r
.short 0x0FFFF # limit 0xFFFFF\r
.short 0 # base 0\r
.byte 0\r
- .byte 0x09A # present, ring 0, data, expand-up, writable\r
+ .byte 0x09A # present, ring 0, code, expand-up, writable\r
.byte 0x0CF # page-granular, 32-bit\r
.byte 0\r
\r
# system data segment descriptor\r
-SYS_DATA_SEL = .-GDT_BASE\r
+SYS_DATA_SEL = .-GDT_BASE # Selector [0x18]\r
.short 0x0FFFF # limit 0xFFFFF\r
.short 0 # base 0\r
.byte 0\r
.byte 0\r
\r
# system code segment descriptor\r
-SYS_CODE_SEL = .-GDT_BASE\r
+SYS_CODE_SEL = .-GDT_BASE # Selector [0x20]\r
.short 0x0FFFF # limit 0xFFFFF\r
.short 0 # base 0\r
.byte 0\r
- .byte 0x09A # present, ring 0, data, expand-up, writable\r
+ .byte 0x09A # present, ring 0, code, expand-up, writable\r
.byte 0x0CF # page-granular, 32-bit\r
.byte 0\r
\r
# spare segment descriptor\r
-SPARE3_SEL = .-GDT_BASE\r
- .short 0 # limit 0xFFFFF\r
+SPARE3_SEL = .-GDT_BASE # Selector [0x28]\r
+ .short 0\r
+ .short 0\r
+ .byte 0\r
+ .byte 0\r
+ .byte 0\r
+ .byte 0\r
+\r
+# system data segment descriptor\r
+SYS_DATA64_SEL = .-GDT_BASE # Selector [0x30]\r
+ .short 0x0FFFF # limit 0xFFFFF\r
.short 0 # base 0\r
.byte 0\r
- .byte 0 # present, ring 0, data, expand-up, writable\r
- .byte 0 # page-granular, 32-bit\r
+ .byte 0x092 # present, ring 0, data, expand-up, writable\r
+ .byte 0x0CF # page-granular, 32-bit\r
.byte 0\r
\r
-# spare segment descriptor\r
-SPARE4_SEL = .-GDT_BASE\r
- .short 0 # limit 0xFFFFF\r
+# system code segment descriptor\r
+SYS_CODE64_SEL = .-GDT_BASE # Selector [0x38]\r
+ .short 0x0FFFF # limit 0xFFFFF\r
.short 0 # base 0\r
.byte 0\r
- .byte 0 # present, ring 0, data, expand-up, writable\r
- .byte 0 # page-granular, 32-bit\r
+ .byte 0x09A # present, ring 0, code, expand-up, writable\r
+ .byte 0x0AF # page-granular, 64-bit\r
.byte 0\r
\r
# spare segment descriptor\r
-SPARE5_SEL = .-GDT_BASE\r
- .short 0 # limit 0xFFFFF\r
- .short 0 # base 0\r
+SPARE4_SEL = .-GDT_BASE # Selector [0x40]\r
+ .short 0\r
+ .short 0\r
+ .byte 0\r
+ .byte 0\r
.byte 0\r
- .byte 0 # present, ring 0, data, expand-up, writable\r
- .byte 0 # page-granular, 32-bit\r
.byte 0\r
\r
GDT_END:\r
\r
- .align 0x4\r
-\r
-\r
-\r
-idtr: .short IDT_END - IDT_BASE - 1 # IDT limit\r
- .quad 0 # (IDT base gets set above)\r
+idtr: .short IDT_END - IDT_BASE - 1 # IDT limit\r
+ .quad 0 # (IDT base gets set above)\r
##############################################################################\r
# interrupt descriptor table (IDT)\r
#\r
# for convenience.\r
##############################################################################\r
\r
-#idt_tag .byte "IDT",0 \r
- .align 0x4\r
+ .p2align 3 # make IDT 8-byte align\r
\r
IDT_BASE:\r
# divide by zero (INT 0)\r
DIV_ZERO_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# debug exception (INT 1)\r
DEBUG_EXCEPT_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# NMI (INT 2)\r
NMI_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# soft breakpoint (INT 3)\r
BREAKPOINT_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# overflow (INT 4)\r
OVERFLOW_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# bounds check (INT 5)\r
BOUNDS_CHECK_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# invalid opcode (INT 6)\r
INVALID_OPCODE_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# device not available (INT 7)\r
DEV_NOT_AVAIL_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# double fault (INT 8)\r
DOUBLE_FAULT_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# Coprocessor segment overrun - reserved (INT 9)\r
RSVD_INTR_SEL1 = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# invalid TSS (INT 0ah)\r
INVALID_TSS_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# segment not present (INT 0bh)\r
SEG_NOT_PRESENT_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# stack fault (INT 0ch)\r
STACK_FAULT_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# general protection (INT 0dh)\r
GP_FAULT_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# page fault (INT 0eh)\r
PAGE_FAULT_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# Intel reserved - do not use (INT 0fh)\r
RSVD_INTR_SEL2 = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# floating point error (INT 0x10)\r
FLT_POINT_ERR_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# alignment check (INT 0x11)\r
ALIGNMENT_CHECK_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# machine check (INT 0x12)\r
MACHINE_CHECK_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# SIMD floating-point exception (INT 0x13)\r
SIMD_EXCEPTION_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
- .rept (32 - 20)\r
+ # The following segment repeats (32 - 20) times:\r
+ # macro .rept isn't used here because Apple GAS compiler doesn't support it.\r
+ # No. 1\r
+ .short 0 # offset 15:0\r
+ .short SYS_CODE_SEL # selector 15:0\r
+ .byte 0 # 0 for interrupt gate\r
+ .byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
+ .short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
+ # No. 2\r
+ .short 0 # offset 15:0\r
+ .short SYS_CODE_SEL # selector 15:0\r
+ .byte 0 # 0 for interrupt gate\r
+ .byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
+ .short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
+ # No. 3\r
+ .short 0 # offset 15:0\r
+ .short SYS_CODE_SEL # selector 15:0\r
+ .byte 0 # 0 for interrupt gate\r
+ .byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
+ .short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
+ # No. 4\r
+ .short 0 # offset 15:0\r
+ .short SYS_CODE_SEL # selector 15:0\r
+ .byte 0 # 0 for interrupt gate\r
+ .byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
+ .short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
+ # No. 5\r
+ .short 0 # offset 15:0\r
+ .short SYS_CODE_SEL # selector 15:0\r
+ .byte 0 # 0 for interrupt gate\r
+ .byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
+ .short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
+ # No. 6\r
+ .short 0 # offset 15:0\r
+ .short SYS_CODE_SEL # selector 15:0\r
+ .byte 0 # 0 for interrupt gate\r
+ .byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
+ .short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
+ # No. 7\r
+ .short 0 # offset 15:0\r
+ .short SYS_CODE_SEL # selector 15:0\r
+ .byte 0 # 0 for interrupt gate\r
+ .byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
+ .short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
+ # No. 8\r
.short 0 # offset 15:0\r
.short SYS_CODE_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
- .endr\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
+ # No. 9\r
+ .short 0 # offset 15:0\r
+ .short SYS_CODE_SEL # selector 15:0\r
+ .byte 0 # 0 for interrupt gate\r
+ .byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
+ .short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
+ # No. 10\r
+ .short 0 # offset 15:0\r
+ .short SYS_CODE_SEL # selector 15:0\r
+ .byte 0 # 0 for interrupt gate\r
+ .byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
+ .short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
+ # No. 11\r
+ .short 0 # offset 15:0\r
+ .short SYS_CODE_SEL # selector 15:0\r
+ .byte 0 # 0 for interrupt gate\r
+ .byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
+ .short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
+ # No. 12\r
+ .short 0 # offset 15:0\r
+ .short SYS_CODE_SEL # selector 15:0\r
+ .byte 0 # 0 for interrupt gate\r
+ .byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
+ .short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
+\r
\r
# 72 unspecified descriptors\r
- .rept 72 * 8\r
- .byte 0\r
- .endr\r
+ .fill 72 * 16, 1, 0\r
\r
# IRQ 0 (System timer) - (INT 0x68)\r
IRQ0_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # 0 for reserved\r
\r
# IRQ 1 (8042 Keyboard controller) - (INT 0x69)\r
IRQ1_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# Reserved - IRQ 2 redirect (IRQ 2) - DO NOT USE!!! - (INT 6ah)\r
IRQ2_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# IRQ 3 (COM 2) - (INT 6bh)\r
IRQ3_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# IRQ 4 (COM 1) - (INT 6ch)\r
IRQ4_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# IRQ 5 (LPT 2) - (INT 6dh)\r
IRQ5_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# IRQ 6 (Floppy controller) - (INT 6eh)\r
IRQ6_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# IRQ 7 (LPT 1) - (INT 6fh)\r
IRQ7_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# IRQ 8 (RTC Alarm) - (INT 0x70)\r
IRQ8_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# IRQ 9 - (INT 0x71)\r
IRQ9_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# IRQ 10 - (INT 0x72)\r
IRQ10_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# IRQ 11 - (INT 0x73)\r
IRQ11_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# IRQ 12 (PS/2 mouse) - (INT 0x74)\r
IRQ12_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# IRQ 13 (Floating point error) - (INT 0x75)\r
IRQ13_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# IRQ 14 (Secondary IDE) - (INT 0x76)\r
IRQ14_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
# IRQ 15 (Primary IDE) - (INT 0x77)\r
IRQ15_SEL = .-IDT_BASE\r
.short 0 # offset 15:0\r
- .short SYS_CODE_SEL # selector 15:0\r
+ .short SYS_CODE64_SEL # selector 15:0\r
.byte 0 # 0 for interrupt gate\r
.byte 0x0e | 0x80 # (10001110)type = 386 interrupt gate, present\r
.short 0 # offset 31:16\r
+ .long 0 # offset 63:32\r
+ .long 0 # for reserved\r
\r
- .rept 1 * 16\r
- .byte 0\r
- .endr\r
+ .fill 16, 1, 0\r
\r
IDT_END:\r
\r