target_core_backend_configfs.h 5.0 KB

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