aboutsummaryrefslogtreecommitdiff
path: root/include/apos/caps.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/apos/caps.h')
-rw-r--r--include/apos/caps.h70
1 files changed, 70 insertions, 0 deletions
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 <apos/bits.h>
+
+/** 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 */