srp.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  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 PACKED __attribute__((packed))
  31. enum srp_types {
  32. SRP_LOGIN_REQ_TYPE = 0x00,
  33. SRP_LOGIN_RSP_TYPE = 0xC0,
  34. SRP_LOGIN_REJ_TYPE = 0x80,
  35. SRP_I_LOGOUT_TYPE = 0x03,
  36. SRP_T_LOGOUT_TYPE = 0x80,
  37. SRP_TSK_MGMT_TYPE = 0x01,
  38. SRP_CMD_TYPE = 0x02,
  39. SRP_RSP_TYPE = 0xC1,
  40. SRP_CRED_REQ_TYPE = 0x81,
  41. SRP_CRED_RSP_TYPE = 0x41,
  42. SRP_AER_REQ_TYPE = 0x82,
  43. SRP_AER_RSP_TYPE = 0x42
  44. };
  45. enum srp_descriptor_formats {
  46. SRP_NO_BUFFER = 0x00,
  47. SRP_DIRECT_BUFFER = 0x01,
  48. SRP_INDIRECT_BUFFER = 0x02
  49. };
  50. struct memory_descriptor {
  51. u64 virtual_address;
  52. u32 memory_handle;
  53. u32 length;
  54. };
  55. struct indirect_descriptor {
  56. struct memory_descriptor head;
  57. u32 total_length;
  58. struct memory_descriptor list[1] PACKED;
  59. };
  60. struct srp_generic {
  61. u8 type;
  62. u8 reserved1[7];
  63. u64 tag;
  64. };
  65. struct srp_login_req {
  66. u8 type;
  67. u8 reserved1[7];
  68. u64 tag;
  69. u32 max_requested_initiator_to_target_iulen;
  70. u32 reserved2;
  71. u16 required_buffer_formats;
  72. u8 reserved3:6;
  73. u8 multi_channel_action:2;
  74. u8 reserved4;
  75. u32 reserved5;
  76. u8 initiator_port_identifier[16];
  77. u8 target_port_identifier[16];
  78. };
  79. struct srp_login_rsp {
  80. u8 type;
  81. u8 reserved1[3];
  82. u32 request_limit_delta;
  83. u64 tag;
  84. u32 max_initiator_to_target_iulen;
  85. u32 max_target_to_initiator_iulen;
  86. u16 supported_buffer_formats;
  87. u8 reserved2:6;
  88. u8 multi_channel_result:2;
  89. u8 reserved3;
  90. u8 reserved4[24];
  91. };
  92. struct srp_login_rej {
  93. u8 type;
  94. u8 reserved1[3];
  95. u32 reason;
  96. u64 tag;
  97. u64 reserved2;
  98. u16 supported_buffer_formats;
  99. u8 reserved3[6];
  100. };
  101. struct srp_i_logout {
  102. u8 type;
  103. u8 reserved1[7];
  104. u64 tag;
  105. };
  106. struct srp_t_logout {
  107. u8 type;
  108. u8 reserved1[3];
  109. u32 reason;
  110. u64 tag;
  111. };
  112. struct srp_tsk_mgmt {
  113. u8 type;
  114. u8 reserved1[7];
  115. u64 tag;
  116. u32 reserved2;
  117. u64 lun PACKED;
  118. u8 reserved3;
  119. u8 reserved4;
  120. u8 task_mgmt_flags;
  121. u8 reserved5;
  122. u64 managed_task_tag;
  123. u64 reserved6;
  124. };
  125. struct srp_cmd {
  126. u8 type;
  127. u32 reserved1 PACKED;
  128. u8 data_out_format:4;
  129. u8 data_in_format:4;
  130. u8 data_out_count;
  131. u8 data_in_count;
  132. u64 tag;
  133. u32 reserved2;
  134. u64 lun PACKED;
  135. u8 reserved3;
  136. u8 reserved4:5;
  137. u8 task_attribute:3;
  138. u8 reserved5;
  139. u8 additional_cdb_len;
  140. u8 cdb[16];
  141. u8 additional_data[0x100 - 0x30];
  142. };
  143. struct srp_rsp {
  144. u8 type;
  145. u8 reserved1[3];
  146. u32 request_limit_delta;
  147. u64 tag;
  148. u16 reserved2;
  149. u8 reserved3:2;
  150. u8 diunder:1;
  151. u8 diover:1;
  152. u8 dounder:1;
  153. u8 doover:1;
  154. u8 snsvalid:1;
  155. u8 rspvalid:1;
  156. u8 status;
  157. u32 data_in_residual_count;
  158. u32 data_out_residual_count;
  159. u32 sense_data_list_length;
  160. u32 response_data_list_length;
  161. u8 sense_and_response_data[18];
  162. };
  163. struct srp_cred_req {
  164. u8 type;
  165. u8 reserved1[3];
  166. u32 request_limit_delta;
  167. u64 tag;
  168. };
  169. struct srp_cred_rsp {
  170. u8 type;
  171. u8 reserved1[7];
  172. u64 tag;
  173. };
  174. struct srp_aer_req {
  175. u8 type;
  176. u8 reserved1[3];
  177. u32 request_limit_delta;
  178. u64 tag;
  179. u32 reserved2;
  180. u64 lun;
  181. u32 sense_data_list_length;
  182. u32 reserved3;
  183. u8 sense_data[20];
  184. };
  185. struct srp_aer_rsp {
  186. u8 type;
  187. u8 reserved1[7];
  188. u64 tag;
  189. };
  190. union srp_iu {
  191. struct srp_generic generic;
  192. struct srp_login_req login_req;
  193. struct srp_login_rsp login_rsp;
  194. struct srp_login_rej login_rej;
  195. struct srp_i_logout i_logout;
  196. struct srp_t_logout t_logout;
  197. struct srp_tsk_mgmt tsk_mgmt;
  198. struct srp_cmd cmd;
  199. struct srp_rsp rsp;
  200. struct srp_cred_req cred_req;
  201. struct srp_cred_rsp cred_rsp;
  202. struct srp_aer_req aer_req;
  203. struct srp_aer_rsp aer_rsp;
  204. };
  205. #endif