summaryrefslogtreecommitdiffstats
path: root/src/lib
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/lib
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/lib')
-rw-r--r--src/lib/syscall_misc.C22
-rw-r--r--src/lib/syscall_msg.C25
-rw-r--r--src/lib/syscall_task.C3
3 files changed, 45 insertions, 5 deletions
diff --git a/src/lib/syscall_misc.C b/src/lib/syscall_misc.C
index 26ecc9bfe..ac9070a40 100644
--- a/src/lib/syscall_misc.C
+++ b/src/lib/syscall_misc.C
@@ -43,3 +43,25 @@ uint8_t cpu_dd_level()
return reinterpret_cast<uint64_t>(_syscall0(MISC_CPUDDLEVEL));
}
+size_t cpu_thread_count()
+{
+ size_t threads = 0;
+ ProcessorCoreType core_type = cpu_core_type();
+ switch(core_type)
+ {
+ case CORE_POWER7:
+ case CORE_POWER7_PLUS:
+ threads = 4;
+ break;
+
+ case CORE_POWER8_SALERNO:
+ case CORE_POWER8_VENICE:
+ threads = 8;
+ break;
+
+ default:
+ break;
+ }
+ return threads;
+}
+
diff --git a/src/lib/syscall_msg.C b/src/lib/syscall_msg.C
index 08fafcbef..1b0ea500a 100644
--- a/src/lib/syscall_msg.C
+++ b/src/lib/syscall_msg.C
@@ -21,6 +21,7 @@
//
// IBM_PROLOG_END
#include <sys/msg.h>
+#include <sys/interrupt.h>
#include <sys/syscall.h>
#include <sys/vfs.h>
@@ -42,11 +43,20 @@ int msg_q_register(msg_q_t q, const char* name)
{
if (0 == strcmp(VFS_ROOT, name))
{
- return (int64_t)_syscall1(MSGQ_REGISTER_ROOT, q);
+ return (int64_t)_syscall2(MSGQ_REGISTER_ROOT,
+ reinterpret_cast<void*>(MSGQ_ROOT_VFS),
+ q);
+ }
+ else if (0 == strcmp(INTR_MSGQ, name))
+ {
+ return (int64_t)_syscall2(MSGQ_REGISTER_ROOT,
+ reinterpret_cast<void*>(MSGQ_ROOT_INTR),
+ q);
}
else
{
- msg_q_t vfsQ = (msg_q_t)_syscall0(MSGQ_RESOLVE_ROOT);
+ msg_q_t vfsQ = (msg_q_t)_syscall1(MSGQ_RESOLVE_ROOT,
+ reinterpret_cast<void*>(MSGQ_ROOT_VFS));
msg_t* msg = msg_allocate();
msg->type = VFS_MSG_REGISTER_MSGQ;
msg->data[0] = (uint64_t) q;
@@ -61,11 +71,18 @@ msg_q_t msg_q_resolve(const char* name)
{
if (0 == strcmp(VFS_ROOT, name))
{
- return (msg_q_t)_syscall0(MSGQ_RESOLVE_ROOT);
+ return (msg_q_t)_syscall1(MSGQ_RESOLVE_ROOT,
+ reinterpret_cast<void*>(MSGQ_ROOT_VFS));
+ }
+ else if (0 == strcmp(INTR_MSGQ, name))
+ {
+ return (msg_q_t)_syscall1(MSGQ_RESOLVE_ROOT,
+ reinterpret_cast<void*>(MSGQ_ROOT_INTR));
}
else
{
- msg_q_t vfsQ = (msg_q_t)_syscall0(MSGQ_RESOLVE_ROOT);
+ msg_q_t vfsQ = (msg_q_t)_syscall1(MSGQ_RESOLVE_ROOT,
+ reinterpret_cast<void*>(MSGQ_ROOT_VFS));
msg_t* msg = msg_allocate();
msg->type = VFS_MSG_RESOLVE_MSGQ;
msg->extra_data = (void*) name;
diff --git a/src/lib/syscall_task.C b/src/lib/syscall_task.C
index a00b779f7..d40136a21 100644
--- a/src/lib/syscall_task.C
+++ b/src/lib/syscall_task.C
@@ -80,7 +80,8 @@ tid_t task_exec(const char* file, void* ptr)
int rc = 0;
// Create message, send.
- msg_q_t vfsQ = (msg_q_t)_syscall0(MSGQ_RESOLVE_ROOT);
+ msg_q_t vfsQ = (msg_q_t)_syscall1(MSGQ_RESOLVE_ROOT,
+ reinterpret_cast<void*>(MSGQ_ROOT_VFS));
msg_t* msg = msg_allocate();
msg->type = VFS_MSG_EXEC;
msg->data[0] = (uint64_t) file;
OpenPOWER on IntegriCloud