srp.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. /*****************************************************************************/
  2. /* srp.h -- SCSI RDMA Protocol definitions */
  3. /* */
  4. /* Written By: Colin Devilbis, IBM Corporation */
  5. /* */
  6. /* Copyright (C) 2003 IBM Corporation */
  7. /* */
  8. /* This program is free software; you can redistribute it and/or modify */
  9. /* it under the terms of the GNU General Public License as published by */
  10. /* the Free Software Foundation; either version 2 of the License, or */
  11. /* (at your option) any later version. */
  12. /* */
  13. /* This program is distributed in the hope that it will be useful, */
  14. /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
  15. /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
  16. /* GNU General Public License for more details. */
  17. /* */
  18. /* You should have received a copy of the GNU General Public License */
  19. /* along with this program; if not, write to the Free Software */
  20. /* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
  21. /* */
  22. /* */
  23. /* This file contains structures and definitions for the SCSI RDMA Protocol */
  24. /* (SRP) as defined in the T10 standard available at www.t10.org. This */
  25. /* file was based on the 16a version of the standard */
  26. /* */
  27. /*****************************************************************************/
  28. #ifndef SRP_H
  29. #define SRP_H
  30. #define SRP_VERSION "16.a"
  31. #define PACKED __attribute__((packed))
  32. enum srp_types {
  33. SRP_LOGIN_REQ_TYPE = 0x00,
  34. SRP_LOGIN_RSP_TYPE = 0xC0,
  35. SRP_LOGIN_REJ_TYPE = 0xC2,
  36. SRP_I_LOGOUT_TYPE = 0x03,
  37. SRP_T_LOGOUT_TYPE = 0x80,
  38. SRP_TSK_MGMT_TYPE = 0x01,
  39. SRP_CMD_TYPE = 0x02,
  40. SRP_RSP_TYPE = 0xC1,
  41. SRP_CRED_REQ_TYPE = 0x81,
  42. SRP_CRED_RSP_TYPE = 0x41,
  43. SRP_AER_REQ_TYPE = 0x82,
  44. SRP_AER_RSP_TYPE = 0x42
  45. };
  46. enum srp_descriptor_formats {
  47. SRP_NO_BUFFER = 0x00,
  48. SRP_DIRECT_BUFFER = 0x01,
  49. SRP_INDIRECT_BUFFER = 0x02
  50. };
  51. struct memory_descriptor {
  52. u64 virtual_address;
  53. u32 memory_handle;
  54. u32 length;
  55. };
  56. struct indirect_descriptor {
  57. struct memory_descriptor head;
  58. u32 total_length;
  59. struct memory_descriptor list[1] PACKED;
  60. };
  61. struct srp_generic {
  62. u8 type;
  63. u8 reserved1[7];
  64. u64 tag;
  65. };
  66. struct srp_login_req {
  67. u8 type;
  68. u8 reserved1[7];
  69. u64 tag;
  70. u32 max_requested_initiator_to_target_iulen;
  71. u32 reserved2;
  72. u16 required_buffer_formats;
  73. u8 reserved3:6;
  74. u8 multi_channel_action:2;
  75. u8 reserved4;
  76. u32 reserved5;
  77. u8 initiator_port_identifier[16];
  78. u8 target_port_identifier[16];
  79. };
  80. struct srp_login_rsp {
  81. u8 type;
  82. u8 reserved1[3];
  83. u32 request_limit_delta;
  84. u64 tag;
  85. u32 max_initiator_to_target_iulen;
  86. u32 max_target_to_initiator_iulen;
  87. u16 supported_buffer_formats;
  88. u8 reserved2:6;
  89. u8 multi_channel_result:2;
  90. u8 reserved3;
  91. u8 reserved4[24];
  92. };
  93. struct srp_login_rej {
  94. u8 type;
  95. u8 reserved1[3];
  96. u32 reason;
  97. u64 tag;
  98. u64 reserved2;
  99. u16 supported_buffer_formats;
  100. u8 reserved3[6];
  101. };
  102. struct srp_i_logout {
  103. u8 type;
  104. u8 reserved1[7];
  105. u64 tag;
  106. };
  107. struct srp_t_logout {
  108. u8 type;
  109. u8 reserved1[3];
  110. u32 reason;
  111. u64 tag;
  112. };
  113. struct srp_tsk_mgmt {
  114. u8 type;
  115. u8 reserved1[7];
  116. u64 tag;
  117. u32 reserved2;
  118. u64 lun PACKED;
  119. u8 reserved3;
  120. u8 reserved4;
  121. u8 task_mgmt_flags;
  122. u8 reserved5;
  123. u64 managed_task_tag;
  124. u64 reserved6;
  125. };
  126. struct srp_cmd {
  127. u8 type;
  128. u32 reserved1 PACKED;
  129. u8 data_out_format:4;
  130. u8 data_in_format:4;
  131. u8 data_out_count;
  132. u8 data_in_count;
  133. u64 tag;
  134. u32 reserved2;
  135. u64 lun PACKED;
  136. u8 reserved3;
  137. u8 reserved4:5;
  138. u8 task_attribute:3;
  139. u8 reserved5;
  140. u8 additional_cdb_len;
  141. u8 cdb[16];
  142. u8 additional_data[0x100 - 0x30];
  143. };
  144. struct srp_rsp {
  145. u8 type;
  146. u8 reserved1[3];
  147. u32 request_limit_delta;
  148. u64 tag;
  149. u16 reserved2;
  150. u8 reserved3:2;
  151. u8 diunder:1;
  152. u8 diover:1;
  153. u8 dounder:1;
  154. u8 doover:1;
  155. u8 snsvalid:1;
  156. u8 rspvalid:1;
  157. u8 status;
  158. u32 data_in_residual_count;
  159. u32 data_out_residual_count;
  160. u32 sense_data_list_length;
  161. u32 response_data_list_length;
  162. u8 sense_and_response_data[18];
  163. };
  164. struct srp_cred_req {
  165. u8 type;
  166. u8 reserved1[3];
  167. u32 request_limit_delta;
  168. u64 tag;
  169. };
  170. struct srp_cred_rsp {
  171. u8 type;
  172. u8 reserved1[7];
  173. u64 tag;
  174. };
  175. struct srp_aer_req {
  176. u8 type;
  177. u8 reserved1[3];
  178. u32 request_limit_delta;
  179. u64 tag;
  180. u32 reserved2;
  181. u64 lun;
  182. u32 sense_data_list_length;
  183. u32 reserved3;
  184. u8 sense_data[20];
  185. };
  186. struct srp_aer_rsp {
  187. u8 type;
  188. u8 reserved1[7];
  189. u64 tag;
  190. };
  191. union srp_iu {
  192. struct srp_generic generic;
  193. struct srp_login_req login_req;
  194. struct srp_login_rsp login_rsp;
  195. struct srp_login_rej login_rej;
  196. struct srp_i_logout i_logout;
  197. struct srp_t_logout t_logout;
  198. struct srp_tsk_mgmt tsk_mgmt;
  199. struct srp_cmd cmd;
  200. struct srp_rsp rsp;
  201. struct srp_cred_req cred_req;
  202. struct srp_cred_rsp cred_rsp;
  203. struct srp_aer_req aer_req;
  204. struct srp_aer_rsp aer_rsp;
  205. };
  206. #endif