|
@@ -17,6 +17,7 @@
|
|
|
#include <linux/list.h>
|
|
|
#include <linux/lockdep.h>
|
|
|
#include <linux/kobject_ns.h>
|
|
|
+#include <linux/stat.h>
|
|
|
#include <linux/atomic.h>
|
|
|
|
|
|
struct kobject;
|
|
@@ -94,15 +95,18 @@ struct attribute_group {
|
|
|
#define __ATTR_IGNORE_LOCKDEP __ATTR
|
|
|
#endif
|
|
|
|
|
|
-#define ATTRIBUTE_GROUPS(name) \
|
|
|
-static const struct attribute_group name##_group = { \
|
|
|
- .attrs = name##_attrs, \
|
|
|
-}; \
|
|
|
-static const struct attribute_group *name##_groups[] = { \
|
|
|
- &name##_group, \
|
|
|
+#define __ATTRIBUTE_GROUPS(_name) \
|
|
|
+static const struct attribute_group *_name##_groups[] = { \
|
|
|
+ &_name##_group, \
|
|
|
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
|
|
|
|
|
|
struct file;
|
|
@@ -132,15 +136,36 @@ struct bin_attribute {
|
|
|
*/
|
|
|
#define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr)
|
|
|
|
|
|
-/* macro to create static binary attributes easier */
|
|
|
-#define BIN_ATTR(_name, _mode, _read, _write, _size) \
|
|
|
-struct bin_attribute bin_attr_##_name = { \
|
|
|
- .attr = {.name = __stringify(_name), .mode = _mode }, \
|
|
|
- .read = _read, \
|
|
|
- .write = _write, \
|
|
|
- .size = _size, \
|
|
|
+/* macros to create static binary attributes easier */
|
|
|
+#define __BIN_ATTR(_name, _mode, _read, _write, _size) { \
|
|
|
+ .attr = { .name = __stringify(_name), .mode = _mode }, \
|
|
|
+ .read = _read, \
|
|
|
+ .write = _write, \
|
|
|
+ .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 {
|
|
|
ssize_t (*show)(struct kobject *, struct attribute *,char *);
|
|
|
ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
|