1
2
3
4
5
6
7
8
9#ifndef _SYSFS_H_
10#define _SYSFS_H_
11
12#include <asm/atomic.h>
13
14struct kobject;
15struct module;
16
17struct attribute {
18 char * name;
19 struct module * owner;
20 mode_t mode;
21};
22
23struct attribute_group {
24 char * name;
25 struct attribute ** attrs;
26};
27
28
29
30
31
32
33
34
35#define __ATTR(_name,_mode,_show,_store) { \
36 .attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \
37 .show = _show, \
38 .store = _store, \
39}
40
41#define __ATTR_RO(_name) { \
42 .attr = { .name = __stringify(_name), .mode = 0444, .owner = THIS_MODULE }, \
43 .show = _name##_show, \
44}
45
46#define __ATTR_NULL { .attr = { .name = NULL } }
47
48#define attr_name(_attr) (_attr).attr.name
49
50struct bin_attribute {
51 struct attribute attr;
52 size_t size;
53 ssize_t (*read)(struct kobject *, char *, loff_t, size_t);
54 ssize_t (*write)(struct kobject *, char *, loff_t, size_t);
55};
56
57struct sysfs_ops {
58 ssize_t (*show)(struct kobject *, struct attribute *,char *);
59 ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
60};
61
62struct sysfs_dirent {
63 atomic_t s_count;
64 struct list_head s_sibling;
65 struct list_head s_children;
66 void * s_element;
67 int s_type;
68 umode_t s_mode;
69 struct dentry * s_dentry;
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
81extern int
82sysfs_create_dir(struct kobject *);
83
84extern void
85sysfs_remove_dir(struct kobject *);
86
87extern int
88sysfs_rename_dir(struct kobject *, const char *new_name);
89
90extern int
91sysfs_create_file(struct kobject *, const struct attribute *);
92
93extern int
94sysfs_update_file(struct kobject *, const struct attribute *);
95
96extern void
97sysfs_remove_file(struct kobject *, const struct attribute *);
98
99extern int
100sysfs_create_link(struct kobject * kobj, struct kobject * target, char * name);
101
102extern void
103sysfs_remove_link(struct kobject *, char * name);
104
105int sysfs_create_bin_file(struct kobject * kobj, struct bin_attribute * attr);
106int sysfs_remove_bin_file(struct kobject * kobj, struct bin_attribute * attr);
107
108int sysfs_create_group(struct kobject *, const struct attribute_group *);
109void sysfs_remove_group(struct kobject *, const struct attribute_group *);
110
111#else
112
113static inline int sysfs_create_dir(struct kobject * k)
114{
115 return 0;
116}
117
118static inline void sysfs_remove_dir(struct kobject * k)
119{
120 ;
121}
122
123static inline int sysfs_rename_dir(struct kobject * k, const char *new_name)
124{
125 return 0;
126}
127
128static inline int sysfs_create_file(struct kobject * k, const struct attribute * a)
129{
130 return 0;
131}
132
133static inline int sysfs_update_file(struct kobject * k, const struct attribute * a)
134{
135 return 0;
136}
137
138static inline void sysfs_remove_file(struct kobject * k, const struct attribute * a)
139{
140 ;
141}
142
143static inline int sysfs_create_link(struct kobject * k, struct kobject * t, char * n)
144{
145 return 0;
146}
147
148static inline void sysfs_remove_link(struct kobject * k, char * name)
149{
150 ;
151}
152
153
154static inline int sysfs_create_bin_file(struct kobject * k, struct bin_attribute * a)
155{
156 return 0;
157}
158
159static inline int sysfs_remove_bin_file(struct kobject * k, struct bin_attribute * a)
160{
161 return 0;
162}
163
164static inline int sysfs_create_group(struct kobject * k, const struct attribute_group *g)
165{
166 return 0;
167}
168
169static inline void sysfs_remove_group(struct kobject * k, const struct attribute_group * g)
170{
171 ;
172}
173
174#endif
175
176#endif
177