xref: /linux-6.15/include/linux/debugfs.h (revision e40d38f2)
13bce94fdSGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds  *  debugfs.h - a tiny little debug file system
41da177e4SLinus Torvalds  *
51da177e4SLinus Torvalds  *  Copyright (C) 2004 Greg Kroah-Hartman <[email protected]>
61da177e4SLinus Torvalds  *  Copyright (C) 2004 IBM Inc.
71da177e4SLinus Torvalds  *
81da177e4SLinus Torvalds  *  debugfs is for people to use instead of /proc or /sys.
9e1b4fc7aSMauro Carvalho Chehab  *  See Documentation/filesystems/ for more details.
101da177e4SLinus Torvalds  */
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds #ifndef _DEBUGFS_H_
131da177e4SLinus Torvalds #define _DEBUGFS_H_
141da177e4SLinus Torvalds 
151da177e4SLinus Torvalds #include <linux/fs.h>
161a087c6aSAlessandro Rubini #include <linux/seq_file.h>
171da177e4SLinus Torvalds 
18a7a76cefSRoland Dreier #include <linux/types.h>
1949d200deSNicolai Stange #include <linux/compiler.h>
20a7a76cefSRoland Dreier 
21f30d0a81SArend van Spriel struct device;
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 
291a087c6aSAlessandro Rubini struct debugfs_reg32 {
301a087c6aSAlessandro Rubini 	char *name;
311a087c6aSAlessandro Rubini 	unsigned long offset;
321a087c6aSAlessandro Rubini };
331a087c6aSAlessandro Rubini 
341a087c6aSAlessandro Rubini struct debugfs_regset32 {
35833d6e01SFelipe Balbi 	const struct debugfs_reg32 *regs;
361a087c6aSAlessandro Rubini 	int nregs;
371a087c6aSAlessandro Rubini 	void __iomem *base;
381a087c6aSAlessandro Rubini };
391a087c6aSAlessandro Rubini 
40ae79cdaaS[email protected] extern struct dentry *arch_debugfs_dir;
41ae79cdaaS[email protected] 
427f847dd3SArnd Bergmann #define DEFINE_DEBUGFS_ATTRIBUTE(__fops, __get, __set, __fmt)		\
437f847dd3SArnd Bergmann static int __fops ## _open(struct inode *inode, struct file *file)	\
447f847dd3SArnd Bergmann {									\
457f847dd3SArnd Bergmann 	__simple_attr_check_format(__fmt, 0ull);			\
467f847dd3SArnd Bergmann 	return simple_attr_open(inode, file, __get, __set, __fmt);	\
477f847dd3SArnd Bergmann }									\
487f847dd3SArnd Bergmann static const struct file_operations __fops = {				\
497f847dd3SArnd Bergmann 	.owner	 = THIS_MODULE,						\
507f847dd3SArnd Bergmann 	.open	 = __fops ## _open,					\
517f847dd3SArnd Bergmann 	.release = simple_attr_release,					\
527f847dd3SArnd Bergmann 	.read	 = debugfs_attr_read,					\
537f847dd3SArnd Bergmann 	.write	 = debugfs_attr_write,					\
54895ce6c8SGeliang Tang 	.llseek  = no_llseek,						\
557f847dd3SArnd Bergmann }
567f847dd3SArnd Bergmann 
571da177e4SLinus Torvalds #if defined(CONFIG_DEBUG_FS)
583634634eSHarvey Harrison 
59a7c5437bSOmar Sandoval struct dentry *debugfs_lookup(const char *name, struct dentry *parent);
60a7c5437bSOmar Sandoval 
61f4ae40a6SAl Viro struct dentry *debugfs_create_file(const char *name, umode_t mode,
621da177e4SLinus Torvalds 				   struct dentry *parent, void *data,
6399ac48f5SArjan van de Ven 				   const struct file_operations *fops);
64c6468808SNicolai Stange struct dentry *debugfs_create_file_unsafe(const char *name, umode_t mode,
65c6468808SNicolai Stange 				   struct dentry *parent, void *data,
66c6468808SNicolai Stange 				   const struct file_operations *fops);
671da177e4SLinus Torvalds 
68e59b4e91SDavid Howells struct dentry *debugfs_create_file_size(const char *name, umode_t mode,
69e59b4e91SDavid Howells 					struct dentry *parent, void *data,
70e59b4e91SDavid Howells 					const struct file_operations *fops,
71e59b4e91SDavid Howells 					loff_t file_size);
72e59b4e91SDavid Howells 
731da177e4SLinus Torvalds struct dentry *debugfs_create_dir(const char *name, struct dentry *parent);
741da177e4SLinus Torvalds 
7566f54963SPeter Oberparleiter struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
7666f54963SPeter Oberparleiter 				      const char *dest);
7766f54963SPeter Oberparleiter 
7893faccbbSEric W. Biederman typedef struct vfsmount *(*debugfs_automount_t)(struct dentry *, void *);
7977b3da6eSAl Viro struct dentry *debugfs_create_automount(const char *name,
8077b3da6eSAl Viro 					struct dentry *parent,
8193faccbbSEric W. Biederman 					debugfs_automount_t f,
8277b3da6eSAl Viro 					void *data);
8377b3da6eSAl Viro 
841da177e4SLinus Torvalds void debugfs_remove(struct dentry *dentry);
859505e637SHaavard Skinnemoen void debugfs_remove_recursive(struct dentry *dentry);
861da177e4SLinus Torvalds 
87055ab8e3SNicolai Stange const struct file_operations *debugfs_real_fops(const struct file *filp);
887c8d4698SNicolai Stange 
89e9117a5aSNicolai Stange int debugfs_file_get(struct dentry *dentry);
90e9117a5aSNicolai Stange void debugfs_file_put(struct dentry *dentry);
91e9117a5aSNicolai Stange 
92c6468808SNicolai Stange ssize_t debugfs_attr_read(struct file *file, char __user *buf,
93c6468808SNicolai Stange 			size_t len, loff_t *ppos);
94c6468808SNicolai Stange ssize_t debugfs_attr_write(struct file *file, const char __user *buf,
95c6468808SNicolai Stange 			size_t len, loff_t *ppos);
96c6468808SNicolai Stange 
97cfc94cdfSJan Kara struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
98cfc94cdfSJan Kara                 struct dentry *new_dir, const char *new_name);
99cfc94cdfSJan Kara 
1009655ac4aSGreg Kroah-Hartman void debugfs_create_u8(const char *name, umode_t mode, struct dentry *parent,
1019655ac4aSGreg Kroah-Hartman 		       u8 *value);
102313f5dbbSGreg Kroah-Hartman void debugfs_create_u16(const char *name, umode_t mode, struct dentry *parent,
103313f5dbbSGreg Kroah-Hartman 			u16 *value);
104f4ae40a6SAl Viro struct dentry *debugfs_create_u32(const char *name, umode_t mode,
1051da177e4SLinus Torvalds 				  struct dentry *parent, u32 *value);
106ad26221fSGreg Kroah-Hartman void debugfs_create_u64(const char *name, umode_t mode, struct dentry *parent,
107ad26221fSGreg Kroah-Hartman 			u64 *value);
108c23fe831SViresh Kumar struct dentry *debugfs_create_ulong(const char *name, umode_t mode,
109c23fe831SViresh Kumar 				    struct dentry *parent, unsigned long *value);
110f4ae40a6SAl Viro struct dentry *debugfs_create_x8(const char *name, umode_t mode,
1112ebefc50SRobin Getz 				 struct dentry *parent, u8 *value);
112*e40d38f2SGreg Kroah-Hartman void debugfs_create_x16(const char *name, umode_t mode, struct dentry *parent,
113*e40d38f2SGreg Kroah-Hartman 			u16 *value);
114f4ae40a6SAl Viro struct dentry *debugfs_create_x32(const char *name, umode_t mode,
1152ebefc50SRobin Getz 				  struct dentry *parent, u32 *value);
116f4ae40a6SAl Viro struct dentry *debugfs_create_x64(const char *name, umode_t mode,
11715b0beaaSHuang Ying 				  struct dentry *parent, u64 *value);
1188e580263SGreg Kroah-Hartman void debugfs_create_size_t(const char *name, umode_t mode,
1195e078787SInaky Perez-Gonzalez 			   struct dentry *parent, size_t *value);
1203a76e5e0SSeth Jennings struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode,
1213a76e5e0SSeth Jennings 				     struct dentry *parent, atomic_t *value);
122f4ae40a6SAl Viro struct dentry *debugfs_create_bool(const char *name, umode_t mode,
123621a5f7aSViresh Kumar 				  struct dentry *parent, bool *value);
1241da177e4SLinus Torvalds 
125f4ae40a6SAl Viro struct dentry *debugfs_create_blob(const char *name, umode_t mode,
126dd308bc3SMichael Ellerman 				  struct dentry *parent,
127dd308bc3SMichael Ellerman 				  struct debugfs_blob_wrapper *blob);
128c0f92ba9SFrederic Weisbecker 
12988187398SAl Viro struct dentry *debugfs_create_regset32(const char *name, umode_t mode,
1301a087c6aSAlessandro Rubini 				     struct dentry *parent,
1311a087c6aSAlessandro Rubini 				     struct debugfs_regset32 *regset);
1321a087c6aSAlessandro Rubini 
1339761536eSJoe Perches void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs,
1341a087c6aSAlessandro Rubini 			  int nregs, void __iomem *base, char *prefix);
1351a087c6aSAlessandro Rubini 
136c9c2c27dSGreg Kroah-Hartman void debugfs_create_u32_array(const char *name, umode_t mode,
137c9c2c27dSGreg Kroah-Hartman 			      struct dentry *parent, u32 *array, u32 elements);
1389fe2a701SSrivatsa Vaddagiri 
13998210b7fSArend van Spriel struct dentry *debugfs_create_devm_seqfile(struct device *dev, const char *name,
14098210b7fSArend van Spriel 					   struct dentry *parent,
14198210b7fSArend van Spriel 					   int (*read_fn)(struct seq_file *s,
14298210b7fSArend van Spriel 							  void *data));
14398210b7fSArend van Spriel 
144c0f92ba9SFrederic Weisbecker bool debugfs_initialized(void);
145c0f92ba9SFrederic Weisbecker 
1460642ef6fSRichard Fitzgerald ssize_t debugfs_read_file_bool(struct file *file, char __user *user_buf,
1470642ef6fSRichard Fitzgerald 			       size_t count, loff_t *ppos);
1480642ef6fSRichard Fitzgerald 
1490642ef6fSRichard Fitzgerald ssize_t debugfs_write_file_bool(struct file *file, const char __user *user_buf,
1500642ef6fSRichard Fitzgerald 				size_t count, loff_t *ppos);
1510642ef6fSRichard Fitzgerald 
1521da177e4SLinus Torvalds #else
153a7a76cefSRoland Dreier 
154a7a76cefSRoland Dreier #include <linux/err.h>
155a7a76cefSRoland Dreier 
1561da177e4SLinus Torvalds /*
1571da177e4SLinus Torvalds  * We do not return NULL from these functions if CONFIG_DEBUG_FS is not enabled
1581da177e4SLinus Torvalds  * so users have a chance to detect if there was a real error or not.  We don't
1591da177e4SLinus Torvalds  * want to duplicate the design decision mistakes of procfs and devfs again.
1601da177e4SLinus Torvalds  */
1611da177e4SLinus Torvalds 
162a7c5437bSOmar Sandoval static inline struct dentry *debugfs_lookup(const char *name,
163a7c5437bSOmar Sandoval 					    struct dentry *parent)
164a7c5437bSOmar Sandoval {
165a7c5437bSOmar Sandoval 	return ERR_PTR(-ENODEV);
166a7c5437bSOmar Sandoval }
167a7c5437bSOmar Sandoval 
168f4ae40a6SAl Viro static inline struct dentry *debugfs_create_file(const char *name, umode_t mode,
169bde11d79SJean Delvare 					struct dentry *parent, void *data,
170bde11d79SJean Delvare 					const struct file_operations *fops)
1711da177e4SLinus Torvalds {
1721da177e4SLinus Torvalds 	return ERR_PTR(-ENODEV);
1731da177e4SLinus Torvalds }
1741da177e4SLinus Torvalds 
175c2a737ebSViresh Kumar static inline struct dentry *debugfs_create_file_unsafe(const char *name,
176c2a737ebSViresh Kumar 					umode_t mode, struct dentry *parent,
177c2a737ebSViresh Kumar 					void *data,
178c2a737ebSViresh Kumar 					const struct file_operations *fops)
179c2a737ebSViresh Kumar {
180c2a737ebSViresh Kumar 	return ERR_PTR(-ENODEV);
181c2a737ebSViresh Kumar }
182c2a737ebSViresh Kumar 
183e59b4e91SDavid Howells static inline struct dentry *debugfs_create_file_size(const char *name, umode_t mode,
184e59b4e91SDavid Howells 					struct dentry *parent, void *data,
185e59b4e91SDavid Howells 					const struct file_operations *fops,
186e59b4e91SDavid Howells 					loff_t file_size)
187e59b4e91SDavid Howells {
188e59b4e91SDavid Howells 	return ERR_PTR(-ENODEV);
189e59b4e91SDavid Howells }
190e59b4e91SDavid Howells 
1911da177e4SLinus Torvalds static inline struct dentry *debugfs_create_dir(const char *name,
1921da177e4SLinus Torvalds 						struct dentry *parent)
1931da177e4SLinus Torvalds {
1941da177e4SLinus Torvalds 	return ERR_PTR(-ENODEV);
1951da177e4SLinus Torvalds }
1961da177e4SLinus Torvalds 
19766f54963SPeter Oberparleiter static inline struct dentry *debugfs_create_symlink(const char *name,
19866f54963SPeter Oberparleiter 						    struct dentry *parent,
19966f54963SPeter Oberparleiter 						    const char *dest)
20066f54963SPeter Oberparleiter {
20166f54963SPeter Oberparleiter 	return ERR_PTR(-ENODEV);
20266f54963SPeter Oberparleiter }
20366f54963SPeter Oberparleiter 
20494e1dec7SJiaxing Wang static inline struct dentry *debugfs_create_automount(const char *name,
20594e1dec7SJiaxing Wang 					struct dentry *parent,
20694e1dec7SJiaxing Wang 					struct vfsmount *(*f)(void *),
20794e1dec7SJiaxing Wang 					void *data)
20894e1dec7SJiaxing Wang {
20994e1dec7SJiaxing Wang 	return ERR_PTR(-ENODEV);
21094e1dec7SJiaxing Wang }
21194e1dec7SJiaxing Wang 
2121da177e4SLinus Torvalds static inline void debugfs_remove(struct dentry *dentry)
2131da177e4SLinus Torvalds { }
2141da177e4SLinus Torvalds 
2159505e637SHaavard Skinnemoen static inline void debugfs_remove_recursive(struct dentry *dentry)
2169505e637SHaavard Skinnemoen { }
2179505e637SHaavard Skinnemoen 
218f50caa9bSArnd Bergmann const struct file_operations *debugfs_real_fops(const struct file *filp);
219f50caa9bSArnd Bergmann 
220e9117a5aSNicolai Stange static inline int debugfs_file_get(struct dentry *dentry)
221e9117a5aSNicolai Stange {
222e9117a5aSNicolai Stange 	return 0;
223e9117a5aSNicolai Stange }
224e9117a5aSNicolai Stange 
225e9117a5aSNicolai Stange static inline void debugfs_file_put(struct dentry *dentry)
226e9117a5aSNicolai Stange { }
227e9117a5aSNicolai Stange 
2287f847dd3SArnd Bergmann static inline ssize_t debugfs_attr_read(struct file *file, char __user *buf,
2297f847dd3SArnd Bergmann 					size_t len, loff_t *ppos)
2307f847dd3SArnd Bergmann {
2317f847dd3SArnd Bergmann 	return -ENODEV;
2327f847dd3SArnd Bergmann }
2337f847dd3SArnd Bergmann 
2347f847dd3SArnd Bergmann static inline ssize_t debugfs_attr_write(struct file *file,
2357f847dd3SArnd Bergmann 					const char __user *buf,
2367f847dd3SArnd Bergmann 					size_t len, loff_t *ppos)
2377f847dd3SArnd Bergmann {
2387f847dd3SArnd Bergmann 	return -ENODEV;
2397f847dd3SArnd Bergmann }
240c6468808SNicolai Stange 
241cfc94cdfSJan Kara static inline struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
242cfc94cdfSJan Kara                 struct dentry *new_dir, char *new_name)
243cfc94cdfSJan Kara {
244cfc94cdfSJan Kara 	return ERR_PTR(-ENODEV);
245cfc94cdfSJan Kara }
246cfc94cdfSJan Kara 
2479655ac4aSGreg Kroah-Hartman static inline void debugfs_create_u8(const char *name, umode_t mode,
2489655ac4aSGreg Kroah-Hartman 				     struct dentry *parent, u8 *value) { }
2491da177e4SLinus Torvalds 
250313f5dbbSGreg Kroah-Hartman static inline void debugfs_create_u16(const char *name, umode_t mode,
251313f5dbbSGreg Kroah-Hartman 				      struct dentry *parent, u16 *value) { }
2521da177e4SLinus Torvalds 
253f4ae40a6SAl Viro static inline struct dentry *debugfs_create_u32(const char *name, umode_t mode,
2541da177e4SLinus Torvalds 						struct dentry *parent,
2557b558637SMichal Ostrowski 						u32 *value)
2561da177e4SLinus Torvalds {
2571da177e4SLinus Torvalds 	return ERR_PTR(-ENODEV);
2581da177e4SLinus Torvalds }
2591da177e4SLinus Torvalds 
260ad26221fSGreg Kroah-Hartman static inline void debugfs_create_u64(const char *name, umode_t mode,
261ad26221fSGreg Kroah-Hartman 				      struct dentry *parent, u64 *value) { }
2628447891fSMichael Ellerman 
263c2a737ebSViresh Kumar static inline struct dentry *debugfs_create_ulong(const char *name,
264c2a737ebSViresh Kumar 						umode_t mode,
265c2a737ebSViresh Kumar 						struct dentry *parent,
266c2a737ebSViresh Kumar 						unsigned long *value)
267c2a737ebSViresh Kumar {
268c2a737ebSViresh Kumar 	return ERR_PTR(-ENODEV);
269c2a737ebSViresh Kumar }
270c2a737ebSViresh Kumar 
271f4ae40a6SAl Viro static inline struct dentry *debugfs_create_x8(const char *name, umode_t mode,
2722ebefc50SRobin Getz 					       struct dentry *parent,
2732ebefc50SRobin Getz 					       u8 *value)
2742ebefc50SRobin Getz {
2752ebefc50SRobin Getz 	return ERR_PTR(-ENODEV);
2762ebefc50SRobin Getz }
2772ebefc50SRobin Getz 
278*e40d38f2SGreg Kroah-Hartman static inline void debugfs_create_x16(const char *name, umode_t mode,
279*e40d38f2SGreg Kroah-Hartman 				      struct dentry *parent, u16 *value) { }
2802ebefc50SRobin Getz 
281f4ae40a6SAl Viro static inline struct dentry *debugfs_create_x32(const char *name, umode_t mode,
2822ebefc50SRobin Getz 						struct dentry *parent,
2832ebefc50SRobin Getz 						u32 *value)
2842ebefc50SRobin Getz {
2852ebefc50SRobin Getz 	return ERR_PTR(-ENODEV);
2862ebefc50SRobin Getz }
2872ebefc50SRobin Getz 
2883159269eSJohannes Berg static inline struct dentry *debugfs_create_x64(const char *name, umode_t mode,
2893159269eSJohannes Berg 						struct dentry *parent,
2903159269eSJohannes Berg 						u64 *value)
2913159269eSJohannes Berg {
2923159269eSJohannes Berg 	return ERR_PTR(-ENODEV);
2933159269eSJohannes Berg }
2943159269eSJohannes Berg 
2958e580263SGreg Kroah-Hartman static inline void debugfs_create_size_t(const char *name, umode_t mode,
2968e580263SGreg Kroah-Hartman 					 struct dentry *parent, size_t *value)
2978e580263SGreg Kroah-Hartman { }
2988adb711fSInaky Perez-Gonzalez 
2995b880214SWeijie Yang static inline struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode,
3005b880214SWeijie Yang 				     struct dentry *parent, atomic_t *value)
3015b880214SWeijie Yang {
3025b880214SWeijie Yang 	return ERR_PTR(-ENODEV);
3035b880214SWeijie Yang }
3045b880214SWeijie Yang 
305f4ae40a6SAl Viro static inline struct dentry *debugfs_create_bool(const char *name, umode_t mode,
3061da177e4SLinus Torvalds 						 struct dentry *parent,
307621a5f7aSViresh Kumar 						 bool *value)
3081da177e4SLinus Torvalds {
3091da177e4SLinus Torvalds 	return ERR_PTR(-ENODEV);
3101da177e4SLinus Torvalds }
3111da177e4SLinus Torvalds 
312f4ae40a6SAl Viro static inline struct dentry *debugfs_create_blob(const char *name, umode_t mode,
313dd308bc3SMichael Ellerman 				  struct dentry *parent,
314dd308bc3SMichael Ellerman 				  struct debugfs_blob_wrapper *blob)
315dd308bc3SMichael Ellerman {
316dd308bc3SMichael Ellerman 	return ERR_PTR(-ENODEV);
317dd308bc3SMichael Ellerman }
318dd308bc3SMichael Ellerman 
3191a087c6aSAlessandro Rubini static inline struct dentry *debugfs_create_regset32(const char *name,
32088187398SAl Viro 				   umode_t mode, struct dentry *parent,
3211a087c6aSAlessandro Rubini 				   struct debugfs_regset32 *regset)
3221a087c6aSAlessandro Rubini {
3231a087c6aSAlessandro Rubini 	return ERR_PTR(-ENODEV);
3241a087c6aSAlessandro Rubini }
3251a087c6aSAlessandro Rubini 
3269761536eSJoe Perches static inline void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs,
3275b880214SWeijie Yang 			 int nregs, void __iomem *base, char *prefix)
3285b880214SWeijie Yang {
3295b880214SWeijie Yang }
3305b880214SWeijie Yang 
331c0f92ba9SFrederic Weisbecker static inline bool debugfs_initialized(void)
332c0f92ba9SFrederic Weisbecker {
333c0f92ba9SFrederic Weisbecker 	return false;
334c0f92ba9SFrederic Weisbecker }
335c0f92ba9SFrederic Weisbecker 
336c9c2c27dSGreg Kroah-Hartman static inline void debugfs_create_u32_array(const char *name, umode_t mode,
337c9c2c27dSGreg Kroah-Hartman 					    struct dentry *parent, u32 *array,
338c9c2c27dSGreg Kroah-Hartman 					    u32 elements)
3399fe2a701SSrivatsa Vaddagiri {
3409fe2a701SSrivatsa Vaddagiri }
3419fe2a701SSrivatsa Vaddagiri 
34298210b7fSArend van Spriel static inline struct dentry *debugfs_create_devm_seqfile(struct device *dev,
34398210b7fSArend van Spriel 							 const char *name,
34498210b7fSArend van Spriel 							 struct dentry *parent,
34598210b7fSArend van Spriel 					   int (*read_fn)(struct seq_file *s,
34698210b7fSArend van Spriel 							  void *data))
34798210b7fSArend van Spriel {
34898210b7fSArend van Spriel 	return ERR_PTR(-ENODEV);
34998210b7fSArend van Spriel }
35098210b7fSArend van Spriel 
3510642ef6fSRichard Fitzgerald static inline ssize_t debugfs_read_file_bool(struct file *file,
3520642ef6fSRichard Fitzgerald 					     char __user *user_buf,
3530642ef6fSRichard Fitzgerald 					     size_t count, loff_t *ppos)
3540642ef6fSRichard Fitzgerald {
3550642ef6fSRichard Fitzgerald 	return -ENODEV;
3560642ef6fSRichard Fitzgerald }
3570642ef6fSRichard Fitzgerald 
3580642ef6fSRichard Fitzgerald static inline ssize_t debugfs_write_file_bool(struct file *file,
3590642ef6fSRichard Fitzgerald 					      const char __user *user_buf,
3600642ef6fSRichard Fitzgerald 					      size_t count, loff_t *ppos)
3610642ef6fSRichard Fitzgerald {
3620642ef6fSRichard Fitzgerald 	return -ENODEV;
3630642ef6fSRichard Fitzgerald }
3640642ef6fSRichard Fitzgerald 
3651da177e4SLinus Torvalds #endif
3661da177e4SLinus Torvalds 
3671da177e4SLinus Torvalds #endif
368