xref: /aosp_15_r20/bionic/libc/kernel/uapi/linux/android/binder.h (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker /*
2*8d67ca89SAndroid Build Coastguard Worker  * This file is auto-generated. Modifications will be lost.
3*8d67ca89SAndroid Build Coastguard Worker  *
4*8d67ca89SAndroid Build Coastguard Worker  * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5*8d67ca89SAndroid Build Coastguard Worker  * for more information.
6*8d67ca89SAndroid Build Coastguard Worker  */
7*8d67ca89SAndroid Build Coastguard Worker #ifndef _UAPI_LINUX_BINDER_H
8*8d67ca89SAndroid Build Coastguard Worker #define _UAPI_LINUX_BINDER_H
9*8d67ca89SAndroid Build Coastguard Worker #include <linux/types.h>
10*8d67ca89SAndroid Build Coastguard Worker #include <linux/ioctl.h>
11*8d67ca89SAndroid Build Coastguard Worker #define B_PACK_CHARS(c1,c2,c3,c4) ((((c1) << 24)) | (((c2) << 16)) | (((c3) << 8)) | (c4))
12*8d67ca89SAndroid Build Coastguard Worker #define B_TYPE_LARGE 0x85
13*8d67ca89SAndroid Build Coastguard Worker enum {
14*8d67ca89SAndroid Build Coastguard Worker   BINDER_TYPE_BINDER = B_PACK_CHARS('s', 'b', '*', B_TYPE_LARGE),
15*8d67ca89SAndroid Build Coastguard Worker   BINDER_TYPE_WEAK_BINDER = B_PACK_CHARS('w', 'b', '*', B_TYPE_LARGE),
16*8d67ca89SAndroid Build Coastguard Worker   BINDER_TYPE_HANDLE = B_PACK_CHARS('s', 'h', '*', B_TYPE_LARGE),
17*8d67ca89SAndroid Build Coastguard Worker   BINDER_TYPE_WEAK_HANDLE = B_PACK_CHARS('w', 'h', '*', B_TYPE_LARGE),
18*8d67ca89SAndroid Build Coastguard Worker   BINDER_TYPE_FD = B_PACK_CHARS('f', 'd', '*', B_TYPE_LARGE),
19*8d67ca89SAndroid Build Coastguard Worker   BINDER_TYPE_FDA = B_PACK_CHARS('f', 'd', 'a', B_TYPE_LARGE),
20*8d67ca89SAndroid Build Coastguard Worker   BINDER_TYPE_PTR = B_PACK_CHARS('p', 't', '*', B_TYPE_LARGE),
21*8d67ca89SAndroid Build Coastguard Worker };
22*8d67ca89SAndroid Build Coastguard Worker enum flat_binder_object_shifts {
23*8d67ca89SAndroid Build Coastguard Worker   FLAT_BINDER_FLAG_SCHED_POLICY_SHIFT = 9,
24*8d67ca89SAndroid Build Coastguard Worker };
25*8d67ca89SAndroid Build Coastguard Worker enum flat_binder_object_flags {
26*8d67ca89SAndroid Build Coastguard Worker   FLAT_BINDER_FLAG_PRIORITY_MASK = 0xff,
27*8d67ca89SAndroid Build Coastguard Worker   FLAT_BINDER_FLAG_ACCEPTS_FDS = 0x100,
28*8d67ca89SAndroid Build Coastguard Worker   FLAT_BINDER_FLAG_SCHED_POLICY_MASK = 3U << FLAT_BINDER_FLAG_SCHED_POLICY_SHIFT,
29*8d67ca89SAndroid Build Coastguard Worker   FLAT_BINDER_FLAG_INHERIT_RT = 0x800,
30*8d67ca89SAndroid Build Coastguard Worker   FLAT_BINDER_FLAG_TXN_SECURITY_CTX = 0x1000,
31*8d67ca89SAndroid Build Coastguard Worker };
32*8d67ca89SAndroid Build Coastguard Worker #ifdef BINDER_IPC_32BIT
33*8d67ca89SAndroid Build Coastguard Worker typedef __u32 binder_size_t;
34*8d67ca89SAndroid Build Coastguard Worker typedef __u32 binder_uintptr_t;
35*8d67ca89SAndroid Build Coastguard Worker #else
36*8d67ca89SAndroid Build Coastguard Worker typedef __u64 binder_size_t;
37*8d67ca89SAndroid Build Coastguard Worker typedef __u64 binder_uintptr_t;
38*8d67ca89SAndroid Build Coastguard Worker #endif
39*8d67ca89SAndroid Build Coastguard Worker struct binder_object_header {
40*8d67ca89SAndroid Build Coastguard Worker   __u32 type;
41*8d67ca89SAndroid Build Coastguard Worker };
42*8d67ca89SAndroid Build Coastguard Worker struct flat_binder_object {
43*8d67ca89SAndroid Build Coastguard Worker   struct binder_object_header hdr;
44*8d67ca89SAndroid Build Coastguard Worker   __u32 flags;
45*8d67ca89SAndroid Build Coastguard Worker   union {
46*8d67ca89SAndroid Build Coastguard Worker     binder_uintptr_t binder;
47*8d67ca89SAndroid Build Coastguard Worker     __u32 handle;
48*8d67ca89SAndroid Build Coastguard Worker   };
49*8d67ca89SAndroid Build Coastguard Worker   binder_uintptr_t cookie;
50*8d67ca89SAndroid Build Coastguard Worker };
51*8d67ca89SAndroid Build Coastguard Worker struct binder_fd_object {
52*8d67ca89SAndroid Build Coastguard Worker   struct binder_object_header hdr;
53*8d67ca89SAndroid Build Coastguard Worker   __u32 pad_flags;
54*8d67ca89SAndroid Build Coastguard Worker   union {
55*8d67ca89SAndroid Build Coastguard Worker     binder_uintptr_t pad_binder;
56*8d67ca89SAndroid Build Coastguard Worker     __u32 fd;
57*8d67ca89SAndroid Build Coastguard Worker   };
58*8d67ca89SAndroid Build Coastguard Worker   binder_uintptr_t cookie;
59*8d67ca89SAndroid Build Coastguard Worker };
60*8d67ca89SAndroid Build Coastguard Worker struct binder_buffer_object {
61*8d67ca89SAndroid Build Coastguard Worker   struct binder_object_header hdr;
62*8d67ca89SAndroid Build Coastguard Worker   __u32 flags;
63*8d67ca89SAndroid Build Coastguard Worker   binder_uintptr_t buffer;
64*8d67ca89SAndroid Build Coastguard Worker   binder_size_t length;
65*8d67ca89SAndroid Build Coastguard Worker   binder_size_t parent;
66*8d67ca89SAndroid Build Coastguard Worker   binder_size_t parent_offset;
67*8d67ca89SAndroid Build Coastguard Worker };
68*8d67ca89SAndroid Build Coastguard Worker enum {
69*8d67ca89SAndroid Build Coastguard Worker   BINDER_BUFFER_FLAG_HAS_PARENT = 0x01,
70*8d67ca89SAndroid Build Coastguard Worker };
71*8d67ca89SAndroid Build Coastguard Worker struct binder_fd_array_object {
72*8d67ca89SAndroid Build Coastguard Worker   struct binder_object_header hdr;
73*8d67ca89SAndroid Build Coastguard Worker   __u32 pad;
74*8d67ca89SAndroid Build Coastguard Worker   binder_size_t num_fds;
75*8d67ca89SAndroid Build Coastguard Worker   binder_size_t parent;
76*8d67ca89SAndroid Build Coastguard Worker   binder_size_t parent_offset;
77*8d67ca89SAndroid Build Coastguard Worker };
78*8d67ca89SAndroid Build Coastguard Worker struct binder_write_read {
79*8d67ca89SAndroid Build Coastguard Worker   binder_size_t write_size;
80*8d67ca89SAndroid Build Coastguard Worker   binder_size_t write_consumed;
81*8d67ca89SAndroid Build Coastguard Worker   binder_uintptr_t write_buffer;
82*8d67ca89SAndroid Build Coastguard Worker   binder_size_t read_size;
83*8d67ca89SAndroid Build Coastguard Worker   binder_size_t read_consumed;
84*8d67ca89SAndroid Build Coastguard Worker   binder_uintptr_t read_buffer;
85*8d67ca89SAndroid Build Coastguard Worker };
86*8d67ca89SAndroid Build Coastguard Worker struct binder_version {
87*8d67ca89SAndroid Build Coastguard Worker   __s32 protocol_version;
88*8d67ca89SAndroid Build Coastguard Worker };
89*8d67ca89SAndroid Build Coastguard Worker #ifdef BINDER_IPC_32BIT
90*8d67ca89SAndroid Build Coastguard Worker #define BINDER_CURRENT_PROTOCOL_VERSION 7
91*8d67ca89SAndroid Build Coastguard Worker #else
92*8d67ca89SAndroid Build Coastguard Worker #define BINDER_CURRENT_PROTOCOL_VERSION 8
93*8d67ca89SAndroid Build Coastguard Worker #endif
94*8d67ca89SAndroid Build Coastguard Worker struct binder_node_debug_info {
95*8d67ca89SAndroid Build Coastguard Worker   binder_uintptr_t ptr;
96*8d67ca89SAndroid Build Coastguard Worker   binder_uintptr_t cookie;
97*8d67ca89SAndroid Build Coastguard Worker   __u32 has_strong_ref;
98*8d67ca89SAndroid Build Coastguard Worker   __u32 has_weak_ref;
99*8d67ca89SAndroid Build Coastguard Worker };
100*8d67ca89SAndroid Build Coastguard Worker struct binder_node_info_for_ref {
101*8d67ca89SAndroid Build Coastguard Worker   __u32 handle;
102*8d67ca89SAndroid Build Coastguard Worker   __u32 strong_count;
103*8d67ca89SAndroid Build Coastguard Worker   __u32 weak_count;
104*8d67ca89SAndroid Build Coastguard Worker   __u32 reserved1;
105*8d67ca89SAndroid Build Coastguard Worker   __u32 reserved2;
106*8d67ca89SAndroid Build Coastguard Worker   __u32 reserved3;
107*8d67ca89SAndroid Build Coastguard Worker };
108*8d67ca89SAndroid Build Coastguard Worker struct binder_freeze_info {
109*8d67ca89SAndroid Build Coastguard Worker   __u32 pid;
110*8d67ca89SAndroid Build Coastguard Worker   __u32 enable;
111*8d67ca89SAndroid Build Coastguard Worker   __u32 timeout_ms;
112*8d67ca89SAndroid Build Coastguard Worker };
113*8d67ca89SAndroid Build Coastguard Worker struct binder_frozen_status_info {
114*8d67ca89SAndroid Build Coastguard Worker   __u32 pid;
115*8d67ca89SAndroid Build Coastguard Worker   __u32 sync_recv;
116*8d67ca89SAndroid Build Coastguard Worker   __u32 async_recv;
117*8d67ca89SAndroid Build Coastguard Worker };
118*8d67ca89SAndroid Build Coastguard Worker struct binder_extended_error {
119*8d67ca89SAndroid Build Coastguard Worker   __u32 id;
120*8d67ca89SAndroid Build Coastguard Worker   __u32 command;
121*8d67ca89SAndroid Build Coastguard Worker   __s32 param;
122*8d67ca89SAndroid Build Coastguard Worker };
123*8d67ca89SAndroid Build Coastguard Worker enum {
124*8d67ca89SAndroid Build Coastguard Worker   BINDER_WRITE_READ = _IOWR('b', 1, struct binder_write_read),
125*8d67ca89SAndroid Build Coastguard Worker   BINDER_SET_IDLE_TIMEOUT = _IOW('b', 3, __s64),
126*8d67ca89SAndroid Build Coastguard Worker   BINDER_SET_MAX_THREADS = _IOW('b', 5, __u32),
127*8d67ca89SAndroid Build Coastguard Worker   BINDER_SET_IDLE_PRIORITY = _IOW('b', 6, __s32),
128*8d67ca89SAndroid Build Coastguard Worker   BINDER_SET_CONTEXT_MGR = _IOW('b', 7, __s32),
129*8d67ca89SAndroid Build Coastguard Worker   BINDER_THREAD_EXIT = _IOW('b', 8, __s32),
130*8d67ca89SAndroid Build Coastguard Worker   BINDER_VERSION = _IOWR('b', 9, struct binder_version),
131*8d67ca89SAndroid Build Coastguard Worker   BINDER_GET_NODE_DEBUG_INFO = _IOWR('b', 11, struct binder_node_debug_info),
132*8d67ca89SAndroid Build Coastguard Worker   BINDER_GET_NODE_INFO_FOR_REF = _IOWR('b', 12, struct binder_node_info_for_ref),
133*8d67ca89SAndroid Build Coastguard Worker   BINDER_SET_CONTEXT_MGR_EXT = _IOW('b', 13, struct flat_binder_object),
134*8d67ca89SAndroid Build Coastguard Worker   BINDER_FREEZE = _IOW('b', 14, struct binder_freeze_info),
135*8d67ca89SAndroid Build Coastguard Worker   BINDER_GET_FROZEN_INFO = _IOWR('b', 15, struct binder_frozen_status_info),
136*8d67ca89SAndroid Build Coastguard Worker   BINDER_ENABLE_ONEWAY_SPAM_DETECTION = _IOW('b', 16, __u32),
137*8d67ca89SAndroid Build Coastguard Worker   BINDER_GET_EXTENDED_ERROR = _IOWR('b', 17, struct binder_extended_error),
138*8d67ca89SAndroid Build Coastguard Worker };
139*8d67ca89SAndroid Build Coastguard Worker enum transaction_flags {
140*8d67ca89SAndroid Build Coastguard Worker   TF_ONE_WAY = 0x01,
141*8d67ca89SAndroid Build Coastguard Worker   TF_ROOT_OBJECT = 0x04,
142*8d67ca89SAndroid Build Coastguard Worker   TF_STATUS_CODE = 0x08,
143*8d67ca89SAndroid Build Coastguard Worker   TF_ACCEPT_FDS = 0x10,
144*8d67ca89SAndroid Build Coastguard Worker   TF_CLEAR_BUF = 0x20,
145*8d67ca89SAndroid Build Coastguard Worker   TF_UPDATE_TXN = 0x40,
146*8d67ca89SAndroid Build Coastguard Worker };
147*8d67ca89SAndroid Build Coastguard Worker struct binder_transaction_data {
148*8d67ca89SAndroid Build Coastguard Worker   union {
149*8d67ca89SAndroid Build Coastguard Worker     __u32 handle;
150*8d67ca89SAndroid Build Coastguard Worker     binder_uintptr_t ptr;
151*8d67ca89SAndroid Build Coastguard Worker   } target;
152*8d67ca89SAndroid Build Coastguard Worker   binder_uintptr_t cookie;
153*8d67ca89SAndroid Build Coastguard Worker   __u32 code;
154*8d67ca89SAndroid Build Coastguard Worker   __u32 flags;
155*8d67ca89SAndroid Build Coastguard Worker   __kernel_pid_t sender_pid;
156*8d67ca89SAndroid Build Coastguard Worker   __kernel_uid32_t sender_euid;
157*8d67ca89SAndroid Build Coastguard Worker   binder_size_t data_size;
158*8d67ca89SAndroid Build Coastguard Worker   binder_size_t offsets_size;
159*8d67ca89SAndroid Build Coastguard Worker   union {
160*8d67ca89SAndroid Build Coastguard Worker     struct {
161*8d67ca89SAndroid Build Coastguard Worker       binder_uintptr_t buffer;
162*8d67ca89SAndroid Build Coastguard Worker       binder_uintptr_t offsets;
163*8d67ca89SAndroid Build Coastguard Worker     } ptr;
164*8d67ca89SAndroid Build Coastguard Worker     __u8 buf[8];
165*8d67ca89SAndroid Build Coastguard Worker   } data;
166*8d67ca89SAndroid Build Coastguard Worker };
167*8d67ca89SAndroid Build Coastguard Worker struct binder_transaction_data_secctx {
168*8d67ca89SAndroid Build Coastguard Worker   struct binder_transaction_data transaction_data;
169*8d67ca89SAndroid Build Coastguard Worker   binder_uintptr_t secctx;
170*8d67ca89SAndroid Build Coastguard Worker };
171*8d67ca89SAndroid Build Coastguard Worker struct binder_transaction_data_sg {
172*8d67ca89SAndroid Build Coastguard Worker   struct binder_transaction_data transaction_data;
173*8d67ca89SAndroid Build Coastguard Worker   binder_size_t buffers_size;
174*8d67ca89SAndroid Build Coastguard Worker };
175*8d67ca89SAndroid Build Coastguard Worker struct binder_ptr_cookie {
176*8d67ca89SAndroid Build Coastguard Worker   binder_uintptr_t ptr;
177*8d67ca89SAndroid Build Coastguard Worker   binder_uintptr_t cookie;
178*8d67ca89SAndroid Build Coastguard Worker };
179*8d67ca89SAndroid Build Coastguard Worker struct binder_handle_cookie {
180*8d67ca89SAndroid Build Coastguard Worker   __u32 handle;
181*8d67ca89SAndroid Build Coastguard Worker   binder_uintptr_t cookie;
182*8d67ca89SAndroid Build Coastguard Worker } __attribute__((__packed__));
183*8d67ca89SAndroid Build Coastguard Worker struct binder_pri_desc {
184*8d67ca89SAndroid Build Coastguard Worker   __s32 priority;
185*8d67ca89SAndroid Build Coastguard Worker   __u32 desc;
186*8d67ca89SAndroid Build Coastguard Worker };
187*8d67ca89SAndroid Build Coastguard Worker struct binder_pri_ptr_cookie {
188*8d67ca89SAndroid Build Coastguard Worker   __s32 priority;
189*8d67ca89SAndroid Build Coastguard Worker   binder_uintptr_t ptr;
190*8d67ca89SAndroid Build Coastguard Worker   binder_uintptr_t cookie;
191*8d67ca89SAndroid Build Coastguard Worker };
192*8d67ca89SAndroid Build Coastguard Worker enum binder_driver_return_protocol {
193*8d67ca89SAndroid Build Coastguard Worker   BR_ERROR = _IOR('r', 0, __s32),
194*8d67ca89SAndroid Build Coastguard Worker   BR_OK = _IO('r', 1),
195*8d67ca89SAndroid Build Coastguard Worker   BR_TRANSACTION_SEC_CTX = _IOR('r', 2, struct binder_transaction_data_secctx),
196*8d67ca89SAndroid Build Coastguard Worker   BR_TRANSACTION = _IOR('r', 2, struct binder_transaction_data),
197*8d67ca89SAndroid Build Coastguard Worker   BR_REPLY = _IOR('r', 3, struct binder_transaction_data),
198*8d67ca89SAndroid Build Coastguard Worker   BR_ACQUIRE_RESULT = _IOR('r', 4, __s32),
199*8d67ca89SAndroid Build Coastguard Worker   BR_DEAD_REPLY = _IO('r', 5),
200*8d67ca89SAndroid Build Coastguard Worker   BR_TRANSACTION_COMPLETE = _IO('r', 6),
201*8d67ca89SAndroid Build Coastguard Worker   BR_INCREFS = _IOR('r', 7, struct binder_ptr_cookie),
202*8d67ca89SAndroid Build Coastguard Worker   BR_ACQUIRE = _IOR('r', 8, struct binder_ptr_cookie),
203*8d67ca89SAndroid Build Coastguard Worker   BR_RELEASE = _IOR('r', 9, struct binder_ptr_cookie),
204*8d67ca89SAndroid Build Coastguard Worker   BR_DECREFS = _IOR('r', 10, struct binder_ptr_cookie),
205*8d67ca89SAndroid Build Coastguard Worker   BR_ATTEMPT_ACQUIRE = _IOR('r', 11, struct binder_pri_ptr_cookie),
206*8d67ca89SAndroid Build Coastguard Worker   BR_NOOP = _IO('r', 12),
207*8d67ca89SAndroid Build Coastguard Worker   BR_SPAWN_LOOPER = _IO('r', 13),
208*8d67ca89SAndroid Build Coastguard Worker   BR_FINISHED = _IO('r', 14),
209*8d67ca89SAndroid Build Coastguard Worker   BR_DEAD_BINDER = _IOR('r', 15, binder_uintptr_t),
210*8d67ca89SAndroid Build Coastguard Worker   BR_CLEAR_DEATH_NOTIFICATION_DONE = _IOR('r', 16, binder_uintptr_t),
211*8d67ca89SAndroid Build Coastguard Worker   BR_FAILED_REPLY = _IO('r', 17),
212*8d67ca89SAndroid Build Coastguard Worker   BR_FROZEN_REPLY = _IO('r', 18),
213*8d67ca89SAndroid Build Coastguard Worker   BR_ONEWAY_SPAM_SUSPECT = _IO('r', 19),
214*8d67ca89SAndroid Build Coastguard Worker   BR_TRANSACTION_PENDING_FROZEN = _IO('r', 20),
215*8d67ca89SAndroid Build Coastguard Worker };
216*8d67ca89SAndroid Build Coastguard Worker enum binder_driver_command_protocol {
217*8d67ca89SAndroid Build Coastguard Worker   BC_TRANSACTION = _IOW('c', 0, struct binder_transaction_data),
218*8d67ca89SAndroid Build Coastguard Worker   BC_REPLY = _IOW('c', 1, struct binder_transaction_data),
219*8d67ca89SAndroid Build Coastguard Worker   BC_ACQUIRE_RESULT = _IOW('c', 2, __s32),
220*8d67ca89SAndroid Build Coastguard Worker   BC_FREE_BUFFER = _IOW('c', 3, binder_uintptr_t),
221*8d67ca89SAndroid Build Coastguard Worker   BC_INCREFS = _IOW('c', 4, __u32),
222*8d67ca89SAndroid Build Coastguard Worker   BC_ACQUIRE = _IOW('c', 5, __u32),
223*8d67ca89SAndroid Build Coastguard Worker   BC_RELEASE = _IOW('c', 6, __u32),
224*8d67ca89SAndroid Build Coastguard Worker   BC_DECREFS = _IOW('c', 7, __u32),
225*8d67ca89SAndroid Build Coastguard Worker   BC_INCREFS_DONE = _IOW('c', 8, struct binder_ptr_cookie),
226*8d67ca89SAndroid Build Coastguard Worker   BC_ACQUIRE_DONE = _IOW('c', 9, struct binder_ptr_cookie),
227*8d67ca89SAndroid Build Coastguard Worker   BC_ATTEMPT_ACQUIRE = _IOW('c', 10, struct binder_pri_desc),
228*8d67ca89SAndroid Build Coastguard Worker   BC_REGISTER_LOOPER = _IO('c', 11),
229*8d67ca89SAndroid Build Coastguard Worker   BC_ENTER_LOOPER = _IO('c', 12),
230*8d67ca89SAndroid Build Coastguard Worker   BC_EXIT_LOOPER = _IO('c', 13),
231*8d67ca89SAndroid Build Coastguard Worker   BC_REQUEST_DEATH_NOTIFICATION = _IOW('c', 14, struct binder_handle_cookie),
232*8d67ca89SAndroid Build Coastguard Worker   BC_CLEAR_DEATH_NOTIFICATION = _IOW('c', 15, struct binder_handle_cookie),
233*8d67ca89SAndroid Build Coastguard Worker   BC_DEAD_BINDER_DONE = _IOW('c', 16, binder_uintptr_t),
234*8d67ca89SAndroid Build Coastguard Worker   BC_TRANSACTION_SG = _IOW('c', 17, struct binder_transaction_data_sg),
235*8d67ca89SAndroid Build Coastguard Worker   BC_REPLY_SG = _IOW('c', 18, struct binder_transaction_data_sg),
236*8d67ca89SAndroid Build Coastguard Worker };
237*8d67ca89SAndroid Build Coastguard Worker #endif
238