146 lines · 4.0 KB · C
RawDownload
/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _LINUX_BINDER_INTERNAL_H#define _LINUX_BINDER_INTERNAL_H #include <linux/export.h>#include <linux/fs.h>#include <linux/list.h>#include <linux/miscdevice.h>#include <linux/mutex.h>#include <linux/refcount.h>#include <linux/stddef.h>#include <linux/types.h>#include <linux/uidgid.h> struct binder_context {	struct binder_node *binder_context_mgr_node;	struct mutex context_mgr_node_lock;	kuid_t binder_context_mgr_uid;	const char *name;}; /** * struct binder_device - information about a binder device node * @hlist:          list of binder devices (only used for devices requested via *                  CONFIG_ANDROID_BINDER_DEVICES) * @miscdev:        information about a binder character device node * @context:        binder context information * @binderfs_inode: This is the inode of the root dentry of the super block *                  belonging to a binderfs mount. */struct binder_device {	struct hlist_node hlist;	struct miscdevice miscdev;	struct binder_context context;	struct inode *binderfs_inode;	refcount_t ref;}; /** * binderfs_mount_opts - mount options for binderfs * @max: maximum number of allocatable binderfs binder devices * @stats_mode: enable binder stats in binderfs. */struct binderfs_mount_opts {	int max;	int stats_mode;}; /** * binderfs_info - information about a binderfs mount * @ipc_ns:         The ipc namespace the binderfs mount belongs to. * @control_dentry: This records the dentry of this binderfs mount *                  binder-control device. * @root_uid:       uid that needs to be used when a new binder device is *                  created. * @root_gid:       gid that needs to be used when a new binder device is *                  created. * @mount_opts:     The mount options in use. * @device_count:   The current number of allocated binder devices. * @proc_log_dir:   Pointer to the directory dentry containing process-specific *                  logs. */struct binderfs_info {	struct ipc_namespace *ipc_ns;	struct dentry *control_dentry;	kuid_t root_uid;	kgid_t root_gid;	struct binderfs_mount_opts mount_opts;	int device_count;	struct dentry *proc_log_dir;}; extern const struct file_operations binder_fops; extern char *binder_devices_param; #ifdef CONFIG_ANDROID_BINDERFSextern bool is_binderfs_device(const struct inode *inode);extern struct dentry *binderfs_create_file(struct dentry *dir, const char *name,					   const struct file_operations *fops,					   void *data);extern void binderfs_remove_file(struct dentry *dentry);#elsestatic inline bool is_binderfs_device(const struct inode *inode){	return false;}static inline struct dentry *binderfs_create_file(struct dentry *dir,					   const char *name,					   const struct file_operations *fops,					   void *data){	return NULL;}static inline void binderfs_remove_file(struct dentry *dentry) {}#endif #ifdef CONFIG_ANDROID_BINDERFSextern int __init init_binderfs(void);#elsestatic inline int __init init_binderfs(void){	return 0;}#endif int binder_stats_show(struct seq_file *m, void *unused);DEFINE_SHOW_ATTRIBUTE(binder_stats); int binder_state_show(struct seq_file *m, void *unused);DEFINE_SHOW_ATTRIBUTE(binder_state); int binder_transactions_show(struct seq_file *m, void *unused);DEFINE_SHOW_ATTRIBUTE(binder_transactions); int binder_transaction_log_show(struct seq_file *m, void *unused);DEFINE_SHOW_ATTRIBUTE(binder_transaction_log); struct binder_transaction_log_entry {	int debug_id;	int debug_id_done;	int call_type;	int from_proc;	int from_thread;	int target_handle;	int to_proc;	int to_thread;	int to_node;	int data_size;	int offsets_size;	int return_error_line;	uint32_t return_error;	uint32_t return_error_param;	char context_name[BINDERFS_MAX_NAME + 1];}; struct binder_transaction_log {	atomic_t cur;	bool full;	struct binder_transaction_log_entry entry[32];}; extern struct binder_transaction_log binder_transaction_log;extern struct binder_transaction_log binder_transaction_log_failed;#endif /* _LINUX_BINDER_INTERNAL_H */