debugfs.h 7.4 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11
/*
 *  debugfs.h - a tiny little debug file system
 *
 *  Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
 *  Copyright (C) 2004 IBM Inc.
 *
 *	This program is free software; you can redistribute it and/or
 *	modify it under the terms of the GNU General Public License version
 *	2 as published by the Free Software Foundation.
 *
 *  debugfs is for people to use instead of /proc or /sys.
12
 *  See Documentation/DocBook/filesystems for more details.
L
Linus Torvalds 已提交
13 14 15 16 17 18
 */

#ifndef _DEBUGFS_H_
#define _DEBUGFS_H_

#include <linux/fs.h>
19
#include <linux/seq_file.h>
L
Linus Torvalds 已提交
20

21 22
#include <linux/types.h>

23
struct device;
24 25
struct file_operations;

26 27 28 29 30
struct debugfs_blob_wrapper {
	void *data;
	unsigned long size;
};

31 32 33 34 35 36
struct debugfs_reg32 {
	char *name;
	unsigned long offset;
};

struct debugfs_regset32 {
37
	const struct debugfs_reg32 *regs;
38 39 40 41
	int nregs;
	void __iomem *base;
};

42 43
extern struct dentry *arch_debugfs_dir;

L
Linus Torvalds 已提交
44
#if defined(CONFIG_DEBUG_FS)
H
Harvey Harrison 已提交
45 46 47 48 49

/* declared over in file.c */
extern const struct file_operations debugfs_file_operations;
extern const struct inode_operations debugfs_link_operations;

A
Al Viro 已提交
50
struct dentry *debugfs_create_file(const char *name, umode_t mode,
L
Linus Torvalds 已提交
51
				   struct dentry *parent, void *data,
52
				   const struct file_operations *fops);
L
Linus Torvalds 已提交
53 54 55

struct dentry *debugfs_create_dir(const char *name, struct dentry *parent);

56 57 58
struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
				      const char *dest);

59 60 61 62 63
struct dentry *debugfs_create_automount(const char *name,
					struct dentry *parent,
					struct vfsmount *(*f)(void *),
					void *data);

L
Linus Torvalds 已提交
64
void debugfs_remove(struct dentry *dentry);
65
void debugfs_remove_recursive(struct dentry *dentry);
L
Linus Torvalds 已提交
66

J
Jan Kara 已提交
67 68 69
struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
                struct dentry *new_dir, const char *new_name);

A
Al Viro 已提交
70
struct dentry *debugfs_create_u8(const char *name, umode_t mode,
L
Linus Torvalds 已提交
71
				 struct dentry *parent, u8 *value);
A
Al Viro 已提交
72
struct dentry *debugfs_create_u16(const char *name, umode_t mode,
L
Linus Torvalds 已提交
73
				  struct dentry *parent, u16 *value);
A
Al Viro 已提交
74
struct dentry *debugfs_create_u32(const char *name, umode_t mode,
L
Linus Torvalds 已提交
75
				  struct dentry *parent, u32 *value);
A
Al Viro 已提交
76
struct dentry *debugfs_create_u64(const char *name, umode_t mode,
77
				  struct dentry *parent, u64 *value);
A
Al Viro 已提交
78
struct dentry *debugfs_create_x8(const char *name, umode_t mode,
79
				 struct dentry *parent, u8 *value);
A
Al Viro 已提交
80
struct dentry *debugfs_create_x16(const char *name, umode_t mode,
81
				  struct dentry *parent, u16 *value);
A
Al Viro 已提交
82
struct dentry *debugfs_create_x32(const char *name, umode_t mode,
83
				  struct dentry *parent, u32 *value);
A
Al Viro 已提交
84
struct dentry *debugfs_create_x64(const char *name, umode_t mode,
H
Huang Ying 已提交
85
				  struct dentry *parent, u64 *value);
A
Al Viro 已提交
86
struct dentry *debugfs_create_size_t(const char *name, umode_t mode,
87
				     struct dentry *parent, size_t *value);
88 89
struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode,
				     struct dentry *parent, atomic_t *value);
A
Al Viro 已提交
90
struct dentry *debugfs_create_bool(const char *name, umode_t mode,
L
Linus Torvalds 已提交
91 92
				  struct dentry *parent, u32 *value);

A
Al Viro 已提交
93
struct dentry *debugfs_create_blob(const char *name, umode_t mode,
94 95
				  struct dentry *parent,
				  struct debugfs_blob_wrapper *blob);
96

A
Al Viro 已提交
97
struct dentry *debugfs_create_regset32(const char *name, umode_t mode,
98 99 100
				     struct dentry *parent,
				     struct debugfs_regset32 *regset);

101 102
void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs,
			  int nregs, void __iomem *base, char *prefix);
103

104 105 106 107
struct dentry *debugfs_create_u32_array(const char *name, umode_t mode,
					struct dentry *parent,
					u32 *array, u32 elements);

108 109 110 111 112
struct dentry *debugfs_create_devm_seqfile(struct device *dev, const char *name,
					   struct dentry *parent,
					   int (*read_fn)(struct seq_file *s,
							  void *data));

113 114
bool debugfs_initialized(void);

L
Linus Torvalds 已提交
115
#else
116 117 118

#include <linux/err.h>

119
/*
L
Linus Torvalds 已提交
120 121 122 123 124
 * We do not return NULL from these functions if CONFIG_DEBUG_FS is not enabled
 * so users have a chance to detect if there was a real error or not.  We don't
 * want to duplicate the design decision mistakes of procfs and devfs again.
 */

