Add macros for defining attribute groups and for WO and RW attributes.

Reviewed by:	hselasky
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D11872
This commit is contained in:
Mark Johnston 2017-08-08 04:30:22 +00:00
parent a4a801688c
commit 48dac28d63
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=322212
2 changed files with 19 additions and 6 deletions

View file

@ -142,7 +142,13 @@ struct device_attribute {
#define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = \
{ { #_name, NULL, _mode }, _show, _store }
__ATTR(_name, _mode, _show, _store)
#define DEVICE_ATTR_RO(_name) \
struct device_attribute dev_attr_##_name = __ATTR_RO(_name)
#define DEVICE_ATTR_WO(_name) \
struct device_attribute dev_attr_##_name = __ATTR_WO(_name)
#define DEVICE_ATTR_RW(_name) \
struct device_attribute dev_attr_##_name = __ATTR_RW(_name)
/* Simple class attribute that is just a static string */
struct class_attribute_string {

View file

@ -54,14 +54,21 @@ struct attribute_group {
.attr = { .name = __stringify(_name), .mode = _mode }, \
.show = _show, .store = _store, \
}
#define __ATTR_RO(_name) { \
.attr = { .name = __stringify(_name), .mode = 0444 }, \
.show = _name##_show, \
}
#define __ATTR_RO(_name) __ATTR(_name, 0444, _name##_show, NULL)
#define __ATTR_WO(_name) __ATTR(_name, 0200, NULL, _name##_store)
#define __ATTR_RW(_name) __ATTR(_name, 0644, _name##_show, _name##_store)
#define __ATTR_NULL { .attr = { .name = NULL } }
#define ATTRIBUTE_GROUPS(_name) \
static struct attribute_group _name##_group = { \
.attrs = _name##_attrs, \
}; \
static struct attribute_group *_name##_groups[] = { \
&_name##_group, \
NULL, \
};
/*
* Handle our generic '\0' terminated 'C' string.
* Two cases: