aboutsummaryrefslogtreecommitdiff
path: root/include/apos
diff options
context:
space:
mode:
Diffstat (limited to 'include/apos')
-rw-r--r--include/apos/syscalls.h2
-rw-r--r--include/apos/tcb.h12
-rw-r--r--include/apos/uapi.h51
3 files changed, 39 insertions, 26 deletions
diff --git a/include/apos/syscalls.h b/include/apos/syscalls.h
index dd383c8..a5c805d 100644
--- a/include/apos/syscalls.h
+++ b/include/apos/syscalls.h
@@ -126,6 +126,8 @@ enum {
/** Shutdown, reboot, etc. */
SYS_POWEROFF,
/** @} */
+
+ SYS_NUM,
};
/* function declarations should be somewhere else, this file could be used in
diff --git a/include/apos/tcb.h b/include/apos/tcb.h
index 981f352..34b0457 100644
--- a/include/apos/tcb.h
+++ b/include/apos/tcb.h
@@ -31,13 +31,23 @@
#define is_rpc(t) (t->rid != t->pid)
/**
- * Get the process thread of current thread.
+ * Get the effective process thread of current thread.
*
* @param t Thread whose effective process thread to get.
* @return The process thread of the current thread.
*/
#define get_proc(t) (get_tcb(t->eid))
+#define get_eproc(t) get_proc(t)
+
+/**
+ * Get the current process thread of current thread.
+ *
+ * @param t Thread whose current process thread to get.
+ * @return The current process thread of the current thread.
+ */
+#define get_cproc(t) (get_tcb(t->pid))
+
/**
* Get the root process thread of current thread.
*
diff --git a/include/apos/uapi.h b/include/apos/uapi.h
index fea82e4..99ab4e1 100644
--- a/include/apos/uapi.h
+++ b/include/apos/uapi.h
@@ -16,7 +16,7 @@
* Syscall function type.
* Let's start with five arguments and see where that goes
*/
-typedef struct sys_ret (*sys_t)(long, long, long, long, long);
+typedef struct sys_ret (*sys_t)(struct tcb *t, long, long, long, long, long);
/**
* Syscall argument type.
@@ -83,7 +83,8 @@ struct sys_ret {
* @param name Name of syscall.
*/
#define SYSCALL_DECLARE0(name) \
- struct sys_ret sys_##name(sys_arg_t a, \
+ struct sys_ret sys_##name(struct tcb *t, \
+ sys_arg_t a, \
sys_arg_t b, \
sys_arg_t c, \
sys_arg_t d, \
@@ -96,7 +97,7 @@ struct sys_ret {
* @param a Name of argument.
*/
#define SYSCALL_DECLARE1(name, a) \
- struct sys_ret sys_##name(sys_arg_t a, sys_arg_t b, sys_arg_t c, \
+ struct sys_ret sys_##name(struct tcb *t, sys_arg_t a, sys_arg_t b, sys_arg_t c, \
sys_arg_t d, sys_arg_t e);
/**
@@ -107,7 +108,7 @@ struct sys_ret {
* @param b Name of second argument.
*/
#define SYSCALL_DECLARE2(name, a, b) \
- struct sys_ret sys_##name(sys_arg_t a, sys_arg_t b, sys_arg_t c, \
+ struct sys_ret sys_##name(struct tcb *t, sys_arg_t a, sys_arg_t b, sys_arg_t c, \
sys_arg_t d, sys_arg_t e);
/**
@@ -119,7 +120,7 @@ struct sys_ret {
* @param c Name of third argument.
*/
#define SYSCALL_DECLARE3(name, a, b, c) \
- struct sys_ret sys_##name(sys_arg_t a, sys_arg_t b, sys_arg_t c, \
+ struct sys_ret sys_##name(struct tcb *t, sys_arg_t a, sys_arg_t b, sys_arg_t c, \
sys_arg_t d, sys_arg_t e);
/**
@@ -132,7 +133,7 @@ struct sys_ret {
* @param d Name of fourth argument.
*/
#define SYSCALL_DECLARE4(name, a, b, c, d) \
- struct sys_ret sys_##name(sys_arg_t a, sys_arg_t b, sys_arg_t c, \
+ struct sys_ret sys_##name(struct tcb *t, sys_arg_t a, sys_arg_t b, sys_arg_t c, \
sys_arg_t d, sys_arg_t e);
/**
@@ -146,7 +147,7 @@ struct sys_ret {
* @param e Name of fifth argument.
*/
#define SYSCALL_DECLARE5(name, a, b, c, d, e) \
- struct sys_ret sys_##name(sys_arg_t a, sys_arg_t b, sys_arg_t c, \
+ struct sys_ret sys_##name(struct tcb *t, sys_arg_t a, sys_arg_t b, sys_arg_t c, \
sys_arg_t d, sys_arg_t e);
/**
@@ -155,8 +156,8 @@ struct sys_ret {
* @param name Name of syscall.
*/
#define SYSCALL_DEFINE0(name) \
- static inline struct sys_ret __##name(); \
- struct sys_ret sys_##name(sys_arg_t a, sys_arg_t b, sys_arg_t c, \
+ static inline struct sys_ret __##name(struct tcb *t); \
+ struct sys_ret sys_##name(struct tcb *t, sys_arg_t a, sys_arg_t b, sys_arg_t c, \
sys_arg_t d, sys_arg_t e) \
{ \
UNUSED(a); \
@@ -164,7 +165,7 @@ struct sys_ret {
UNUSED(c); \
UNUSED(d); \
UNUSED(e); \
- return __##name(); \
+ return __##name(t); \
} \
static struct sys_ret __##name
@@ -174,15 +175,15 @@ struct sys_ret {
* @param name Name of syscall.
*/
#define SYSCALL_DEFINE1(name) \
- static inline struct sys_ret __##name(sys_arg_t); \
- struct sys_ret sys_##name(sys_arg_t a, sys_arg_t b, sys_arg_t c, \
+ static inline struct sys_ret __##name(struct tcb *, sys_arg_t); \
+ struct sys_ret sys_##name(struct tcb *t, sys_arg_t a, sys_arg_t b, sys_arg_t c, \
sys_arg_t d, sys_arg_t e) \
{ \
UNUSED(b); \
UNUSED(c); \
UNUSED(d); \
UNUSED(e); \
- return __##name(a); \
+ return __##name(t, a); \
} \
static inline struct sys_ret __##name
@@ -192,14 +193,14 @@ struct sys_ret {
* @param name Name of syscall.
*/
#define SYSCALL_DEFINE2(name) \
- static inline struct sys_ret __##name(sys_arg_t, sys_arg_t); \
- struct sys_ret sys_##name(sys_arg_t a, sys_arg_t b, sys_arg_t c, \
+ static inline struct sys_ret __##name(struct tcb *, sys_arg_t, sys_arg_t); \
+ struct sys_ret sys_##name(struct tcb *t, sys_arg_t a, sys_arg_t b, sys_arg_t c, \
sys_arg_t d, sys_arg_t e) \
{ \
UNUSED(c); \
UNUSED(d); \
UNUSED(e); \
- return __##name(a, b); \
+ return __##name(t, a, b); \
} \
static inline struct sys_ret __##name
@@ -209,14 +210,14 @@ struct sys_ret {
* @param name Name of syscall.
*/
#define SYSCALL_DEFINE3(name) \
- static inline struct sys_ret __##name(sys_arg_t, sys_arg_t, \
+ static inline struct sys_ret __##name(struct tcb *, sys_arg_t, sys_arg_t, \
sys_arg_t); \
- struct sys_ret sys_##name(sys_arg_t a, sys_arg_t b, sys_arg_t c, \
+ struct sys_ret sys_##name(struct tcb *t, sys_arg_t a, sys_arg_t b, sys_arg_t c, \
sys_arg_t d, sys_arg_t e) \
{ \
UNUSED(d); \
UNUSED(e); \
- return __##name(a, b, c); \
+ return __##name(t, a, b, c); \
} \
static inline struct sys_ret __##name
@@ -226,13 +227,13 @@ struct sys_ret {
* @param name Name of syscall.
*/
#define SYSCALL_DEFINE4(name) \
- static inline struct sys_ret __##name(sys_arg_t, sys_arg_t, sys_arg_t, \
+ static inline struct sys_ret __##name(struct tcb *, sys_arg_t, sys_arg_t, sys_arg_t, \
sys_arg_t); \
- struct sys_ret sys_##name(sys_arg_t a, sys_arg_t b, sys_arg_t c, \
+ struct sys_ret sys_##name(struct tcb *t, sys_arg_t a, sys_arg_t b, sys_arg_t c, \
sys_arg_t d, sys_arg_t e) \
{ \
UNUSED(e); \
- return __##name(a, b, c, d); \
+ return __##name(t, a, b, c, d); \
} \
static inline struct sys_ret __##name
@@ -242,12 +243,12 @@ struct sys_ret {
* @param name Name of syscall.
*/
#define SYSCALL_DEFINE5(name) \
- static inline struct sys_ret __##name(sys_arg_t, sys_arg_t, sys_arg_t, \
+ static inline struct sys_ret __##name(struct tcb *, sys_arg_t, sys_arg_t, sys_arg_t, \
sys_arg_t, sys_arg_t); \
- struct sys_ret sys_##name(sys_arg_t a, sys_arg_t b, sys_arg_t c, \
+ struct sys_ret sys_##name(struct tcb *t, sys_arg_t a, sys_arg_t b, sys_arg_t c, \
sys_arg_t d, sys_arg_t e) \
{ \
- return __##name(a, b, c, d, e); \
+ return __##name(t, a, b, c, d, e); \
} \
static inline struct sys_ret __##name