linux/include/linux/debugfs.h
<<
>>
Prefs
   1/*
   2 *  debugfs.h - a tiny little debug file system
   3 *
   4 *  Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
   5 *  Copyright (C) 2004 IBM Inc.
   6 *
   7 *      This program is free software; you can redistribute it and/or
   8 *      modify it under the terms of the GNU General Public License version
   9 *      2 as published by the Free Software Foundation.
  10 *
  11 *  debugfs is for people to use instead of /proc or /sys.
  12 *  See Documentation/DocBook/filesystems for more details.
  13 */
  14
  15#ifndef _DEBUGFS_H_
  16#define _DEBUGFS_H_
  17
  18#include <linux/fs.h>
  19#include <linux/seq_file.h>
  20
  21#include <linux/types.h>
  22
  23struct device;
  24struct file_operations;
  25
  26struct debugfs_blob_wrapper {
  27        void *data;
  28        unsigned long size;
  29};
  30
  31struct debugfs_reg32 {
  32        char *name;
  33        unsigned long offset;
  34};
  35
  36struct debugfs_regset32 {
  37        const struct debugfs_reg32 *regs;
  38        int nregs;
  39        void __iomem *base;
  40};
  41
  42extern struct dentry *arch_debugfs_dir;
  43
  44#if defined(CONFIG_DEBUG_FS)
  45
  46/* declared over in file.c */
  47extern const struct file_operations debugfs_file_operations;
  48
  49struct dentry *debugfs_create_file(const char *name, umode_t mode,
  50                                   struct dentry *parent, void *data,
  51                                   const struct file_operations *fops);
  52
  53struct dentry *debugfs_create_file_size(const char *name, umode_t mode,
  54                                        struct dentry *parent, void *data,
  55                                        const struct file_operations *fops,
  56                                        loff_t file_size);
  57
  58struct dentry *debugfs_create_dir(const char *name, struct dentry *parent);
  59
  60struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
  61                                      const char *dest);
  62
  63struct dentry *debugfs_create_automount(const char *name,
  64                                        struct dentry *parent,
  65                                        struct vfsmount *(*f)(void *),
  66                                        void *data);
  67
  68void debugfs_remove(struct dentry *dentry);
  69void debugfs_remove_recursive(struct dentry *dentry);
  70
  71struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
  72                struct dentry *new_dir, const char *new_name);
  73
  74struct dentry *debugfs_create_u8(const char *name, umode_t mode,
  75                                 struct dentry *parent, u8 *value);
  76struct dentry *debugfs_create_u16(const char *name, umode_t mode,
  77                                  struct dentry *parent, u16 *value);
  78struct dentry *debugfs_create_u32(const char *name, umode_t mode,
  79                                  struct dentry *parent, u32 *value);
  80struct dentry *debugfs_create_u64(const char *name, umode_t mode,
  81                                  struct dentry *parent, u64 *value);
  82struct dentry *debugfs_create_ulong(const char *name, umode_t mode,
  83                                    struct dentry *parent, unsigned long *value);
  84struct dentry *debugfs_create_x8(const char *name, umode_t mode,
  85                                 struct dentry *parent, u8 *value);
  86struct dentry *debugfs_create_x16(const char *name, umode_t mode,
  87                                  struct dentry *parent, u16 *value);
  88struct dentry *debugfs_create_x32(const char *name, umode_t mode,
  89                                  struct dentry *parent, u32 *value);
  90struct dentry *debugfs_create_x64(const char *name, umode_t mode,
  91                                  struct dentry *parent, u64 *value);
  92struct dentry *debugfs_create_size_t(const char *name, umode_t mode,
  93                                     struct dentry *parent, size_t *value);
  94struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode,
  95                                     struct dentry *parent, atomic_t *value);
  96struct dentry *debugfs_create_bool(const char *name, umode_t mode,
  97                                  struct dentry *parent, bool *value);
  98
  99struct dentry *debugfs_create_blob(const char *name, umode_t mode,
 100                                  struct dentry *parent,
 101                                  struct debugfs_blob_wrapper *blob);
 102
 103struct dentry *debugfs_create_regset32(const char *name, umode_t mode,
 104                                     struct dentry *parent,
 105                                     struct debugfs_regset32 *regset);
 106
 107void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs,
 108                          int nregs, void __iomem *base, char *prefix);
 109
 110struct dentry *debugfs_create_u32_array(const char *name, umode_t mode,
 111                                        struct dentry *parent,
 112                                        u32 *array, u32 elements);
 113
 114struct dentry *debugfs_create_devm_seqfile(struct device *dev, const char *name,
 115                                           struct dentry *parent,
 116                                           int (*read_fn)(struct seq_file *s,
 117                                                          void *data));
 118
 119bool debugfs_initialized(void);
 120
 121ssize_t debugfs_read_file_bool(struct file *file, char __user *user_buf,
 122                               size_t count, loff_t *ppos);
 123
 124ssize_t debugfs_write_file_bool(struct file *file, const char __user *user_buf,
 125                                size_t count, loff_t *ppos);
 126
 127#else
 128
 129#include <linux/err.h>
 130
 131/*
 132 * We do not return NULL from these functions if CONFIG_DEBUG_FS is not enabled
 133 * so users have a chance to detect if there was a real error or not.  We don't
 134 * want to duplicate the design decision mistakes of procfs and devfs again.
 135 */
 136
 137static inline struct dentry *debugfs_create_file(const char *name, umode_t mode,
 138                                        struct dentry *parent, void *data,
 139                                        const struct file_operations *fops)
 140{
 141        return ERR_PTR(-ENODEV);
 142}
 143
 144static inline struct dentry *debugfs_create_file_size(const char *name, umode_t mode,
 145                                        struct dentry *parent, void *data,
 146                                        const struct file_operations *fops,
 147                                        loff_t file_size)
 148{
 149        return ERR_PTR(-ENODEV);
 150}
 151
 152static inline struct dentry *debugfs_create_dir(const char *name,
 153                                                struct dentry *parent)
 154{
 155        return ERR_PTR(-ENODEV);
 156}
 157
 158static inline struct dentry *debugfs_create_symlink(const char *name,
 159                                                    struct dentry *parent,
 160                                                    const char *dest)
 161{
 162        return ERR_PTR(-ENODEV);
 163}
 164
 165static inline struct dentry *debugfs_create_automount(const char *name,
 166                                        struct dentry *parent,
 167                                        struct vfsmount *(*f)(void *),
 168                                        void *data)
 169{
 170        return ERR_PTR(-ENODEV);
 171}
 172
 173static inline void debugfs_remove(struct dentry *dentry)
 174{ }
 175
 176static inline void debugfs_remove_recursive(struct dentry *dentry)
 177{ }
 178
 179static inline struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
 180                struct dentry *new_dir, char *new_name)
 181{
 182        return ERR_PTR(-ENODEV);
 183}
 184
 185static inline struct dentry *debugfs_create_u8(const char *name, umode_t mode,
 186                                               struct dentry *parent,
 187                                               u8 *value)
 188{
 189        return ERR_PTR(-ENODEV);
 190}
 191
 192static inline struct dentry *debugfs_create_u16(const char *name, umode_t mode,
 193                                                struct dentry *parent,
 194                                                u16 *value)
 195{
 196        return ERR_PTR(-ENODEV);
 197}
 198
 199static inline struct dentry *debugfs_create_u32(const char *name, umode_t mode,
 200                                                struct dentry *parent,
 201                                                u32 *value)
 202{
 203        return ERR_PTR(-ENODEV);
 204}
 205
 206static inline struct dentry *debugfs_create_u64(const char *name, umode_t mode,
 207                                                struct dentry *parent,
 208                                                u64 *value)
 209{
 210        return ERR_PTR(-ENODEV);
 211}
 212
 213static inline struct dentry *debugfs_create_x8(const char *name, umode_t mode,
 214                                               struct dentry *parent,
 215                                               u8 *value)
 216{
 217        return ERR_PTR(-ENODEV);
 218}
 219
 220static inline struct dentry *debugfs_create_x16(const char *name, umode_t mode,
 221                                                struct dentry *parent,
 222                                                u16 *value)
 223{
 224        return ERR_PTR(-ENODEV);
 225}
 226
 227static inline struct dentry *debugfs_create_x32(const char *name, umode_t mode,
 228                                                struct dentry *parent,
 229                                                u32 *value)
 230{
 231        return ERR_PTR(-ENODEV);
 232}
 233
 234static inline struct dentry *debugfs_create_x64(const char *name, umode_t mode,
 235                                                struct dentry *parent,
 236                                                u64 *value)
 237{
 238        return ERR_PTR(-ENODEV);
 239}
 240
 241static inline struct dentry *debugfs_create_size_t(const char *name, umode_t mode,
 242                                     struct dentry *parent,
 243                                     size_t *value)
 244{
 245        return ERR_PTR(-ENODEV);
 246}
 247
 248static inline struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode,
 249                                     struct dentry *parent, atomic_t *value)
 250{
 251        return ERR_PTR(-ENODEV);
 252}
 253
 254static inline struct dentry *debugfs_create_bool(const char *name, umode_t mode,
 255                                                 struct dentry *parent,
 256                                                 bool *value)
 257{
 258        return ERR_PTR(-ENODEV);
 259}
 260
 261static inline struct dentry *debugfs_create_blob(const char *name, umode_t mode,
 262                                  struct dentry *parent,
 263                                  struct debugfs_blob_wrapper *blob)
 264{
 265        return ERR_PTR(-ENODEV);
 266}
 267
 268static inline struct dentry *debugfs_create_regset32(const char *name,
 269                                   umode_t mode, struct dentry *parent,
 270                                   struct debugfs_regset32 *regset)
 271{
 272        return ERR_PTR(-ENODEV);
 273}
 274
 275static inline void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs,
 276                         int nregs, void __iomem *base, char *prefix)
 277{
 278}
 279
 280static inline bool debugfs_initialized(void)
 281{
 282        return false;
 283}
 284
 285static inline struct dentry *debugfs_create_u32_array(const char *name, umode_t mode,
 286                                        struct dentry *parent,
 287                                        u32 *array, u32 elements)
 288{
 289        return ERR_PTR(-ENODEV);
 290}
 291
 292static inline struct dentry *debugfs_create_devm_seqfile(struct device *dev,
 293                                                         const char *name,
 294                                                         struct dentry *parent,
 295                                           int (*read_fn)(struct seq_file *s,
 296                                                          void *data))
 297{
 298        return ERR_PTR(-ENODEV);
 299}
 300
 301static inline ssize_t debugfs_read_file_bool(struct file *file,
 302                                             char __user *user_buf,
 303                                             size_t count, loff_t *ppos)
 304{
 305        return -ENODEV;
 306}
 307
 308static inline ssize_t debugfs_write_file_bool(struct file *file,
 309                                              const char __user *user_buf,
 310                                              size_t count, loff_t *ppos)
 311{
 312        return -ENODEV;
 313}
 314
 315#endif
 316
 317#endif
 318