summaryrefslogtreecommitdiff
path: root/kernel/interrupts.c
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-10-17 01:00:27 +0200
committerMichal Idziorek <m.i@gmx.at>2014-10-17 01:00:27 +0200
commit3983a157056f10651f120cf39c5d3637aa956903 (patch)
tree5d956c9dfb4c625d975a2bc035fd32aa1950b84b /kernel/interrupts.c
parent1580f8b4401b5f7e6ead12c94cafd42bb045ec6b (diff)
added simple syscall interface
Diffstat (limited to 'kernel/interrupts.c')
-rw-r--r--kernel/interrupts.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/kernel/interrupts.c b/kernel/interrupts.c
index f5bd18f..56fa09f 100644
--- a/kernel/interrupts.c
+++ b/kernel/interrupts.c
@@ -9,6 +9,7 @@
void int_clock_handler();
void int_kb_handler();
+void int_syscall_handler();
void int_install_ir(int irq, uint16_t flags, uint16_t sel, void *addr);
void int_default_handler();
void mouse_handler();
@@ -82,6 +83,22 @@ void int_irq16(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Coprocessor error");
void int_irq17(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Alignment Check"); X86_IRQ_END }
void int_irq18(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Machine Check"); X86_IRQ_END }
+//
+int example_syscall(int x,int y)
+{
+ log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"example syscall called with %d + %d",x,y);
+ return x+y;
+
+}
+
+int example_syscall_2(int x,int y)
+{
+ log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"example syscall 2 called with %d - %d",x,y);
+ return x-y;
+}
+
+//
+
//set a handler for a specific interrupt
void int_install_ir(int irq, uint16_t flags, uint16_t sel, void *addr)
{
@@ -145,6 +162,9 @@ void int_init(uint16_t sel)
//mouse
int_install_ir(44, 0b10001110, 0x08,&mouse_handler);
+ //system calls
+ int_install_ir(0x80, 0b10001110, 0x08,&int_syscall_handler);
+
int_install();