Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid
[linux-2.6-block.git] / drivers / android / binder_internal.h
CommitLineData
3ad20fe3
CB
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
15struct 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 */
31struct binder_device {
32 struct hlist_node hlist;
33 struct miscdevice miscdev;
34 struct binder_context context;
35 struct inode *binderfs_inode;
36};
37
4feb80fa
HV
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 */
43struct 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 */
62struct 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
3ad20fe3
CB
72extern const struct file_operations binder_fops;
73
ca2864c6
HV
74extern char *binder_devices_param;
75
3ad20fe3
CB
76#ifdef CONFIG_ANDROID_BINDERFS
77extern bool is_binderfs_device(const struct inode *inode);
4feb80fa
HV
78extern struct dentry *binderfs_create_file(struct dentry *dir, const char *name,
79 const struct file_operations *fops,
80 void *data);
81extern void binderfs_remove_file(struct dentry *dentry);
3ad20fe3
CB
82#else
83static inline bool is_binderfs_device(const struct inode *inode)
84{
85 return false;
86}
4feb80fa
HV
87static 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}
94static inline void binderfs_remove_file(struct dentry *dentry) {}
3ad20fe3
CB
95#endif
96
5b9633af
CB
97#ifdef CONFIG_ANDROID_BINDERFS
98extern int __init init_binderfs(void);
99#else
100static inline int __init init_binderfs(void)
101{
102 return 0;
103}
104#endif
105
0e13e452
HV
106int binder_stats_show(struct seq_file *m, void *unused);
107DEFINE_SHOW_ATTRIBUTE(binder_stats);
108
109int binder_state_show(struct seq_file *m, void *unused);
110DEFINE_SHOW_ATTRIBUTE(binder_state);
111
112int binder_transactions_show(struct seq_file *m, void *unused);
113DEFINE_SHOW_ATTRIBUTE(binder_transactions);
03e2e07e
HV
114
115int binder_transaction_log_show(struct seq_file *m, void *unused);
116DEFINE_SHOW_ATTRIBUTE(binder_transaction_log);
117
118struct 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 const char *context_name;
134};
135
136struct binder_transaction_log {
137 atomic_t cur;
138 bool full;
139 struct binder_transaction_log_entry entry[32];
140};
141
142extern struct binder_transaction_log binder_transaction_log;
143extern struct binder_transaction_log binder_transaction_log_failed;
3ad20fe3 144#endif /* _LINUX_BINDER_INTERNAL_H */