xref: /linux-6.15/include/linux/sysfs.h (revision c537b994)
1 /*
2  * sysfs.h - definitions for the device driver filesystem
3  *
4  * Copyright (c) 2001,2002 Patrick Mochel
5  * Copyright (c) 2004 Silicon Graphics, Inc.
6  *
7  * Please see Documentation/filesystems/sysfs.txt for more information.
8  */
9 
10 #ifndef _SYSFS_H_
11 #define _SYSFS_H_
12 
13 #include <linux/compiler.h>
14 #include <linux/list.h>
15 #include <asm/atomic.h>
16 
17 struct kobject;
18 struct module;
19 struct nameidata;
20 struct dentry;
21 
22 struct attribute {
23 	const char		* name;
24 	struct module 		* owner;
25 	mode_t			mode;
26 };
27 
28 struct attribute_group {
29 	const char		* name;
30 	struct attribute	** attrs;
31 };
32 
33 
34 
35 /**
36  * Use these macros to make defining attributes easier. See include/linux/device.h
37  * for examples..
38  */
39 
40 #define __ATTR(_name,_mode,_show,_store) { \
41 	.attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE },	\
42 	.show	= _show,					\
43 	.store	= _store,					\
44 }
45 
46 #define __ATTR_RO(_name) { \
47 	.attr	= { .name = __stringify(_name), .mode = 0444, .owner = THIS_MODULE },	\
48 	.show	= _name##_show,	\
49 }
50 
51 #define __ATTR_NULL { .attr = { .name = NULL } }
52 
53 #define attr_name(_attr) (_attr).attr.name
54 
55 struct vm_area_struct;
56 
57 struct bin_attribute {
58 	struct attribute	attr;
59 	size_t			size;
60 	void			*private;
61 	ssize_t (*read)(struct kobject *, char *, loff_t, size_t);
62 	ssize_t (*write)(struct kobject *, char *, loff_t, size_t);
63 	int (*mmap)(struct kobject *, struct bin_attribute *attr,
64 		    struct vm_area_struct *vma);
65 };
66 
67 struct sysfs_ops {
68 	ssize_t	(*show)(struct kobject *, struct attribute *,char *);
69 	ssize_t	(*store)(struct kobject *,struct attribute *,const char *, size_t);
70 };
71 
72 #define SYSFS_ROOT		0x0001
73 #define SYSFS_DIR		0x0002
74 #define SYSFS_KOBJ_ATTR 	0x0004
75 #define SYSFS_KOBJ_BIN_ATTR	0x0008
76 #define SYSFS_KOBJ_LINK 	0x0020
77 #define SYSFS_NOT_PINNED	(SYSFS_KOBJ_ATTR | SYSFS_KOBJ_BIN_ATTR | SYSFS_KOBJ_LINK)
78 
79 #ifdef CONFIG_SYSFS
80 
81 extern int __must_check
82 sysfs_create_dir(struct kobject *, struct dentry *);
83 
84 extern void
85 sysfs_remove_dir(struct kobject *);
86 
87 extern int __must_check
88 sysfs_rename_dir(struct kobject *, struct dentry *, const char *new_name);
89 
90 extern int __must_check
91 sysfs_move_dir(struct kobject *, struct kobject *);
92 
93 extern int __must_check
94 sysfs_create_file(struct kobject *, const struct attribute *);
95 
96 extern int __must_check
97 sysfs_update_file(struct kobject *, const struct attribute *);
98 
99 extern int __must_check
100 sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, mode_t mode);
101 
102 extern void
103 sysfs_remove_file(struct kobject *, const struct attribute *);
104 
105 extern int __must_check
106 sysfs_create_link(struct kobject * kobj, struct kobject * target, const char * name);
107 
108 extern void
109 sysfs_remove_link(struct kobject *, const char * name);
110 
111 int __must_check sysfs_create_bin_file(struct kobject *kobj,
112 					struct bin_attribute *attr);
113 void sysfs_remove_bin_file(struct kobject *kobj, struct bin_attribute *attr);
114 
115 int __must_check sysfs_create_group(struct kobject *,
116 					const struct attribute_group *);
117 void sysfs_remove_group(struct kobject *, const struct attribute_group *);
118 int sysfs_add_file_to_group(struct kobject *kobj,
119 		const struct attribute *attr, const char *group);
120 void sysfs_remove_file_from_group(struct kobject *kobj,
121 		const struct attribute *attr, const char *group);
122 
123 void sysfs_notify(struct kobject * k, char *dir, char *attr);
124 
125 
126 extern int sysfs_make_shadowed_dir(struct kobject *kobj,
127 	void * (*follow_link)(struct dentry *, struct nameidata *));
128 extern struct dentry *sysfs_create_shadow_dir(struct kobject *kobj);
129 extern void sysfs_remove_shadow_dir(struct dentry *dir);
130 
131 extern int __must_check sysfs_init(void);
132 
133 #else /* CONFIG_SYSFS */
134 
135 static inline int sysfs_create_dir(struct kobject * k, struct dentry *shadow)
136 {
137 	return 0;
138 }
139 
140 static inline void sysfs_remove_dir(struct kobject * k)
141 {
142 	;
143 }
144 
145 static inline int sysfs_rename_dir(struct kobject * k,
146 					struct dentry *new_parent,
147 					const char *new_name)
148 {
149 	return 0;
150 }
151 
152 static inline int sysfs_move_dir(struct kobject * k, struct kobject * new_parent)
153 {
154 	return 0;
155 }
156 
157 static inline int sysfs_create_file(struct kobject * k, const struct attribute * a)
158 {
159 	return 0;
160 }
161 
162 static inline int sysfs_update_file(struct kobject * k, const struct attribute * a)
163 {
164 	return 0;
165 }
166 static inline int sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, mode_t mode)
167 {
168 	return 0;
169 }
170 
171 static inline void sysfs_remove_file(struct kobject * k, const struct attribute * a)
172 {
173 	;
174 }
175 
176 static inline int sysfs_create_link(struct kobject * k, struct kobject * t, const char * n)
177 {
178 	return 0;
179 }
180 
181 static inline void sysfs_remove_link(struct kobject * k, const char * name)
182 {
183 	;
184 }
185 
186 
187 static inline int sysfs_create_bin_file(struct kobject * k, struct bin_attribute * a)
188 {
189 	return 0;
190 }
191 
192 static inline int sysfs_remove_bin_file(struct kobject * k, struct bin_attribute * a)
193 {
194 	return 0;
195 }
196 
197 static inline int sysfs_create_group(struct kobject * k, const struct attribute_group *g)
198 {
199 	return 0;
200 }
201 
202 static inline void sysfs_remove_group(struct kobject * k, const struct attribute_group * g)
203 {
204 	;
205 }
206 
207 static inline int sysfs_add_file_to_group(struct kobject *kobj,
208 		const struct attribute *attr, const char *group)
209 {
210 	return 0;
211 }
212 
213 static inline void sysfs_remove_file_from_group(struct kobject *kobj,
214 		const struct attribute *attr, const char *group)
215 {
216 }
217 
218 static inline void sysfs_notify(struct kobject * k, char *dir, char *attr)
219 {
220 }
221 
222 static inline int sysfs_make_shadowed_dir(struct kobject *kobj,
223 	void * (*follow_link)(struct dentry *, struct nameidata *))
224 {
225 	return 0;
226 }
227 
228 static inline int __must_check sysfs_init(void)
229 {
230 	return 0;
231 }
232 
233 #endif /* CONFIG_SYSFS */
234 
235 #endif /* _SYSFS_H_ */
236