111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************************
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   This header was automatically generated from a Linux kernel header
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   of the same name, to make information necessary for userspace to
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   call into the kernel available to libc.  It contains only constants,
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   structures, and macros generated from the original header, and thus,
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   contains no copyrightable information.
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************/
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _LINUX_BINDER_H
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _LINUX_BINDER_H
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/ioctl.h>
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define B_PACK_CHARS(c1, c2, c3, c4)   ((((c1)<<24)) | (((c2)<<16)) | (((c3)<<8)) | (c4))
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define B_TYPE_LARGE 0x85
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum {
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BINDER_TYPE_BINDER = B_PACK_CHARS('s', 'b', '*', B_TYPE_LARGE),
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BINDER_TYPE_WEAK_BINDER = B_PACK_CHARS('w', 'b', '*', B_TYPE_LARGE),
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BINDER_TYPE_HANDLE = B_PACK_CHARS('s', 'h', '*', B_TYPE_LARGE),
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BINDER_TYPE_WEAK_HANDLE = B_PACK_CHARS('w', 'h', '*', B_TYPE_LARGE),
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BINDER_TYPE_FD = B_PACK_CHARS('f', 'd', '*', B_TYPE_LARGE),
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum {
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert FLAT_BINDER_FLAG_PRIORITY_MASK = 0xff,
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert FLAT_BINDER_FLAG_ACCEPTS_FDS = 0x100,
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct flat_binder_object {
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long type;
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long flags;
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union {
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *binder;
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert signed long handle;
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert };
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *cookie;
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct binder_write_read {
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert signed long write_size;
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert signed long write_consumed;
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long write_buffer;
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert signed long read_size;
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert signed long read_consumed;
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long read_buffer;
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct binder_version {
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert signed long protocol_version;
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BINDER_CURRENT_PROTOCOL_VERSION 7
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BINDER_WRITE_READ _IOWR('b', 1, struct binder_write_read)
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BINDER_SET_IDLE_TIMEOUT _IOW('b', 3, int64_t)
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BINDER_SET_MAX_THREADS _IOW('b', 5, size_t)
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BINDER_SET_IDLE_PRIORITY _IOW('b', 6, int)
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BINDER_SET_CONTEXT_MGR _IOW('b', 7, int)
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BINDER_THREAD_EXIT _IOW('b', 8, int)
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BINDER_VERSION _IOWR('b', 9, struct binder_version)
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum transaction_flags {
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert TF_ONE_WAY = 0x01,
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert TF_ROOT_OBJECT = 0x04,
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert TF_STATUS_CODE = 0x08,
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert TF_ACCEPT_FDS = 0x10,
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct binder_transaction_data {
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union {
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t handle;
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *ptr;
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } target;
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *cookie;
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int code;
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int flags;
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert pid_t sender_pid;
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uid_t sender_euid;
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t data_size;
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t offsets_size;
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union {
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct {
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const void *buffer;
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const void *offsets;
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } ptr;
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint8_t buf[8];
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } data;
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct binder_ptr_cookie {
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *ptr;
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *cookie;
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct binder_pri_desc {
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int priority;
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int desc;
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct binder_pri_ptr_cookie {
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int priority;
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *ptr;
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void *cookie;
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum BinderDriverReturnProtocol {
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_ERROR = _IOR_BAD('r', 0, int),
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_OK = _IO('r', 1),
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_TRANSACTION = _IOR_BAD('r', 2, struct binder_transaction_data),
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_REPLY = _IOR_BAD('r', 3, struct binder_transaction_data),
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_ACQUIRE_RESULT = _IOR_BAD('r', 4, int),
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_DEAD_REPLY = _IO('r', 5),
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_TRANSACTION_COMPLETE = _IO('r', 6),
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_INCREFS = _IOR_BAD('r', 7, struct binder_ptr_cookie),
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_ACQUIRE = _IOR_BAD('r', 8, struct binder_ptr_cookie),
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_RELEASE = _IOR_BAD('r', 9, struct binder_ptr_cookie),
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_DECREFS = _IOR_BAD('r', 10, struct binder_ptr_cookie),
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_ATTEMPT_ACQUIRE = _IOR_BAD('r', 11, struct binder_pri_ptr_cookie),
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_NOOP = _IO('r', 12),
14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_SPAWN_LOOPER = _IO('r', 13),
14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_FINISHED = _IO('r', 14),
14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_DEAD_BINDER = _IOR_BAD('r', 15, void *),
14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_CLEAR_DEATH_NOTIFICATION_DONE = _IOR_BAD('r', 16, void *),
14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BR_FAILED_REPLY = _IO('r', 17),
15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum BinderDriverCommandProtocol {
15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_TRANSACTION = _IOW_BAD('c', 0, struct binder_transaction_data),
15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_REPLY = _IOW_BAD('c', 1, struct binder_transaction_data),
15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_ACQUIRE_RESULT = _IOW_BAD('c', 2, int),
15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_FREE_BUFFER = _IOW_BAD('c', 3, int),
16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_INCREFS = _IOW_BAD('c', 4, int),
16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_ACQUIRE = _IOW_BAD('c', 5, int),
16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_RELEASE = _IOW_BAD('c', 6, int),
16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_DECREFS = _IOW_BAD('c', 7, int),
16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_INCREFS_DONE = _IOW_BAD('c', 8, struct binder_ptr_cookie),
16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_ACQUIRE_DONE = _IOW_BAD('c', 9, struct binder_ptr_cookie),
16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_ATTEMPT_ACQUIRE = _IOW_BAD('c', 10, struct binder_pri_desc),
17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_REGISTER_LOOPER = _IO('c', 11),
17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_ENTER_LOOPER = _IO('c', 12),
17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_EXIT_LOOPER = _IO('c', 13),
17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_REQUEST_DEATH_NOTIFICATION = _IOW_BAD('c', 14, struct binder_ptr_cookie),
17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_CLEAR_DEATH_NOTIFICATION = _IOW_BAD('c', 15, struct binder_ptr_cookie),
18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BC_DEAD_BINDER_DONE = _IOW_BAD('c', 16, void *),
18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
187