13ad20fe3SChristian Brauner /* SPDX-License-Identifier: GPL-2.0 */ 23ad20fe3SChristian Brauner 33ad20fe3SChristian Brauner #ifndef _LINUX_BINDER_INTERNAL_H 43ad20fe3SChristian Brauner #define _LINUX_BINDER_INTERNAL_H 53ad20fe3SChristian Brauner 63ad20fe3SChristian Brauner #include <linux/export.h> 73ad20fe3SChristian Brauner #include <linux/fs.h> 83ad20fe3SChristian Brauner #include <linux/list.h> 93ad20fe3SChristian Brauner #include <linux/miscdevice.h> 103ad20fe3SChristian Brauner #include <linux/mutex.h> 113ad20fe3SChristian Brauner #include <linux/stddef.h> 123ad20fe3SChristian Brauner #include <linux/types.h> 133ad20fe3SChristian Brauner #include <linux/uidgid.h> 143ad20fe3SChristian Brauner 153ad20fe3SChristian Brauner struct binder_context { 163ad20fe3SChristian Brauner struct binder_node *binder_context_mgr_node; 173ad20fe3SChristian Brauner struct mutex context_mgr_node_lock; 183ad20fe3SChristian Brauner kuid_t binder_context_mgr_uid; 193ad20fe3SChristian Brauner const char *name; 203ad20fe3SChristian Brauner }; 213ad20fe3SChristian Brauner 223ad20fe3SChristian Brauner /** 233ad20fe3SChristian Brauner * struct binder_device - information about a binder device node 243ad20fe3SChristian Brauner * @hlist: list of binder devices (only used for devices requested via 253ad20fe3SChristian Brauner * CONFIG_ANDROID_BINDER_DEVICES) 263ad20fe3SChristian Brauner * @miscdev: information about a binder character device node 273ad20fe3SChristian Brauner * @context: binder context information 283ad20fe3SChristian Brauner * @binderfs_inode: This is the inode of the root dentry of the super block 293ad20fe3SChristian Brauner * belonging to a binderfs mount. 303ad20fe3SChristian Brauner */ 313ad20fe3SChristian Brauner struct binder_device { 323ad20fe3SChristian Brauner struct hlist_node hlist; 333ad20fe3SChristian Brauner struct miscdevice miscdev; 343ad20fe3SChristian Brauner struct binder_context context; 353ad20fe3SChristian Brauner struct inode *binderfs_inode; 363ad20fe3SChristian Brauner }; 373ad20fe3SChristian Brauner 383ad20fe3SChristian Brauner extern const struct file_operations binder_fops; 393ad20fe3SChristian Brauner 40ca2864c6SHridya Valsaraju extern char *binder_devices_param; 41ca2864c6SHridya Valsaraju 423ad20fe3SChristian Brauner #ifdef CONFIG_ANDROID_BINDERFS 433ad20fe3SChristian Brauner extern bool is_binderfs_device(const struct inode *inode); 443ad20fe3SChristian Brauner #else 453ad20fe3SChristian Brauner static inline bool is_binderfs_device(const struct inode *inode) 463ad20fe3SChristian Brauner { 473ad20fe3SChristian Brauner return false; 483ad20fe3SChristian Brauner } 493ad20fe3SChristian Brauner #endif 503ad20fe3SChristian Brauner 515b9633afSChristian Brauner #ifdef CONFIG_ANDROID_BINDERFS 525b9633afSChristian Brauner extern int __init init_binderfs(void); 535b9633afSChristian Brauner #else 545b9633afSChristian Brauner static inline int __init init_binderfs(void) 555b9633afSChristian Brauner { 565b9633afSChristian Brauner return 0; 575b9633afSChristian Brauner } 585b9633afSChristian Brauner #endif 595b9633afSChristian Brauner 600e13e452SHridya Valsaraju int binder_stats_show(struct seq_file *m, void *unused); 610e13e452SHridya Valsaraju DEFINE_SHOW_ATTRIBUTE(binder_stats); 620e13e452SHridya Valsaraju 630e13e452SHridya Valsaraju int binder_state_show(struct seq_file *m, void *unused); 640e13e452SHridya Valsaraju DEFINE_SHOW_ATTRIBUTE(binder_state); 650e13e452SHridya Valsaraju 660e13e452SHridya Valsaraju int binder_transactions_show(struct seq_file *m, void *unused); 670e13e452SHridya Valsaraju DEFINE_SHOW_ATTRIBUTE(binder_transactions); 68*03e2e07eSHridya Valsaraju 69*03e2e07eSHridya Valsaraju int binder_transaction_log_show(struct seq_file *m, void *unused); 70*03e2e07eSHridya Valsaraju DEFINE_SHOW_ATTRIBUTE(binder_transaction_log); 71*03e2e07eSHridya Valsaraju 72*03e2e07eSHridya Valsaraju struct binder_transaction_log_entry { 73*03e2e07eSHridya Valsaraju int debug_id; 74*03e2e07eSHridya Valsaraju int debug_id_done; 75*03e2e07eSHridya Valsaraju int call_type; 76*03e2e07eSHridya Valsaraju int from_proc; 77*03e2e07eSHridya Valsaraju int from_thread; 78*03e2e07eSHridya Valsaraju int target_handle; 79*03e2e07eSHridya Valsaraju int to_proc; 80*03e2e07eSHridya Valsaraju int to_thread; 81*03e2e07eSHridya Valsaraju int to_node; 82*03e2e07eSHridya Valsaraju int data_size; 83*03e2e07eSHridya Valsaraju int offsets_size; 84*03e2e07eSHridya Valsaraju int return_error_line; 85*03e2e07eSHridya Valsaraju uint32_t return_error; 86*03e2e07eSHridya Valsaraju uint32_t return_error_param; 87*03e2e07eSHridya Valsaraju const char *context_name; 88*03e2e07eSHridya Valsaraju }; 89*03e2e07eSHridya Valsaraju 90*03e2e07eSHridya Valsaraju struct binder_transaction_log { 91*03e2e07eSHridya Valsaraju atomic_t cur; 92*03e2e07eSHridya Valsaraju bool full; 93*03e2e07eSHridya Valsaraju struct binder_transaction_log_entry entry[32]; 94*03e2e07eSHridya Valsaraju }; 95*03e2e07eSHridya Valsaraju 96*03e2e07eSHridya Valsaraju extern struct binder_transaction_log binder_transaction_log; 97*03e2e07eSHridya Valsaraju extern struct binder_transaction_log binder_transaction_log_failed; 983ad20fe3SChristian Brauner #endif /* _LINUX_BINDER_INTERNAL_H */ 99