From 81a8252db679351f5ba388b420519724c9c2c2be Mon Sep 17 00:00:00 2001 From: Miguel Date: Thu, 4 Oct 2018 02:17:13 +0200 Subject: reverting userspace idea --- kernel/interrupts.c | 18 +++++++++++++++--- kernel/kernel.c | 7 ++++--- kernel/scheduler.c | 33 ++++++++++++++------------------- kernel/syscalls.c | 5 ++++- kernel/vmem.c | 11 ++++++----- 5 files changed, 43 insertions(+), 31 deletions(-) (limited to 'kernel') diff --git a/kernel/interrupts.c b/kernel/interrupts.c index 4aa9db3..94ed54a 100644 --- a/kernel/interrupts.c +++ b/kernel/interrupts.c @@ -68,23 +68,34 @@ uint32_t interrupt_handler(uint32_t esp, uint32_t irq) { uint32_t (*f)(uint32_t esp)=handlers[irq]; esp=f(esp); + scheduler_wake_worker(esp); apic_eoi(); + esp=scheduler_run(esp,-1); return esp; } - if(irq==INTERRUPT_APIC_TIMER) + if(irq==INTERRUPT_APIC_TIMER || irq==INTERRUPT_IPI) { - klog ("tick"); esp=scheduler_run(esp,-1); apic_eoi(); return esp; } + if(irq==INTERRUPT_SYSCALL) // do not EOI + { + uint32_t *stack; + stack=esp; + task_syscall(stack[11],stack[8],stack[10],stack[9]); //eax,ebx,ecx,edx + scheduler_wake_worker(esp); + esp=scheduler_run(esp,-1); + return esp; + } + kpanic("unhandled interrupt %d",irq); - uint32_t *stack; + /* if(handlers[irq]!=0) { //uint32_t (*f)(uint32_t esp)=handlers[irq]; @@ -132,6 +143,7 @@ uint32_t interrupt_handler(uint32_t esp, uint32_t irq) return esp; + */ } /** diff --git a/kernel/kernel.c b/kernel/kernel.c index 3e07fde..66021e2 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -155,15 +155,16 @@ void kernel_main(uint32_t eax,uint32_t ebx) uint32_t addr= ext2_inode_blockstart( VMEM_EXT2_RAMIMAGE,inode,0); vesa_init(cfg_multiboot,addr); // this only sets some internal static variables - klog("Compositor init ..."); - compositor_init(cfg_multiboot->framebuffer_width,cfg_multiboot->framebuffer_height,cfg_multiboot->framebuffer_pitch); - compositor_set_background("/home/miguel/bg.ppm"); // -- STD STREAMS -- // klog("Standard Streams init ..."); fd_init_std_streams(0,cfg_multiboot->framebuffer_type!=2); */ + klog("Compositor init ..."); + compositor_init(cfg_multiboot->framebuffer_width,cfg_multiboot->framebuffer_height,cfg_multiboot->framebuffer_pitch); + compositor_set_background("/home/miguel/bg.ppm"); + // -- KB -- // klog("Keyboard init ..."); keyboard_init(); diff --git a/kernel/scheduler.c b/kernel/scheduler.c index 9fdff7d..8d7b025 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -174,11 +174,10 @@ volatile uint32_t scheduler_run(uint32_t oldesp,uint32_t preference) for(int i=0;i=VMEM_USER_FRAMEBUFFER&&virt