Stubs for a simple system call
authorRhett <rhett.aultman@meraki.net>
Sun, 1 Sep 2013 22:55:17 +0000 (15:55 -0700)
committerRhett <rhett.aultman@meraki.net>
Sun, 1 Sep 2013 22:55:17 +0000 (15:55 -0700)
inc/idt.h
kern/init.c
kern/interrupts/interrupt_handlers.c
kern/interrupts/interrupts.S

index 8ce5c51fe55d1e4967890a8a38b74f415126814d..0bd66b29ce05a8dc3a2a55db22f3ac6c70e76af5 100644 (file)
--- a/inc/idt.h
+++ b/inc/idt.h
@@ -26,6 +26,8 @@ IDT* phys_idtp;
 #define HIGH_OFFSET(x) ((x >> 16))
 #define LOW_OFFSET(x) ((x & 0x0000FFFF)) 
 
+#define SYSCALL_IRQ 0x80
+
 void reset_idt();
 void set_idt_entry(uint8_t number, void (*handler)(), uint16_t type);
 void load_idt();
index 52ba583f0b3e82f148fb545b5dc25b9ed5be0541..8f41e583e00214af4967aad6b8d2f40c7af24e73 100644 (file)
@@ -13,6 +13,7 @@
 #define CHECK_FLAG(flags,bit)   ((flags) & (1 << (bit)))
 
 extern void keyboard_isr();
+extern void syscall_isr();
 extern void load_partitions();
 void i386_init(multiboot_info_t* mbi);
 
@@ -133,6 +134,7 @@ i386_init(multiboot_info_t* mbi)
        PIC_remap(32, 40); //PIC1 - 32-39, PIC2 - 40-47;
        set_idt_entry(33, keyboard_isr, INTERRUPT_GATE_TYPE_ATTR);
        PIC_set_mask(1, 0);
+       set_idt_entry(SYSCALL_IRQ, syscall_isr, INTERRUPT_GATE_TYPE_ATTR);
        load_idt();
        asm("sti"); //Interrupts are on now, bitches.
        _kern_print("Interrupts enabled.\n");
index d9cffaa8567a97b9391d865d1e315bcd0af5af78..5481b5e9cd497052eb407d7f9f098c0ba288a174 100644 (file)
@@ -75,6 +75,11 @@ void _interrupt_handler(uint8_t number)
        while(1);
 }
 
+void _syscall_interrupt()
+{
+    _kern_print("System call interrupt has been called\n");
+}
+
 void _keyboard_interrupt()
 {
     uint8_t new_scan_code=0;
index fc5c990600d33685b6731d956fae233515d246c1..93dc10e3990a5349acaf58ed7b6b39a223f8d4a8 100644 (file)
@@ -186,6 +186,13 @@ isr_30:
     popal
     iret
 
+.globl syscall_isr
+syscall_isr:
+       pushal
+       call _syscall_interrupt
+       popal
+       iret
+
 .globl keyboard_isr
 keyboard_isr:
        pushal