A
Al Viro 已提交
125
static inline struct dentry *debugfs_create_file(const char *name, umode_t mode,
126 127
					struct dentry *parent, void *data,
					const struct file_operations *fops)
L
Linus Torvalds 已提交
128 129 130 131 132 133 134 135 136 137
{
	return ERR_PTR(-ENODEV);
}

static inline struct dentry *debugfs_create_dir(const char *name,
						struct dentry *parent)
{
	return ERR_PTR(-ENODEV);
}

138 139 140 141 142 143 144
static inline struct dentry *debugfs_create_symlink(const char *name,
						    struct dentry *parent,
						    const char *dest)
{
	return ERR_PTR(-ENODEV);
}

L
Linus Torvalds 已提交
145 146 147
static inline void debugfs_remove(struct dentry *dentry)
{ }

148 149 150
static inline void debugfs_remove_recursive(struct dentry *dentry)
{ }

J
Jan Kara 已提交
151 152 153 154 155 156
static inline struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
                struct dentry *new_dir, char *new_name)
{
	return ERR_PTR(-ENODEV);
}

A
Al Viro 已提交
157
static inline struct dentry *debugfs_create_u8(const char *name, umode_t mode,
L
Linus Torvalds 已提交
158 159 160 161 162 163
					       struct dentry *parent,
					       u8 *value)
{
	return ERR_PTR(-ENODEV);
}

A
Al Viro 已提交
164
static inline struct dentry *debugfs_create_u16(const char *name, umode_t mode,
L
Linus Torvalds 已提交
165
						struct dentry *parent,
166
						u16 *value)
L
Linus Torvalds 已提交
167 168 169 170
{
	return ERR_PTR(-ENODEV);
}

A
Al Viro 已提交
171
static inline struct dentry *debugfs_create_u32(const char *name, umode_t mode,
L
Linus Torvalds 已提交
172
						struct dentry *parent,
173
						u32 *value)
L
Linus Torvalds 已提交
174 175 176 177
{
	return ERR_PTR(-ENODEV);
}

A
Al Viro 已提交
178
static inline struct dentry *debugfs_create_u64(const char *name, umode_t mode,
179 180 181 182 183 184
						struct dentry *parent,
						u64 *value)
{
	return ERR_PTR(-ENODEV);
}

A
Al Viro 已提交
185
static inline struct dentry *debugfs_create_x8(const char *name, umode_t mode,
186 187 188 189 190 191
					       struct dentry *parent,
					       u8 *value)
{
	return ERR_PTR(-ENODEV);
}

A
Al Viro 已提交
192
static inline struct dentry *debugfs_create_x16(const char *name, umode_t mode,
193 194 195 196 197 198
						struct dentry *parent,
						u16 *value)
{
	return ERR_PTR(-ENODEV);
}

A
Al Viro 已提交
199
static inline struct dentry *debugfs_create_x32(const char *name, umode_t mode,
200 201 202 203 204 205
						struct dentry *parent,
						u32 *value)
{
	return ERR_PTR(-ENODEV);
}

206 207 208 209 210 211 212
static inline struct dentry *debugfs_create_x64(const char *name, umode_t mode,
						struct dentry *parent,
						u64 *value)
{
	return ERR_PTR(-ENODEV);
}

A
Al Viro 已提交
213
static inline struct dentry *debugfs_create_size_t(const char *name, umode_t mode,
214 215 216 217 218 219
				     struct dentry *parent,
				     size_t *value)
{
	return ERR_PTR(-ENODEV);
}

220 221 222 223 224 225
static inline struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode,
				     struct dentry *parent, atomic_t *value)
{
	return ERR_PTR(-ENODEV);
}

A
Al Viro 已提交
226
static inline struct dentry *debugfs_create_bool(const char *name, umode_t mode,
L
Linus Torvalds 已提交
227
						 struct dentry *parent,
228
						 u32 *value)
L
Linus Torvalds 已提交
229 230 231 232
{
	return ERR_PTR(-ENODEV);
}

A
Al Viro 已提交
233
static inline struct dentry *debugfs_create_blob(const char *name, umode_t mode,
234 235 236 237 238 239
				  struct dentry *parent,
				  struct debugfs_blob_wrapper *blob)
{
	return ERR_PTR(-ENODEV);
}

240
static inline struct dentry *debugfs_create_regset32(const char *name,
A
Al Viro 已提交
241
				   umode_t mode, struct dentry *parent,
242 243 244 245 246
				   struct debugfs_regset32 *regset)
{
	return ERR_PTR(-ENODEV);
}

247
static inline void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs,
248 249 250 251
			 int nregs, void __iomem *base, char *prefix)
{
}

252 253 254 255 256
static inline bool debugfs_initialized(void)
{
	return false;
}

257 258 259 260 261 262 263
static inline struct dentry *debugfs_create_u32_array(const char *name, umode_t mode,
					struct dentry *parent,
					u32 *array, u32 elements)
{
	return ERR_PTR(-ENODEV);
}

264 265 266 267 268 269 270 271 272
static inline struct dentry *debugfs_create_devm_seqfile(struct device *dev,
							 const char *name,
							 struct dentry *parent,
					   int (*read_fn)(struct seq_file *s,
							  void *data))
{
	return ERR_PTR(-ENODEV);
}

L
Linus Torvalds 已提交
273 274 275
#endif

#endif