xref: /openbmc/linux/drivers/android/binder_internal.h (revision 03e2e07e38147917482d595ad3cf193212ded8ac)
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