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>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
d05a6f96c7
commit
3493f69f4c
@@ -17,6 +17,7 @@
|
|||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/lockdep.h>
|
#include <linux/lockdep.h>
|
||||||
#include <linux/kobject_ns.h>
|
#include <linux/kobject_ns.h>
|
||||||
|
#include <linux/stat.h>
|
||||||
#include <linux/atomic.h>
|
#include <linux/atomic.h>
|
||||||
|
|
||||||
struct kobject;
|
struct kobject;
|
||||||
@@ -94,15 +95,18 @@ struct attribute_group {
|
|||||||
#define __ATTR_IGNORE_LOCKDEP __ATTR
|
#define __ATTR_IGNORE_LOCKDEP __ATTR
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ATTRIBUTE_GROUPS(name) \
|
#define __ATTRIBUTE_GROUPS(_name) \
|
||||||
static const struct attribute_group name##_group = { \
|
static const struct attribute_group *_name##_groups[] = { \
|
||||||
.attrs = name##_attrs, \
|
&_name##_group, \
|
||||||
}; \
|
|
||||||
static const struct attribute_group *name##_groups[] = { \
|
|
||||||
&name##_group, \
|
|
||||||
NULL, \
|
NULL, \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ATTRIBUTE_GROUPS(_name) \
|
||||||
|
static const struct attribute_group _name##_group = { \
|
||||||
|
.attrs = _name##_attrs, \
|
||||||
|
}; \
|
||||||
|
__ATTRIBUTE_GROUPS(_name)
|
||||||
|
|
||||||
#define attr_name(_attr) (_attr).attr.name
|
#define attr_name(_attr) (_attr).attr.name
|
||||||
|
|
||||||
struct file;
|
struct file;
|
||||||
@@ -132,15 +136,36 @@ struct bin_attribute {
|
|||||||
*/
|
*/
|
||||||
#define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr)
|
#define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr)
|
||||||
|
|
||||||
/* macro to create static binary attributes easier */
|
/* macros to create static binary attributes easier */
|
||||||
#define BIN_ATTR(_name, _mode, _read, _write, _size) \
|
#define __BIN_ATTR(_name, _mode, _read, _write, _size) { \
|
||||||
struct bin_attribute bin_attr_##_name = { \
|
.attr = { .name = __stringify(_name), .mode = _mode }, \
|
||||||
.attr = {.name = __stringify(_name), .mode = _mode }, \
|
.read = _read, \
|
||||||
.read = _read, \
|
.write = _write, \
|
||||||
.write = _write, \
|
.size = _size, \
|
||||||
.size = _size, \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define __BIN_ATTR_RO(_name, _size) { \
|
||||||
|
.attr = { .name = __stringify(_name), .mode = S_IRUGO }, \
|
||||||
|
.read = _name##_read, \
|
||||||
|
.size = _size, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define __BIN_ATTR_RW(_name, _size) __BIN_ATTR(_name, \
|
||||||
|
(S_IWUSR | S_IRUGO), _name##_read, \
|
||||||
|
_name##_write)
|
||||||
|
|
||||||
|
#define __BIN_ATTR_NULL __ATTR_NULL
|
||||||
|
|
||||||
|
#define BIN_ATTR(_name, _mode, _read, _write, _size) \
|
||||||
|
struct bin_attribute bin_attr_##_name = __BIN_ATTR(_name, _mode, _read, \
|
||||||
|
_write, _size)
|
||||||
|
|
||||||
|
#define BIN_ATTR_RO(_name, _size) \
|
||||||
|
struct bin_attribute bin_attr_##_name = __BIN_ATTR_RO(_name, _size)
|
||||||
|
|
||||||
|
#define BIN_ATTR_RW(_name, _size) \
|
||||||
|
struct bin_attribute bin_attr_##_name = __BIN_ATTR_RW(_name, _size)
|
||||||
|
|
||||||
struct sysfs_ops {
|
struct sysfs_ops {
|
||||||
ssize_t (*show)(struct kobject *, struct attribute *,char *);
|
ssize_t (*show)(struct kobject *, struct attribute *,char *);
|
||||||
ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
|
ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
|
||||||
|
Reference in New Issue
Block a user