OSDN Git Service

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