Line data Source code
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 <asm/atomic.h>
19 :
20 : struct kobject;
21 : struct module;
22 :
23 : /* FIXME
24 : * The *owner field is no longer used.
25 : * x86 tree has been cleaned up. The owner
26 : * attribute is still left for other arches.
27 : */
28 : struct attribute {
29 : const char *name;
30 : struct module *owner;
31 : mode_t mode;
32 : };
33 1 :
34 : struct attribute_group {
35 : const char *name;
36 : mode_t (*is_visible)(struct kobject *,
37 : struct attribute *, int);
38 : struct attribute **attrs;
39 : };
40 1 :
41 1 :
42 :
43 : /**
44 : * Use these macros to make defining attributes easier. See include/linux/device.h
45 : * for examples..
46 : */
47 :
48 : #define __ATTR(_name,_mode,_show,_store) { \
49 : .attr = {.name = __stringify(_name), .mode = _mode }, \
50 : .show = _show, \
51 : .store = _store, \
52 : }
53 :
54 : #define __ATTR_RO(_name) { \
55 : .attr = { .name = __stringify(_name), .mode = 0444 }, \
56 : .show = _name##_show, \
57 : }
58 :
59 : #define __ATTR_NULL { .attr = { .name = NULL } }
60 :
61 : #define attr_name(_attr) (_attr).attr.name
62 :
63 : struct vm_area_struct;
64 :
65 : struct bin_attribute {
66 : struct attribute attr;
67 : size_t size;
68 : void *private;
69 : ssize_t (*read)(struct kobject *, struct bin_attribute *,
70 : char *, loff_t, size_t);
71 : ssize_t (*write)(struct kobject *, struct bin_attribute *,
72 : char *, loff_t, size_t);
73 : int (*mmap)(struct kobject *, struct bin_attribute *attr,
74 : struct vm_area_struct *vma);
75 1 : };
76 :
77 : struct sysfs_ops {
78 : ssize_t (*show)(struct kobject *, struct attribute *,char *);
79 : ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
80 : };
81 1 :
82 : struct sysfs_dirent;
83 :
84 : #ifdef CONFIG_SYSFS
85 :
86 : int sysfs_schedule_callback(struct kobject *kobj, void (*func)(void *),
87 : void *data, struct module *owner);
88 :
89 : int __must_check sysfs_create_dir(struct kobject *kobj);
90 : void sysfs_remove_dir(struct kobject *kobj);
91 : int __must_check sysfs_rename_dir(struct kobject *kobj, const char *new_name);
92 : int __must_check sysfs_move_dir(struct kobject *kobj,
93 : struct kobject *new_parent_kobj);
94 :
95 : int __must_check sysfs_create_file(struct kobject *kobj,
96 : const struct attribute *attr);
97 : int __must_check sysfs_chmod_file(struct kobject *kobj, struct attribute *attr,
98 : mode_t mode);
99 : void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr);
100 :
101 : int __must_check sysfs_create_bin_file(struct kobject *kobj,
102 : const struct bin_attribute *attr);
103 : void sysfs_remove_bin_file(struct kobject *kobj,
104 : const struct bin_attribute *attr);
105 :
106 : int __must_check sysfs_create_link(struct kobject *kobj, struct kobject *target,
107 : const char *name);
108 : int __must_check sysfs_create_link_nowarn(struct kobject *kobj,
109 : struct kobject *target,
110 : const char *name);
111 : void sysfs_remove_link(struct kobject *kobj, const char *name);
112 :
113 : int __must_check sysfs_create_group(struct kobject *kobj,
114 : const struct attribute_group *grp);
115 : int sysfs_update_group(struct kobject *kobj,
116 : const struct attribute_group *grp);
117 : void sysfs_remove_group(struct kobject *kobj,
118 : const struct attribute_group *grp);
119 : int sysfs_add_file_to_group(struct kobject *kobj,
120 : const struct attribute *attr, const char *group);
121 : void sysfs_remove_file_from_group(struct kobject *kobj,
122 : const struct attribute *attr, const char *group);
123 :
124 : void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr);
125 : void sysfs_notify_dirent(struct sysfs_dirent *sd);
126 : struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd,
127 : const unsigned char *name);
128 : struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd);
129 : void sysfs_put(struct sysfs_dirent *sd);
130 : void sysfs_printk_last_file(void);
131 : int __must_check sysfs_init(void);
132 1 :
133 1 : #else /* CONFIG_SYSFS */
134 7 :
135 : static inline int sysfs_schedule_callback(struct kobject *kobj,
136 : void (*func)(void *), void *data, struct module *owner)
137 : {
138 : return -ENOSYS;
139 : }
140 :
141 : static inline int sysfs_create_dir(struct kobject *kobj)
142 : {
143 : return 0;
144 : }
145 :
146 : static inline void sysfs_remove_dir(struct kobject *kobj)
147 : {
148 : }
149 :
150 : static inline int sysfs_rename_dir(struct kobject *kobj, const char *new_name)
151 : {
152 : return 0;
153 : }
154 :
155 : static inline int sysfs_move_dir(struct kobject *kobj,
156 : struct kobject *new_parent_kobj)
157 : {
158 : return 0;
159 : }
160 :
161 : static inline int sysfs_create_file(struct kobject *kobj,
162 : const struct attribute *attr)
163 : {
164 : return 0;
165 : }
166 :
167 : static inline int sysfs_chmod_file(struct kobject *kobj,
168 : struct attribute *attr, mode_t mode)
169 : {
170 : return 0;
171 : }
172 :
173 : static inline void sysfs_remove_file(struct kobject *kobj,
174 : const struct attribute *attr)
175 : {
176 : }
177 :
178 : static inline int sysfs_create_bin_file(struct kobject *kobj,
179 : const struct bin_attribute *attr)
180 : {
181 : return 0;
182 : }
183 :
184 : static inline void sysfs_remove_bin_file(struct kobject *kobj,
185 : const struct bin_attribute *attr)
186 : {
187 : }
188 :
189 : static inline int sysfs_create_link(struct kobject *kobj,
190 : struct kobject *target, const char *name)
191 : {
192 : return 0;
193 : }
194 :
195 : static inline int sysfs_create_link_nowarn(struct kobject *kobj,
196 : struct kobject *target,
197 : const char *name)
198 : {
199 : return 0;
200 : }
201 :
202 : static inline void sysfs_remove_link(struct kobject *kobj, const char *name)
203 : {
204 : }
205 :
206 : static inline int sysfs_create_group(struct kobject *kobj,
207 : const struct attribute_group *grp)
208 : {
209 : return 0;
210 : }
211 :
212 : static inline int sysfs_update_group(struct kobject *kobj,
213 : const struct attribute_group *grp)
214 : {
215 : return 0;
216 : }
217 :
218 : static inline void sysfs_remove_group(struct kobject *kobj,
219 : const struct attribute_group *grp)
220 : {
221 : }
222 :
223 : static inline int sysfs_add_file_to_group(struct kobject *kobj,
224 : const struct attribute *attr, const char *group)
225 : {
226 : return 0;
227 : }
228 :
229 : static inline void sysfs_remove_file_from_group(struct kobject *kobj,
230 : const struct attribute *attr, const char *group)
231 : {
232 : }
233 :
234 : static inline void sysfs_notify(struct kobject *kobj, const char *dir,
235 : const char *attr)
236 : {
237 : }
238 : static inline void sysfs_notify_dirent(struct sysfs_dirent *sd)
239 : {
240 : }
241 : static inline
242 : struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd,
243 : const unsigned char *name)
244 : {
245 : return NULL;
246 : }
247 : static inline struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd)
248 : {
249 : return NULL;
250 : }
251 : static inline void sysfs_put(struct sysfs_dirent *sd)
252 : {
253 : }
254 :
255 : static inline int __must_check sysfs_init(void)
256 : {
257 : return 0;
258 : }
259 :
260 : static inline void sysfs_printk_last_file(void)
261 : {
262 : }
263 :
264 : #endif /* CONFIG_SYSFS */
265 :
266 : #endif /* _SYSFS_H_ */
|