diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2010-06-03 17:08:50 -0500 |
---|---|---|
committer | Patrick Williams <iawillia@us.ibm.com> | 2010-06-03 17:08:50 -0500 |
commit | aeb744f3e5debfa052765d612462af776dd620a2 (patch) | |
tree | 306edfc20edf2bef8d4682b5e8d0b0cb1d45ba78 | |
parent | 278f85151d8b34ea14920371564a3b81acf3a43c (diff) | |
download | talos-hostboot-aeb744f3e5debfa052765d612462af776dd620a2.tar.gz talos-hostboot-aeb744f3e5debfa052765d612462af776dd620a2.zip |
Add stub for syscall.
-rw-r--r-- | src/kernel/cpumgr.C | 3 | ||||
-rw-r--r-- | src/kernel/makefile | 1 | ||||
-rw-r--r-- | src/kernel/start.S | 11 | ||||
-rw-r--r-- | src/kernel/syscall.C | 7 |
4 files changed, 20 insertions, 2 deletions
diff --git a/src/kernel/cpumgr.C b/src/kernel/cpumgr.C index 3c2c3b907..f20139dd1 100644 --- a/src/kernel/cpumgr.C +++ b/src/kernel/cpumgr.C @@ -46,7 +46,8 @@ void CpuManager::startCPU(ssize_t i) // Initialize CPU. cpu->cpu = i; cpu->scheduler = new Scheduler(); - cpu->kernel_stack = PageManager::allocatePage(4); + cpu->kernel_stack = + (void*) (((uint64_t)PageManager::allocatePage(4)) + 16320); // Create idle task. task_t * idle_task = TaskManager::createIdleTask(); diff --git a/src/kernel/makefile b/src/kernel/makefile index 3ff471de2..d3a586e8d 100644 --- a/src/kernel/makefile +++ b/src/kernel/makefile @@ -2,6 +2,7 @@ OBJDIR = ../../obj include ../../config.mk OBJS = start.o kernel.o console.o pagemgr.o heapmgr.o taskmgr.o cpumgr.o +OBJS += syscall.o OBJECTS = $(addprefix ${OBJDIR}/, ${OBJS}) all: ${OBJECTS} diff --git a/src/kernel/start.S b/src/kernel/start.S index 1ca4fdb62..f78b58c63 100644 --- a/src/kernel/start.S +++ b/src/kernel/start.S @@ -117,7 +117,7 @@ intvect_system_call: ;// Retrieve processing address for interrupt. lis r1,intvect_system_call_finish_save@h - li r1,intvect_system_call_finish_save@l + ori r1,intvect_system_call_finish_save@l ;// Save interrupt address in SPRG0 mtsprg0 r1 @@ -125,6 +125,15 @@ intvect_system_call: b kernel_save_task ;// Save current task. intvect_system_call_finish_save: + ;// Get TOC entry for kernel_execute_systemcall + lis r2, kernel_execute_systemcall@h + ori r2, r2, kernel_execute_systemcall@l + ld r0,0(r2) ;// Load call addr. + mtlr r0 + ld r2,8(r2) ;// Load TOC base. + + blr ;// Call kernel_execute_systemcall + nop b kernel_dispatch_task ;// Return to task. .org _start + 0xD00 diff --git a/src/kernel/syscall.C b/src/kernel/syscall.C new file mode 100644 index 000000000..250c18ae2 --- /dev/null +++ b/src/kernel/syscall.C @@ -0,0 +1,7 @@ +#include <kernel/console.H> + +extern "C" +void kernel_execute_systemcall() +{ + //printk("Syscall.\n"); +} |