summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2010-06-03 17:08:50 -0500
committerPatrick Williams <iawillia@us.ibm.com>2010-06-03 17:08:50 -0500
commitaeb744f3e5debfa052765d612462af776dd620a2 (patch)
tree306edfc20edf2bef8d4682b5e8d0b0cb1d45ba78
parent278f85151d8b34ea14920371564a3b81acf3a43c (diff)
downloadtalos-hostboot-aeb744f3e5debfa052765d612462af776dd620a2.tar.gz
talos-hostboot-aeb744f3e5debfa052765d612462af776dd620a2.zip
Add stub for syscall.
-rw-r--r--src/kernel/cpumgr.C3
-rw-r--r--src/kernel/makefile1
-rw-r--r--src/kernel/start.S11
-rw-r--r--src/kernel/syscall.C7
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");
+}
OpenPOWER on IntegriCloud