From 16af45d89c226e3ab42896f9068fa07e58d372ad Mon Sep 17 00:00:00 2001 From: Matthias Kruk Date: Wed, 2 Oct 2019 14:22:22 +0900 Subject: [PATCH] Add interrupt vector for network-related syscalls --- kernel/arch/defs.h | 1 + kernel/arch/entry.S | 8 +++++++- kernel/arch/init.S | 7 +++++++ kernel/arch/interrupt.c | 5 +++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/kernel/arch/defs.h b/kernel/arch/defs.h index 43e7150..44c42d6 100644 --- a/kernel/arch/defs.h +++ b/kernel/arch/defs.h @@ -138,6 +138,7 @@ #define SYS_VECTOR0 SYS_VECTOR_CORAX #define SYS_VECTOR_CORAX 0xCC +#define SYS_VECTOR_CXNET 0xCD #if FEATURE(POSIX) #define SYS_VECTOR_POSIX 0x80 diff --git a/kernel/arch/entry.S b/kernel/arch/entry.S index ab29858..d1335de 100644 --- a/kernel/arch/entry.S +++ b/kernel/arch/entry.S @@ -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: diff --git a/kernel/arch/init.S b/kernel/arch/init.S index 50bdbf9..c7c89a3 100644 --- a/kernel/arch/init.S +++ b/kernel/arch/init.S @@ -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 diff --git a/kernel/arch/interrupt.c b/kernel/arch/interrupt.c index ca1e208..3773a29 100644 --- a/kernel/arch/interrupt.c +++ b/kernel/arch/interrupt.c @@ -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); -- 2.47.3