Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2e891598 authored by Serban Constantinescu's avatar Serban Constantinescu Committed by Olav Haugan
Browse files

staging: android: binder: Add binder compat handling to binder.h



This patch adds all the needed compat structures to binder.h. All the
structures defined in this patch mirror the structure and size of 32bit
ones.

Change-Id: I3ae081ace9a83f1709afe4d784c6863e5cc04c26
Signed-off-by: default avatarSerban Constantinescu <serban.constantinescu@arm.com>
Git-commit: 856f302218ad56ee7e14eb50ceffb5c363775eb2
Git-repo: git://linux-arm.org/linux-2.6-armdroid.git


Signed-off-by: default avatarOlav Haugan <ohaugan@codeaurora.org>
parent 724732b4
Loading
Loading
Loading
Loading
+109 −0
Original line number Diff line number Diff line
@@ -22,6 +22,10 @@

#include <linux/ioctl.h>

#ifdef CONFIG_COMPAT
#include <linux/compat.h>
#endif

#define B_PACK_CHARS(c1, c2, c3, c4) \
	((((c1)<<24)) | (((c2)<<16)) | (((c3)<<8)) | (c4))
#define B_TYPE_LARGE 0x85
@@ -326,5 +330,110 @@ enum binder_driver_command_protocol {
	 */
};

/* Support for 32bit userspace on a 64bit system */
#ifdef CONFIG_COMPAT
struct compat_flat_binder_object {
	/* 8 bytes for large_flat_header. */
	__u32		type;
	__u32		flags;

	/* 8 bytes of data. */
	union {
		compat_uptr_t	binder;	/* local object */
		__u32	handle;	        /* remote object */
	};

	/* extra data associated with local object */
	compat_uptr_t	cookie;
};

struct compat_binder_write_read {
	compat_size_t	write_size;     /* bytes to write */
	compat_size_t	write_consumed;	/* bytes consumed by driver */
	compat_ulong_t	write_buffer;
	compat_size_t	read_size;      /* bytes to read */
	compat_size_t	read_consumed;	/* bytes consumed by driver */
	compat_ulong_t	read_buffer;
};

#define COMPAT_BINDER_WRITE_READ	_IOWR('b', 1, struct compat_binder_write_read)

struct compat_binder_transaction_data {
	/* The first two are only used for bcTRANSACTION and brTRANSACTION,
	 * identifying the target and contents of the transaction.
	 */
	union {
		__u32	handle;		    /* target descriptor of command transaction */
		compat_uptr_t	ptr;	/* target descriptor of return transaction */
	} target;
	compat_uptr_t	cookie;	/* target object cookie */
	__u32		code;	    /* transaction command */

	/* General information about the transaction. */
	__u32	flags;
	pid_t	sender_pid;
	uid_t	sender_euid;
	compat_size_t	data_size;	    /* number of bytes of data */
	compat_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
	 * the data buffer.
	 */
	union {
		struct {
			/* transaction data */
			compat_uptr_t	buffer;
			/* offsets from buffer to flat_binder_object structs */
			compat_uptr_t	offsets;
		} ptr;
		__u8	buf[8];
	} data;
};

struct compat_binder_ptr_cookie {
	compat_uptr_t ptr;
	compat_uptr_t cookie;
};

/* legacy - not used anymore */
struct compat_binder_pri_ptr_cookie {
	__s32 priority;
	compat_uptr_t ptr;
	compat_uptr_t cookie;
};

enum compat_binder_driver_return_protocol {
	COMPAT_BR_TRANSACTION = _IOR('r', 2, struct compat_binder_transaction_data),
	COMPAT_BR_REPLY = _IOR('r', 3, struct compat_binder_transaction_data),

	COMPAT_BR_INCREFS = _IOR('r', 7, struct compat_binder_ptr_cookie),
	COMPAT_BR_ACQUIRE = _IOR('r', 8, struct compat_binder_ptr_cookie),
	COMPAT_BR_RELEASE = _IOR('r', 9, struct compat_binder_ptr_cookie),
	COMPAT_BR_DECREFS = _IOR('r', 10, struct compat_binder_ptr_cookie),

	/* legacy - not used anymore */
	COMPAT_BR_ATTEMPT_ACQUIRE = _IOR('r', 11, struct compat_binder_pri_ptr_cookie),

	COMPAT_BR_DEAD_BINDER = _IOR('r', 15, compat_uptr_t),
	COMPAT_BR_CLEAR_DEATH_NOTIFICATION_DONE = _IOR('r', 16, compat_uptr_t),
};

enum compat_binder_driver_command_protocol {
	COMPAT_BC_TRANSACTION = _IOW('c', 0, struct compat_binder_transaction_data),
	COMPAT_BC_REPLY = _IOW('c', 1, struct compat_binder_transaction_data),

	COMPAT_BC_FREE_BUFFER = _IOW('c', 3, compat_uptr_t),

	COMPAT_BC_INCREFS_DONE = _IOW('c', 8, struct compat_binder_ptr_cookie),
	COMPAT_BC_ACQUIRE_DONE = _IOW('c', 9, struct compat_binder_ptr_cookie),

	COMPAT_BC_REQUEST_DEATH_NOTIFICATION = _IOW('c', 14, struct compat_binder_ptr_cookie),
	COMPAT_BC_CLEAR_DEATH_NOTIFICATION = _IOW('c', 15, struct compat_binder_ptr_cookie),

	COMPAT_BC_DEAD_BINDER_DONE = _IOW('c', 16, compat_uptr_t),
};
#endif /* CONFIG_COMPAT */

#endif /* _LINUX_BINDER_H */