aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorOliver Schinagl <oliver@schinagl.nl>2013-07-14 19:05:59 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-07-16 13:57:37 -0400
commit3493f69f4c4e8703961919a9a56c2d2e6a25b46f (patch)
tree035bd6e86a4193fcda9765dcf7205cc5fb2550a8 /include
parentd05a6f96c76062b5f25858ac02cf677602076f7e (diff)
sysfs: add more helper macro's for (bin_)attribute(_groups)
With the recent changes to sysfs there's various helper macro's. However there's no RW, RO BIN_ helper macro's. This patch adds them. Signed-off-by: Oliver Schinagl <oliver@schinagl.nl> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include')
-rw-r--r--include/linux/sysfs.h51
1 files changed, 38 insertions, 13 deletions
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h
index 2c3b6a30697d..d907a7328025 100644
--- a/include/linux/sysfs.h
+++ b/include/linux/sysfs.h
@@ -17,6 +17,7 @@
17#include <linux/list.h> 17#include <linux/list.h>
18#include <linux/lockdep.h> 18#include <linux/lockdep.h>
19#include <linux/kobject_ns.h> 19#include <linux/kobject_ns.h>
20#include <linux/stat.h>
20#include <linux/atomic.h> 21#include <linux/atomic.h>
21 22
22struct kobject; 23struct kobject;
@@ -94,15 +95,18 @@ struct attribute_group {
94#define __ATTR_IGNORE_LOCKDEP __ATTR 95#define __ATTR_IGNORE_LOCKDEP __ATTR
95#endif 96#endif
96 97
97#define ATTRIBUTE_GROUPS(name) \ 98#define __ATTRIBUTE_GROUPS(_name) \
98static const struct attribute_group name##_group = { \ 99static const struct attribute_group *_name##_groups[] = { \
99 .attrs = name##_attrs, \ 100 &_name##_group, \
100}; \
101static const struct attribute_group *name##_groups[] = { \
102 &name##_group, \
103 NULL, \ 101 NULL, \
104} 102}
105 103
104#define ATTRIBUTE_GROUPS(_name) \
105static const struct attribute_group _name##_group = { \
106 .attrs = _name##_attrs, \
107}; \
108__ATTRIBUTE_GROUPS(_name)
109
106#define attr_name(_attr) (_attr).attr.name 110#define attr_name(_attr) (_attr).attr.name
107 111
108struct file; 112struct file;
@@ -132,15 +136,36 @@ struct bin_attribute {
132 */ 136 */
133#define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr) 137#define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr)
134 138
135/* macro to create static binary attributes easier */ 139/* macros to create static binary attributes easier */
136#define BIN_ATTR(_name, _mode, _read, _write, _size) \ 140#define __BIN_ATTR(_name, _mode, _read, _write, _size) { \
137struct bin_attribute bin_attr_##_name = { \ 141 .attr = { .name = __stringify(_name), .mode = _mode }, \
138 .attr = {.name = __stringify(_name), .mode = _mode }, \ 142 .read = _read, \
139 .read = _read, \ 143 .write = _write, \
140 .write = _write, \ 144 .size = _size, \
141 .size = _size, \ 145}
146
147#define __BIN_ATTR_RO(_name, _size) { \
148 .attr = { .name = __stringify(_name), .mode = S_IRUGO }, \
149 .read = _name##_read, \
150 .size = _size, \
142} 151}
143 152
153#define __BIN_ATTR_RW(_name, _size) __BIN_ATTR(_name, \
154 (S_IWUSR | S_IRUGO), _name##_read, \
155 _name##_write)
156
157#define __BIN_ATTR_NULL __ATTR_NULL
158
159#define BIN_ATTR(_name, _mode, _read, _write, _size) \
160struct bin_attribute bin_attr_##_name = __BIN_ATTR(_name, _mode, _read, \
161 _write, _size)
162
163#define BIN_ATTR_RO(_name, _size) \
164struct bin_attribute bin_attr_##_name = __BIN_ATTR_RO(_name, _size)
165
166#define BIN_ATTR_RW(_name, _size) \
167struct bin_attribute bin_attr_##_name = __BIN_ATTR_RW(_name, _size)
168
144struct sysfs_ops { 169struct sysfs_ops {
145 ssize_t (*show)(struct kobject *, struct attribute *,char *); 170 ssize_t (*show)(struct kobject *, struct attribute *,char *);
146 ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t); 171 ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);