aboutsummaryrefslogtreecommitdiff
path: root/kernel/include
diff options
context:
space:
mode:
authorAlex Auvolat <alex.auvolat@ens.fr>2014-12-01 18:20:45 +0100
committerAlex Auvolat <alex.auvolat@ens.fr>2014-12-01 18:20:45 +0100
commitc7bcf94b1e70721d0f7bfb5ca383d996559c2559 (patch)
tree845f9e6c2193f444c80b1506438e9280a52585e5 /kernel/include
parent8f936e07ecb5af4053ad7d457a32e69695cb357e (diff)
downloadkogata-c7bcf94b1e70721d0f7bfb5ca383d996559c2559.tar.gz
kogata-c7bcf94b1e70721d0f7bfb5ca383d996559c2559.zip
Small adjustments:
- add missing vim modelines - idt_set_ex_handler, idt_set_irq_handler - inline inb,inw,outb,outw - add defines for exceptions and irqs
Diffstat (limited to 'kernel/include')
-rw-r--r--kernel/include/idt.h53
-rw-r--r--kernel/include/sys.h23
2 files changed, 71 insertions, 5 deletions
diff --git a/kernel/include/idt.h b/kernel/include/idt.h
index 5730f5e..ba344c9 100644
--- a/kernel/include/idt.h
+++ b/kernel/include/idt.h
@@ -8,6 +8,56 @@
#include <config.h>
+#define IRQ0 0
+#define IRQ1 1
+#define IRQ2 2
+#define IRQ3 3
+#define IRQ4 4
+#define IRQ5 5
+#define IRQ6 6
+#define IRQ7 7
+#define IRQ8 8
+#define IRQ9 9
+#define IRQ10 10
+#define IRQ11 11
+#define IRQ12 12
+#define IRQ13 13
+#define IRQ14 14
+#define IRQ15 15
+
+#define EX_DIVIDE_ERROR 0 // No error code
+#define EX_DEBUG 1 // No error code
+#define EX_NMI_INTERRUPT 2 // No error code
+#define EX_BREAKPOINT 3 // No error code
+#define EX_OVERFLOW 4 // No error code
+#define EX_BOUND_RANGE_EXCEDEED 5 // No error code
+#define EX_INVALID_OPCODE 6 // No error code
+#define EX_DEVICE_NOT_AVAILABLE 7 // No error code
+#define EX_DOUBLE_FAULT 8 // Yes (Zero)
+#define EX_COPROCESSOR_SEGMENT_OVERRUN 9 // No error code
+#define EX_INVALID_TSS 10 // Yes
+#define EX_SEGMENT_NOT_PRESENT 11 // Yes
+#define EX_STACK_SEGMENT_FAULT 12 // Yes
+#define EX_GENERAL_PROTECTION 13 // Yes
+#define EX_PAGE_FAULT 14 // Yes
+#define EX_INTEL_RESERVED_1 15 // No
+#define EX_FLOATING_POINT_ERROR 16 // No
+#define EX_ALIGNEMENT_CHECK 17 // Yes (Zero)
+#define EX_MACHINE_CHECK 18 // No
+#define EX_INTEL_RESERVED_2 19 // No
+#define EX_INTEL_RESERVED_3 20 // No
+#define EX_INTEL_RESERVED_4 21 // No
+#define EX_INTEL_RESERVED_5 22 // No
+#define EX_INTEL_RESERVED_6 23 // No
+#define EX_INTEL_RESERVED_7 24 // No
+#define EX_INTEL_RESERVED_8 25 // No
+#define EX_INTEL_RESERVED_9 26 // No
+#define EX_INTEL_RESERVED_10 27 // No
+#define EX_INTEL_RESERVED_11 28 // No
+#define EX_INTEL_RESERVED_12 29 // No
+#define EX_INTEL_RESERVED_13 30 // No
+#define EX_INTEL_RESERVED_14 31 // No
+
struct idt_entry {
uint16_t base_lo; //Low part of address to jump to
uint16_t sel; //Kernel segment selector
@@ -34,7 +84,8 @@ typedef struct registers registers_t;
typedef void (*isr_handler_t)(registers_t*);
void idt_init();
-//void idt_handleIrq(int number, isr_handler_t func); //Set IRQ handler
+void idt_set_ex_handler(int number, isr_handler_t func); //Set exception handler
+void idt_set_irq_handler(int number, isr_handler_t func); //Set IRQ handler
/* vim: set ts=4 sw=4 tw=0 noet :*/
diff --git a/kernel/include/sys.h b/kernel/include/sys.h
index 319cbef..2304eec 100644
--- a/kernel/include/sys.h
+++ b/kernel/include/sys.h
@@ -2,10 +2,25 @@
#include <config.h>
-void outb(uint16_t port, uint8_t value);
-void outw(uint16_t port, uint16_t value);
-uint8_t inb(uint16_t port);
-uint16_t inw(uint16_t port);
+static inline void outb(uint16_t port, uint8_t value) {
+ asm volatile("outb %1, %0" : : "dN"(port), "a"(value));
+}
+
+static inline void outw(uint16_t port, uint16_t value) {
+ asm volatile("outw %1, %0" : : "dN"(port), "a"(value));
+}
+
+static inline uint8_t inb(uint16_t port) {
+ uint8_t ret;
+ asm volatile("inb %1, %0" : "=a"(ret) : "dN"(port));
+ return ret;
+}
+
+static inline uint16_t inw(uint16_t port) {
+ uint16_t ret;
+ asm volatile("inw %1, %0" : "=a"(ret) : "dN"(port));
+ return ret;
+}
void panic(const char* message, const char* file, int line);
void panic_assert(const char* assertion, const char* file, int line);