xref: /linux-6.15/include/linux/debugfs.h (revision e59b4e91)
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