11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * debugfs.h - a tiny little debug file system 31da177e4SLinus Torvalds * 41da177e4SLinus Torvalds * Copyright (C) 2004 Greg Kroah-Hartman <[email protected]> 51da177e4SLinus Torvalds * Copyright (C) 2004 IBM Inc. 61da177e4SLinus Torvalds * 71da177e4SLinus Torvalds * This program is free software; you can redistribute it and/or 81da177e4SLinus Torvalds * modify it under the terms of the GNU General Public License version 91da177e4SLinus Torvalds * 2 as published by the Free Software Foundation. 101da177e4SLinus Torvalds * 111da177e4SLinus Torvalds * debugfs is for people to use instead of /proc or /sys. 1255dff495SRandy Dunlap * See Documentation/DocBook/filesystems for more details. 131da177e4SLinus Torvalds */ 141da177e4SLinus Torvalds 151da177e4SLinus Torvalds #ifndef _DEBUGFS_H_ 161da177e4SLinus Torvalds #define _DEBUGFS_H_ 171da177e4SLinus Torvalds 181da177e4SLinus Torvalds #include <linux/fs.h> 191a087c6aSAlessandro Rubini #include <linux/seq_file.h> 201da177e4SLinus Torvalds 21a7a76cefSRoland Dreier #include <linux/types.h> 22a7a76cefSRoland Dreier 23f30d0a81SArend van Spriel struct device; 24a7a76cefSRoland Dreier struct file_operations; 25a7a76cefSRoland Dreier 26dd308bc3SMichael Ellerman struct debugfs_blob_wrapper { 27dd308bc3SMichael Ellerman void *data; 28dd308bc3SMichael Ellerman unsigned long size; 29dd308bc3SMichael Ellerman }; 30dd308bc3SMichael Ellerman 311a087c6aSAlessandro Rubini struct debugfs_reg32 { 321a087c6aSAlessandro Rubini char *name; 331a087c6aSAlessandro Rubini unsigned long offset; 341a087c6aSAlessandro Rubini }; 351a087c6aSAlessandro Rubini 361a087c6aSAlessandro Rubini struct debugfs_regset32 { 37833d6e01SFelipe Balbi const struct debugfs_reg32 *regs; 381a087c6aSAlessandro Rubini int nregs; 391a087c6aSAlessandro Rubini void __iomem *base; 401a087c6aSAlessandro Rubini }; 411a087c6aSAlessandro Rubini 42ae79cdaaS[email protected] extern struct dentry *arch_debugfs_dir; 43ae79cdaaS[email protected] 441da177e4SLinus Torvalds #if defined(CONFIG_DEBUG_FS) 453634634eSHarvey Harrison 463634634eSHarvey Harrison /* declared over in file.c */ 473634634eSHarvey Harrison extern const struct file_operations debugfs_file_operations; 483634634eSHarvey Harrison extern const struct inode_operations debugfs_link_operations; 493634634eSHarvey Harrison 50f4ae40a6SAl Viro struct dentry *debugfs_create_file(const char *name, umode_t mode, 511da177e4SLinus Torvalds struct dentry *parent, void *data, 5299ac48f5SArjan van de Ven const struct file_operations *fops); 531da177e4SLinus Torvalds 54*e59b4e91SDavid Howells struct dentry *debugfs_create_file_size(const char *name, umode_t mode, 55*e59b4e91SDavid Howells struct dentry *parent, void *data, 56*e59b4e91SDavid Howells const struct file_operations *fops, 57*e59b4e91SDavid Howells loff_t file_size); 58*e59b4e91SDavid Howells 591da177e4SLinus Torvalds struct dentry *debugfs_create_dir(const char *name, struct dentry *parent); 601da177e4SLinus Torvalds 6166f54963SPeter Oberparleiter struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent, 6266f54963SPeter Oberparleiter const char *dest); 6366f54963SPeter Oberparleiter 6477b3da6eSAl Viro struct dentry *debugfs_create_automount(const char *name, 6577b3da6eSAl Viro struct dentry *parent, 6677b3da6eSAl Viro struct vfsmount *(*f)(void *), 6777b3da6eSAl Viro void *data); 6877b3da6eSAl Viro 691da177e4SLinus Torvalds void debugfs_remove(struct dentry *dentry); 709505e637SHaavard Skinnemoen void debugfs_remove_recursive(struct dentry *dentry); 711da177e4SLinus Torvalds 72cfc94cdfSJan Kara struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry, 73cfc94cdfSJan Kara struct dentry *new_dir, const char *new_name); 74cfc94cdfSJan Kara 75f4ae40a6SAl Viro struct dentry *debugfs_create_u8(const char *name, umode_t mode, 761da177e4SLinus Torvalds struct dentry *parent, u8 *value); 77f4ae40a6SAl Viro struct dentry *debugfs_create_u16(const char *name, umode_t mode, 781da177e4SLinus Torvalds struct dentry *parent, u16 *value); 79f4ae40a6SAl Viro struct dentry *debugfs_create_u32(const char *name, umode_t mode, 801da177e4SLinus Torvalds struct dentry *parent, u32 *value); 81f4ae40a6SAl Viro struct dentry *debugfs_create_u64(const char *name, umode_t mode, 828447891fSMichael Ellerman struct dentry *parent, u64 *value); 83f4ae40a6SAl Viro struct dentry *debugfs_create_x8(const char *name, umode_t mode, 842ebefc50SRobin Getz struct dentry *parent, u8 *value); 85f4ae40a6SAl Viro struct dentry *debugfs_create_x16(const char *name, umode_t mode, 862ebefc50SRobin Getz struct dentry *parent, u16 *value); 87f4ae40a6SAl Viro struct dentry *debugfs_create_x32(const char *name, umode_t mode, 882ebefc50SRobin Getz struct dentry *parent, u32 *value); 89f4ae40a6SAl Viro struct dentry *debugfs_create_x64(const char *name, umode_t mode, 9015b0beaaSHuang Ying struct dentry *parent, u64 *value); 91f4ae40a6SAl Viro struct dentry *debugfs_create_size_t(const char *name, umode_t mode, 925e078787SInaky Perez-Gonzalez struct dentry *parent, size_t *value); 933a76e5e0SSeth Jennings struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode, 943a76e5e0SSeth Jennings struct dentry *parent, atomic_t *value); 95f4ae40a6SAl Viro struct dentry *debugfs_create_bool(const char *name, umode_t mode, 961da177e4SLinus Torvalds struct dentry *parent, u32 *value); 971da177e4SLinus Torvalds 98f4ae40a6SAl Viro struct dentry *debugfs_create_blob(const char *name, umode_t mode, 99dd308bc3SMichael Ellerman struct dentry *parent, 100dd308bc3SMichael Ellerman struct debugfs_blob_wrapper *blob); 101c0f92ba9SFrederic Weisbecker 10288187398SAl Viro struct dentry *debugfs_create_regset32(const char *name, umode_t mode, 1031a087c6aSAlessandro Rubini struct dentry *parent, 1041a087c6aSAlessandro Rubini struct debugfs_regset32 *regset); 1051a087c6aSAlessandro Rubini 1069761536eSJoe Perches void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs, 1071a087c6aSAlessandro Rubini int nregs, void __iomem *base, char *prefix); 1081a087c6aSAlessandro Rubini 1099fe2a701SSrivatsa Vaddagiri struct dentry *debugfs_create_u32_array(const char *name, umode_t mode, 1109fe2a701SSrivatsa Vaddagiri struct dentry *parent, 1119fe2a701SSrivatsa Vaddagiri u32 *array, u32 elements); 1129fe2a701SSrivatsa Vaddagiri 11398210b7fSArend van Spriel struct dentry *debugfs_create_devm_seqfile(struct device *dev, const char *name, 11498210b7fSArend van Spriel struct dentry *parent, 11598210b7fSArend van Spriel int (*read_fn)(struct seq_file *s, 11698210b7fSArend van Spriel void *data)); 11798210b7fSArend van Spriel 118c0f92ba9SFrederic Weisbecker bool debugfs_initialized(void); 119c0f92ba9SFrederic Weisbecker 1201da177e4SLinus Torvalds #else 121a7a76cefSRoland Dreier 122a7a76cefSRoland Dreier #include <linux/err.h> 123a7a76cefSRoland Dreier 1241da177e4SLinus Torvalds /* 1251da177e4SLinus Torvalds * We do not return NULL from these functions if CONFIG_DEBUG_FS is not enabled 1261da177e4SLinus Torvalds * so users have a chance to detect if there was a real error or not. We don't 1271da177e4SLinus Torvalds * want to duplicate the design decision mistakes of procfs and devfs again. 1281da177e4SLinus Torvalds */ 1291da177e4SLinus Torvalds 130f4ae40a6SAl Viro static inline struct dentry *debugfs_create_file(const char *name, umode_t mode, 131bde11d79SJean Delvare struct dentry *parent, void *data, 132bde11d79SJean Delvare const struct file_operations *fops) 1331da177e4SLinus Torvalds { 1341da177e4SLinus Torvalds return ERR_PTR(-ENODEV); 1351da177e4SLinus Torvalds } 1361da177e4SLinus Torvalds 137*e59b4e91SDavid Howells static inline struct dentry *debugfs_create_file_size(const char *name, umode_t mode, 138*e59b4e91SDavid Howells struct dentry *parent, void *data, 139*e59b4e91SDavid Howells const struct file_operations *fops, 140*e59b4e91SDavid Howells loff_t file_size) 141*e59b4e91SDavid Howells { 142*e59b4e91SDavid Howells return ERR_PTR(-ENODEV); 143*e59b4e91SDavid Howells } 144*e59b4e91SDavid Howells 1451da177e4SLinus Torvalds static inline struct dentry *debugfs_create_dir(const char *name, 1461da177e4SLinus Torvalds struct dentry *parent) 1471da177e4SLinus Torvalds { 1481da177e4SLinus Torvalds return ERR_PTR(-ENODEV); 1491da177e4SLinus Torvalds } 1501da177e4SLinus Torvalds 15166f54963SPeter Oberparleiter static inline struct dentry *debugfs_create_symlink(const char *name, 15266f54963SPeter Oberparleiter struct dentry *parent, 15366f54963SPeter Oberparleiter const char *dest) 15466f54963SPeter Oberparleiter { 15566f54963SPeter Oberparleiter return ERR_PTR(-ENODEV); 15666f54963SPeter Oberparleiter } 15766f54963SPeter Oberparleiter 1581da177e4SLinus Torvalds static inline void debugfs_remove(struct dentry *dentry) 1591da177e4SLinus Torvalds { } 1601da177e4SLinus Torvalds 1619505e637SHaavard Skinnemoen static inline void debugfs_remove_recursive(struct dentry *dentry) 1629505e637SHaavard Skinnemoen { } 1639505e637SHaavard Skinnemoen 164cfc94cdfSJan Kara static inline struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry, 165cfc94cdfSJan Kara struct dentry *new_dir, char *new_name) 166cfc94cdfSJan Kara { 167cfc94cdfSJan Kara return ERR_PTR(-ENODEV); 168cfc94cdfSJan Kara } 169cfc94cdfSJan Kara 170f4ae40a6SAl Viro static inline struct dentry *debugfs_create_u8(const char *name, umode_t mode, 1711da177e4SLinus Torvalds struct dentry *parent, 1721da177e4SLinus Torvalds u8 *value) 1731da177e4SLinus Torvalds { 1741da177e4SLinus Torvalds return ERR_PTR(-ENODEV); 1751da177e4SLinus Torvalds } 1761da177e4SLinus Torvalds 177f4ae40a6SAl Viro static inline struct dentry *debugfs_create_u16(const char *name, umode_t mode, 1781da177e4SLinus Torvalds struct dentry *parent, 1797b558637SMichal Ostrowski u16 *value) 1801da177e4SLinus Torvalds { 1811da177e4SLinus Torvalds return ERR_PTR(-ENODEV); 1821da177e4SLinus Torvalds } 1831da177e4SLinus Torvalds 184f4ae40a6SAl Viro static inline struct dentry *debugfs_create_u32(const char *name, umode_t mode, 1851da177e4SLinus Torvalds struct dentry *parent, 1867b558637SMichal Ostrowski u32 *value) 1871da177e4SLinus Torvalds { 1881da177e4SLinus Torvalds return ERR_PTR(-ENODEV); 1891da177e4SLinus Torvalds } 1901da177e4SLinus Torvalds 191f4ae40a6SAl Viro static inline struct dentry *debugfs_create_u64(const char *name, umode_t mode, 1928447891fSMichael Ellerman struct dentry *parent, 1938447891fSMichael Ellerman u64 *value) 1948447891fSMichael Ellerman { 1958447891fSMichael Ellerman return ERR_PTR(-ENODEV); 1968447891fSMichael Ellerman } 1978447891fSMichael Ellerman 198f4ae40a6SAl Viro static inline struct dentry *debugfs_create_x8(const char *name, umode_t mode, 1992ebefc50SRobin Getz struct dentry *parent, 2002ebefc50SRobin Getz u8 *value) 2012ebefc50SRobin Getz { 2022ebefc50SRobin Getz return ERR_PTR(-ENODEV); 2032ebefc50SRobin Getz } 2042ebefc50SRobin Getz 205f4ae40a6SAl Viro static inline struct dentry *debugfs_create_x16(const char *name, umode_t mode, 2062ebefc50SRobin Getz struct dentry *parent, 2072ebefc50SRobin Getz u16 *value) 2082ebefc50SRobin Getz { 2092ebefc50SRobin Getz return ERR_PTR(-ENODEV); 2102ebefc50SRobin Getz } 2112ebefc50SRobin Getz 212f4ae40a6SAl Viro static inline struct dentry *debugfs_create_x32(const char *name, umode_t mode, 2132ebefc50SRobin Getz struct dentry *parent, 2142ebefc50SRobin Getz u32 *value) 2152ebefc50SRobin Getz { 2162ebefc50SRobin Getz return ERR_PTR(-ENODEV); 2172ebefc50SRobin Getz } 2182ebefc50SRobin Getz 2193159269eSJohannes Berg static inline struct dentry *debugfs_create_x64(const char *name, umode_t mode, 2203159269eSJohannes Berg struct dentry *parent, 2213159269eSJohannes Berg u64 *value) 2223159269eSJohannes Berg { 2233159269eSJohannes Berg return ERR_PTR(-ENODEV); 2243159269eSJohannes Berg } 2253159269eSJohannes Berg 226f4ae40a6SAl Viro static inline struct dentry *debugfs_create_size_t(const char *name, umode_t mode, 2278adb711fSInaky Perez-Gonzalez struct dentry *parent, 2288adb711fSInaky Perez-Gonzalez size_t *value) 2298adb711fSInaky Perez-Gonzalez { 2308adb711fSInaky Perez-Gonzalez return ERR_PTR(-ENODEV); 2318adb711fSInaky Perez-Gonzalez } 2328adb711fSInaky Perez-Gonzalez 2335b880214SWeijie Yang static inline struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode, 2345b880214SWeijie Yang struct dentry *parent, atomic_t *value) 2355b880214SWeijie Yang { 2365b880214SWeijie Yang return ERR_PTR(-ENODEV); 2375b880214SWeijie Yang } 2385b880214SWeijie Yang 239f4ae40a6SAl Viro static inline struct dentry *debugfs_create_bool(const char *name, umode_t mode, 2401da177e4SLinus Torvalds struct dentry *parent, 2417b558637SMichal Ostrowski u32 *value) 2421da177e4SLinus Torvalds { 2431da177e4SLinus Torvalds return ERR_PTR(-ENODEV); 2441da177e4SLinus Torvalds } 2451da177e4SLinus Torvalds 246f4ae40a6SAl Viro static inline struct dentry *debugfs_create_blob(const char *name, umode_t mode, 247dd308bc3SMichael Ellerman struct dentry *parent, 248dd308bc3SMichael Ellerman struct debugfs_blob_wrapper *blob) 249dd308bc3SMichael Ellerman { 250dd308bc3SMichael Ellerman return ERR_PTR(-ENODEV); 251dd308bc3SMichael Ellerman } 252dd308bc3SMichael Ellerman 2531a087c6aSAlessandro Rubini static inline struct dentry *debugfs_create_regset32(const char *name, 25488187398SAl Viro umode_t mode, struct dentry *parent, 2551a087c6aSAlessandro Rubini struct debugfs_regset32 *regset) 2561a087c6aSAlessandro Rubini { 2571a087c6aSAlessandro Rubini return ERR_PTR(-ENODEV); 2581a087c6aSAlessandro Rubini } 2591a087c6aSAlessandro Rubini 2609761536eSJoe Perches static inline void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs, 2615b880214SWeijie Yang int nregs, void __iomem *base, char *prefix) 2625b880214SWeijie Yang { 2635b880214SWeijie Yang } 2645b880214SWeijie Yang 265c0f92ba9SFrederic Weisbecker static inline bool debugfs_initialized(void) 266c0f92ba9SFrederic Weisbecker { 267c0f92ba9SFrederic Weisbecker return false; 268c0f92ba9SFrederic Weisbecker } 269c0f92ba9SFrederic Weisbecker 2709fe2a701SSrivatsa Vaddagiri static inline struct dentry *debugfs_create_u32_array(const char *name, umode_t mode, 2719fe2a701SSrivatsa Vaddagiri struct dentry *parent, 2729fe2a701SSrivatsa Vaddagiri u32 *array, u32 elements) 2739fe2a701SSrivatsa Vaddagiri { 2749fe2a701SSrivatsa Vaddagiri return ERR_PTR(-ENODEV); 2759fe2a701SSrivatsa Vaddagiri } 2769fe2a701SSrivatsa Vaddagiri 27798210b7fSArend van Spriel static inline struct dentry *debugfs_create_devm_seqfile(struct device *dev, 27898210b7fSArend van Spriel const char *name, 27998210b7fSArend van Spriel struct dentry *parent, 28098210b7fSArend van Spriel int (*read_fn)(struct seq_file *s, 28198210b7fSArend van Spriel void *data)) 28298210b7fSArend van Spriel { 28398210b7fSArend van Spriel return ERR_PTR(-ENODEV); 28498210b7fSArend van Spriel } 28598210b7fSArend van Spriel 2861da177e4SLinus Torvalds #endif 2871da177e4SLinus Torvalds 2881da177e4SLinus Torvalds #endif 289