1 // Copyright 2017 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef ZIRCON_RIGHTS_H_
6 #define ZIRCON_RIGHTS_H_
7 
8 #include <stdint.h>
9 
10 typedef uint32_t zx_rights_t;
11 #define ZX_RIGHT_NONE             ((zx_rights_t)0u)
12 #define ZX_RIGHT_DUPLICATE        ((zx_rights_t)1u << 0)
13 #define ZX_RIGHT_TRANSFER         ((zx_rights_t)1u << 1)
14 #define ZX_RIGHT_READ             ((zx_rights_t)1u << 2)
15 #define ZX_RIGHT_WRITE            ((zx_rights_t)1u << 3)
16 #define ZX_RIGHT_EXECUTE          ((zx_rights_t)1u << 4)
17 #define ZX_RIGHT_MAP              ((zx_rights_t)1u << 5)
18 #define ZX_RIGHT_GET_PROPERTY     ((zx_rights_t)1u << 6)
19 #define ZX_RIGHT_SET_PROPERTY     ((zx_rights_t)1u << 7)
20 #define ZX_RIGHT_ENUMERATE        ((zx_rights_t)1u << 8)
21 #define ZX_RIGHT_DESTROY          ((zx_rights_t)1u << 9)
22 #define ZX_RIGHT_SET_POLICY       ((zx_rights_t)1u << 10)
23 #define ZX_RIGHT_GET_POLICY       ((zx_rights_t)1u << 11)
24 #define ZX_RIGHT_SIGNAL           ((zx_rights_t)1u << 12)
25 #define ZX_RIGHT_SIGNAL_PEER      ((zx_rights_t)1u << 13)
26 #define ZX_RIGHT_WAIT             ((zx_rights_t)1u << 14)
27 #define ZX_RIGHT_INSPECT          ((zx_rights_t)1u << 15)
28 #define ZX_RIGHT_MANAGE_JOB       ((zx_rights_t)1u << 16)
29 #define ZX_RIGHT_MANAGE_PROCESS   ((zx_rights_t)1u << 17)
30 #define ZX_RIGHT_MANAGE_THREAD    ((zx_rights_t)1u << 18)
31 #define ZX_RIGHT_APPLY_PROFILE    ((zx_rights_t)1u << 19)
32 #define ZX_RIGHT_SAME_RIGHTS      ((zx_rights_t)1u << 31)
33 
34 // Convenient names for commonly grouped rights.
35 #define ZX_RIGHTS_BASIC (ZX_RIGHT_TRANSFER | ZX_RIGHT_DUPLICATE | ZX_RIGHT_WAIT | ZX_RIGHT_INSPECT)
36 
37 #define ZX_RIGHTS_IO (ZX_RIGHT_READ | ZX_RIGHT_WRITE)
38 
39 #define ZX_RIGHTS_PROPERTY (ZX_RIGHT_GET_PROPERTY | ZX_RIGHT_SET_PROPERTY)
40 
41 #define ZX_RIGHTS_POLICY (ZX_RIGHT_GET_POLICY | ZX_RIGHT_SET_POLICY)
42 
43 #define ZX_DEFAULT_CHANNEL_RIGHTS                                                                  \
44     ((ZX_RIGHTS_BASIC & (~ZX_RIGHT_DUPLICATE)) | ZX_RIGHTS_IO | ZX_RIGHT_SIGNAL |                  \
45      ZX_RIGHT_SIGNAL_PEER)
46 
47 #define ZX_DEFAULT_EVENT_RIGHTS (ZX_RIGHTS_BASIC | ZX_RIGHT_SIGNAL)
48 
49 #define ZX_DEFAULT_EVENTPAIR_RIGHTS (ZX_RIGHTS_BASIC | ZX_RIGHT_SIGNAL | ZX_RIGHT_SIGNAL_PEER)
50 
51 #define ZX_DEFAULT_FIFO_RIGHTS \
52     (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO |\
53      ZX_RIGHT_SIGNAL | ZX_RIGHT_SIGNAL_PEER)
54 
55 #define ZX_DEFAULT_GUEST_RIGHTS \
56     (ZX_RIGHT_TRANSFER | ZX_RIGHT_DUPLICATE | ZX_RIGHT_WRITE |\
57      ZX_RIGHT_INSPECT | ZX_RIGHT_MANAGE_PROCESS)
58 
59 #define ZX_DEFAULT_INTERRUPT_RIGHTS (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHT_SIGNAL)
60 
61 #define ZX_DEFAULT_IO_MAPPING_RIGHTS \
62     (ZX_RIGHT_READ | ZX_RIGHT_INSPECT)
63 
64 #define ZX_DEFAULT_JOB_RIGHTS                                                                      \
65     (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHTS_PROPERTY | ZX_RIGHTS_POLICY | ZX_RIGHT_ENUMERATE | \
66      ZX_RIGHT_DESTROY | ZX_RIGHT_SIGNAL | ZX_RIGHT_MANAGE_JOB | ZX_RIGHT_MANAGE_PROCESS)
67 
68 #define ZX_DEFAULT_LOG_RIGHTS \
69     (ZX_RIGHTS_BASIC | ZX_RIGHT_WRITE | ZX_RIGHT_SIGNAL)
70 
71 #define ZX_DEFAULT_PCI_DEVICE_RIGHTS \
72     (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO)
73 
74 #define ZX_DEFAULT_PCI_INTERRUPT_RIGHTS \
75     (ZX_RIGHTS_BASIC  | ZX_RIGHTS_IO | ZX_RIGHT_SIGNAL)
76 
77 #define ZX_DEFAULT_PORT_RIGHTS \
78     ((ZX_RIGHTS_BASIC & (~ZX_RIGHT_WAIT)) | ZX_RIGHTS_IO)
79 
80 #define ZX_DEFAULT_PROCESS_RIGHTS                                                                  \
81     (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHTS_PROPERTY | ZX_RIGHT_ENUMERATE | ZX_RIGHT_DESTROY | \
82      ZX_RIGHT_SIGNAL | ZX_RIGHT_MANAGE_PROCESS | ZX_RIGHT_MANAGE_THREAD)
83 
84 #define ZX_DEFAULT_RESOURCE_RIGHTS \
85     (ZX_RIGHT_TRANSFER | ZX_RIGHT_DUPLICATE | ZX_RIGHT_WRITE |\
86      ZX_RIGHT_INSPECT)
87 
88 #define ZX_DEFAULT_SOCKET_RIGHTS \
89     (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHT_GET_PROPERTY |\
90      ZX_RIGHT_SET_PROPERTY | ZX_RIGHT_SIGNAL | ZX_RIGHT_SIGNAL_PEER)
91 
92 #define ZX_DEFAULT_THREAD_RIGHTS \
93     (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHTS_PROPERTY |\
94      ZX_RIGHT_DESTROY | ZX_RIGHT_SIGNAL | ZX_RIGHT_MANAGE_THREAD)
95 
96 #define ZX_DEFAULT_TIMER_RIGHTS (ZX_RIGHTS_BASIC | ZX_RIGHT_WRITE | ZX_RIGHT_SIGNAL)
97 
98 #define ZX_DEFAULT_VCPU_RIGHTS \
99     (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHT_EXECUTE | ZX_RIGHT_SIGNAL)
100 
101 #define ZX_DEFAULT_VMAR_RIGHTS \
102     (ZX_RIGHTS_BASIC & (~ZX_RIGHT_WAIT))
103 
104 #define ZX_DEFAULT_VMO_RIGHTS\
105     (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHTS_PROPERTY |\
106      ZX_RIGHT_EXECUTE | ZX_RIGHT_MAP | ZX_RIGHT_SIGNAL)
107 
108 #define ZX_DEFAULT_IOMMU_RIGHTS \
109     (ZX_RIGHTS_BASIC & (~ZX_RIGHT_WAIT))
110 
111 #define ZX_DEFAULT_BTI_RIGHTS \
112     ((ZX_RIGHTS_BASIC & (~ZX_RIGHT_WAIT)) | ZX_RIGHTS_IO | ZX_RIGHT_MAP)
113 
114 #define ZX_DEFAULT_PROFILE_RIGHTS \
115     ((ZX_RIGHTS_BASIC & (~ZX_RIGHT_WAIT)) | ZX_RIGHT_APPLY_PROFILE)
116 
117 #define ZX_DEFAULT_PMT_RIGHTS \
118     (ZX_RIGHT_INSPECT)
119 
120 #define ZX_DEFAULT_SUSPEND_TOKEN_RIGHTS \
121     (ZX_RIGHT_TRANSFER | ZX_RIGHT_INSPECT)
122 
123 #define ZX_DEFAULT_PAGER_RIGHTS \
124     (ZX_RIGHT_INSPECT | ZX_RIGHT_ENUMERATE | ZX_RIGHT_GET_PROPERTY |\
125      ZX_RIGHT_SET_PROPERTY | ZX_RIGHT_TRANSFER)
126 
127 #endif // ZIRCON_RIGHTS_H_
128