]> git.corax.cc Git - corax/commitdiff
Add interrupt vector for network-related syscalls
authorMatthias Kruk <m@m10k.eu>
Wed, 2 Oct 2019 05:22:22 +0000 (14:22 +0900)
committerMatthias Kruk <m@m10k.eu>
Wed, 2 Oct 2019 05:22:22 +0000 (14:22 +0900)
kernel/arch/defs.h
kernel/arch/entry.S
kernel/arch/init.S
kernel/arch/interrupt.c

index 43e71504f3ee27b03cbdeecd2a3a6bf1467656ed..44c42d6543f900462f39fb51878aa8c698981990 100644 (file)
 #define SYS_VECTOR0         SYS_VECTOR_CORAX
 
 #define SYS_VECTOR_CORAX    0xCC
+#define SYS_VECTOR_CXNET    0xCD
 
 #if FEATURE(POSIX)
 #define SYS_VECTOR_POSIX    0x80
index ab298586c6ced025f1dac102199edc3ab5edcc25..d1335decd51f1e0788f9f86c0280100c777ae461 100644 (file)
@@ -76,6 +76,7 @@
 .global _sys_entryPX
 #endif /* FEATURE(POSIX) */
 .global _sys_entryCC
+.global _sys_entryCN
 
 .global _int_entry_common
 .global _int_restore
@@ -320,7 +321,12 @@ _sys_entryPX:
 
 _sys_entryCC:
     pushl   $0
-    pushl   $SYS_VECTOR0
+    pushl   $SYS_VECTOR_CORAX
+       jmp             _int_entry_common
+
+_sys_entryCN:
+       pushl   $0
+       pushl   $SYS_VECTOR_CXNET
        /* fall through */
 
 _int_entry_common:
index 50bdbf9e543c0f52ae2bd89e9579bf991d9ee653..c7c89a3afc55df94d3203f2d1228ad83ea3db398 100644 (file)
@@ -84,6 +84,7 @@
 #endif /* CONFIG_APIC */
 
 .extern _sys_entryCC
+.extern _sys_entryCN
 #if FEATURE(POSIX)
 .extern _sys_entryPX
 #endif /* FEATURE(POSIX) */
@@ -370,6 +371,12 @@ _update_cs:
        movl    %eax, (%esp)
     call    _segment_descriptor_set
 
+       /* add an entry for Corax network syscalls */
+       movl    $DPL_USER, 16(%esp)
+       movl    $_sys_entryCN, 12(%esp)
+       addl    $8, (%esp)
+       call    _segment_descriptor_set
+
     movw    $((IDT_ENTRIES * 8) + 1), (%esp)
     movl    $_cpu, %eax
     addl    $IDT_OFFSET, %eax
index ca1e2085b7e89b2e8274d260ed813cc54ef49746..3773a2980361fa848e490f0f9df154b0deb8ceab 100644 (file)
@@ -24,6 +24,7 @@
 #include "defs.h"
 
 void sched_tick(void);
+extern int sys_cxnet(long, long, long, long, long, long);
 
 static const char *_exc_name[] = {
     "#DE", "#DB", "NMI", "#BP", "#OF", "#BR", "#UD", "#NM", "#DF", "#MF",
@@ -148,6 +149,10 @@ void _sys_handle(stack_frame_t ctx)
                dbg_printf("_corax_call(0x%x, 0x%x, 0x%x);\n", ctx.eax, ctx.ebx, ctx.ecx);
                break;
 
+       case SYS_VECTOR_CXNET:
+               ret_val = sys_cxnet(ctx.eax, ctx.ebx, ctx.ecx, ctx.edx, ctx.esi, ctx.edi);
+               break;
+
 #if FEATURE(POSIX)
        case SYS_VECTOR_POSIX:
                dbg_printf("_posix_call(0x%x, 0x%x, 0x%x);\n", ctx.eax, ctx.ebx, ctx.ecx);