linux/include/uapi/linux/android/binder.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
   2/*
   3 * Copyright (C) 2008 Google, Inc.
   4 *
   5 * Based on, but no longer compatible with, the original
   6 * OpenBinder.org binder driver interface, which is:
   7 *
   8 * Copyright (c) 2005 Palmsource, Inc.
   9 *
  10 * This software is licensed under the terms of the GNU General Public
  11 * License version 2, as published by the Free Software Foundation, and
  12 * may be copied, distributed, and modified under those terms.
  13 *
  14 * This program is distributed in the hope that it will be useful,
  15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17 * GNU General Public License for more details.
  18 *
  19 */
  20
  21#ifndef _UAPI_LINUX_BINDER_H
  22#define _UAPI_LINUX_BINDER_H
  23
  24#include <linux/types.h>
  25#include <linux/ioctl.h>
  26
  27#define B_PACK_CHARS(c1, c2, c3, c4) \
  28        ((((c1)<<24)) | (((c2)<<16)) | (((c3)<<8)) | (c4))
  29#define B_TYPE_LARGE 0x85
  30
  31enum {
  32        BINDER_TYPE_BINDER      = B_PACK_CHARS('s', 'b', '*', B_TYPE_LARGE),
  33        BINDER_TYPE_WEAK_BINDER = B_PACK_CHARS('w', 'b', '*', B_TYPE_LARGE),
  34        BINDER_TYPE_HANDLE      = B_PACK_CHARS('s', 'h', '*', B_TYPE_LARGE),
  35        BINDER_TYPE_WEAK_HANDLE = B_PACK_CHARS('w', 'h', '*', B_TYPE_LARGE),
  36        BINDER_TYPE_FD          = B_PACK_CHARS('f', 'd', '*', B_TYPE_LARGE),
  37        BINDER_TYPE_FDA         = B_PACK_CHARS('f', 'd', 'a', B_TYPE_LARGE),
  38        BINDER_TYPE_PTR         = B_PACK_CHARS('p', 't', '*', B_TYPE_LARGE),
  39};
  40
  41enum {
  42        FLAT_BINDER_FLAG_PRIORITY_MASK = 0xff,
  43        FLAT_BINDER_FLAG_ACCEPTS_FDS = 0x100,
  44
  45        /**
  46         * @FLAT_BINDER_FLAG_TXN_SECURITY_CTX: request security contexts
  47         *
  48         * Only when set, causes senders to include their security
  49         * context
  50         */
  51        FLAT_BINDER_FLAG_TXN_SECURITY_CTX = 0x1000,
  52};
  53
  54#ifdef BINDER_IPC_32BIT
  55typedef __u32 binder_size_t;
  56typedef __u32 binder_uintptr_t;
  57#else
  58typedef __u64 binder_size_t;
  59typedef __u64 binder_uintptr_t;
  60#endif
  61
  62/**
  63 * struct binder_object_header - header shared by all binder metadata objects.
  64 * @type:       type of the object
  65 */
  66struct binder_object_header {
  67        __u32        type;
  68};
  69
  70/*
  71 * This is the flattened representation of a Binder object for transfer
  72 * between processes.  The 'offsets' supplied as part of a binder transaction
  73 * contains offsets into the data where these structures occur.  The Binder
  74 * driver takes care of re-writing the structure type and data as it moves
  75 * between processes.
  76 */
  77struct flat_binder_object {
  78        struct binder_object_header     hdr;
  79        __u32                           flags;
  80
  81        /* 8 bytes of data. */
  82        union {
  83                binder_uintptr_t        binder; /* local object */
  84                __u32                   handle; /* remote object */
  85        };
  86
  87        /* extra data associated with local object */
  88        binder_uintptr_t        cookie;
  89};
  90
  91/**
  92 * struct binder_fd_object - describes a filedescriptor to be fixed up.
  93 * @hdr:        common header structure
  94 * @pad_flags:  padding to remain compatible with old userspace code
  95 * @pad_binder: padding to remain compatible with old userspace code
  96 * @fd:         file descriptor
  97 * @cookie:     opaque data, used by user-space
  98 */
  99struct binder_fd_object {
 100        struct binder_object_header     hdr;
 101        __u32                           pad_flags;
 102        union {
 103                binder_uintptr_t        pad_binder;
 104                __u32                   fd;
 105        };
 106
 107        binder_uintptr_t                cookie;
 108};
 109
 110/* struct binder_buffer_object - object describing a userspace buffer
 111 * @hdr:                common header structure
 112 * @flags:              one or more BINDER_BUFFER_* flags
 113 * @buffer:             address of the buffer
 114 * @length:             length of the buffer
 115 * @parent:             index in offset array pointing to parent buffer
 116 * @parent_offset:      offset in @parent pointing to this buffer
 117 *
 118 * A binder_buffer object represents an object that the
 119 * binder kernel driver can copy verbatim to the target
 120 * address space. A buffer itself may be pointed to from
 121 * within another buffer, meaning that the pointer inside
 122 * that other buffer needs to be fixed up as well. This
 123 * can be done by setting the BINDER_BUFFER_FLAG_HAS_PARENT
 124 * flag in @flags, by setting @parent buffer to the index
 125 * in the offset array pointing to the parent binder_buffer_object,
 126 * and by setting @parent_offset to the offset in the parent buffer
 127 * at which the pointer to this buffer is located.
 128 */
 129struct binder_buffer_object {
 130        struct binder_object_header     hdr;
 131        __u32                           flags;
 132        binder_uintptr_t                buffer;
 133        binder_size_t                   length;
 134        binder_size_t                   parent;
 135        binder_size_t                   parent_offset;
 136};
 137
 138enum {
 139        BINDER_BUFFER_FLAG_HAS_PARENT = 0x01,
 140};
 141
 142/* struct binder_fd_array_object - object describing an array of fds in a buffer
 143 * @hdr:                common header structure
 144 * @pad:                padding to ensure correct alignment
 145 * @num_fds:            number of file descriptors in the buffer
 146 * @parent:             index in offset array to buffer holding the fd array
 147 * @parent_offset:      start offset of fd array in the buffer
 148 *
 149 * A binder_fd_array object represents an array of file
 150 * descriptors embedded in a binder_buffer_object. It is
 151 * different from a regular binder_buffer_object because it
 152 * describes a list of file descriptors to fix up, not an opaque
 153 * blob of memory, and hence the kernel needs to treat it differently.
 154 *
 155 * An example of how this would be used is with Android's
 156 * native_handle_t object, which is a struct with a list of integers
 157 * and a list of file descriptors. The native_handle_t struct itself
 158 * will be represented by a struct binder_buffer_objct, whereas the
 159 * embedded list of file descriptors is represented by a
 160 * struct binder_fd_array_object with that binder_buffer_object as
 161 * a parent.
 162 */
 163struct binder_fd_array_object {
 164        struct binder_object_header     hdr;
 165        __u32                           pad;
 166        binder_size_t                   num_fds;
 167        binder_size_t                   parent;
 168        binder_size_t                   parent_offset;
 169};
 170
 171/*
 172 * On 64-bit platforms where user code may run in 32-bits the driver must
 173 * translate the buffer (and local binder) addresses appropriately.
 174 */
 175
 176struct binder_write_read {
 177        binder_size_t           write_size;     /* bytes to write */
 178        binder_size_t           write_consumed; /* bytes consumed by driver */
 179        binder_uintptr_t        write_buffer;
 180        binder_size_t           read_size;      /* bytes to read */
 181        binder_size_t           read_consumed;  /* bytes consumed by driver */
 182        binder_uintptr_t        read_buffer;
 183};
 184
 185/* Use with BINDER_VERSION, driver fills in fields. */
 186struct binder_version {
 187        /* driver protocol version -- increment with incompatible change */
 188        __s32       protocol_version;
 189};
 190
 191/* This is the current protocol version. */
 192#ifdef BINDER_IPC_32BIT
 193#define BINDER_CURRENT_PROTOCOL_VERSION 7
 194#else
 195#define BINDER_CURRENT_PROTOCOL_VERSION 8
 196#endif
 197
 198/*
 199 * Use with BINDER_GET_NODE_DEBUG_INFO, driver reads ptr, writes to all fields.
 200 * Set ptr to NULL for the first call to get the info for the first node, and
 201 * then repeat the call passing the previously returned value to get the next
 202 * nodes.  ptr will be 0 when there are no more nodes.
 203 */
 204struct binder_node_debug_info {
 205        binder_uintptr_t ptr;
 206        binder_uintptr_t cookie;
 207        __u32            has_strong_ref;
 208        __u32            has_weak_ref;
 209};
 210
 211struct binder_node_info_for_ref {
 212        __u32            handle;
 213        __u32            strong_count;
 214        __u32            weak_count;
 215        __u32            reserved1;
 216        __u32            reserved2;
 217        __u32            reserved3;
 218};
 219
 220#define BINDER_WRITE_READ               _IOWR('b', 1, struct binder_write_read)
 221#define BINDER_SET_IDLE_TIMEOUT         _IOW('b', 3, __s64)
 222#define BINDER_SET_MAX_THREADS          _IOW('b', 5, __u32)
 223#define BINDER_SET_IDLE_PRIORITY        _IOW('b', 6, __s32)
 224#define BINDER_SET_CONTEXT_MGR          _IOW('b', 7, __s32)
 225#define BINDER_THREAD_EXIT              _IOW('b', 8, __s32)
 226#define BINDER_VERSION                  _IOWR('b', 9, struct binder_version)
 227#define BINDER_GET_NODE_DEBUG_INFO      _IOWR('b', 11, struct binder_node_debug_info)
 228#define BINDER_GET_NODE_INFO_FOR_REF    _IOWR('b', 12, struct binder_node_info_for_ref)
 229#define BINDER_SET_CONTEXT_MGR_EXT      _IOW('b', 13, struct flat_binder_object)
 230
 231/*
 232 * NOTE: Two special error codes you should check for when calling
 233 * in to the driver are:
 234 *
 235 * EINTR -- The operation has been interupted.  This should be
 236 * handled by retrying the ioctl() until a different error code
 237 * is returned.
 238 *
 239 * ECONNREFUSED -- The driver is no longer accepting operations
 240 * from your process.  That is, the process is being destroyed.
 241 * You should handle this by exiting from your process.  Note
 242 * that once this error code is returned, all further calls to
 243 * the driver from any thread will return this same code.
 244 */
 245
 246enum transaction_flags {
 247        TF_ONE_WAY      = 0x01, /* this is a one-way call: async, no return */
 248        TF_ROOT_OBJECT  = 0x04, /* contents are the component's root object */
 249        TF_STATUS_CODE  = 0x08, /* contents are a 32-bit status code */
 250        TF_ACCEPT_FDS   = 0x10, /* allow replies with file descriptors */
 251};
 252
 253struct binder_transaction_data {
 254        /* The first two are only used for bcTRANSACTION and brTRANSACTION,
 255         * identifying the target and contents of the transaction.
 256         */
 257        union {
 258                /* target descriptor of command transaction */
 259                __u32   handle;
 260                /* target descriptor of return transaction */
 261                binder_uintptr_t ptr;
 262        } target;
 263        binder_uintptr_t        cookie; /* target object cookie */
 264        __u32           code;           /* transaction command */
 265
 266        /* General information about the transaction. */
 267        __u32           flags;
 268        pid_t           sender_pid;
 269        uid_t           sender_euid;
 270        binder_size_t   data_size;      /* number of bytes of data */
 271        binder_size_t   offsets_size;   /* number of bytes of offsets */
 272
 273        /* If this transaction is inline, the data immediately
 274         * follows here; otherwise, it ends with a pointer to
 275         * the data buffer.
 276         */
 277        union {
 278                struct {
 279                        /* transaction data */
 280                        binder_uintptr_t        buffer;
 281                        /* offsets from buffer to flat_binder_object structs */
 282                        binder_uintptr_t        offsets;
 283                } ptr;
 284                __u8    buf[8];
 285        } data;
 286};
 287
 288struct binder_transaction_data_secctx {
 289        struct binder_transaction_data transaction_data;
 290        binder_uintptr_t secctx;
 291};
 292
 293struct binder_transaction_data_sg {
 294        struct binder_transaction_data transaction_data;
 295        binder_size_t buffers_size;
 296};
 297
 298struct binder_ptr_cookie {
 299        binder_uintptr_t ptr;
 300        binder_uintptr_t cookie;
 301};
 302
 303struct binder_handle_cookie {
 304        __u32 handle;
 305        binder_uintptr_t cookie;
 306} __packed;
 307
 308struct binder_pri_desc {
 309        __s32 priority;
 310        __u32 desc;
 311};
 312
 313struct binder_pri_ptr_cookie {
 314        __s32 priority;
 315        binder_uintptr_t ptr;
 316        binder_uintptr_t cookie;
 317};
 318
 319enum binder_driver_return_protocol {
 320        BR_ERROR = _IOR('r', 0, __s32),
 321        /*
 322         * int: error code
 323         */
 324
 325        BR_OK = _IO('r', 1),
 326        /* No parameters! */
 327
 328        BR_TRANSACTION_SEC_CTX = _IOR('r', 2,
 329                                      struct binder_transaction_data_secctx),
 330        /*
 331         * binder_transaction_data_secctx: the received command.
 332         */
 333        BR_TRANSACTION = _IOR('r', 2, struct binder_transaction_data),
 334        BR_REPLY = _IOR('r', 3, struct binder_transaction_data),
 335        /*
 336         * binder_transaction_data: the received command.
 337         */
 338
 339        BR_ACQUIRE_RESULT = _IOR('r', 4, __s32),
 340        /*
 341         * not currently supported
 342         * int: 0 if the last bcATTEMPT_ACQUIRE was not successful.
 343         * Else the remote object has acquired a primary reference.
 344         */
 345
 346        BR_DEAD_REPLY = _IO('r', 5),
 347        /*
 348         * The target of the last transaction (either a bcTRANSACTION or
 349         * a bcATTEMPT_ACQUIRE) is no longer with us.  No parameters.
 350         */
 351
 352        BR_TRANSACTION_COMPLETE = _IO('r', 6),
 353        /*
 354         * No parameters... always refers to the last transaction requested
 355         * (including replies).  Note that this will be sent even for
 356         * asynchronous transactions.
 357         */
 358
 359        BR_INCREFS = _IOR('r', 7, struct binder_ptr_cookie),
 360        BR_ACQUIRE = _IOR('r', 8, struct binder_ptr_cookie),
 361        BR_RELEASE = _IOR('r', 9, struct binder_ptr_cookie),
 362        BR_DECREFS = _IOR('r', 10, struct binder_ptr_cookie),
 363        /*
 364         * void *:      ptr to binder
 365         * void *: cookie for binder
 366         */
 367
 368        BR_ATTEMPT_ACQUIRE = _IOR('r', 11, struct binder_pri_ptr_cookie),
 369        /*
 370         * not currently supported
 371         * int: priority
 372         * void *: ptr to binder
 373         * void *: cookie for binder
 374         */
 375
 376        BR_NOOP = _IO('r', 12),
 377        /*
 378         * No parameters.  Do nothing and examine the next command.  It exists
 379         * primarily so that we can replace it with a BR_SPAWN_LOOPER command.
 380         */
 381
 382        BR_SPAWN_LOOPER = _IO('r', 13),
 383        /*
 384         * No parameters.  The driver has determined that a process has no
 385         * threads waiting to service incoming transactions.  When a process
 386         * receives this command, it must spawn a new service thread and
 387         * register it via bcENTER_LOOPER.
 388         */
 389
 390        BR_FINISHED = _IO('r', 14),
 391        /*
 392         * not currently supported
 393         * stop threadpool thread
 394         */
 395
 396        BR_DEAD_BINDER = _IOR('r', 15, binder_uintptr_t),
 397        /*
 398         * void *: cookie
 399         */
 400        BR_CLEAR_DEATH_NOTIFICATION_DONE = _IOR('r', 16, binder_uintptr_t),
 401        /*
 402         * void *: cookie
 403         */
 404
 405        BR_FAILED_REPLY = _IO('r', 17),
 406        /*
 407         * The the last transaction (either a bcTRANSACTION or
 408         * a bcATTEMPT_ACQUIRE) failed (e.g. out of memory).  No parameters.
 409         */
 410};
 411
 412enum binder_driver_command_protocol {
 413        BC_TRANSACTION = _IOW('c', 0, struct binder_transaction_data),
 414        BC_REPLY = _IOW('c', 1, struct binder_transaction_data),
 415        /*
 416         * binder_transaction_data: the sent command.
 417         */
 418
 419        BC_ACQUIRE_RESULT = _IOW('c', 2, __s32),
 420        /*
 421         * not currently supported
 422         * int:  0 if the last BR_ATTEMPT_ACQUIRE was not successful.
 423         * Else you have acquired a primary reference on the object.
 424         */
 425
 426        BC_FREE_BUFFER = _IOW('c', 3, binder_uintptr_t),
 427        /*
 428         * void *: ptr to transaction data received on a read
 429         */
 430
 431        BC_INCREFS = _IOW('c', 4, __u32),
 432        BC_ACQUIRE = _IOW('c', 5, __u32),
 433        BC_RELEASE = _IOW('c', 6, __u32),
 434        BC_DECREFS = _IOW('c', 7, __u32),
 435        /*
 436         * int: descriptor
 437         */
 438
 439        BC_INCREFS_DONE = _IOW('c', 8, struct binder_ptr_cookie),
 440        BC_ACQUIRE_DONE = _IOW('c', 9, struct binder_ptr_cookie),
 441        /*
 442         * void *: ptr to binder
 443         * void *: cookie for binder
 444         */
 445
 446        BC_ATTEMPT_ACQUIRE = _IOW('c', 10, struct binder_pri_desc),
 447        /*
 448         * not currently supported
 449         * int: priority
 450         * int: descriptor
 451         */
 452
 453        BC_REGISTER_LOOPER = _IO('c', 11),
 454        /*
 455         * No parameters.
 456         * Register a spawned looper thread with the device.
 457         */
 458
 459        BC_ENTER_LOOPER = _IO('c', 12),
 460        BC_EXIT_LOOPER = _IO('c', 13),
 461        /*
 462         * No parameters.
 463         * These two commands are sent as an application-level thread
 464         * enters and exits the binder loop, respectively.  They are
 465         * used so the binder can have an accurate count of the number
 466         * of looping threads it has available.
 467         */
 468
 469        BC_REQUEST_DEATH_NOTIFICATION = _IOW('c', 14,
 470                                                struct binder_handle_cookie),
 471        /*
 472         * int: handle
 473         * void *: cookie
 474         */
 475
 476        BC_CLEAR_DEATH_NOTIFICATION = _IOW('c', 15,
 477                                                struct binder_handle_cookie),
 478        /*
 479         * int: handle
 480         * void *: cookie
 481         */
 482
 483        BC_DEAD_BINDER_DONE = _IOW('c', 16, binder_uintptr_t),
 484        /*
 485         * void *: cookie
 486         */
 487
 488        BC_TRANSACTION_SG = _IOW('c', 17, struct binder_transaction_data_sg),
 489        BC_REPLY_SG = _IOW('c', 18, struct binder_transaction_data_sg),
 490        /*
 491         * binder_transaction_data_sg: the sent command.
 492         */
 493};
 494
 495#endif /* _UAPI_LINUX_BINDER_H */
 496
 497