Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / include / target / target_core_backend_configfs.h
1 #ifndef TARGET_CORE_BACKEND_CONFIGFS_H
2 #define TARGET_CORE_BACKEND_CONFIGFS_H
3
4 #include <target/configfs_macros.h>
5
6 #define DEF_TB_DEV_ATTRIB_SHOW(_backend, _name)                         \
7 static ssize_t _backend##_dev_show_attr_##_name(                        \
8         struct se_dev_attrib *da,                                       \
9         char *page)                                                     \
10 {                                                                       \
11         return snprintf(page, PAGE_SIZE, "%u\n",                        \
12                         (u32)da->da_dev->dev_attrib._name);             \
13 }
14
15 #define DEF_TB_DEV_ATTRIB_STORE(_backend, _name)                        \
16 static ssize_t _backend##_dev_store_attr_##_name(                       \
17         struct se_dev_attrib *da,                                       \
18         const char *page,                                               \
19         size_t count)                                                   \
20 {                                                                       \
21         unsigned long val;                                              \
22         int ret;                                                        \
23                                                                         \
24         ret = kstrtoul(page, 0, &val);                                  \
25         if (ret < 0) {                                                  \
26                 pr_err("kstrtoul() failed with ret: %d\n", ret);        \
27                 return -EINVAL;                                         \
28         }                                                               \
29         ret = se_dev_set_##_name(da->da_dev, (u32)val);                 \
30                                                                         \
31         return (!ret) ? count : -EINVAL;                                \
32 }
33
34 #define DEF_TB_DEV_ATTRIB(_backend, _name)                              \
35 DEF_TB_DEV_ATTRIB_SHOW(_backend, _name);                                \
36 DEF_TB_DEV_ATTRIB_STORE(_backend, _name);
37
38 #define DEF_TB_DEV_ATTRIB_RO(_backend, name)                            \
39 DEF_TB_DEV_ATTRIB_SHOW(_backend, name);
40
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);
47
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);
52
53 /*
54  * Default list of target backend device attributes as defined by
55  * struct se_dev_attrib
56  */
57
58 #define DEF_TB_DEFAULT_ATTRIBS(_backend)                                \
59         DEF_TB_DEV_ATTRIB(_backend, emulate_model_alias);               \
60         TB_DEV_ATTR(_backend, emulate_model_alias, S_IRUGO | S_IWUSR);  \
61         DEF_TB_DEV_ATTRIB(_backend, emulate_dpo);                       \
62         TB_DEV_ATTR(_backend, emulate_dpo, S_IRUGO | S_IWUSR);          \
63         DEF_TB_DEV_ATTRIB(_backend, emulate_fua_write);                 \
64         TB_DEV_ATTR(_backend, emulate_fua_write, S_IRUGO | S_IWUSR);    \
65         DEF_TB_DEV_ATTRIB(_backend, emulate_fua_read);                  \
66         TB_DEV_ATTR(_backend, emulate_fua_read, S_IRUGO | S_IWUSR);     \
67         DEF_TB_DEV_ATTRIB(_backend, emulate_write_cache);               \
68         TB_DEV_ATTR(_backend, emulate_write_cache, S_IRUGO | S_IWUSR);  \
69         DEF_TB_DEV_ATTRIB(_backend, emulate_ua_intlck_ctrl);            \
70         TB_DEV_ATTR(_backend, emulate_ua_intlck_ctrl, S_IRUGO | S_IWUSR); \
71         DEF_TB_DEV_ATTRIB(_backend, emulate_tas);                       \
72         TB_DEV_ATTR(_backend, emulate_tas, S_IRUGO | S_IWUSR);          \
73         DEF_TB_DEV_ATTRIB(_backend, emulate_tpu);                       \
74         TB_DEV_ATTR(_backend, emulate_tpu, S_IRUGO | S_IWUSR);          \
75         DEF_TB_DEV_ATTRIB(_backend, emulate_tpws);                      \
76         TB_DEV_ATTR(_backend, emulate_tpws, S_IRUGO | S_IWUSR);         \
77         DEF_TB_DEV_ATTRIB(_backend, emulate_caw);                       \
78         TB_DEV_ATTR(_backend, emulate_caw, S_IRUGO | S_IWUSR);          \
79         DEF_TB_DEV_ATTRIB(_backend, emulate_3pc);                       \
80         TB_DEV_ATTR(_backend, emulate_3pc, S_IRUGO | S_IWUSR);          \
81         DEF_TB_DEV_ATTRIB(_backend, pi_prot_type);                      \
82         TB_DEV_ATTR(_backend, pi_prot_type, S_IRUGO | S_IWUSR);         \
83         DEF_TB_DEV_ATTRIB_RO(_backend, hw_pi_prot_type);                \
84         TB_DEV_ATTR_RO(_backend, hw_pi_prot_type);                      \
85         DEF_TB_DEV_ATTRIB(_backend, pi_prot_format);                    \
86         TB_DEV_ATTR(_backend, pi_prot_format, S_IRUGO | S_IWUSR);       \
87         DEF_TB_DEV_ATTRIB(_backend, enforce_pr_isids);                  \
88         TB_DEV_ATTR(_backend, enforce_pr_isids, S_IRUGO | S_IWUSR);     \
89         DEF_TB_DEV_ATTRIB(_backend, is_nonrot);                         \
90         TB_DEV_ATTR(_backend, is_nonrot, S_IRUGO | S_IWUSR);            \
91         DEF_TB_DEV_ATTRIB(_backend, emulate_rest_reord);                \
92         TB_DEV_ATTR(_backend, emulate_rest_reord, S_IRUGO | S_IWUSR);   \
93         DEF_TB_DEV_ATTRIB(_backend, force_pr_aptpl);                    \
94         TB_DEV_ATTR(_backend, force_pr_aptpl, S_IRUGO | S_IWUSR);       \
95         DEF_TB_DEV_ATTRIB_RO(_backend, hw_block_size);                  \
96         TB_DEV_ATTR_RO(_backend, hw_block_size);                        \
97         DEF_TB_DEV_ATTRIB(_backend, block_size);                        \
98         TB_DEV_ATTR(_backend, block_size, S_IRUGO | S_IWUSR);           \
99         DEF_TB_DEV_ATTRIB_RO(_backend, hw_max_sectors);                 \
100         TB_DEV_ATTR_RO(_backend, hw_max_sectors);                       \
101         DEF_TB_DEV_ATTRIB(_backend, optimal_sectors);                   \
102         TB_DEV_ATTR(_backend, optimal_sectors, S_IRUGO | S_IWUSR);      \
103         DEF_TB_DEV_ATTRIB_RO(_backend, hw_queue_depth);                 \
104         TB_DEV_ATTR_RO(_backend, hw_queue_depth);                       \
105         DEF_TB_DEV_ATTRIB(_backend, queue_depth);                       \
106         TB_DEV_ATTR(_backend, queue_depth, S_IRUGO | S_IWUSR);          \
107         DEF_TB_DEV_ATTRIB(_backend, max_unmap_lba_count);               \
108         TB_DEV_ATTR(_backend, max_unmap_lba_count, S_IRUGO | S_IWUSR);  \
109         DEF_TB_DEV_ATTRIB(_backend, max_unmap_block_desc_count);        \
110         TB_DEV_ATTR(_backend, max_unmap_block_desc_count, S_IRUGO | S_IWUSR); \
111         DEF_TB_DEV_ATTRIB(_backend, unmap_granularity);                 \
112         TB_DEV_ATTR(_backend, unmap_granularity, S_IRUGO | S_IWUSR);    \
113         DEF_TB_DEV_ATTRIB(_backend, unmap_granularity_alignment);       \
114         TB_DEV_ATTR(_backend, unmap_granularity_alignment, S_IRUGO | S_IWUSR); \
115         DEF_TB_DEV_ATTRIB(_backend, max_write_same_len);                \
116         TB_DEV_ATTR(_backend, max_write_same_len, S_IRUGO | S_IWUSR);
117
118 #endif /* TARGET_CORE_BACKEND_CONFIGFS_H */