@@ -20,7 +20,6 @@ private let idtSize = NR_INTERRUPTS * sizeof(idt_entry)
20
20
private var idtInfo = dt_info ( limit: UInt16 ( idtSize - 1 ) , base: & idt)
21
21
22
22
23
-
24
23
enum GateType : UInt8 {
25
24
// Ignore the 16bit types
26
25
case TASK_GATE = 5
@@ -29,7 +28,7 @@ enum GateType: UInt8 {
29
28
}
30
29
31
30
// Helper method to construct an IDT entry
32
- private func IDTEntry( address: UInt , selector: UInt16 , gateType: GateType , dpl: UInt8 ) -> idt_entry {
31
+ private func IDTEntry( address: UInt , selector: UInt16 = CODE_SEG , gateType: GateType , dpl: UInt8 = 0 ) -> idt_entry {
33
32
34
33
let level = ( dpl & 3 ) << 5
35
34
let flags : UInt8 = 128 | level | gateType. rawValue // 128 = Present Bit set
@@ -59,26 +58,26 @@ public func setupIDT() {
59
58
sidt ( & currentIdtInfo)
60
59
printIDT ( " Current " , currentIdtInfo)
61
60
62
- idt. 0 = IDTEntry ( address: divide_by_zero_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
63
- idt. 1 = IDTEntry ( address: debug_exception_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
64
- idt. 2 = IDTEntry ( address: nmi_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
65
- idt. 3 = IDTEntry ( address: single_step_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
66
- idt. 4 = IDTEntry ( address: overflow_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
67
- idt. 5 = IDTEntry ( address: bounds_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
68
- idt. 6 = IDTEntry ( address: invalid_opcode_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
69
- idt. 7 = IDTEntry ( address: unused_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
70
- idt. 8 = IDTEntry ( address: double_fault_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
71
- idt. 9 = IDTEntry ( address: unused_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
72
- idt. 10 = IDTEntry ( address: invalid_tss_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
73
- idt. 11 = IDTEntry ( address: seg_not_present_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
74
- idt. 12 = IDTEntry ( address: stack_fault_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
75
- idt. 13 = IDTEntry ( address: gpf_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
76
- idt. 14 = IDTEntry ( address: page_fault_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
77
- idt. 15 = IDTEntry ( address: unused_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
78
- idt. 16 = IDTEntry ( address: fpu_fault_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
79
- idt. 17 = IDTEntry ( address: alignment_exception_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
80
- idt. 18 = IDTEntry ( address: mce_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
81
- idt. 19 = IDTEntry ( address: simd_exception_stub_addr ( ) , selector : 0x8 , gateType: . TRAP_GATE, dpl : 0 )
61
+ idt. 0 = IDTEntry ( address: divide_by_zero_stub_addr ( ) , gateType: . TRAP_GATE)
62
+ idt. 1 = IDTEntry ( address: debug_exception_stub_addr ( ) , gateType: . TRAP_GATE)
63
+ idt. 2 = IDTEntry ( address: nmi_stub_addr ( ) , gateType: . TRAP_GATE)
64
+ idt. 3 = IDTEntry ( address: single_step_stub_addr ( ) , gateType: . TRAP_GATE)
65
+ idt. 4 = IDTEntry ( address: overflow_stub_addr ( ) , gateType: . TRAP_GATE)
66
+ idt. 5 = IDTEntry ( address: bounds_stub_addr ( ) , gateType: . TRAP_GATE)
67
+ idt. 6 = IDTEntry ( address: invalid_opcode_stub_addr ( ) , gateType: . TRAP_GATE)
68
+ idt. 7 = IDTEntry ( address: unused_stub_addr ( ) , gateType: . TRAP_GATE)
69
+ idt. 8 = IDTEntry ( address: double_fault_stub_addr ( ) , gateType: . TRAP_GATE)
70
+ idt. 9 = IDTEntry ( address: unused_stub_addr ( ) , gateType: . TRAP_GATE)
71
+ idt. 10 = IDTEntry ( address: invalid_tss_stub_addr ( ) , gateType: . TRAP_GATE)
72
+ idt. 11 = IDTEntry ( address: seg_not_present_stub_addr ( ) , gateType: . TRAP_GATE)
73
+ idt. 12 = IDTEntry ( address: stack_fault_stub_addr ( ) , gateType: . TRAP_GATE)
74
+ idt. 13 = IDTEntry ( address: gpf_stub_addr ( ) , gateType: . TRAP_GATE)
75
+ idt. 14 = IDTEntry ( address: page_fault_stub_addr ( ) , gateType: . TRAP_GATE)
76
+ idt. 15 = IDTEntry ( address: unused_stub_addr ( ) , gateType: . TRAP_GATE)
77
+ idt. 16 = IDTEntry ( address: fpu_fault_stub_addr ( ) , gateType: . TRAP_GATE)
78
+ idt. 17 = IDTEntry ( address: alignment_exception_stub_addr ( ) , gateType: . TRAP_GATE)
79
+ idt. 18 = IDTEntry ( address: mce_stub_addr ( ) , gateType: . TRAP_GATE)
80
+ idt. 19 = IDTEntry ( address: simd_exception_stub_addr ( ) , gateType: . TRAP_GATE)
82
81
83
82
trap_dispatch_table. 0 = divideByZeroException
84
83
trap_dispatch_table. 1 = debugException
@@ -102,22 +101,22 @@ public func setupIDT() {
102
101
trap_dispatch_table. 19 = simdException
103
102
lidt ( & idtInfo)
104
103
105
- idt. 32 = IDTEntry ( address: irq00_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
106
- idt. 33 = IDTEntry ( address: irq01_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
107
- idt. 34 = IDTEntry ( address: irq02_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
108
- idt. 35 = IDTEntry ( address: irq03_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
109
- idt. 36 = IDTEntry ( address: irq04_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
110
- idt. 37 = IDTEntry ( address: irq05_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
111
- idt. 38 = IDTEntry ( address: irq06_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
112
- idt. 39 = IDTEntry ( address: irq07_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
113
- idt. 40 = IDTEntry ( address: irq08_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
114
- idt. 41 = IDTEntry ( address: irq09_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
115
- idt. 42 = IDTEntry ( address: irq10_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
116
- idt. 43 = IDTEntry ( address: irq11_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
117
- idt. 44 = IDTEntry ( address: irq12_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
118
- idt. 45 = IDTEntry ( address: irq13_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
119
- idt. 46 = IDTEntry ( address: irq14_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
120
- idt. 47 = IDTEntry ( address: irq15_stub_addr ( ) , selector : 0x8 , gateType: . INTR_GATE, dpl : 0 )
104
+ idt. 32 = IDTEntry ( address: irq00_stub_addr ( ) , gateType: . INTR_GATE)
105
+ idt. 33 = IDTEntry ( address: irq01_stub_addr ( ) , gateType: . INTR_GATE)
106
+ idt. 34 = IDTEntry ( address: irq02_stub_addr ( ) , gateType: . INTR_GATE)
107
+ idt. 35 = IDTEntry ( address: irq03_stub_addr ( ) , gateType: . INTR_GATE)
108
+ idt. 36 = IDTEntry ( address: irq04_stub_addr ( ) , gateType: . INTR_GATE)
109
+ idt. 37 = IDTEntry ( address: irq05_stub_addr ( ) , gateType: . INTR_GATE)
110
+ idt. 38 = IDTEntry ( address: irq06_stub_addr ( ) , gateType: . INTR_GATE)
111
+ idt. 39 = IDTEntry ( address: irq07_stub_addr ( ) , gateType: . INTR_GATE)
112
+ idt. 40 = IDTEntry ( address: irq08_stub_addr ( ) , gateType: . INTR_GATE)
113
+ idt. 41 = IDTEntry ( address: irq09_stub_addr ( ) , gateType: . INTR_GATE)
114
+ idt. 42 = IDTEntry ( address: irq10_stub_addr ( ) , gateType: . INTR_GATE)
115
+ idt. 43 = IDTEntry ( address: irq11_stub_addr ( ) , gateType: . INTR_GATE)
116
+ idt. 44 = IDTEntry ( address: irq12_stub_addr ( ) , gateType: . INTR_GATE)
117
+ idt. 45 = IDTEntry ( address: irq13_stub_addr ( ) , gateType: . INTR_GATE)
118
+ idt. 46 = IDTEntry ( address: irq14_stub_addr ( ) , gateType: . INTR_GATE)
119
+ idt. 47 = IDTEntry ( address: irq15_stub_addr ( ) , gateType: . INTR_GATE)
121
120
122
121
initIRQs ( )
123
122
0 commit comments