1/* SPDX-License-Identifier: GPL-2.0 */ 2 3#ifndef _LINUX_BINDER_INTERNAL_H 4#define _LINUX_BINDER_INTERNAL_H 5 6#include <linux/export.h> 7#include <linux/fs.h> 8#include <linux/list.h> 9#include <linux/miscdevice.h> 10#include <linux/mutex.h> 11#include <linux/refcount.h> 12#include <linux/stddef.h> 13#include <linux/types.h> 14#include <linux/uidgid.h> 15 16struct binder_context { 17 struct binder_node *binder_context_mgr_node; 18 struct mutex context_mgr_node_lock; 19 kuid_t binder_context_mgr_uid; 20 const char *name; 21}; 22 23/** 24 * struct binder_device - information about a binder device node 25 * @hlist: list of binder devices (only used for devices requested via 26 * CONFIG_ANDROID_BINDER_DEVICES) 27 * @miscdev: information about a binder character device node 28 * @context: binder context information 29 * @binderfs_inode: This is the inode of the root dentry of the super block 30 * belonging to a binderfs mount. 31 */ 32struct binder_device { 33 struct hlist_node hlist; 34 struct miscdevice miscdev; 35 struct binder_context context; 36 struct inode *binderfs_inode; 37 refcount_t ref; 38}; 39 40/** 41 * binderfs_mount_opts - mount options for binderfs 42 * @max: maximum number of allocatable binderfs binder devices 43 * @stats_mode: enable binder stats in binderfs. 44 */ 45struct binderfs_mount_opts { 46 int max; 47 int stats_mode; 48}; 49 50/** 51 * binderfs_info - information about a binderfs mount 52 * @ipc_ns: The ipc namespace the binderfs mount belongs to. 53 * @control_dentry: This records the dentry of this binderfs mount 54 * binder-control device. 55 * @root_uid: uid that needs to be used when a new binder device is 56 * created. 57 * @root_gid: gid that needs to be used when a new binder device is 58 * created. 59 * @mount_opts: The mount options in use. 60 * @device_count: The current number of allocated binder devices. 61 * @proc_log_dir: Pointer to the directory dentry containing process-specific 62 * logs. 63 */ 64struct binderfs_info { 65 struct ipc_namespace *ipc_ns; 66 struct dentry *control_dentry; 67 kuid_t root_uid; 68 kgid_t root_gid; 69 struct binderfs_mount_opts mount_opts; 70 int device_count; 71 struct dentry *proc_log_dir; 72}; 73 74extern const struct file_operations binder_fops; 75 76extern char *binder_devices_param; 77 78#ifdef CONFIG_ANDROID_BINDERFS 79extern bool is_binderfs_device(const struct inode *inode); 80extern struct dentry *binderfs_create_file(struct dentry *dir, const char *name, 81 const struct file_operations *fops, 82 void *data); 83extern void binderfs_remove_file(struct dentry *dentry); 84#else 85static inline bool is_binderfs_device(const struct inode *inode) 86{ 87 return false; 88} 89static inline struct dentry *binderfs_create_file(struct dentry *dir, 90 const char *name, 91 const struct file_operations *fops, 92 void *data) 93{ 94 return NULL; 95} 96static inline void binderfs_remove_file(struct dentry *dentry) {} 97#endif 98 99#ifdef CONFIG_ANDROID_BINDERFS 100extern int __init init_binderfs(void); 101#else 102static inline int __init init_binderfs(void) 103{ 104 return 0; 105} 106#endif 107 108int binder_stats_show(struct seq_file *m, void *unused); 109DEFINE_SHOW_ATTRIBUTE(binder_stats); 110 111int binder_state_show(struct seq_file *m, void *unused); 112DEFINE_SHOW_ATTRIBUTE(binder_state); 113 114int binder_transactions_show(struct seq_file *m, void *unused); 115DEFINE_SHOW_ATTRIBUTE(binder_transactions); 116 117int binder_transaction_log_show(struct seq_file *m, void *unused); 118DEFINE_SHOW_ATTRIBUTE(binder_transaction_log); 119 120struct binder_transaction_log_entry { 121 int debug_id; 122 int debug_id_done; 123 int call_type; 124 int from_proc; 125 int from_thread; 126 int target_handle; 127 int to_proc; 128 int to_thread; 129 int to_node; 130 int data_size; 131 int offsets_size; 132 int return_error_line; 133 uint32_t return_error; 134 uint32_t return_error_param; 135 char context_name[BINDERFS_MAX_NAME + 1]; 136}; 137 138struct binder_transaction_log { 139 atomic_t cur; 140 bool full; 141 struct binder_transaction_log_entry entry[32]; 142}; 143 144extern struct binder_transaction_log binder_transaction_log; 145extern struct binder_transaction_log binder_transaction_log_failed; 146#endif /* _LINUX_BINDER_INTERNAL_H */ 147