Root/
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 | * Copyright (c) 2007 SUSE Linux Products GmbH |
7 | * Copyright (c) 2007 Tejun Heo <teheo@suse.de> |
8 | * |
9 | * Please see Documentation/filesystems/sysfs.txt for more information. |
10 | */ |
11 | |
12 | #ifndef _SYSFS_H_ |
13 | #define _SYSFS_H_ |
14 | |
15 | #include <linux/compiler.h> |
16 | #include <linux/errno.h> |
17 | #include <linux/list.h> |
18 | #include <linux/lockdep.h> |
19 | #include <asm/atomic.h> |
20 | |
21 | struct kobject; |
22 | struct module; |
23 | |
24 | /* FIXME |
25 | * The *owner field is no longer used. |
26 | * x86 tree has been cleaned up. The owner |
27 | * attribute is still left for other arches. |
28 | */ |
29 | struct attribute { |
30 | const char *name; |
31 | struct module *owner; |
32 | mode_t mode; |
33 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
34 | struct lock_class_key *key; |
35 | struct lock_class_key skey; |
36 | #endif |
37 | }; |
38 | |
39 | /** |
40 | * sysfs_attr_init - initialize a dynamically allocated sysfs attribute |
41 | * @attr: struct attribute to initialize |
42 | * |
43 | * Initialize a dynamically allocated struct attribute so we can |
44 | * make lockdep happy. This is a new requirement for attributes |
45 | * and initially this is only needed when lockdep is enabled. |
46 | * Lockdep gives a nice error when your attribute is added to |
47 | * sysfs if you don't have this. |
48 | */ |
49 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
50 | #define sysfs_attr_init(attr) \ |
51 | do { \ |
52 | static struct lock_class_key __key; \ |
53 | \ |
54 | (attr)->key = &__key; \ |
55 | } while(0) |
56 | #else |
57 | #define sysfs_attr_init(attr) do {} while(0) |
58 | #endif |
59 | |
60 | struct attribute_group { |
61 | const char *name; |
62 | mode_t (*is_visible)(struct kobject *, |
63 | struct attribute *, int); |
64 | struct attribute **attrs; |
65 | }; |
66 | |
67 | |
68 | |
69 | /** |
70 | * Use these macros to make defining attributes easier. See include/linux/device.h |
71 | * for examples.. |
72 | */ |
73 | |
74 | #define __ATTR(_name,_mode,_show,_store) { \ |
75 | .attr = {.name = __stringify(_name), .mode = _mode }, \ |
76 | .show = _show, \ |
77 | .store = _store, \ |
78 | } |
79 | |
80 | #define __ATTR_RO(_name) { \ |
81 | .attr = { .name = __stringify(_name), .mode = 0444 }, \ |
82 | .show = _name##_show, \ |
83 | } |
84 | |
85 | #define __ATTR_NULL { .attr = { .name = NULL } } |
86 | |
87 | #define attr_name(_attr) (_attr).attr.name |
88 | |
89 | struct vm_area_struct; |
90 | |
91 | struct bin_attribute { |
92 | struct attribute attr; |
93 | size_t size; |
94 | void *private; |
95 | ssize_t (*read)(struct kobject *, struct bin_attribute *, |
96 | char *, loff_t, size_t); |
97 | ssize_t (*write)(struct kobject *, struct bin_attribute *, |
98 | char *, loff_t, size_t); |
99 | int (*mmap)(struct kobject *, struct bin_attribute *attr, |
100 | struct vm_area_struct *vma); |
101 | }; |
102 | |
103 | /** |
104 | * sysfs_bin_attr_init - initialize a dynamically allocated bin_attribute |
105 | * @attr: struct bin_attribute to initialize |
106 | * |
107 | * Initialize a dynamically allocated struct bin_attribute so we |
108 | * can make lockdep happy. This is a new requirement for |
109 | * attributes and initially this is only needed when lockdep is |
110 | * enabled. Lockdep gives a nice error when your attribute is |
111 | * added to sysfs if you don't have this. |
112 | */ |
113 | #define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr) |
114 | |
115 | struct sysfs_ops { |
116 | ssize_t (*show)(struct kobject *, struct attribute *,char *); |
117 | ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t); |
118 | }; |
119 | |
120 | struct sysfs_dirent; |
121 | |
122 | #ifdef CONFIG_SYSFS |
123 | |
124 | int sysfs_schedule_callback(struct kobject *kobj, void (*func)(void *), |
125 | void *data, struct module *owner); |
126 | |
127 | int __must_check sysfs_create_dir(struct kobject *kobj); |
128 | void sysfs_remove_dir(struct kobject *kobj); |
129 | int __must_check sysfs_rename_dir(struct kobject *kobj, const char *new_name); |
130 | int __must_check sysfs_move_dir(struct kobject *kobj, |
131 | struct kobject *new_parent_kobj); |
132 | |
133 | int __must_check sysfs_create_file(struct kobject *kobj, |
134 | const struct attribute *attr); |
135 | int __must_check sysfs_create_files(struct kobject *kobj, |
136 | const struct attribute **attr); |
137 | int __must_check sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, |
138 | mode_t mode); |
139 | void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr); |
140 | void sysfs_remove_files(struct kobject *kobj, const struct attribute **attr); |
141 | |
142 | int __must_check sysfs_create_bin_file(struct kobject *kobj, |
143 | const struct bin_attribute *attr); |
144 | void sysfs_remove_bin_file(struct kobject *kobj, |
145 | const struct bin_attribute *attr); |
146 | |
147 | int __must_check sysfs_create_link(struct kobject *kobj, struct kobject *target, |
148 | const char *name); |
149 | int __must_check sysfs_create_link_nowarn(struct kobject *kobj, |
150 | struct kobject *target, |
151 | const char *name); |
152 | void sysfs_remove_link(struct kobject *kobj, const char *name); |
153 | |
154 | int sysfs_rename_link(struct kobject *kobj, struct kobject *target, |
155 | const char *old_name, const char *new_name); |
156 | |
157 | int __must_check sysfs_create_group(struct kobject *kobj, |
158 | const struct attribute_group *grp); |
159 | int sysfs_update_group(struct kobject *kobj, |
160 | const struct attribute_group *grp); |
161 | void sysfs_remove_group(struct kobject *kobj, |
162 | const struct attribute_group *grp); |
163 | int sysfs_add_file_to_group(struct kobject *kobj, |
164 | const struct attribute *attr, const char *group); |
165 | void sysfs_remove_file_from_group(struct kobject *kobj, |
166 | const struct attribute *attr, const char *group); |
167 | |
168 | void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr); |
169 | void sysfs_notify_dirent(struct sysfs_dirent *sd); |
170 | struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd, |
171 | const unsigned char *name); |
172 | struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd); |
173 | void sysfs_put(struct sysfs_dirent *sd); |
174 | void sysfs_printk_last_file(void); |
175 | int __must_check sysfs_init(void); |
176 | |
177 | #else /* CONFIG_SYSFS */ |
178 | |
179 | static inline int sysfs_schedule_callback(struct kobject *kobj, |
180 | void (*func)(void *), void *data, struct module *owner) |
181 | { |
182 | return -ENOSYS; |
183 | } |
184 | |
185 | static inline int sysfs_create_dir(struct kobject *kobj) |
186 | { |
187 | return 0; |
188 | } |
189 | |
190 | static inline void sysfs_remove_dir(struct kobject *kobj) |
191 | { |
192 | } |
193 | |
194 | static inline int sysfs_rename_dir(struct kobject *kobj, const char *new_name) |
195 | { |
196 | return 0; |
197 | } |
198 | |
199 | static inline int sysfs_move_dir(struct kobject *kobj, |
200 | struct kobject *new_parent_kobj) |
201 | { |
202 | return 0; |
203 | } |
204 | |
205 | static inline int sysfs_create_file(struct kobject *kobj, |
206 | const struct attribute *attr) |
207 | { |
208 | return 0; |
209 | } |
210 | |
211 | static inline int sysfs_create_files(struct kobject *kobj, |
212 | const struct attribute **attr) |
213 | { |
214 | return 0; |
215 | } |
216 | |
217 | static inline int sysfs_chmod_file(struct kobject *kobj, |
218 | struct attribute *attr, mode_t mode) |
219 | { |
220 | return 0; |
221 | } |
222 | |
223 | static inline void sysfs_remove_file(struct kobject *kobj, |
224 | const struct attribute *attr) |
225 | { |
226 | } |
227 | |
228 | static inline void sysfs_remove_files(struct kobject *kobj, |
229 | const struct attribute **attr) |
230 | { |
231 | } |
232 | |
233 | static inline int sysfs_create_bin_file(struct kobject *kobj, |
234 | const struct bin_attribute *attr) |
235 | { |
236 | return 0; |
237 | } |
238 | |
239 | static inline void sysfs_remove_bin_file(struct kobject *kobj, |
240 | const struct bin_attribute *attr) |
241 | { |
242 | } |
243 | |
244 | static inline int sysfs_create_link(struct kobject *kobj, |
245 | struct kobject *target, const char *name) |
246 | { |
247 | return 0; |
248 | } |
249 | |
250 | static inline int sysfs_create_link_nowarn(struct kobject *kobj, |
251 | struct kobject *target, |
252 | const char *name) |
253 | { |
254 | return 0; |
255 | } |
256 | |
257 | static inline void sysfs_remove_link(struct kobject *kobj, const char *name) |
258 | { |
259 | } |
260 | |
261 | static inline int sysfs_rename_link(struct kobject *k, struct kobject *t, |
262 | const char *old_name, const char *new_name) |
263 | { |
264 | return 0; |
265 | } |
266 | |
267 | static inline int sysfs_create_group(struct kobject *kobj, |
268 | const struct attribute_group *grp) |
269 | { |
270 | return 0; |
271 | } |
272 | |
273 | static inline int sysfs_update_group(struct kobject *kobj, |
274 | const struct attribute_group *grp) |
275 | { |
276 | return 0; |
277 | } |
278 | |
279 | static inline void sysfs_remove_group(struct kobject *kobj, |
280 | const struct attribute_group *grp) |
281 | { |
282 | } |
283 | |
284 | static inline int sysfs_add_file_to_group(struct kobject *kobj, |
285 | const struct attribute *attr, const char *group) |
286 | { |
287 | return 0; |
288 | } |
289 | |
290 | static inline void sysfs_remove_file_from_group(struct kobject *kobj, |
291 | const struct attribute *attr, const char *group) |
292 | { |
293 | } |
294 | |
295 | static inline void sysfs_notify(struct kobject *kobj, const char *dir, |
296 | const char *attr) |
297 | { |
298 | } |
299 | static inline void sysfs_notify_dirent(struct sysfs_dirent *sd) |
300 | { |
301 | } |
302 | static inline |
303 | struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd, |
304 | const unsigned char *name) |
305 | { |
306 | return NULL; |
307 | } |
308 | static inline struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd) |
309 | { |
310 | return NULL; |
311 | } |
312 | static inline void sysfs_put(struct sysfs_dirent *sd) |
313 | { |
314 | } |
315 | |
316 | static inline int __must_check sysfs_init(void) |
317 | { |
318 | return 0; |
319 | } |
320 | |
321 | static inline void sysfs_printk_last_file(void) |
322 | { |
323 | } |
324 | |
325 | #endif /* CONFIG_SYSFS */ |
326 | |
327 | #endif /* _SYSFS_H_ */ |
328 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9