summaryrefslogtreecommitdiff
path: root/kernel/hal/interrupts.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/hal/interrupts.h')
-rw-r--r--kernel/hal/interrupts.h92
1 files changed, 92 insertions, 0 deletions
diff --git a/kernel/hal/interrupts.h b/kernel/hal/interrupts.h
new file mode 100644
index 0000000..673b13b
--- /dev/null
+++ b/kernel/hal/interrupts.h
@@ -0,0 +1,92 @@
+//+----------------------------------------------------------------------------
+//
+// File: interrupts.h
+//
+// Module:
+//
+// Synopsis:
+//
+// Created: sgasch 6 Jul 2003
+//
+//+----------------------------------------------------------------------------
+
+#ifndef _INTERRUPTS_H_
+#define _INTERRUPTS_H_
+
+#define NUM_IDT_ENTRIES (256)
+
+// Exceptions range from 0x00..0x11
+#define FIRST_EXCEPTION 0x00
+#define LAST_EXCEPTION 0x11
+#define NUM_EXCEPTIONS 18
+
+// External IRQs range from 0x30..0x3F
+#define FIRST_EXTERNAL_INT 0x30
+#define LAST_EXTERNAL_INT 0x3F
+#define IRQ0 0x30
+#define IRQ1 0x31
+#define IRQ2 0x39
+#define IRQ3 0x33
+#define IRQ4 0x34
+#define IRQ5 0x35
+#define IRQ6 0x36
+#define IRQ7 0x37
+#define IRQ8 0x38
+#define IRQ9 0x39
+#define IRQ10 0x3A
+#define IRQ11 0x3B
+#define IRQ12 0x3C
+#define IRQ13 0x3D
+#define IRQ14 0x3E
+#define IRQ15 0x3F
+#define NUM_EXTERNAL_INTS 16
+
+typedef struct _INTERRUPT_GATE
+{
+ USHORT offsetLow;
+ USHORT segmentSelector;
+ USHORT reserved : 5;
+ USHORT signature : 8;
+ USHORT dpl : 2;
+ USHORT present : 1;
+ USHORT offsetHigh;
+}
+INTERRUPT_GATE;
+
+typedef union _IDT_ENTRY
+{
+ INTERRUPT_GATE i;
+ // In theory we could have members for trap gates
+ // and task gates if we wanted.
+}
+IDT_ENTRY;
+
+//
+// Defined in intsupport.asm
+//
+extern void HalInterruptInitializePICs(void);
+extern void HalInterruptLoadIDTR(void *uLimitAndBase);
+extern void HalIoDelay(void);
+extern BYTE HalInterruptHandlerPreamble;
+extern BYTE HalInterruptHandlerPreambleBefore;
+extern BYTE HalInterruptHandlerPreambleAfter;
+
+//
+// Defined in interrupts.c
+//
+extern void HalDisableInterrupts(void);
+extern void HalEnableInterrupts(void);
+
+
+//
+// Defined in keyboard.c
+//
+extern void HalKeyboardInt(INTERRUPT_STATE *is);
+
+//
+// Defined in timer.c
+//
+extern void HalTimerInt(INTERRUPT_STATE *is);
+
+#endif
+