• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   *  debugfs.h - a tiny little debug file system
3   *
4   *  Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
5   *  Copyright (C) 2004 IBM Inc.
6   *
7   *	This program is free software; you can redistribute it and/or
8   *	modify it under the terms of the GNU General Public License version
9   *	2 as published by the Free Software Foundation.
10   *
11   *  debugfs is for people to use instead of /proc or /sys.
12   *  See Documentation/DocBook/filesystems for more details.
13   */
14  
15  #ifndef _DEBUGFS_H_
16  #define _DEBUGFS_H_
17  
18  #include <linux/fs.h>
19  #include <linux/seq_file.h>
20  
21  #include <linux/types.h>
22  
23  struct file_operations;
24  
25  struct debugfs_blob_wrapper {
26  	void *data;
27  	unsigned long size;
28  };
29  
30  struct debugfs_reg32 {
31  	char *name;
32  	unsigned long offset;
33  };
34  
35  struct debugfs_regset32 {
36  	const struct debugfs_reg32 *regs;
37  	int nregs;
38  	void __iomem *base;
39  };
40  
41  extern struct dentry *arch_debugfs_dir;
42  
43  #if defined(CONFIG_DEBUG_FS)
44  
45  /* declared over in file.c */
46  extern const struct file_operations debugfs_file_operations;
47  extern const struct inode_operations debugfs_link_operations;
48  
49  struct dentry *debugfs_create_file(const char *name, umode_t mode,
50  				   struct dentry *parent, void *data,
51  				   const struct file_operations *fops);
52  
53  struct dentry *debugfs_create_dir(const char *name, struct dentry *parent);
54  
55  struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
56  				      const char *dest);
57  
58  struct dentry *debugfs_create_automount(const char *name,
59  					struct dentry *parent,
60  					struct vfsmount *(*f)(void *),
61  					void *data);
62  
63  void debugfs_remove(struct dentry *dentry);
64  void debugfs_remove_recursive(struct dentry *dentry);
65  
66  struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
67                  struct dentry *new_dir, const char *new_name);
68  
69  struct dentry *debugfs_create_u8(const char *name, umode_t mode,
70  				 struct dentry *parent, u8 *value);
71  struct dentry *debugfs_create_u16(const char *name, umode_t mode,
72  				  struct dentry *parent, u16 *value);
73  struct dentry *debugfs_create_u32(const char *name, umode_t mode,
74  				  struct dentry *parent, u32 *value);
75  struct dentry *debugfs_create_u64(const char *name, umode_t mode,
76  				  struct dentry *parent, u64 *value);
77  struct dentry *debugfs_create_x8(const char *name, umode_t mode,
78  				 struct dentry *parent, u8 *value);
79  struct dentry *debugfs_create_x16(const char *name, umode_t mode,
80  				  struct dentry *parent, u16 *value);
81  struct dentry *debugfs_create_x32(const char *name, umode_t mode,
82  				  struct dentry *parent, u32 *value);
83  struct dentry *debugfs_create_x64(const char *name, umode_t mode,
84  				  struct dentry *parent, u64 *value);
85  struct dentry *debugfs_create_size_t(const char *name, umode_t mode,
86  				     struct dentry *parent, size_t *value);
87  struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode,
88  				     struct dentry *parent, atomic_t *value);
89  struct dentry *debugfs_create_bool(const char *name, umode_t mode,
90  				  struct dentry *parent, u32 *value);
91  
92  struct dentry *debugfs_create_blob(const char *name, umode_t mode,
93  				  struct dentry *parent,
94  				  struct debugfs_blob_wrapper *blob);
95  
96  struct dentry *debugfs_create_regset32(const char *name, umode_t mode,
97  				     struct dentry *parent,
98  				     struct debugfs_regset32 *regset);
99  
100  int debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs,
101  			 int nregs, void __iomem *base, char *prefix);
102  
103  struct dentry *debugfs_create_u32_array(const char *name, umode_t mode,
104  					struct dentry *parent,
105  					u32 *array, u32 elements);
106  
107  bool debugfs_initialized(void);
108  
109  #else
110  
111  #include <linux/err.h>
112  
113  /*
114   * We do not return NULL from these functions if CONFIG_DEBUG_FS is not enabled
115   * so users have a chance to detect if there was a real error or not.  We don't
116   * want to duplicate the design decision mistakes of procfs and devfs again.
117   */
118  
debugfs_create_file(const char * name,umode_t mode,struct dentry * parent,void * data,const struct file_operations * fops)119  static inline struct dentry *debugfs_create_file(const char *name, umode_t mode,
120  					struct dentry *parent, void *data,
121  					const struct file_operations *fops)
122  {
123  	return ERR_PTR(-ENODEV);
124  }
125  
debugfs_create_dir(const char * name,struct dentry * parent)126  static inline struct dentry *debugfs_create_dir(const char *name,
127  						struct dentry *parent)
128  {
129  	return ERR_PTR(-ENODEV);
130  }
131  
debugfs_create_symlink(const char * name,struct dentry * parent,const char * dest)132  static inline struct dentry *debugfs_create_symlink(const char *name,
133  						    struct dentry *parent,
134  						    const char *dest)
135  {
136  	return ERR_PTR(-ENODEV);
137  }
138  
debugfs_remove(struct dentry * dentry)139  static inline void debugfs_remove(struct dentry *dentry)
140  { }
141  
debugfs_remove_recursive(struct dentry * dentry)142  static inline void debugfs_remove_recursive(struct dentry *dentry)
143  { }
144  
debugfs_rename(struct dentry * old_dir,struct dentry * old_dentry,struct dentry * new_dir,char * new_name)145  static inline struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
146                  struct dentry *new_dir, char *new_name)
147  {
148  	return ERR_PTR(-ENODEV);
149  }
150  
debugfs_create_u8(const char * name,umode_t mode,struct dentry * parent,u8 * value)151  static inline struct dentry *debugfs_create_u8(const char *name, umode_t mode,
152  					       struct dentry *parent,
153  					       u8 *value)
154  {
155  	return ERR_PTR(-ENODEV);
156  }
157  
debugfs_create_u16(const char * name,umode_t mode,struct dentry * parent,u16 * value)158  static inline struct dentry *debugfs_create_u16(const char *name, umode_t mode,
159  						struct dentry *parent,
160  						u16 *value)
161  {
162  	return ERR_PTR(-ENODEV);
163  }
164  
debugfs_create_u32(const char * name,umode_t mode,struct dentry * parent,u32 * value)165  static inline struct dentry *debugfs_create_u32(const char *name, umode_t mode,
166  						struct dentry *parent,
167  						u32 *value)
168  {
169  	return ERR_PTR(-ENODEV);
170  }
171  
debugfs_create_u64(const char * name,umode_t mode,struct dentry * parent,u64 * value)172  static inline struct dentry *debugfs_create_u64(const char *name, umode_t mode,
173  						struct dentry *parent,
174  						u64 *value)
175  {
176  	return ERR_PTR(-ENODEV);
177  }
178  
debugfs_create_x8(const char * name,umode_t mode,struct dentry * parent,u8 * value)179  static inline struct dentry *debugfs_create_x8(const char *name, umode_t mode,
180  					       struct dentry *parent,
181  					       u8 *value)
182  {
183  	return ERR_PTR(-ENODEV);
184  }
185  
debugfs_create_x16(const char * name,umode_t mode,struct dentry * parent,u16 * value)186  static inline struct dentry *debugfs_create_x16(const char *name, umode_t mode,
187  						struct dentry *parent,
188  						u16 *value)
189  {
190  	return ERR_PTR(-ENODEV);
191  }
192  
debugfs_create_x32(const char * name,umode_t mode,struct dentry * parent,u32 * value)193  static inline struct dentry *debugfs_create_x32(const char *name, umode_t mode,
194  						struct dentry *parent,
195  						u32 *value)
196  {
197  	return ERR_PTR(-ENODEV);
198  }
199  
debugfs_create_x64(const char * name,umode_t mode,struct dentry * parent,u64 * value)200  static inline struct dentry *debugfs_create_x64(const char *name, umode_t mode,
201  						struct dentry *parent,
202  						u64 *value)
203  {
204  	return ERR_PTR(-ENODEV);
205  }
206  
debugfs_create_size_t(const char * name,umode_t mode,struct dentry * parent,size_t * value)207  static inline struct dentry *debugfs_create_size_t(const char *name, umode_t mode,
208  				     struct dentry *parent,
209  				     size_t *value)
210  {
211  	return ERR_PTR(-ENODEV);
212  }
213  
debugfs_create_atomic_t(const char * name,umode_t mode,struct dentry * parent,atomic_t * value)214  static inline struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode,
215  				     struct dentry *parent, atomic_t *value)
216  {
217  	return ERR_PTR(-ENODEV);
218  }
219  
debugfs_create_bool(const char * name,umode_t mode,struct dentry * parent,u32 * value)220  static inline struct dentry *debugfs_create_bool(const char *name, umode_t mode,
221  						 struct dentry *parent,
222  						 u32 *value)
223  {
224  	return ERR_PTR(-ENODEV);
225  }
226  
debugfs_create_blob(const char * name,umode_t mode,struct dentry * parent,struct debugfs_blob_wrapper * blob)227  static inline struct dentry *debugfs_create_blob(const char *name, umode_t mode,
228  				  struct dentry *parent,
229  				  struct debugfs_blob_wrapper *blob)
230  {
231  	return ERR_PTR(-ENODEV);
232  }
233  
debugfs_create_regset32(const char * name,umode_t mode,struct dentry * parent,struct debugfs_regset32 * regset)234  static inline struct dentry *debugfs_create_regset32(const char *name,
235  				   umode_t mode, struct dentry *parent,
236  				   struct debugfs_regset32 *regset)
237  {
238  	return ERR_PTR(-ENODEV);
239  }
240  
debugfs_print_regs32(struct seq_file * s,const struct debugfs_reg32 * regs,int nregs,void __iomem * base,char * prefix)241  static inline int debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs,
242  			 int nregs, void __iomem *base, char *prefix)
243  {
244  	return 0;
245  }
246  
debugfs_initialized(void)247  static inline bool debugfs_initialized(void)
248  {
249  	return false;
250  }
251  
debugfs_create_u32_array(const char * name,umode_t mode,struct dentry * parent,u32 * array,u32 elements)252  static inline struct dentry *debugfs_create_u32_array(const char *name, umode_t mode,
253  					struct dentry *parent,
254  					u32 *array, u32 elements)
255  {
256  	return ERR_PTR(-ENODEV);
257  }
258  
259  #endif
260  
261  #endif
262