From d2f2714398d415eb9a628aab82b332b92ad5c923 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Tue, 20 Sep 2022 15:38:06 +0300 Subject: add capability subsystem and syscalls --- include/apos/caps.h | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 include/apos/caps.h (limited to 'include/apos/caps.h') diff --git a/include/apos/caps.h b/include/apos/caps.h new file mode 100644 index 0000000..e8ef76b --- /dev/null +++ b/include/apos/caps.h @@ -0,0 +1,70 @@ +#ifndef APOS_CAPS_H +#define APOS_CAPS_H + +/** + * @file caps.h + * Capabilities of threads. + * \todo The list of capabilities should maybe be placed in some other file so + * as to easier extract it into userspace programs. + */ + +#include + +/** Helper typedef for capabilities. */ +typedef unsigned char capflags_t; + +enum { + /** Thread is allowed to set capabilities of other threads. */ + CAP_CAPS = (1 << 0), + + /** Thread is allowed to modify process statuses, exec/fork/etc. */ + CAP_PROC = (1 << 1), + + /** Thread is allowed to force interrupt to callback in other thread. */ + CAP_CALL = (1 << 2), +}; + +/** + * Check that offset is OK. + * + * @param o Offset to check. + * @return \ref true is OK, \ref false otherwise. + */ +#define cap_off_ok(o) (o == 0) + +/** + * Set capabilities. + * + * @param x Capabilities to modify. + * @param o Offset. + * @param c Capabilities to set. + */ +#define set_caps(x, o, c) set_bits(x, c) + +/** + * Clear capabilities. + * + * @param x Capabilities to modify. + * @param o Offset. + * @param c Capabilities to set. + */ +#define clear_caps(x, o, c) clear_bits(x, c) + +/** + * Copy capabilities. + * + * @param x Capabilities to copy to. + * @param y Capabilities to copy from. + */ +#define copy_caps(x, y) (x = y) + +/** + * Get capabilities at offset \p o. + * + * @param x Capabilities to get from. + * @param o Offset to get capabilities from. + * @return Capabilities at offset \p o. + */ +#define get_caps(x, o) (x) + +#endif /* APOS_CAPS_H */ -- cgit v1.3