summaryrefslogtreecommitdiffstats
path: root/src/kernel/syscall.C
diff options
context:
space:
mode:
authorDoug Gilbert <dgilbert@us.ibm.com>2011-11-04 12:12:01 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-01-05 11:06:04 -0600
commit7de0708eac63bb81786c2a5e794c5d6fbef069c4 (patch)
treeb47aeb4c9827851d61b44d5cb922704f73257693 /src/kernel/syscall.C
parent048789fdce6b406de3b7149f8171afd63eea1829 (diff)
downloadtalos-hostboot-7de0708eac63bb81786c2a5e794c5d6fbef069c4.tar.gz
talos-hostboot-7de0708eac63bb81786c2a5e794c5d6fbef069c4.zip
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 <dcrowell@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/kernel/syscall.C')
-rw-r--r--src/kernel/syscall.C43
1 files changed, 38 insertions, 5 deletions
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 <kernel/vmmmgr.H>
#include <kernel/stacksegment.H>
#include <kernel/heapmgr.H>
+#include <kernel/intmsghandler.H>
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
}
};
+
OpenPOWER on IntegriCloud