aboutsummaryrefslogtreecommitdiff
path: root/include/apos/caps.h
blob: b64b05af237447332eb560432efd26b0586fc5b1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#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),

	/** Thread is allowed to assign threads to processors. */
	CAP_ASSIGN = (1 << 3),
};

/**
 * 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 */