1 #ifndef TARGET_CORE_BACKEND_CONFIGFS_H
2 #define TARGET_CORE_BACKEND_CONFIGFS_H
4 #include <target/configfs_macros.h>
6 #define DEF_TB_DEV_ATTRIB_SHOW(_backend, _name) \
7 static ssize_t _backend##_dev_show_attr_##_name( \
8 struct se_dev_attrib *da, \
11 return snprintf(page, PAGE_SIZE, "%u\n", \
12 (u32)da->da_dev->dev_attrib._name); \
15 #define DEF_TB_DEV_ATTRIB_STORE(_backend, _name) \
16 static ssize_t _backend##_dev_store_attr_##_name( \
17 struct se_dev_attrib *da, \
24 ret = kstrtoul(page, 0, &val); \
26 pr_err("kstrtoul() failed with ret: %d\n", ret); \
29 ret = se_dev_set_##_name(da->da_dev, (u32)val); \
31 return (!ret) ? count : -EINVAL; \
34 #define DEF_TB_DEV_ATTRIB(_backend, _name) \
35 DEF_TB_DEV_ATTRIB_SHOW(_backend, _name); \
36 DEF_TB_DEV_ATTRIB_STORE(_backend, _name);
38 #define DEF_TB_DEV_ATTRIB_RO(_backend, name) \
39 DEF_TB_DEV_ATTRIB_SHOW(_backend, name);
41 CONFIGFS_EATTR_STRUCT(target_backend_dev_attrib, se_dev_attrib);
42 #define TB_DEV_ATTR(_backend, _name, _mode) \
43 static struct target_backend_dev_attrib_attribute _backend##_dev_attrib_##_name = \
44 __CONFIGFS_EATTR(_name, _mode, \
45 _backend##_dev_show_attr_##_name, \
46 _backend##_dev_store_attr_##_name);
48 #define TB_DEV_ATTR_RO(_backend, _name) \
49 static struct target_backend_dev_attrib_attribute _backend##_dev_attrib_##_name = \
50 __CONFIGFS_EATTR_RO(_name, \
51 _backend##_dev_show_attr_##_name);
53 #endif /* TARGET_CORE_BACKEND_CONFIGFS_H */