From 7de0708eac63bb81786c2a5e794c5d6fbef069c4 Mon Sep 17 00:00:00 2001 From: Doug Gilbert Date: Fri, 4 Nov 2011 12:12:01 -0500 Subject: Interrupt presenter implementation Change-Id: If6b499d819b71298b8a64e096e1eb83c639ad645 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/517 Tested-by: Jenkins Server Reviewed-by: Daniel M. Crowell Reviewed-by: A. Patrick Williams III --- src/kernel/syscall.C | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) (limited to 'src/kernel/syscall.C') diff --git a/src/kernel/syscall.C b/src/kernel/syscall.C index 013ffc78c..561218b00 100644 --- a/src/kernel/syscall.C +++ b/src/kernel/syscall.C @@ -39,6 +39,7 @@ #include #include #include +#include extern "C" void kernel_execute_decrementer() @@ -121,8 +122,8 @@ namespace Systemcalls &FutexWait, // FUTEX_WAIT &FutexWake, // FUTEX_WAKE - &Shutdown, // MISC_SHUTDOWN - &CpuCoreType, // MISC_CPUCORETYPE + &Shutdown, // MISC_SHUTDOWN + &CpuCoreType, // MISC_CPUCORETYPE &CpuDDLevel, // MISC_CPUDDLEVEL &MmAllocBlock, // MM_ALLOC_BLOCK @@ -246,16 +247,47 @@ namespace Systemcalls } static MessageQueue* msgQRoot = NULL; + static MessageQueue* msgQIntr = NULL; void MsgQRegisterRoot(task_t* t) { - msgQRoot = (MessageQueue*) TASK_GETARG0(t); - TASK_SETRTN(t, 0); + switch(TASK_GETARG0(t)) + { + case MSGQ_ROOT_VFS: + msgQRoot = (MessageQueue*) TASK_GETARG1(t); + TASK_SETRTN(t,0); + break; + + case MSGQ_ROOT_INTR: + msgQIntr = (MessageQueue*) TASK_GETARG1(t); + InterruptMsgHdlr::create(msgQIntr); + TASK_SETRTN(t,0); + break; + + default: + printk("ERROR MsgRegisterRoot invalid type %ld\n", + TASK_GETARG0(t)); + TASK_SETRTN(t,-EINVAL); + } } void MsgQResolveRoot(task_t* t) { - TASK_SETRTN(t, (uint64_t) msgQRoot); + switch(TASK_GETARG0(t)) + { + case MSGQ_ROOT_VFS: + TASK_SETRTN(t, (uint64_t) msgQRoot); + break; + + case MSGQ_ROOT_INTR: + TASK_SETRTN(t, (uint64_t) msgQIntr); + break; + + default: + printk("ERROR MsgQResolveRoot invalid type %ld\n", + TASK_GETARG0(t)); + TASK_SETRTN(t,0); + } } void MsgSend(task_t* t) @@ -563,3 +595,4 @@ namespace Systemcalls } }; + -- cgit v1.2.3