]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/staging/android/uapi/binder.h
staging: binder: Support concurrent 32 bit and 64 bit processes.
[karo-tx-linux.git] / drivers / staging / android / uapi / binder.h
index 4071fcffa83cc497b59e4bb6c3d3509f5490840e..904adb7600cf219a3a0940d4e539836a4dea49db 100644 (file)
@@ -39,6 +39,14 @@ enum {
        FLAT_BINDER_FLAG_ACCEPTS_FDS = 0x100,
 };
 
+#ifdef BINDER_IPC_32BIT
+typedef __u32 binder_size_t;
+typedef __u32 binder_uintptr_t;
+#else
+typedef __u64 binder_size_t;
+typedef __u64 binder_uintptr_t;
+#endif
+
 /*
  * This is the flattened representation of a Binder object for transfer
  * between processes.  The 'offsets' supplied as part of a binder transaction
@@ -53,12 +61,12 @@ struct flat_binder_object {
 
        /* 8 bytes of data. */
        union {
-               void __user     *binder;        /* local object */
-               __u32       handle;             /* remote object */
+               binder_uintptr_t        binder; /* local object */
+               __u32                   handle; /* remote object */
        };
 
        /* extra data associated with local object */
-       void __user             *cookie;
+       binder_uintptr_t        cookie;
 };
 
 /*
@@ -67,12 +75,12 @@ struct flat_binder_object {
  */
 
 struct binder_write_read {
-       size_t write_size;      /* bytes to write */
-       size_t write_consumed;  /* bytes consumed by driver */
-       unsigned long   write_buffer;
-       size_t read_size;       /* bytes to read */
-       size_t read_consumed;   /* bytes consumed by driver */
-       unsigned long   read_buffer;
+       binder_size_t           write_size;     /* bytes to write */
+       binder_size_t           write_consumed; /* bytes consumed by driver */
+       binder_uintptr_t        write_buffer;
+       binder_size_t           read_size;      /* bytes to read */
+       binder_size_t           read_consumed;  /* bytes consumed by driver */
+       binder_uintptr_t        read_buffer;
 };
 
 /* Use with BINDER_VERSION, driver fills in fields. */
@@ -82,7 +90,11 @@ struct binder_version {
 };
 
 /* This is the current protocol version. */
+#ifdef BINDER_IPC_32BIT
 #define BINDER_CURRENT_PROTOCOL_VERSION 7
+#else
+#define BINDER_CURRENT_PROTOCOL_VERSION 8
+#endif
 
 #define BINDER_WRITE_READ              _IOWR('b', 1, struct binder_write_read)
 #define BINDER_SET_IDLE_TIMEOUT                _IOW('b', 3, __s64)
@@ -119,18 +131,20 @@ struct binder_transaction_data {
         * identifying the target and contents of the transaction.
         */
        union {
-               __u32   handle; /* target descriptor of command transaction */
-               void    *ptr;   /* target descriptor of return transaction */
+               /* target descriptor of command transaction */
+               __u32   handle;
+               /* target descriptor of return transaction */
+               binder_uintptr_t ptr;
        } target;
-       void            *cookie;        /* target object cookie */
+       binder_uintptr_t        cookie; /* target object cookie */
        __u32           code;           /* transaction command */
 
        /* General information about the transaction. */
        __u32           flags;
        pid_t           sender_pid;
        uid_t           sender_euid;
-       size_t          data_size;      /* number of bytes of data */
-       size_t          offsets_size;   /* number of bytes of offsets */
+       binder_size_t   data_size;      /* number of bytes of data */
+       binder_size_t   offsets_size;   /* number of bytes of offsets */
 
        /* If this transaction is inline, the data immediately
         * follows here; otherwise, it ends with a pointer to
@@ -139,22 +153,22 @@ struct binder_transaction_data {
        union {
                struct {
                        /* transaction data */
-                       const void __user       *buffer;
+                       binder_uintptr_t        buffer;
                        /* offsets from buffer to flat_binder_object structs */
-                       const void __user       *offsets;
+                       binder_uintptr_t        offsets;
                } ptr;
                __u8    buf[8];
        } data;
 };
 
 struct binder_ptr_cookie {
-       void *ptr;
-       void *cookie;
+       binder_uintptr_t ptr;
+       binder_uintptr_t cookie;
 };
 
 struct binder_handle_cookie {
        __u32 handle;
-       void *cookie;
+       binder_uintptr_t cookie;
 } __attribute__((packed));
 
 struct binder_pri_desc {
@@ -164,8 +178,8 @@ struct binder_pri_desc {
 
 struct binder_pri_ptr_cookie {
        __s32 priority;
-       void *ptr;
-       void *cookie;
+       binder_uintptr_t ptr;
+       binder_uintptr_t cookie;
 };
 
 enum binder_driver_return_protocol {
@@ -240,11 +254,11 @@ enum binder_driver_return_protocol {
         * stop threadpool thread
         */
 
-       BR_DEAD_BINDER = _IOR('r', 15, void *),
+       BR_DEAD_BINDER = _IOR('r', 15, binder_uintptr_t),
        /*
         * void *: cookie
         */
-       BR_CLEAR_DEATH_NOTIFICATION_DONE = _IOR('r', 16, void *),
+       BR_CLEAR_DEATH_NOTIFICATION_DONE = _IOR('r', 16, binder_uintptr_t),
        /*
         * void *: cookie
         */
@@ -270,7 +284,7 @@ enum binder_driver_command_protocol {
         * Else you have acquired a primary reference on the object.
         */
 
-       BC_FREE_BUFFER = _IOW('c', 3, void *),
+       BC_FREE_BUFFER = _IOW('c', 3, binder_uintptr_t),
        /*
         * void *: ptr to transaction data received on a read
         */
@@ -327,7 +341,7 @@ enum binder_driver_command_protocol {
         * void *: cookie
         */
 
-       BC_DEAD_BINDER_DONE = _IOW('c', 16, void *),
+       BC_DEAD_BINDER_DONE = _IOW('c', 16, binder_uintptr_t),
        /*
         * void *: cookie
         */