]> bbs.cooldavid.org Git - net-next-2.6.git/blame - include/linux/sysfs.h
fs/Kconfig: move CIFS out
[net-next-2.6.git] / include / linux / sysfs.h
CommitLineData
1da177e4
LT
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.
6d66f5cd
TH
6 * Copyright (c) 2007 SUSE Linux Products GmbH
7 * Copyright (c) 2007 Tejun Heo <teheo@suse.de>
1da177e4
LT
8 *
9 * Please see Documentation/filesystems/sysfs.txt for more information.
10 */
11
12#ifndef _SYSFS_H_
13#define _SYSFS_H_
14
4a7fb636 15#include <linux/compiler.h>
5851fadc 16#include <linux/errno.h>
bf0acc33 17#include <linux/list.h>
1da177e4
LT
18#include <asm/atomic.h>
19
20struct kobject;
21struct module;
22
7b595756
TH
23/* FIXME
24 * The *owner field is no longer used, but leave around
25 * until the tree gets cleaned up fully.
26 */
1da177e4 27struct attribute {
59f69015
TH
28 const char *name;
29 struct module *owner;
1da177e4
LT
30 mode_t mode;
31};
32
33struct attribute_group {
59f69015 34 const char *name;
0f423895 35 mode_t (*is_visible)(struct kobject *,
d4acd722 36 struct attribute *, int);
59f69015 37 struct attribute **attrs;
1da177e4
LT
38};
39
40
41
42/**
43 * Use these macros to make defining attributes easier. See include/linux/device.h
44 * for examples..
45 */
46
47#define __ATTR(_name,_mode,_show,_store) { \
7b595756 48 .attr = {.name = __stringify(_name), .mode = _mode }, \
1da177e4
LT
49 .show = _show, \
50 .store = _store, \
51}
52
53#define __ATTR_RO(_name) { \
7b595756
TH
54 .attr = { .name = __stringify(_name), .mode = 0444 }, \
55 .show = _name##_show, \
1da177e4
LT
56}
57
58#define __ATTR_NULL { .attr = { .name = NULL } }
59
60#define attr_name(_attr) (_attr).attr.name
61
62struct vm_area_struct;
63
64struct bin_attribute {
65 struct attribute attr;
66 size_t size;
67 void *private;
91a69029
ZR
68 ssize_t (*read)(struct kobject *, struct bin_attribute *,
69 char *, loff_t, size_t);
70 ssize_t (*write)(struct kobject *, struct bin_attribute *,
71 char *, loff_t, size_t);
1da177e4
LT
72 int (*mmap)(struct kobject *, struct bin_attribute *attr,
73 struct vm_area_struct *vma);
74};
75
76struct sysfs_ops {
77 ssize_t (*show)(struct kobject *, struct attribute *,char *);
78 ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
79};
80
f1282c84
NB
81struct sysfs_dirent;
82
1da177e4
LT
83#ifdef CONFIG_SYSFS
84
59f69015
TH
85int sysfs_schedule_callback(struct kobject *kobj, void (*func)(void *),
86 void *data, struct module *owner);
1da177e4 87
59f69015
TH
88int __must_check sysfs_create_dir(struct kobject *kobj);
89void sysfs_remove_dir(struct kobject *kobj);
90int __must_check sysfs_rename_dir(struct kobject *kobj, const char *new_name);
91int __must_check sysfs_move_dir(struct kobject *kobj,
92 struct kobject *new_parent_kobj);
31e5abe9 93
59f69015
TH
94int __must_check sysfs_create_file(struct kobject *kobj,
95 const struct attribute *attr);
59f69015
TH
96int __must_check sysfs_chmod_file(struct kobject *kobj, struct attribute *attr,
97 mode_t mode);
98void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr);
1da177e4 99
4a7fb636 100int __must_check sysfs_create_bin_file(struct kobject *kobj,
59f69015 101 struct bin_attribute *attr);
995982ca 102void sysfs_remove_bin_file(struct kobject *kobj, struct bin_attribute *attr);
1da177e4 103
59f69015
TH
104int __must_check sysfs_create_link(struct kobject *kobj, struct kobject *target,
105 const char *name);
36ce6dad
CH
106int __must_check sysfs_create_link_nowarn(struct kobject *kobj,
107 struct kobject *target,
108 const char *name);
59f69015
TH
109void sysfs_remove_link(struct kobject *kobj, const char *name);
110
111int __must_check sysfs_create_group(struct kobject *kobj,
112 const struct attribute_group *grp);
0f423895
JB
113int sysfs_update_group(struct kobject *kobj,
114 const struct attribute_group *grp);
59f69015
TH
115void sysfs_remove_group(struct kobject *kobj,
116 const struct attribute_group *grp);
dfa87c82 117int sysfs_add_file_to_group(struct kobject *kobj,
59f69015 118 const struct attribute *attr, const char *group);
dfa87c82 119void sysfs_remove_file_from_group(struct kobject *kobj,
59f69015 120 const struct attribute *attr, const char *group);
dfa87c82 121
8c0e3998 122void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr);
f1282c84
NB
123void sysfs_notify_dirent(struct sysfs_dirent *sd);
124struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd,
125 const unsigned char *name);
126struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd);
127void sysfs_put(struct sysfs_dirent *sd);
ae87221d 128void sysfs_printk_last_file(void);
f1282c84 129int __must_check sysfs_init(void);
f20a9ead 130
1da177e4
LT
131#else /* CONFIG_SYSFS */
132
d9a9cdfb 133static inline int sysfs_schedule_callback(struct kobject *kobj,
523ded71 134 void (*func)(void *), void *data, struct module *owner)
d9a9cdfb
AS
135{
136 return -ENOSYS;
137}
138
59f69015 139static inline int sysfs_create_dir(struct kobject *kobj)
1da177e4
LT
140{
141 return 0;
142}
143
59f69015 144static inline void sysfs_remove_dir(struct kobject *kobj)
1da177e4 145{
1da177e4
LT
146}
147
59f69015 148static inline int sysfs_rename_dir(struct kobject *kobj, const char *new_name)
1da177e4 149{
0b4a4fea 150 return 0;
1da177e4
LT
151}
152
59f69015
TH
153static inline int sysfs_move_dir(struct kobject *kobj,
154 struct kobject *new_parent_kobj)
8a82472f
CH
155{
156 return 0;
157}
158
59f69015
TH
159static inline int sysfs_create_file(struct kobject *kobj,
160 const struct attribute *attr)
1da177e4
LT
161{
162 return 0;
163}
164
59f69015
TH
165static inline int sysfs_chmod_file(struct kobject *kobj,
166 struct attribute *attr, mode_t mode)
31e5abe9
KS
167{
168 return 0;
169}
1da177e4 170
59f69015
TH
171static inline void sysfs_remove_file(struct kobject *kobj,
172 const struct attribute *attr)
1da177e4 173{
1da177e4
LT
174}
175
59f69015
TH
176static inline int sysfs_create_bin_file(struct kobject *kobj,
177 struct bin_attribute *attr)
1da177e4
LT
178{
179 return 0;
180}
181
3612e06b
DR
182static inline void sysfs_remove_bin_file(struct kobject *kobj,
183 struct bin_attribute *attr)
1da177e4 184{
1da177e4
LT
185}
186
59f69015
TH
187static inline int sysfs_create_link(struct kobject *kobj,
188 struct kobject *target, const char *name)
1da177e4
LT
189{
190 return 0;
191}
192
36ce6dad
CH
193static inline int sysfs_create_link_nowarn(struct kobject *kobj,
194 struct kobject *target,
195 const char *name)
196{
197 return 0;
198}
199
59f69015 200static inline void sysfs_remove_link(struct kobject *kobj, const char *name)
1da177e4 201{
1da177e4
LT
202}
203
59f69015
TH
204static inline int sysfs_create_group(struct kobject *kobj,
205 const struct attribute_group *grp)
1da177e4
LT
206{
207 return 0;
208}
209
1cbfb7a5
RD
210static inline int sysfs_update_group(struct kobject *kobj,
211 const struct attribute_group *grp)
212{
213 return 0;
214}
215
59f69015
TH
216static inline void sysfs_remove_group(struct kobject *kobj,
217 const struct attribute_group *grp)
1da177e4 218{
1da177e4
LT
219}
220
dfa87c82
AS
221static inline int sysfs_add_file_to_group(struct kobject *kobj,
222 const struct attribute *attr, const char *group)
223{
224 return 0;
225}
226
227static inline void sysfs_remove_file_from_group(struct kobject *kobj,
d701d8a3 228 const struct attribute *attr, const char *group)
dfa87c82 229{
dfa87c82
AS
230}
231
8c0e3998
TP
232static inline void sysfs_notify(struct kobject *kobj, const char *dir,
233 const char *attr)
4508a7a7
N
234{
235}
f1282c84
NB
236static inline void sysfs_notify_dirent(struct sysfs_dirent *sd)
237{
238}
239static inline
240struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd,
241 const unsigned char *name)
242{
243 return NULL;
244}
245static inline struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd)
246{
247 return NULL;
248}
249static inline void sysfs_put(struct sysfs_dirent *sd)
250{
251}
4508a7a7 252
f20a9ead
AM
253static inline int __must_check sysfs_init(void)
254{
255 return 0;
256}
257
ae87221d
AM
258static inline void sysfs_printk_last_file(void)
259{
260}
261
1da177e4
LT
262#endif /* CONFIG_SYSFS */
263
264#endif /* _SYSFS_H_ */