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> 191da177e4SLinus Torvalds 20a7a76cefSRoland Dreier #include <linux/types.h> 21a7a76cefSRoland Dreier 22a7a76cefSRoland Dreier struct file_operations; 23a7a76cefSRoland Dreier 24dd308bc3SMichael Ellerman struct debugfs_blob_wrapper { 25dd308bc3SMichael Ellerman void *data; 26dd308bc3SMichael Ellerman unsigned long size; 27dd308bc3SMichael Ellerman }; 28dd308bc3SMichael Ellerman 29ae79cdaaS[email protected] extern struct dentry *arch_debugfs_dir; 30ae79cdaaS[email protected] 311da177e4SLinus Torvalds #if defined(CONFIG_DEBUG_FS) 323634634eSHarvey Harrison 333634634eSHarvey Harrison /* declared over in file.c */ 343634634eSHarvey Harrison extern const struct file_operations debugfs_file_operations; 353634634eSHarvey Harrison extern const struct inode_operations debugfs_link_operations; 363634634eSHarvey Harrison 371da177e4SLinus Torvalds struct dentry *debugfs_create_file(const char *name, mode_t mode, 381da177e4SLinus Torvalds struct dentry *parent, void *data, 3999ac48f5SArjan van de Ven const struct file_operations *fops); 401da177e4SLinus Torvalds 411da177e4SLinus Torvalds struct dentry *debugfs_create_dir(const char *name, struct dentry *parent); 421da177e4SLinus Torvalds 4366f54963SPeter Oberparleiter struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent, 4466f54963SPeter Oberparleiter const char *dest); 4566f54963SPeter Oberparleiter 461da177e4SLinus Torvalds void debugfs_remove(struct dentry *dentry); 479505e637SHaavard Skinnemoen void debugfs_remove_recursive(struct dentry *dentry); 481da177e4SLinus Torvalds 49cfc94cdfSJan Kara struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry, 50cfc94cdfSJan Kara struct dentry *new_dir, const char *new_name); 51cfc94cdfSJan Kara 521da177e4SLinus Torvalds struct dentry *debugfs_create_u8(const char *name, mode_t mode, 531da177e4SLinus Torvalds struct dentry *parent, u8 *value); 541da177e4SLinus Torvalds struct dentry *debugfs_create_u16(const char *name, mode_t mode, 551da177e4SLinus Torvalds struct dentry *parent, u16 *value); 561da177e4SLinus Torvalds struct dentry *debugfs_create_u32(const char *name, mode_t mode, 571da177e4SLinus Torvalds struct dentry *parent, u32 *value); 588447891fSMichael Ellerman struct dentry *debugfs_create_u64(const char *name, mode_t mode, 598447891fSMichael Ellerman struct dentry *parent, u64 *value); 602ebefc50SRobin Getz struct dentry *debugfs_create_x8(const char *name, mode_t mode, 612ebefc50SRobin Getz struct dentry *parent, u8 *value); 622ebefc50SRobin Getz struct dentry *debugfs_create_x16(const char *name, mode_t mode, 632ebefc50SRobin Getz struct dentry *parent, u16 *value); 642ebefc50SRobin Getz struct dentry *debugfs_create_x32(const char *name, mode_t mode, 652ebefc50SRobin Getz struct dentry *parent, u32 *value); 66*15b0beaaSHuang Ying struct dentry *debugfs_create_x64(const char *name, mode_t mode, 67*15b0beaaSHuang Ying struct dentry *parent, u64 *value); 685e078787SInaky Perez-Gonzalez struct dentry *debugfs_create_size_t(const char *name, mode_t mode, 695e078787SInaky Perez-Gonzalez struct dentry *parent, size_t *value); 701da177e4SLinus Torvalds struct dentry *debugfs_create_bool(const char *name, mode_t mode, 711da177e4SLinus Torvalds struct dentry *parent, u32 *value); 721da177e4SLinus Torvalds 73dd308bc3SMichael Ellerman struct dentry *debugfs_create_blob(const char *name, mode_t mode, 74dd308bc3SMichael Ellerman struct dentry *parent, 75dd308bc3SMichael Ellerman struct debugfs_blob_wrapper *blob); 76c0f92ba9SFrederic Weisbecker 77c0f92ba9SFrederic Weisbecker bool debugfs_initialized(void); 78c0f92ba9SFrederic Weisbecker 791da177e4SLinus Torvalds #else 80a7a76cefSRoland Dreier 81a7a76cefSRoland Dreier #include <linux/err.h> 82a7a76cefSRoland Dreier 831da177e4SLinus Torvalds /* 841da177e4SLinus Torvalds * We do not return NULL from these functions if CONFIG_DEBUG_FS is not enabled 851da177e4SLinus Torvalds * so users have a chance to detect if there was a real error or not. We don't 861da177e4SLinus Torvalds * want to duplicate the design decision mistakes of procfs and devfs again. 871da177e4SLinus Torvalds */ 881da177e4SLinus Torvalds 891da177e4SLinus Torvalds static inline struct dentry *debugfs_create_file(const char *name, mode_t mode, 90bde11d79SJean Delvare struct dentry *parent, void *data, 91bde11d79SJean Delvare const struct file_operations *fops) 921da177e4SLinus Torvalds { 931da177e4SLinus Torvalds return ERR_PTR(-ENODEV); 941da177e4SLinus Torvalds } 951da177e4SLinus Torvalds 961da177e4SLinus Torvalds static inline struct dentry *debugfs_create_dir(const char *name, 971da177e4SLinus Torvalds struct dentry *parent) 981da177e4SLinus Torvalds { 991da177e4SLinus Torvalds return ERR_PTR(-ENODEV); 1001da177e4SLinus Torvalds } 1011da177e4SLinus Torvalds 10266f54963SPeter Oberparleiter static inline struct dentry *debugfs_create_symlink(const char *name, 10366f54963SPeter Oberparleiter struct dentry *parent, 10466f54963SPeter Oberparleiter const char *dest) 10566f54963SPeter Oberparleiter { 10666f54963SPeter Oberparleiter return ERR_PTR(-ENODEV); 10766f54963SPeter Oberparleiter } 10866f54963SPeter Oberparleiter 1091da177e4SLinus Torvalds static inline void debugfs_remove(struct dentry *dentry) 1101da177e4SLinus Torvalds { } 1111da177e4SLinus Torvalds 1129505e637SHaavard Skinnemoen static inline void debugfs_remove_recursive(struct dentry *dentry) 1139505e637SHaavard Skinnemoen { } 1149505e637SHaavard Skinnemoen 115cfc94cdfSJan Kara static inline struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry, 116cfc94cdfSJan Kara struct dentry *new_dir, char *new_name) 117cfc94cdfSJan Kara { 118cfc94cdfSJan Kara return ERR_PTR(-ENODEV); 119cfc94cdfSJan Kara } 120cfc94cdfSJan Kara 1211da177e4SLinus Torvalds static inline struct dentry *debugfs_create_u8(const char *name, mode_t mode, 1221da177e4SLinus Torvalds struct dentry *parent, 1231da177e4SLinus Torvalds u8 *value) 1241da177e4SLinus Torvalds { 1251da177e4SLinus Torvalds return ERR_PTR(-ENODEV); 1261da177e4SLinus Torvalds } 1271da177e4SLinus Torvalds 1281da177e4SLinus Torvalds static inline struct dentry *debugfs_create_u16(const char *name, mode_t mode, 1291da177e4SLinus Torvalds struct dentry *parent, 1307b558637SMichal Ostrowski u16 *value) 1311da177e4SLinus Torvalds { 1321da177e4SLinus Torvalds return ERR_PTR(-ENODEV); 1331da177e4SLinus Torvalds } 1341da177e4SLinus Torvalds 1351da177e4SLinus Torvalds static inline struct dentry *debugfs_create_u32(const char *name, mode_t mode, 1361da177e4SLinus Torvalds struct dentry *parent, 1377b558637SMichal Ostrowski u32 *value) 1381da177e4SLinus Torvalds { 1391da177e4SLinus Torvalds return ERR_PTR(-ENODEV); 1401da177e4SLinus Torvalds } 1411da177e4SLinus Torvalds 1428447891fSMichael Ellerman static inline struct dentry *debugfs_create_u64(const char *name, mode_t mode, 1438447891fSMichael Ellerman struct dentry *parent, 1448447891fSMichael Ellerman u64 *value) 1458447891fSMichael Ellerman { 1468447891fSMichael Ellerman return ERR_PTR(-ENODEV); 1478447891fSMichael Ellerman } 1488447891fSMichael Ellerman 1492ebefc50SRobin Getz static inline struct dentry *debugfs_create_x8(const char *name, mode_t mode, 1502ebefc50SRobin Getz struct dentry *parent, 1512ebefc50SRobin Getz u8 *value) 1522ebefc50SRobin Getz { 1532ebefc50SRobin Getz return ERR_PTR(-ENODEV); 1542ebefc50SRobin Getz } 1552ebefc50SRobin Getz 1562ebefc50SRobin Getz static inline struct dentry *debugfs_create_x16(const char *name, mode_t mode, 1572ebefc50SRobin Getz struct dentry *parent, 1582ebefc50SRobin Getz u16 *value) 1592ebefc50SRobin Getz { 1602ebefc50SRobin Getz return ERR_PTR(-ENODEV); 1612ebefc50SRobin Getz } 1622ebefc50SRobin Getz 1632ebefc50SRobin Getz static inline struct dentry *debugfs_create_x32(const char *name, mode_t mode, 1642ebefc50SRobin Getz struct dentry *parent, 1652ebefc50SRobin Getz u32 *value) 1662ebefc50SRobin Getz { 1672ebefc50SRobin Getz return ERR_PTR(-ENODEV); 1682ebefc50SRobin Getz } 1692ebefc50SRobin Getz 1705ee81007SLinus Torvalds static inline struct dentry *debugfs_create_size_t(const char *name, mode_t mode, 1718adb711fSInaky Perez-Gonzalez struct dentry *parent, 1728adb711fSInaky Perez-Gonzalez size_t *value) 1738adb711fSInaky Perez-Gonzalez { 1748adb711fSInaky Perez-Gonzalez return ERR_PTR(-ENODEV); 1758adb711fSInaky Perez-Gonzalez } 1768adb711fSInaky Perez-Gonzalez 1771da177e4SLinus Torvalds static inline struct dentry *debugfs_create_bool(const char *name, mode_t mode, 1781da177e4SLinus Torvalds struct dentry *parent, 1797b558637SMichal Ostrowski u32 *value) 1801da177e4SLinus Torvalds { 1811da177e4SLinus Torvalds return ERR_PTR(-ENODEV); 1821da177e4SLinus Torvalds } 1831da177e4SLinus Torvalds 184dd308bc3SMichael Ellerman static inline struct dentry *debugfs_create_blob(const char *name, mode_t mode, 185dd308bc3SMichael Ellerman struct dentry *parent, 186dd308bc3SMichael Ellerman struct debugfs_blob_wrapper *blob) 187dd308bc3SMichael Ellerman { 188dd308bc3SMichael Ellerman return ERR_PTR(-ENODEV); 189dd308bc3SMichael Ellerman } 190dd308bc3SMichael Ellerman 191c0f92ba9SFrederic Weisbecker static inline bool debugfs_initialized(void) 192c0f92ba9SFrederic Weisbecker { 193c0f92ba9SFrederic Weisbecker return false; 194c0f92ba9SFrederic Weisbecker } 195c0f92ba9SFrederic Weisbecker 1961da177e4SLinus Torvalds #endif 1971da177e4SLinus Torvalds 1981da177e4SLinus Torvalds #endif 199