linux/drivers/android/binder_internal.h
<<
>>
Prefs
   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