root/include/linux/debugfs.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. debugfs_lookup
  2. debugfs_create_file
  3. debugfs_create_file_unsafe
  4. debugfs_create_file_size
  5. debugfs_create_dir
  6. debugfs_create_symlink
  7. debugfs_create_automount
  8. debugfs_remove
  9. debugfs_remove_recursive
  10. debugfs_file_get
  11. debugfs_file_put
  12. debugfs_attr_read
  13. debugfs_attr_write
  14. debugfs_rename
  15. debugfs_create_u8
  16. debugfs_create_u16
  17. debugfs_create_u32
  18. debugfs_create_u64
  19. debugfs_create_ulong
  20. debugfs_create_x8
  21. debugfs_create_x16
  22. debugfs_create_x32
  23. debugfs_create_x64
  24. debugfs_create_size_t
  25. debugfs_create_atomic_t
  26. debugfs_create_bool
  27. debugfs_create_blob
  28. debugfs_create_regset32
  29. debugfs_print_regs32
  30. debugfs_initialized
  31. debugfs_create_u32_array
  32. debugfs_create_devm_seqfile
  33. debugfs_read_file_bool
  34. debugfs_write_file_bool

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  *  debugfs.h - a tiny little debug file system
   4  *
   5  *  Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
   6  *  Copyright (C) 2004 IBM Inc.
   7  *
   8  *  debugfs is for people to use instead of /proc or /sys.
   9  *  See Documentation/filesystems/ for more details.
  10  */
  11 
  12 #ifndef _DEBUGFS_H_
  13 #define _DEBUGFS_H_
  14 
  15 #include <linux/fs.h>
  16 #include <linux/seq_file.h>
  17 
  18 #include <linux/types.h>
  19 #include <linux/compiler.h>
  20 
  21 struct device;
  22 struct file_operations;
  23 
  24 struct debugfs_blob_wrapper {
  25         void *data;
  26         unsigned long size;
  27 };
  28 
  29 struct debugfs_reg32 {
  30         char *name;
  31         unsigned long offset;
  32 };
  33 
  34 struct debugfs_regset32 {
  35         const struct debugfs_reg32 *regs;
  36         int nregs;
  37         void __iomem *base;
  38 };
  39 
  40 extern struct dentry *arch_debugfs_dir;
  41 
  42 #define DEFINE_DEBUGFS_ATTRIBUTE(__fops, __get, __set, __fmt)           \
  43 static int __fops ## _open(struct inode *inode, struct file *file)      \
  44 {                                                                       \
  45         __simple_attr_check_format(__fmt, 0ull);                        \
  46         return simple_attr_open(inode, file, __get, __set, __fmt);      \
  47 }                                                                       \
  48 static const struct file_operations __fops = {                          \
  49         .owner   = THIS_MODULE,                                         \
  50         .open    = __fops ## _open,                                     \
  51         .release = simple_attr_release,                                 \
  52         .read    = debugfs_attr_read,                                   \
  53         .write   = debugfs_attr_write,                                  \
  54         .llseek  = no_llseek,                                           \
  55 }
  56 
  57 #if defined(CONFIG_DEBUG_FS)
  58 
  59 struct dentry *debugfs_lookup(const char *name, struct dentry *parent);
  60 
  61 struct dentry *debugfs_create_file(const char *name, umode_t mode,
  62                                    struct dentry *parent, void *data,
  63                                    const struct file_operations *fops);
  64 struct dentry *debugfs_create_file_unsafe(const char *name, umode_t mode,
  65                                    struct dentry *parent, void *data,
  66                                    const struct file_operations *fops);
  67 
  68 struct dentry *debugfs_create_file_size(const char *name, umode_t mode,
  69                                         struct dentry *parent, void *data,
  70                                         const struct file_operations *fops,
  71                                         loff_t file_size);
  72 
  73 struct dentry *debugfs_create_dir(const char *name, struct dentry *parent);
  74 
  75 struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
  76                                       const char *dest);
  77 
  78 typedef struct vfsmount *(*debugfs_automount_t)(struct dentry *, void *);
  79 struct dentry *debugfs_create_automount(const char *name,
  80                                         struct dentry *parent,
  81                                         debugfs_automount_t f,
  82                                         void *data);
  83 
  84 void debugfs_remove(struct dentry *dentry);
  85 void debugfs_remove_recursive(struct dentry *dentry);
  86 
  87 const struct file_operations *debugfs_real_fops(const struct file *filp);
  88 
  89 int debugfs_file_get(struct dentry *dentry);
  90 void debugfs_file_put(struct dentry *dentry);
  91 
  92 ssize_t debugfs_attr_read(struct file *file, char __user *buf,
  93                         size_t len, loff_t *ppos);
  94 ssize_t debugfs_attr_write(struct file *file, const char __user *buf,
  95                         size_t len, loff_t *ppos);
  96 
  97 struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
  98                 struct dentry *new_dir, const char *new_name);
  99 
 100 struct dentry *debugfs_create_u8(const char *name, umode_t mode,
 101                                  struct dentry *parent, u8 *value);
 102 struct dentry *debugfs_create_u16(const char *name, umode_t mode,
 103                                   struct dentry *parent, u16 *value);
 104 struct dentry *debugfs_create_u32(const char *name, umode_t mode,
 105                                   struct dentry *parent, u32 *value);
 106 struct dentry *debugfs_create_u64(const char *name, umode_t mode,
 107                                   struct dentry *parent, u64 *value);
 108 struct dentry *debugfs_create_ulong(const char *name, umode_t mode,
 109                                     struct dentry *parent, unsigned long *value);
 110 struct dentry *debugfs_create_x8(const char *name, umode_t mode,
 111                                  struct dentry *parent, u8 *value);
 112 struct dentry *debugfs_create_x16(const char *name, umode_t mode,
 113                                   struct dentry *parent, u16 *value);
 114 struct dentry *debugfs_create_x32(const char *name, umode_t mode,
 115                                   struct dentry *parent, u32 *value);
 116 struct dentry *debugfs_create_x64(const char *name, umode_t mode,
 117                                   struct dentry *parent, u64 *value);
 118 struct dentry *debugfs_create_size_t(const char *name, umode_t mode,
 119                                      struct dentry *parent, size_t *value);
 120 struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode,
 121                                      struct dentry *parent, atomic_t *value);
 122 struct dentry *debugfs_create_bool(const char *name, umode_t mode,
 123                                   struct dentry *parent, bool *value);
 124 
 125 struct dentry *debugfs_create_blob(const char *name, umode_t mode,
 126                                   struct dentry *parent,
 127                                   struct debugfs_blob_wrapper *blob);
 128 
 129 struct dentry *debugfs_create_regset32(const char *name, umode_t mode,
 130                                      struct dentry *parent,
 131                                      struct debugfs_regset32 *regset);
 132 
 133 void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs,
 134                           int nregs, void __iomem *base, char *prefix);
 135 
 136 void debugfs_create_u32_array(const char *name, umode_t mode,
 137                               struct dentry *parent, u32 *array, u32 elements);
 138 
 139 struct dentry *debugfs_create_devm_seqfile(struct device *dev, const char *name,
 140                                            struct dentry *parent,
 141                                            int (*read_fn)(struct seq_file *s,
 142                                                           void *data));
 143 
 144 bool debugfs_initialized(void);
 145 
 146 ssize_t debugfs_read_file_bool(struct file *file, char __user *user_buf,
 147                                size_t count, loff_t *ppos);
 148 
 149 ssize_t debugfs_write_file_bool(struct file *file, const char __user *user_buf,
 150                                 size_t count, loff_t *ppos);
 151 
 152 #else
 153 
 154 #include <linux/err.h>
 155 
 156 /*
 157  * We do not return NULL from these functions if CONFIG_DEBUG_FS is not enabled
 158  * so users have a chance to detect if there was a real error or not.  We don't
 159  * want to duplicate the design decision mistakes of procfs and devfs again.
 160  */
 161 
 162 static inline struct dentry *debugfs_lookup(const char *name,
 163                                             struct dentry *parent)
 164 {
 165         return ERR_PTR(-ENODEV);
 166 }
 167 
 168 static inline struct dentry *debugfs_create_file(const char *name, umode_t mode,
 169                                         struct dentry *parent, void *data,
 170                                         const struct file_operations *fops)
 171 {
 172         return ERR_PTR(-ENODEV);
 173 }
 174 
 175 static inline struct dentry *debugfs_create_file_unsafe(const char *name,
 176                                         umode_t mode, struct dentry *parent,
 177                                         void *data,
 178                                         const struct file_operations *fops)
 179 {
 180         return ERR_PTR(-ENODEV);
 181 }
 182 
 183 static inline struct dentry *debugfs_create_file_size(const char *name, umode_t mode,
 184                                         struct dentry *parent, void *data,
 185                                         const struct file_operations *fops,
 186                                         loff_t file_size)
 187 {
 188         return ERR_PTR(-ENODEV);
 189 }
 190 
 191 static inline struct dentry *debugfs_create_dir(const char *name,
 192                                                 struct dentry *parent)
 193 {
 194         return ERR_PTR(-ENODEV);
 195 }
 196 
 197 static inline struct dentry *debugfs_create_symlink(const char *name,
 198                                                     struct dentry *parent,
 199                                                     const char *dest)
 200 {
 201         return ERR_PTR(-ENODEV);
 202 }
 203 
 204 static inline struct dentry *debugfs_create_automount(const char *name,
 205                                         struct dentry *parent,
 206                                         struct vfsmount *(*f)(void *),
 207                                         void *data)
 208 {
 209         return ERR_PTR(-ENODEV);
 210 }
 211 
 212 static inline void debugfs_remove(struct dentry *dentry)
 213 { }
 214 
 215 static inline void debugfs_remove_recursive(struct dentry *dentry)
 216 { }
 217 
 218 const struct file_operations *debugfs_real_fops(const struct file *filp);
 219 
 220 static inline int debugfs_file_get(struct dentry *dentry)
 221 {
 222         return 0;
 223 }
 224 
 225 static inline void debugfs_file_put(struct dentry *dentry)
 226 { }
 227 
 228 static inline ssize_t debugfs_attr_read(struct file *file, char __user *buf,
 229                                         size_t len, loff_t *ppos)
 230 {
 231         return -ENODEV;
 232 }
 233 
 234 static inline ssize_t debugfs_attr_write(struct file *file,
 235                                         const char __user *buf,
 236                                         size_t len, loff_t *ppos)
 237 {
 238         return -ENODEV;
 239 }
 240 
 241 static inline struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
 242                 struct dentry *new_dir, char *new_name)
 243 {
 244         return ERR_PTR(-ENODEV);
 245 }
 246 
 247 static inline struct dentry *debugfs_create_u8(const char *name, umode_t mode,
 248                                                struct dentry *parent,
 249                                                u8 *value)
 250 {
 251         return ERR_PTR(-ENODEV);
 252 }
 253 
 254 static inline struct dentry *debugfs_create_u16(const char *name, umode_t mode,
 255                                                 struct dentry *parent,
 256                                                 u16 *value)
 257 {
 258         return ERR_PTR(-ENODEV);
 259 }
 260 
 261 static inline struct dentry *debugfs_create_u32(const char *name, umode_t mode,
 262                                                 struct dentry *parent,
 263                                                 u32 *value)
 264 {
 265         return ERR_PTR(-ENODEV);
 266 }
 267 
 268 static inline struct dentry *debugfs_create_u64(const char *name, umode_t mode,
 269                                                 struct dentry *parent,
 270                                                 u64 *value)
 271 {
 272         return ERR_PTR(-ENODEV);
 273 }
 274 
 275 static inline struct dentry *debugfs_create_ulong(const char *name,
 276                                                 umode_t mode,
 277                                                 struct dentry *parent,
 278                                                 unsigned long *value)
 279 {
 280         return ERR_PTR(-ENODEV);
 281 }
 282 
 283 static inline struct dentry *debugfs_create_x8(const char *name, umode_t mode,
 284                                                struct dentry *parent,
 285                                                u8 *value)
 286 {
 287         return ERR_PTR(-ENODEV);
 288 }
 289 
 290 static inline struct dentry *debugfs_create_x16(const char *name, umode_t mode,
 291                                                 struct dentry *parent,
 292                                                 u16 *value)
 293 {
 294         return ERR_PTR(-ENODEV);
 295 }
 296 
 297 static inline struct dentry *debugfs_create_x32(const char *name, umode_t mode,
 298                                                 struct dentry *parent,
 299                                                 u32 *value)
 300 {
 301         return ERR_PTR(-ENODEV);
 302 }
 303 
 304 static inline struct dentry *debugfs_create_x64(const char *name, umode_t mode,
 305                                                 struct dentry *parent,
 306                                                 u64 *value)
 307 {
 308         return ERR_PTR(-ENODEV);
 309 }
 310 
 311 static inline struct dentry *debugfs_create_size_t(const char *name, umode_t mode,
 312                                      struct dentry *parent,
 313                                      size_t *value)
 314 {
 315         return ERR_PTR(-ENODEV);
 316 }
 317 
 318 static inline struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode,
 319                                      struct dentry *parent, atomic_t *value)
 320 {
 321         return ERR_PTR(-ENODEV);
 322 }
 323 
 324 static inline struct dentry *debugfs_create_bool(const char *name, umode_t mode,
 325                                                  struct dentry *parent,
 326                                                  bool *value)
 327 {
 328         return ERR_PTR(-ENODEV);
 329 }
 330 
 331 static inline struct dentry *debugfs_create_blob(const char *name, umode_t mode,
 332                                   struct dentry *parent,
 333                                   struct debugfs_blob_wrapper *blob)
 334 {
 335         return ERR_PTR(-ENODEV);
 336 }
 337 
 338 static inline struct dentry *debugfs_create_regset32(const char *name,
 339                                    umode_t mode, struct dentry *parent,
 340                                    struct debugfs_regset32 *regset)
 341 {
 342         return ERR_PTR(-ENODEV);
 343 }
 344 
 345 static inline void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs,
 346                          int nregs, void __iomem *base, char *prefix)
 347 {
 348 }
 349 
 350 static inline bool debugfs_initialized(void)
 351 {
 352         return false;
 353 }
 354 
 355 static inline void debugfs_create_u32_array(const char *name, umode_t mode,
 356                                             struct dentry *parent, u32 *array,
 357                                             u32 elements)
 358 {
 359 }
 360 
 361 static inline struct dentry *debugfs_create_devm_seqfile(struct device *dev,
 362                                                          const char *name,
 363                                                          struct dentry *parent,
 364                                            int (*read_fn)(struct seq_file *s,
 365                                                           void *data))
 366 {
 367         return ERR_PTR(-ENODEV);
 368 }
 369 
 370 static inline ssize_t debugfs_read_file_bool(struct file *file,
 371                                              char __user *user_buf,
 372                                              size_t count, loff_t *ppos)
 373 {
 374         return -ENODEV;
 375 }
 376 
 377 static inline ssize_t debugfs_write_file_bool(struct file *file,
 378                                               const char __user *user_buf,
 379                                               size_t count, loff_t *ppos)
 380 {
 381         return -ENODEV;
 382 }
 383 
 384 #endif
 385 
 386 #endif

/* [<][>][^][v][top][bottom][index][help] */