summaryrefslogtreecommitdiffstats
path: root/src/kernel/syscall.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/syscall.C')
-rw-r--r--src/kernel/syscall.C36
1 files changed, 31 insertions, 5 deletions
diff --git a/src/kernel/syscall.C b/src/kernel/syscall.C
index 9dc6bd720..13f6288fd 100644
--- a/src/kernel/syscall.C
+++ b/src/kernel/syscall.C
@@ -46,11 +46,8 @@
#include <sys/sync.h>
#include <errno.h>
#include <kernel/machchk.H>
+#include <kernel/ipc.H>
-namespace KernelIpc
-{
- int send(uint64_t i_q, msg_t * i_msg);
-};
extern "C"
void kernel_execute_hype_doorbell()
@@ -144,6 +141,8 @@ namespace Systemcalls
void MmLinearMap(task_t *t);
void CritAssert(task_t *t);
void SetMchkData(task_t *t);
+ void UpdateRemoteIpcAddr(task_t *t);
+ void QryLocalIpcInfo(task_t *t);
syscall syscalls[] =
@@ -188,8 +187,10 @@ namespace Systemcalls
&MmLinearMap, // MM_LINEAR_MAP
&CritAssert, // MISC_CRITASSERT
&SetMchkData, // MISC_SETMCHKDATA
+ &UpdateRemoteIpcAddr, // UPDATE_REMOTE_IPC_ADDR
+ &QryLocalIpcInfo // QRY_LOCAL_IPC_INFO
- };
+ };
};
extern "C"
@@ -1004,5 +1005,30 @@ namespace Systemcalls
Kernel::MachineCheck::setCheckstopData(i_xstopAddr,i_xstopData);
}
+ /**
+ * @brief Tells the kernel the address of the Remote IPC buffer
+ * for a given Node
+ * @param[in] t: the task calling the update function
+ */
+ void UpdateRemoteIpcAddr(task_t* t)
+ {
+ uint64_t i_Node = TASK_GETARG0(t);
+ uint64_t i_RemoteAddr = TASK_GETARG1(t);
+ int rc = KernelIpc::updateRemoteIpcAddr(i_Node, i_RemoteAddr);
+ TASK_SETRTN(t, rc);
+ }
+
+ /**
+ * @brief Query the local node and IPC buffer info
+ * @param[in] t: the task calling the update function
+ */
+ void QryLocalIpcInfo(task_t* t)
+ {
+ uint64_t * i_pONode = (uint64_t *)TASK_GETARG0(t);
+ uint64_t * i_pOAddr = (uint64_t *)TASK_GETARG1(t);
+ int rc = KernelIpc::qryLocalIpcInfo(i_pONode, i_pOAddr);
+ TASK_SETRTN(t, rc);
+ }
+
};
OpenPOWER on IntegriCloud