iscsi_common.h 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572
  1. /* QLogic qed NIC Driver
  2. * Copyright (c) 2015-2017 QLogic Corporation
  3. *
  4. * This software is available to you under a choice of one of two
  5. * licenses. You may choose to be licensed under the terms of the GNU
  6. * General Public License (GPL) Version 2, available from the file
  7. * COPYING in the main directory of this source tree, or the
  8. * OpenIB.org BSD license below:
  9. *
  10. * Redistribution and use in source and binary forms, with or
  11. * without modification, are permitted provided that the following
  12. * conditions are met:
  13. *
  14. * - Redistributions of source code must retain the above
  15. * copyright notice, this list of conditions and the following
  16. * disclaimer.
  17. *
  18. * - Redistributions in binary form must reproduce the above
  19. * copyright notice, this list of conditions and the following
  20. * disclaimer in the documentation and /or other materials
  21. * provided with the distribution.
  22. *
  23. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  27. * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  28. * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  29. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  30. * SOFTWARE.
  31. */
  32. #ifndef __ISCSI_COMMON__
  33. #define __ISCSI_COMMON__
  34. /**********************/
  35. /* ISCSI FW CONSTANTS */
  36. /**********************/
  37. /* iSCSI HSI constants */
  38. #define ISCSI_DEFAULT_MTU (1500)
  39. /* KWQ (kernel work queue) layer codes */
  40. #define ISCSI_SLOW_PATH_LAYER_CODE (6)
  41. /* iSCSI parameter defaults */
  42. #define ISCSI_DEFAULT_HEADER_DIGEST (0)
  43. #define ISCSI_DEFAULT_DATA_DIGEST (0)
  44. #define ISCSI_DEFAULT_INITIAL_R2T (1)
  45. #define ISCSI_DEFAULT_IMMEDIATE_DATA (1)
  46. #define ISCSI_DEFAULT_MAX_PDU_LENGTH (0x2000)
  47. #define ISCSI_DEFAULT_FIRST_BURST_LENGTH (0x10000)
  48. #define ISCSI_DEFAULT_MAX_BURST_LENGTH (0x40000)
  49. #define ISCSI_DEFAULT_MAX_OUTSTANDING_R2T (1)
  50. /* iSCSI parameter limits */
  51. #define ISCSI_MIN_VAL_MAX_PDU_LENGTH (0x200)
  52. #define ISCSI_MAX_VAL_MAX_PDU_LENGTH (0xffffff)
  53. #define ISCSI_MIN_VAL_BURST_LENGTH (0x200)
  54. #define ISCSI_MAX_VAL_BURST_LENGTH (0xffffff)
  55. #define ISCSI_MIN_VAL_MAX_OUTSTANDING_R2T (1)
  56. #define ISCSI_MAX_VAL_MAX_OUTSTANDING_R2T (0xff)
  57. #define ISCSI_AHS_CNTL_SIZE 4
  58. #define ISCSI_WQE_NUM_SGES_SLOWIO (0xf)
  59. /* iSCSI reserved params */
  60. #define ISCSI_ITT_ALL_ONES (0xffffffff)
  61. #define ISCSI_TTT_ALL_ONES (0xffffffff)
  62. #define ISCSI_OPTION_1_OFF_CHIP_TCP 1
  63. #define ISCSI_OPTION_2_ON_CHIP_TCP 2
  64. #define ISCSI_INITIATOR_MODE 0
  65. #define ISCSI_TARGET_MODE 1
  66. /* iSCSI request op codes */
  67. #define ISCSI_OPCODE_NOP_OUT (0)
  68. #define ISCSI_OPCODE_SCSI_CMD (1)
  69. #define ISCSI_OPCODE_TMF_REQUEST (2)
  70. #define ISCSI_OPCODE_LOGIN_REQUEST (3)
  71. #define ISCSI_OPCODE_TEXT_REQUEST (4)
  72. #define ISCSI_OPCODE_DATA_OUT (5)
  73. #define ISCSI_OPCODE_LOGOUT_REQUEST (6)
  74. /* iSCSI response/messages op codes */
  75. #define ISCSI_OPCODE_NOP_IN (0x20)
  76. #define ISCSI_OPCODE_SCSI_RESPONSE (0x21)
  77. #define ISCSI_OPCODE_TMF_RESPONSE (0x22)
  78. #define ISCSI_OPCODE_LOGIN_RESPONSE (0x23)
  79. #define ISCSI_OPCODE_TEXT_RESPONSE (0x24)
  80. #define ISCSI_OPCODE_DATA_IN (0x25)
  81. #define ISCSI_OPCODE_LOGOUT_RESPONSE (0x26)
  82. #define ISCSI_OPCODE_R2T (0x31)
  83. #define ISCSI_OPCODE_ASYNC_MSG (0x32)
  84. #define ISCSI_OPCODE_REJECT (0x3f)
  85. /* iSCSI stages */
  86. #define ISCSI_STAGE_SECURITY_NEGOTIATION (0)
  87. #define ISCSI_STAGE_LOGIN_OPERATIONAL_NEGOTIATION (1)
  88. #define ISCSI_STAGE_FULL_FEATURE_PHASE (3)
  89. /* iSCSI CQE errors */
  90. #define CQE_ERROR_BITMAP_DATA_DIGEST (0x08)
  91. #define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN (0x10)
  92. #define CQE_ERROR_BITMAP_DATA_TRUNCATED (0x20)
  93. /* Union of data bd_opaque/ tq_tid */
  94. union bd_opaque_tq_union {
  95. __le16 bd_opaque;
  96. __le16 tq_tid;
  97. };
  98. /* ISCSI SGL entry */
  99. struct cqe_error_bitmap {
  100. u8 cqe_error_status_bits;
  101. #define CQE_ERROR_BITMAP_DIF_ERR_BITS_MASK 0x7
  102. #define CQE_ERROR_BITMAP_DIF_ERR_BITS_SHIFT 0
  103. #define CQE_ERROR_BITMAP_DATA_DIGEST_ERR_MASK 0x1
  104. #define CQE_ERROR_BITMAP_DATA_DIGEST_ERR_SHIFT 3
  105. #define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN_MASK 0x1
  106. #define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN_SHIFT 4
  107. #define CQE_ERROR_BITMAP_DATA_TRUNCATED_ERR_MASK 0x1
  108. #define CQE_ERROR_BITMAP_DATA_TRUNCATED_ERR_SHIFT 5
  109. #define CQE_ERROR_BITMAP_UNDER_RUN_ERR_MASK 0x1
  110. #define CQE_ERROR_BITMAP_UNDER_RUN_ERR_SHIFT 6
  111. #define CQE_ERROR_BITMAP_RESERVED2_MASK 0x1
  112. #define CQE_ERROR_BITMAP_RESERVED2_SHIFT 7
  113. };
  114. union cqe_error_status {
  115. u8 error_status;
  116. struct cqe_error_bitmap error_bits;
  117. };
  118. /* iSCSI Login Response PDU header */
  119. struct data_hdr {
  120. __le32 data[12];
  121. };
  122. struct lun_mapper_addr_reserved {
  123. struct regpair lun_mapper_addr;
  124. u8 reserved0[8];
  125. };
  126. /* rdif conetxt for dif on immediate */
  127. struct dif_on_immediate_params {
  128. __le32 initial_ref_tag;
  129. __le16 application_tag;
  130. __le16 application_tag_mask;
  131. __le16 flags1;
  132. #define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_GUARD_MASK 0x1
  133. #define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_GUARD_SHIFT 0
  134. #define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_APP_TAG_MASK 0x1
  135. #define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_APP_TAG_SHIFT 1
  136. #define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_REF_TAG_MASK 0x1
  137. #define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_REF_TAG_SHIFT 2
  138. #define DIF_ON_IMMEDIATE_PARAMS_FORWARD_GUARD_MASK 0x1
  139. #define DIF_ON_IMMEDIATE_PARAMS_FORWARD_GUARD_SHIFT 3
  140. #define DIF_ON_IMMEDIATE_PARAMS_FORWARD_APP_TAG_MASK 0x1
  141. #define DIF_ON_IMMEDIATE_PARAMS_FORWARD_APP_TAG_SHIFT 4
  142. #define DIF_ON_IMMEDIATE_PARAMS_FORWARD_REF_TAG_MASK 0x1
  143. #define DIF_ON_IMMEDIATE_PARAMS_FORWARD_REF_TAG_SHIFT 5
  144. #define DIF_ON_IMMEDIATE_PARAMS_INTERVAL_SIZE_MASK 0x1
  145. #define DIF_ON_IMMEDIATE_PARAMS_INTERVAL_SIZE_SHIFT 6
  146. #define DIF_ON_IMMEDIATE_PARAMS_NETWORK_INTERFACE_MASK 0x1
  147. #define DIF_ON_IMMEDIATE_PARAMS_NETWORK_INTERFACE_SHIFT 7
  148. #define DIF_ON_IMMEDIATE_PARAMS_HOST_INTERFACE_MASK 0x3
  149. #define DIF_ON_IMMEDIATE_PARAMS_HOST_INTERFACE_SHIFT 8
  150. #define DIF_ON_IMMEDIATE_PARAMS_REF_TAG_MASK_MASK 0xF
  151. #define DIF_ON_IMMEDIATE_PARAMS_REF_TAG_MASK_SHIFT 10
  152. #define DIF_ON_IMMEDIATE_PARAMS_FORWARD_APP_TAG_WITH_MASK_MASK 0x1
  153. #define DIF_ON_IMMEDIATE_PARAMS_FORWARD_APP_TAG_WITH_MASK_SHIFT 14
  154. #define DIF_ON_IMMEDIATE_PARAMS_FORWARD_REF_TAG_WITH_MASK_MASK 0x1
  155. #define DIF_ON_IMMEDIATE_PARAMS_FORWARD_REF_TAG_WITH_MASK_SHIFT 15
  156. u8 flags0;
  157. #define DIF_ON_IMMEDIATE_PARAMS_RESERVED_MASK 0x1
  158. #define DIF_ON_IMMEDIATE_PARAMS_RESERVED_SHIFT 0
  159. #define DIF_ON_IMMEDIATE_PARAMS_IGNORE_APP_TAG_MASK 0x1
  160. #define DIF_ON_IMMEDIATE_PARAMS_IGNORE_APP_TAG_SHIFT 1
  161. #define DIF_ON_IMMEDIATE_PARAMS_INITIAL_REF_TAG_IS_VALID_MASK 0x1
  162. #define DIF_ON_IMMEDIATE_PARAMS_INITIAL_REF_TAG_IS_VALID_SHIFT 2
  163. #define DIF_ON_IMMEDIATE_PARAMS_HOST_GUARD_TYPE_MASK 0x1
  164. #define DIF_ON_IMMEDIATE_PARAMS_HOST_GUARD_TYPE_SHIFT 3
  165. #define DIF_ON_IMMEDIATE_PARAMS_PROTECTION_TYPE_MASK 0x3
  166. #define DIF_ON_IMMEDIATE_PARAMS_PROTECTION_TYPE_SHIFT 4
  167. #define DIF_ON_IMMEDIATE_PARAMS_CRC_SEED_MASK 0x1
  168. #define DIF_ON_IMMEDIATE_PARAMS_CRC_SEED_SHIFT 6
  169. #define DIF_ON_IMMEDIATE_PARAMS_KEEP_REF_TAG_CONST_MASK 0x1
  170. #define DIF_ON_IMMEDIATE_PARAMS_KEEP_REF_TAG_CONST_SHIFT 7
  171. u8 reserved_zero[5];
  172. };
  173. /* iSCSI dif on immediate mode attributes union */
  174. union dif_configuration_params {
  175. struct lun_mapper_addr_reserved lun_mapper_address;
  176. struct dif_on_immediate_params def_dif_conf;
  177. };
  178. /* Union of data/r2t sequence number */
  179. union iscsi_seq_num {
  180. __le16 data_sn;
  181. __le16 r2t_sn;
  182. };
  183. /* iSCSI DIF flags */
  184. struct iscsi_dif_flags {
  185. u8 flags;
  186. #define ISCSI_DIF_FLAGS_PROT_INTERVAL_SIZE_LOG_MASK 0xF
  187. #define ISCSI_DIF_FLAGS_PROT_INTERVAL_SIZE_LOG_SHIFT 0
  188. #define ISCSI_DIF_FLAGS_DIF_TO_PEER_MASK 0x1
  189. #define ISCSI_DIF_FLAGS_DIF_TO_PEER_SHIFT 4
  190. #define ISCSI_DIF_FLAGS_HOST_INTERFACE_MASK 0x7
  191. #define ISCSI_DIF_FLAGS_HOST_INTERFACE_SHIFT 5
  192. };
  193. /* The iscsi storm task context of Ystorm */
  194. struct ystorm_iscsi_task_state {
  195. struct scsi_cached_sges data_desc;
  196. struct scsi_sgl_params sgl_params;
  197. __le32 exp_r2t_sn;
  198. __le32 buffer_offset;
  199. union iscsi_seq_num seq_num;
  200. struct iscsi_dif_flags dif_flags;
  201. u8 flags;
  202. #define YSTORM_ISCSI_TASK_STATE_LOCAL_COMP_MASK 0x1
  203. #define YSTORM_ISCSI_TASK_STATE_LOCAL_COMP_SHIFT 0
  204. #define YSTORM_ISCSI_TASK_STATE_SLOW_IO_MASK 0x1
  205. #define YSTORM_ISCSI_TASK_STATE_SLOW_IO_SHIFT 1
  206. #define YSTORM_ISCSI_TASK_STATE_SET_DIF_OFFSET_MASK 0x1
  207. #define YSTORM_ISCSI_TASK_STATE_SET_DIF_OFFSET_SHIFT 2
  208. #define YSTORM_ISCSI_TASK_STATE_RESERVED0_MASK 0x1F
  209. #define YSTORM_ISCSI_TASK_STATE_RESERVED0_SHIFT 3
  210. };
  211. /* The iscsi storm task context of Ystorm */
  212. struct ystorm_iscsi_task_rxmit_opt {
  213. __le32 fast_rxmit_sge_offset;
  214. __le32 scan_start_buffer_offset;
  215. __le32 fast_rxmit_buffer_offset;
  216. u8 scan_start_sgl_index;
  217. u8 fast_rxmit_sgl_index;
  218. __le16 reserved;
  219. };
  220. /* iSCSI Common PDU header */
  221. struct iscsi_common_hdr {
  222. u8 hdr_status;
  223. u8 hdr_response;
  224. u8 hdr_flags;
  225. u8 hdr_first_byte;
  226. #define ISCSI_COMMON_HDR_OPCODE_MASK 0x3F
  227. #define ISCSI_COMMON_HDR_OPCODE_SHIFT 0
  228. #define ISCSI_COMMON_HDR_IMM_MASK 0x1
  229. #define ISCSI_COMMON_HDR_IMM_SHIFT 6
  230. #define ISCSI_COMMON_HDR_RSRV_MASK 0x1
  231. #define ISCSI_COMMON_HDR_RSRV_SHIFT 7
  232. __le32 hdr_second_dword;
  233. #define ISCSI_COMMON_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  234. #define ISCSI_COMMON_HDR_DATA_SEG_LEN_SHIFT 0
  235. #define ISCSI_COMMON_HDR_TOTAL_AHS_LEN_MASK 0xFF
  236. #define ISCSI_COMMON_HDR_TOTAL_AHS_LEN_SHIFT 24
  237. struct regpair lun_reserved;
  238. __le32 itt;
  239. __le32 ttt;
  240. __le32 cmdstat_sn;
  241. __le32 exp_statcmd_sn;
  242. __le32 max_cmd_sn;
  243. __le32 data[3];
  244. };
  245. /* iSCSI Command PDU header */
  246. struct iscsi_cmd_hdr {
  247. __le16 reserved1;
  248. u8 flags_attr;
  249. #define ISCSI_CMD_HDR_ATTR_MASK 0x7
  250. #define ISCSI_CMD_HDR_ATTR_SHIFT 0
  251. #define ISCSI_CMD_HDR_RSRV_MASK 0x3
  252. #define ISCSI_CMD_HDR_RSRV_SHIFT 3
  253. #define ISCSI_CMD_HDR_WRITE_MASK 0x1
  254. #define ISCSI_CMD_HDR_WRITE_SHIFT 5
  255. #define ISCSI_CMD_HDR_READ_MASK 0x1
  256. #define ISCSI_CMD_HDR_READ_SHIFT 6
  257. #define ISCSI_CMD_HDR_FINAL_MASK 0x1
  258. #define ISCSI_CMD_HDR_FINAL_SHIFT 7
  259. u8 hdr_first_byte;
  260. #define ISCSI_CMD_HDR_OPCODE_MASK 0x3F
  261. #define ISCSI_CMD_HDR_OPCODE_SHIFT 0
  262. #define ISCSI_CMD_HDR_IMM_MASK 0x1
  263. #define ISCSI_CMD_HDR_IMM_SHIFT 6
  264. #define ISCSI_CMD_HDR_RSRV1_MASK 0x1
  265. #define ISCSI_CMD_HDR_RSRV1_SHIFT 7
  266. __le32 hdr_second_dword;
  267. #define ISCSI_CMD_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  268. #define ISCSI_CMD_HDR_DATA_SEG_LEN_SHIFT 0
  269. #define ISCSI_CMD_HDR_TOTAL_AHS_LEN_MASK 0xFF
  270. #define ISCSI_CMD_HDR_TOTAL_AHS_LEN_SHIFT 24
  271. struct regpair lun;
  272. __le32 itt;
  273. __le32 expected_transfer_length;
  274. __le32 cmd_sn;
  275. __le32 exp_stat_sn;
  276. __le32 cdb[4];
  277. };
  278. /* iSCSI Command PDU header with Extended CDB (Initiator Mode) */
  279. struct iscsi_ext_cdb_cmd_hdr {
  280. __le16 reserved1;
  281. u8 flags_attr;
  282. #define ISCSI_EXT_CDB_CMD_HDR_ATTR_MASK 0x7
  283. #define ISCSI_EXT_CDB_CMD_HDR_ATTR_SHIFT 0
  284. #define ISCSI_EXT_CDB_CMD_HDR_RSRV_MASK 0x3
  285. #define ISCSI_EXT_CDB_CMD_HDR_RSRV_SHIFT 3
  286. #define ISCSI_EXT_CDB_CMD_HDR_WRITE_MASK 0x1
  287. #define ISCSI_EXT_CDB_CMD_HDR_WRITE_SHIFT 5
  288. #define ISCSI_EXT_CDB_CMD_HDR_READ_MASK 0x1
  289. #define ISCSI_EXT_CDB_CMD_HDR_READ_SHIFT 6
  290. #define ISCSI_EXT_CDB_CMD_HDR_FINAL_MASK 0x1
  291. #define ISCSI_EXT_CDB_CMD_HDR_FINAL_SHIFT 7
  292. u8 opcode;
  293. __le32 hdr_second_dword;
  294. #define ISCSI_EXT_CDB_CMD_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  295. #define ISCSI_EXT_CDB_CMD_HDR_DATA_SEG_LEN_SHIFT 0
  296. #define ISCSI_EXT_CDB_CMD_HDR_CDB_SIZE_MASK 0xFF
  297. #define ISCSI_EXT_CDB_CMD_HDR_CDB_SIZE_SHIFT 24
  298. struct regpair lun;
  299. __le32 itt;
  300. __le32 expected_transfer_length;
  301. __le32 cmd_sn;
  302. __le32 exp_stat_sn;
  303. struct scsi_sge cdb_sge;
  304. };
  305. /* iSCSI login request PDU header */
  306. struct iscsi_login_req_hdr {
  307. u8 version_min;
  308. u8 version_max;
  309. u8 flags_attr;
  310. #define ISCSI_LOGIN_REQ_HDR_NSG_MASK 0x3
  311. #define ISCSI_LOGIN_REQ_HDR_NSG_SHIFT 0
  312. #define ISCSI_LOGIN_REQ_HDR_CSG_MASK 0x3
  313. #define ISCSI_LOGIN_REQ_HDR_CSG_SHIFT 2
  314. #define ISCSI_LOGIN_REQ_HDR_RSRV_MASK 0x3
  315. #define ISCSI_LOGIN_REQ_HDR_RSRV_SHIFT 4
  316. #define ISCSI_LOGIN_REQ_HDR_C_MASK 0x1
  317. #define ISCSI_LOGIN_REQ_HDR_C_SHIFT 6
  318. #define ISCSI_LOGIN_REQ_HDR_T_MASK 0x1
  319. #define ISCSI_LOGIN_REQ_HDR_T_SHIFT 7
  320. u8 opcode;
  321. __le32 hdr_second_dword;
  322. #define ISCSI_LOGIN_REQ_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  323. #define ISCSI_LOGIN_REQ_HDR_DATA_SEG_LEN_SHIFT 0
  324. #define ISCSI_LOGIN_REQ_HDR_TOTAL_AHS_LEN_MASK 0xFF
  325. #define ISCSI_LOGIN_REQ_HDR_TOTAL_AHS_LEN_SHIFT 24
  326. __le32 isid_tabc;
  327. __le16 tsih;
  328. __le16 isid_d;
  329. __le32 itt;
  330. __le16 reserved1;
  331. __le16 cid;
  332. __le32 cmd_sn;
  333. __le32 exp_stat_sn;
  334. __le32 reserved2[4];
  335. };
  336. /* iSCSI logout request PDU header */
  337. struct iscsi_logout_req_hdr {
  338. __le16 reserved0;
  339. u8 reason_code;
  340. u8 opcode;
  341. __le32 reserved1;
  342. __le32 reserved2[2];
  343. __le32 itt;
  344. __le16 reserved3;
  345. __le16 cid;
  346. __le32 cmd_sn;
  347. __le32 exp_stat_sn;
  348. __le32 reserved4[4];
  349. };
  350. /* iSCSI Data-out PDU header */
  351. struct iscsi_data_out_hdr {
  352. __le16 reserved1;
  353. u8 flags_attr;
  354. #define ISCSI_DATA_OUT_HDR_RSRV_MASK 0x7F
  355. #define ISCSI_DATA_OUT_HDR_RSRV_SHIFT 0
  356. #define ISCSI_DATA_OUT_HDR_FINAL_MASK 0x1
  357. #define ISCSI_DATA_OUT_HDR_FINAL_SHIFT 7
  358. u8 opcode;
  359. __le32 reserved2;
  360. struct regpair lun;
  361. __le32 itt;
  362. __le32 ttt;
  363. __le32 reserved3;
  364. __le32 exp_stat_sn;
  365. __le32 reserved4;
  366. __le32 data_sn;
  367. __le32 buffer_offset;
  368. __le32 reserved5;
  369. };
  370. /* iSCSI Data-in PDU header */
  371. struct iscsi_data_in_hdr {
  372. u8 status_rsvd;
  373. u8 reserved1;
  374. u8 flags;
  375. #define ISCSI_DATA_IN_HDR_STATUS_MASK 0x1
  376. #define ISCSI_DATA_IN_HDR_STATUS_SHIFT 0
  377. #define ISCSI_DATA_IN_HDR_UNDERFLOW_MASK 0x1
  378. #define ISCSI_DATA_IN_HDR_UNDERFLOW_SHIFT 1
  379. #define ISCSI_DATA_IN_HDR_OVERFLOW_MASK 0x1
  380. #define ISCSI_DATA_IN_HDR_OVERFLOW_SHIFT 2
  381. #define ISCSI_DATA_IN_HDR_RSRV_MASK 0x7
  382. #define ISCSI_DATA_IN_HDR_RSRV_SHIFT 3
  383. #define ISCSI_DATA_IN_HDR_ACK_MASK 0x1
  384. #define ISCSI_DATA_IN_HDR_ACK_SHIFT 6
  385. #define ISCSI_DATA_IN_HDR_FINAL_MASK 0x1
  386. #define ISCSI_DATA_IN_HDR_FINAL_SHIFT 7
  387. u8 opcode;
  388. __le32 reserved2;
  389. struct regpair lun;
  390. __le32 itt;
  391. __le32 ttt;
  392. __le32 stat_sn;
  393. __le32 exp_cmd_sn;
  394. __le32 max_cmd_sn;
  395. __le32 data_sn;
  396. __le32 buffer_offset;
  397. __le32 residual_count;
  398. };
  399. /* iSCSI R2T PDU header */
  400. struct iscsi_r2t_hdr {
  401. u8 reserved0[3];
  402. u8 opcode;
  403. __le32 reserved2;
  404. struct regpair lun;
  405. __le32 itt;
  406. __le32 ttt;
  407. __le32 stat_sn;
  408. __le32 exp_cmd_sn;
  409. __le32 max_cmd_sn;
  410. __le32 r2t_sn;
  411. __le32 buffer_offset;
  412. __le32 desired_data_trns_len;
  413. };
  414. /* iSCSI NOP-out PDU header */
  415. struct iscsi_nop_out_hdr {
  416. __le16 reserved1;
  417. u8 flags_attr;
  418. #define ISCSI_NOP_OUT_HDR_RSRV_MASK 0x7F
  419. #define ISCSI_NOP_OUT_HDR_RSRV_SHIFT 0
  420. #define ISCSI_NOP_OUT_HDR_CONST1_MASK 0x1
  421. #define ISCSI_NOP_OUT_HDR_CONST1_SHIFT 7
  422. u8 opcode;
  423. __le32 reserved2;
  424. struct regpair lun;
  425. __le32 itt;
  426. __le32 ttt;
  427. __le32 cmd_sn;
  428. __le32 exp_stat_sn;
  429. __le32 reserved3;
  430. __le32 reserved4;
  431. __le32 reserved5;
  432. __le32 reserved6;
  433. };
  434. /* iSCSI NOP-in PDU header */
  435. struct iscsi_nop_in_hdr {
  436. __le16 reserved0;
  437. u8 flags_attr;
  438. #define ISCSI_NOP_IN_HDR_RSRV_MASK 0x7F
  439. #define ISCSI_NOP_IN_HDR_RSRV_SHIFT 0
  440. #define ISCSI_NOP_IN_HDR_CONST1_MASK 0x1
  441. #define ISCSI_NOP_IN_HDR_CONST1_SHIFT 7
  442. u8 opcode;
  443. __le32 hdr_second_dword;
  444. #define ISCSI_NOP_IN_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  445. #define ISCSI_NOP_IN_HDR_DATA_SEG_LEN_SHIFT 0
  446. #define ISCSI_NOP_IN_HDR_TOTAL_AHS_LEN_MASK 0xFF
  447. #define ISCSI_NOP_IN_HDR_TOTAL_AHS_LEN_SHIFT 24
  448. struct regpair lun;
  449. __le32 itt;
  450. __le32 ttt;
  451. __le32 stat_sn;
  452. __le32 exp_cmd_sn;
  453. __le32 max_cmd_sn;
  454. __le32 reserved5;
  455. __le32 reserved6;
  456. __le32 reserved7;
  457. };
  458. /* iSCSI Login Response PDU header */
  459. struct iscsi_login_response_hdr {
  460. u8 version_active;
  461. u8 version_max;
  462. u8 flags_attr;
  463. #define ISCSI_LOGIN_RESPONSE_HDR_NSG_MASK 0x3
  464. #define ISCSI_LOGIN_RESPONSE_HDR_NSG_SHIFT 0
  465. #define ISCSI_LOGIN_RESPONSE_HDR_CSG_MASK 0x3
  466. #define ISCSI_LOGIN_RESPONSE_HDR_CSG_SHIFT 2
  467. #define ISCSI_LOGIN_RESPONSE_HDR_RSRV_MASK 0x3
  468. #define ISCSI_LOGIN_RESPONSE_HDR_RSRV_SHIFT 4
  469. #define ISCSI_LOGIN_RESPONSE_HDR_C_MASK 0x1
  470. #define ISCSI_LOGIN_RESPONSE_HDR_C_SHIFT 6
  471. #define ISCSI_LOGIN_RESPONSE_HDR_T_MASK 0x1
  472. #define ISCSI_LOGIN_RESPONSE_HDR_T_SHIFT 7
  473. u8 opcode;
  474. __le32 hdr_second_dword;
  475. #define ISCSI_LOGIN_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  476. #define ISCSI_LOGIN_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
  477. #define ISCSI_LOGIN_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
  478. #define ISCSI_LOGIN_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
  479. __le32 isid_tabc;
  480. __le16 tsih;
  481. __le16 isid_d;
  482. __le32 itt;
  483. __le32 reserved1;
  484. __le32 stat_sn;
  485. __le32 exp_cmd_sn;
  486. __le32 max_cmd_sn;
  487. __le16 reserved2;
  488. u8 status_detail;
  489. u8 status_class;
  490. __le32 reserved4[2];
  491. };
  492. /* iSCSI Logout Response PDU header */
  493. struct iscsi_logout_response_hdr {
  494. u8 reserved1;
  495. u8 response;
  496. u8 flags;
  497. u8 opcode;
  498. __le32 hdr_second_dword;
  499. #define ISCSI_LOGOUT_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  500. #define ISCSI_LOGOUT_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
  501. #define ISCSI_LOGOUT_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
  502. #define ISCSI_LOGOUT_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
  503. __le32 reserved2[2];
  504. __le32 itt;
  505. __le32 reserved3;
  506. __le32 stat_sn;
  507. __le32 exp_cmd_sn;
  508. __le32 max_cmd_sn;
  509. __le32 reserved4;
  510. __le16 time_2_retain;
  511. __le16 time_2_wait;
  512. __le32 reserved5[1];
  513. };
  514. /* iSCSI Text Request PDU header */
  515. struct iscsi_text_request_hdr {
  516. __le16 reserved0;
  517. u8 flags_attr;
  518. #define ISCSI_TEXT_REQUEST_HDR_RSRV_MASK 0x3F
  519. #define ISCSI_TEXT_REQUEST_HDR_RSRV_SHIFT 0
  520. #define ISCSI_TEXT_REQUEST_HDR_C_MASK 0x1
  521. #define ISCSI_TEXT_REQUEST_HDR_C_SHIFT 6
  522. #define ISCSI_TEXT_REQUEST_HDR_F_MASK 0x1
  523. #define ISCSI_TEXT_REQUEST_HDR_F_SHIFT 7
  524. u8 opcode;
  525. __le32 hdr_second_dword;
  526. #define ISCSI_TEXT_REQUEST_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  527. #define ISCSI_TEXT_REQUEST_HDR_DATA_SEG_LEN_SHIFT 0
  528. #define ISCSI_TEXT_REQUEST_HDR_TOTAL_AHS_LEN_MASK 0xFF
  529. #define ISCSI_TEXT_REQUEST_HDR_TOTAL_AHS_LEN_SHIFT 24
  530. struct regpair lun;
  531. __le32 itt;
  532. __le32 ttt;
  533. __le32 cmd_sn;
  534. __le32 exp_stat_sn;
  535. __le32 reserved4[4];
  536. };
  537. /* iSCSI Text Response PDU header */
  538. struct iscsi_text_response_hdr {
  539. __le16 reserved1;
  540. u8 flags;
  541. #define ISCSI_TEXT_RESPONSE_HDR_RSRV_MASK 0x3F
  542. #define ISCSI_TEXT_RESPONSE_HDR_RSRV_SHIFT 0
  543. #define ISCSI_TEXT_RESPONSE_HDR_C_MASK 0x1
  544. #define ISCSI_TEXT_RESPONSE_HDR_C_SHIFT 6
  545. #define ISCSI_TEXT_RESPONSE_HDR_F_MASK 0x1
  546. #define ISCSI_TEXT_RESPONSE_HDR_F_SHIFT 7
  547. u8 opcode;
  548. __le32 hdr_second_dword;
  549. #define ISCSI_TEXT_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  550. #define ISCSI_TEXT_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
  551. #define ISCSI_TEXT_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
  552. #define ISCSI_TEXT_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
  553. struct regpair lun;
  554. __le32 itt;
  555. __le32 ttt;
  556. __le32 stat_sn;
  557. __le32 exp_cmd_sn;
  558. __le32 max_cmd_sn;
  559. __le32 reserved4[3];
  560. };
  561. /* iSCSI TMF Request PDU header */
  562. struct iscsi_tmf_request_hdr {
  563. __le16 reserved0;
  564. u8 function;
  565. u8 opcode;
  566. __le32 hdr_second_dword;
  567. #define ISCSI_TMF_REQUEST_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  568. #define ISCSI_TMF_REQUEST_HDR_DATA_SEG_LEN_SHIFT 0
  569. #define ISCSI_TMF_REQUEST_HDR_TOTAL_AHS_LEN_MASK 0xFF
  570. #define ISCSI_TMF_REQUEST_HDR_TOTAL_AHS_LEN_SHIFT 24
  571. struct regpair lun;
  572. __le32 itt;
  573. __le32 rtt;
  574. __le32 cmd_sn;
  575. __le32 exp_stat_sn;
  576. __le32 ref_cmd_sn;
  577. __le32 exp_data_sn;
  578. __le32 reserved4[2];
  579. };
  580. struct iscsi_tmf_response_hdr {
  581. u8 reserved2;
  582. u8 hdr_response;
  583. u8 hdr_flags;
  584. u8 opcode;
  585. __le32 hdr_second_dword;
  586. #define ISCSI_TMF_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  587. #define ISCSI_TMF_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
  588. #define ISCSI_TMF_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
  589. #define ISCSI_TMF_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
  590. struct regpair reserved0;
  591. __le32 itt;
  592. __le32 reserved1;
  593. __le32 stat_sn;
  594. __le32 exp_cmd_sn;
  595. __le32 max_cmd_sn;
  596. __le32 reserved4[3];
  597. };
  598. /* iSCSI Response PDU header */
  599. struct iscsi_response_hdr {
  600. u8 hdr_status;
  601. u8 hdr_response;
  602. u8 hdr_flags;
  603. u8 opcode;
  604. __le32 hdr_second_dword;
  605. #define ISCSI_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  606. #define ISCSI_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
  607. #define ISCSI_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
  608. #define ISCSI_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
  609. struct regpair lun;
  610. __le32 itt;
  611. __le32 snack_tag;
  612. __le32 stat_sn;
  613. __le32 exp_cmd_sn;
  614. __le32 max_cmd_sn;
  615. __le32 exp_data_sn;
  616. __le32 bi_residual_count;
  617. __le32 residual_count;
  618. };
  619. /* iSCSI Reject PDU header */
  620. struct iscsi_reject_hdr {
  621. u8 reserved4;
  622. u8 hdr_reason;
  623. u8 hdr_flags;
  624. u8 opcode;
  625. __le32 hdr_second_dword;
  626. #define ISCSI_REJECT_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  627. #define ISCSI_REJECT_HDR_DATA_SEG_LEN_SHIFT 0
  628. #define ISCSI_REJECT_HDR_TOTAL_AHS_LEN_MASK 0xFF
  629. #define ISCSI_REJECT_HDR_TOTAL_AHS_LEN_SHIFT 24
  630. struct regpair reserved0;
  631. __le32 all_ones;
  632. __le32 reserved2;
  633. __le32 stat_sn;
  634. __le32 exp_cmd_sn;
  635. __le32 max_cmd_sn;
  636. __le32 data_sn;
  637. __le32 reserved3[2];
  638. };
  639. /* iSCSI Asynchronous Message PDU header */
  640. struct iscsi_async_msg_hdr {
  641. __le16 reserved0;
  642. u8 flags_attr;
  643. #define ISCSI_ASYNC_MSG_HDR_RSRV_MASK 0x7F
  644. #define ISCSI_ASYNC_MSG_HDR_RSRV_SHIFT 0
  645. #define ISCSI_ASYNC_MSG_HDR_CONST1_MASK 0x1
  646. #define ISCSI_ASYNC_MSG_HDR_CONST1_SHIFT 7
  647. u8 opcode;
  648. __le32 hdr_second_dword;
  649. #define ISCSI_ASYNC_MSG_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  650. #define ISCSI_ASYNC_MSG_HDR_DATA_SEG_LEN_SHIFT 0
  651. #define ISCSI_ASYNC_MSG_HDR_TOTAL_AHS_LEN_MASK 0xFF
  652. #define ISCSI_ASYNC_MSG_HDR_TOTAL_AHS_LEN_SHIFT 24
  653. struct regpair lun;
  654. __le32 all_ones;
  655. __le32 reserved1;
  656. __le32 stat_sn;
  657. __le32 exp_cmd_sn;
  658. __le32 max_cmd_sn;
  659. __le16 param1_rsrv;
  660. u8 async_vcode;
  661. u8 async_event;
  662. __le16 param3_rsrv;
  663. __le16 param2_rsrv;
  664. __le32 reserved7;
  665. };
  666. /* PDU header part of Ystorm task context */
  667. union iscsi_task_hdr {
  668. struct iscsi_common_hdr common;
  669. struct data_hdr data;
  670. struct iscsi_cmd_hdr cmd;
  671. struct iscsi_ext_cdb_cmd_hdr ext_cdb_cmd;
  672. struct iscsi_login_req_hdr login_req;
  673. struct iscsi_logout_req_hdr logout_req;
  674. struct iscsi_data_out_hdr data_out;
  675. struct iscsi_data_in_hdr data_in;
  676. struct iscsi_r2t_hdr r2t;
  677. struct iscsi_nop_out_hdr nop_out;
  678. struct iscsi_nop_in_hdr nop_in;
  679. struct iscsi_login_response_hdr login_response;
  680. struct iscsi_logout_response_hdr logout_response;
  681. struct iscsi_text_request_hdr text_request;
  682. struct iscsi_text_response_hdr text_response;
  683. struct iscsi_tmf_request_hdr tmf_request;
  684. struct iscsi_tmf_response_hdr tmf_response;
  685. struct iscsi_response_hdr response;
  686. struct iscsi_reject_hdr reject;
  687. struct iscsi_async_msg_hdr async_msg;
  688. };
  689. /* The iscsi storm task context of Ystorm */
  690. struct ystorm_iscsi_task_st_ctx {
  691. struct ystorm_iscsi_task_state state;
  692. struct ystorm_iscsi_task_rxmit_opt rxmit_opt;
  693. union iscsi_task_hdr pdu_hdr;
  694. };
  695. struct e4_ystorm_iscsi_task_ag_ctx {
  696. u8 reserved;
  697. u8 byte1;
  698. __le16 word0;
  699. u8 flags0;
  700. #define E4_YSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_MASK 0xF
  701. #define E4_YSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_SHIFT 0
  702. #define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT0_MASK 0x1
  703. #define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT0_SHIFT 4
  704. #define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT1_MASK 0x1
  705. #define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT 5
  706. #define E4_YSTORM_ISCSI_TASK_AG_CTX_VALID_MASK 0x1
  707. #define E4_YSTORM_ISCSI_TASK_AG_CTX_VALID_SHIFT 6
  708. #define E4_YSTORM_ISCSI_TASK_AG_CTX_TTT_VALID_MASK 0x1 /* bit3 */
  709. #define E4_YSTORM_ISCSI_TASK_AG_CTX_TTT_VALID_SHIFT 7
  710. u8 flags1;
  711. #define E4_YSTORM_ISCSI_TASK_AG_CTX_CF0_MASK 0x3
  712. #define E4_YSTORM_ISCSI_TASK_AG_CTX_CF0_SHIFT 0
  713. #define E4_YSTORM_ISCSI_TASK_AG_CTX_CF1_MASK 0x3
  714. #define E4_YSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT 2
  715. #define E4_YSTORM_ISCSI_TASK_AG_CTX_CF2SPECIAL_MASK 0x3
  716. #define E4_YSTORM_ISCSI_TASK_AG_CTX_CF2SPECIAL_SHIFT 4
  717. #define E4_YSTORM_ISCSI_TASK_AG_CTX_CF0EN_MASK 0x1
  718. #define E4_YSTORM_ISCSI_TASK_AG_CTX_CF0EN_SHIFT 6
  719. #define E4_YSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK 0x1
  720. #define E4_YSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT 7
  721. u8 flags2;
  722. #define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT4_MASK 0x1
  723. #define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT4_SHIFT 0
  724. #define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK 0x1
  725. #define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT 1
  726. #define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1
  727. #define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 2
  728. #define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK 0x1
  729. #define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT 3
  730. #define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1
  731. #define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 4
  732. #define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1
  733. #define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 5
  734. #define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1
  735. #define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 6
  736. #define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK 0x1
  737. #define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT 7
  738. u8 byte2;
  739. __le32 TTT;
  740. u8 byte3;
  741. u8 byte4;
  742. __le16 word1;
  743. };
  744. struct e4_mstorm_iscsi_task_ag_ctx {
  745. u8 cdu_validation;
  746. u8 byte1;
  747. __le16 task_cid;
  748. u8 flags0;
  749. #define E4_MSTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF
  750. #define E4_MSTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0
  751. #define E4_MSTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1
  752. #define E4_MSTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4
  753. #define E4_MSTORM_ISCSI_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_MASK 0x1
  754. #define E4_MSTORM_ISCSI_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_SHIFT 5
  755. #define E4_MSTORM_ISCSI_TASK_AG_CTX_VALID_MASK 0x1
  756. #define E4_MSTORM_ISCSI_TASK_AG_CTX_VALID_SHIFT 6
  757. #define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_FLAG_MASK 0x1
  758. #define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_FLAG_SHIFT 7
  759. u8 flags1;
  760. #define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_MASK 0x3
  761. #define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_SHIFT 0
  762. #define E4_MSTORM_ISCSI_TASK_AG_CTX_CF1_MASK 0x3
  763. #define E4_MSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT 2
  764. #define E4_MSTORM_ISCSI_TASK_AG_CTX_CF2_MASK 0x3
  765. #define E4_MSTORM_ISCSI_TASK_AG_CTX_CF2_SHIFT 4
  766. #define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_EN_MASK 0x1
  767. #define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_EN_SHIFT 6
  768. #define E4_MSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK 0x1
  769. #define E4_MSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT 7
  770. u8 flags2;
  771. #define E4_MSTORM_ISCSI_TASK_AG_CTX_CF2EN_MASK 0x1
  772. #define E4_MSTORM_ISCSI_TASK_AG_CTX_CF2EN_SHIFT 0
  773. #define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK 0x1
  774. #define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT 1
  775. #define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1
  776. #define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 2
  777. #define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK 0x1
  778. #define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT 3
  779. #define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1
  780. #define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 4
  781. #define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1
  782. #define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 5
  783. #define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1
  784. #define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 6
  785. #define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK 0x1
  786. #define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT 7
  787. u8 byte2;
  788. __le32 reg0;
  789. u8 byte3;
  790. u8 byte4;
  791. __le16 word1;
  792. };
  793. struct e4_ustorm_iscsi_task_ag_ctx {
  794. u8 reserved;
  795. u8 state;
  796. __le16 icid;
  797. u8 flags0;
  798. #define E4_USTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF
  799. #define E4_USTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0
  800. #define E4_USTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1
  801. #define E4_USTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4
  802. #define E4_USTORM_ISCSI_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_MASK 0x1
  803. #define E4_USTORM_ISCSI_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_SHIFT 5
  804. #define E4_USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_MASK 0x3
  805. #define E4_USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_SHIFT 6
  806. u8 flags1;
  807. #define E4_USTORM_ISCSI_TASK_AG_CTX_RESERVED1_MASK 0x3
  808. #define E4_USTORM_ISCSI_TASK_AG_CTX_RESERVED1_SHIFT 0
  809. #define E4_USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_MASK 0x3
  810. #define E4_USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_SHIFT 2
  811. #define E4_USTORM_ISCSI_TASK_AG_CTX_CF3_MASK 0x3
  812. #define E4_USTORM_ISCSI_TASK_AG_CTX_CF3_SHIFT 4
  813. #define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_MASK 0x3
  814. #define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_SHIFT 6
  815. u8 flags2;
  816. #define E4_USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_EN_MASK 0x1
  817. #define E4_USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_EN_SHIFT 0
  818. #define E4_USTORM_ISCSI_TASK_AG_CTX_DISABLE_DATA_ACKED_MASK 0x1
  819. #define E4_USTORM_ISCSI_TASK_AG_CTX_DISABLE_DATA_ACKED_SHIFT 1
  820. #define E4_USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_EN_MASK 0x1
  821. #define E4_USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_EN_SHIFT 2
  822. #define E4_USTORM_ISCSI_TASK_AG_CTX_CF3EN_MASK 0x1
  823. #define E4_USTORM_ISCSI_TASK_AG_CTX_CF3EN_SHIFT 3
  824. #define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_EN_MASK 0x1
  825. #define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_EN_SHIFT 4
  826. #define E4_USTORM_ISCSI_TASK_AG_CTX_CMP_DATA_TOTAL_EXP_EN_MASK 0x1
  827. #define E4_USTORM_ISCSI_TASK_AG_CTX_CMP_DATA_TOTAL_EXP_EN_SHIFT 5
  828. #define E4_USTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1
  829. #define E4_USTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 6
  830. #define E4_USTORM_ISCSI_TASK_AG_CTX_CMP_CONT_RCV_EXP_EN_MASK 0x1
  831. #define E4_USTORM_ISCSI_TASK_AG_CTX_CMP_CONT_RCV_EXP_EN_SHIFT 7
  832. u8 flags3;
  833. #define E4_USTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1
  834. #define E4_USTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 0
  835. #define E4_USTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1
  836. #define E4_USTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 1
  837. #define E4_USTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1
  838. #define E4_USTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 2
  839. #define E4_USTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK 0x1
  840. #define E4_USTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT 3
  841. #define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_TYPE_MASK 0xF
  842. #define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_TYPE_SHIFT 4
  843. __le32 dif_err_intervals;
  844. __le32 dif_error_1st_interval;
  845. __le32 rcv_cont_len;
  846. __le32 exp_cont_len;
  847. __le32 total_data_acked;
  848. __le32 exp_data_acked;
  849. u8 next_tid_valid;
  850. u8 byte3;
  851. __le16 word1;
  852. __le16 next_tid;
  853. __le16 word3;
  854. __le32 hdr_residual_count;
  855. __le32 exp_r2t_sn;
  856. };
  857. /* The iscsi storm task context of Mstorm */
  858. struct mstorm_iscsi_task_st_ctx {
  859. struct scsi_cached_sges data_desc;
  860. struct scsi_sgl_params sgl_params;
  861. __le32 rem_task_size;
  862. __le32 data_buffer_offset;
  863. u8 task_type;
  864. struct iscsi_dif_flags dif_flags;
  865. __le16 dif_task_icid;
  866. struct regpair sense_db;
  867. __le32 expected_itt;
  868. __le32 reserved1;
  869. };
  870. struct iscsi_reg1 {
  871. __le32 reg1_map;
  872. #define ISCSI_REG1_NUM_SGES_MASK 0xF
  873. #define ISCSI_REG1_NUM_SGES_SHIFT 0
  874. #define ISCSI_REG1_RESERVED1_MASK 0xFFFFFFF
  875. #define ISCSI_REG1_RESERVED1_SHIFT 4
  876. };
  877. struct tqe_opaque {
  878. __le16 opaque[2];
  879. };
  880. /* The iscsi storm task context of Ustorm */
  881. struct ustorm_iscsi_task_st_ctx {
  882. __le32 rem_rcv_len;
  883. __le32 exp_data_transfer_len;
  884. __le32 exp_data_sn;
  885. struct regpair lun;
  886. struct iscsi_reg1 reg1;
  887. u8 flags2;
  888. #define USTORM_ISCSI_TASK_ST_CTX_AHS_EXIST_MASK 0x1
  889. #define USTORM_ISCSI_TASK_ST_CTX_AHS_EXIST_SHIFT 0
  890. #define USTORM_ISCSI_TASK_ST_CTX_RESERVED1_MASK 0x7F
  891. #define USTORM_ISCSI_TASK_ST_CTX_RESERVED1_SHIFT 1
  892. struct iscsi_dif_flags dif_flags;
  893. __le16 reserved3;
  894. struct tqe_opaque tqe_opaque_list;
  895. __le32 reserved5;
  896. __le32 reserved6;
  897. __le32 reserved7;
  898. u8 task_type;
  899. u8 error_flags;
  900. #define USTORM_ISCSI_TASK_ST_CTX_DATA_DIGEST_ERROR_MASK 0x1
  901. #define USTORM_ISCSI_TASK_ST_CTX_DATA_DIGEST_ERROR_SHIFT 0
  902. #define USTORM_ISCSI_TASK_ST_CTX_DATA_TRUNCATED_ERROR_MASK 0x1
  903. #define USTORM_ISCSI_TASK_ST_CTX_DATA_TRUNCATED_ERROR_SHIFT 1
  904. #define USTORM_ISCSI_TASK_ST_CTX_UNDER_RUN_ERROR_MASK 0x1
  905. #define USTORM_ISCSI_TASK_ST_CTX_UNDER_RUN_ERROR_SHIFT 2
  906. #define USTORM_ISCSI_TASK_ST_CTX_RESERVED8_MASK 0x1F
  907. #define USTORM_ISCSI_TASK_ST_CTX_RESERVED8_SHIFT 3
  908. u8 flags;
  909. #define USTORM_ISCSI_TASK_ST_CTX_CQE_WRITE_MASK 0x3
  910. #define USTORM_ISCSI_TASK_ST_CTX_CQE_WRITE_SHIFT 0
  911. #define USTORM_ISCSI_TASK_ST_CTX_LOCAL_COMP_MASK 0x1
  912. #define USTORM_ISCSI_TASK_ST_CTX_LOCAL_COMP_SHIFT 2
  913. #define USTORM_ISCSI_TASK_ST_CTX_Q0_R2TQE_WRITE_MASK 0x1
  914. #define USTORM_ISCSI_TASK_ST_CTX_Q0_R2TQE_WRITE_SHIFT 3
  915. #define USTORM_ISCSI_TASK_ST_CTX_TOTAL_DATA_ACKED_DONE_MASK 0x1
  916. #define USTORM_ISCSI_TASK_ST_CTX_TOTAL_DATA_ACKED_DONE_SHIFT 4
  917. #define USTORM_ISCSI_TASK_ST_CTX_HQ_SCANNED_DONE_MASK 0x1
  918. #define USTORM_ISCSI_TASK_ST_CTX_HQ_SCANNED_DONE_SHIFT 5
  919. #define USTORM_ISCSI_TASK_ST_CTX_R2T2RECV_DONE_MASK 0x1
  920. #define USTORM_ISCSI_TASK_ST_CTX_R2T2RECV_DONE_SHIFT 6
  921. #define USTORM_ISCSI_TASK_ST_CTX_RESERVED0_MASK 0x1
  922. #define USTORM_ISCSI_TASK_ST_CTX_RESERVED0_SHIFT 7
  923. u8 cq_rss_number;
  924. };
  925. /* iscsi task context */
  926. struct e4_iscsi_task_context {
  927. struct ystorm_iscsi_task_st_ctx ystorm_st_context;
  928. struct e4_ystorm_iscsi_task_ag_ctx ystorm_ag_context;
  929. struct regpair ystorm_ag_padding[2];
  930. struct tdif_task_context tdif_context;
  931. struct e4_mstorm_iscsi_task_ag_ctx mstorm_ag_context;
  932. struct regpair mstorm_ag_padding[2];
  933. struct e4_ustorm_iscsi_task_ag_ctx ustorm_ag_context;
  934. struct mstorm_iscsi_task_st_ctx mstorm_st_context;
  935. struct ustorm_iscsi_task_st_ctx ustorm_st_context;
  936. struct rdif_task_context rdif_context;
  937. };
  938. /* iSCSI connection offload params passed by driver to FW in ISCSI offload
  939. * ramrod.
  940. */
  941. struct iscsi_conn_offload_params {
  942. struct regpair sq_pbl_addr;
  943. struct regpair r2tq_pbl_addr;
  944. struct regpair xhq_pbl_addr;
  945. struct regpair uhq_pbl_addr;
  946. __le32 initial_ack;
  947. __le16 physical_q0;
  948. __le16 physical_q1;
  949. u8 flags;
  950. #define ISCSI_CONN_OFFLOAD_PARAMS_TCP_ON_CHIP_1B_MASK 0x1
  951. #define ISCSI_CONN_OFFLOAD_PARAMS_TCP_ON_CHIP_1B_SHIFT 0
  952. #define ISCSI_CONN_OFFLOAD_PARAMS_TARGET_MODE_MASK 0x1
  953. #define ISCSI_CONN_OFFLOAD_PARAMS_TARGET_MODE_SHIFT 1
  954. #define ISCSI_CONN_OFFLOAD_PARAMS_RESTRICTED_MODE_MASK 0x1
  955. #define ISCSI_CONN_OFFLOAD_PARAMS_RESTRICTED_MODE_SHIFT 2
  956. #define ISCSI_CONN_OFFLOAD_PARAMS_RESERVED1_MASK 0x1F
  957. #define ISCSI_CONN_OFFLOAD_PARAMS_RESERVED1_SHIFT 3
  958. u8 pbl_page_size_log;
  959. u8 pbe_page_size_log;
  960. u8 default_cq;
  961. __le32 stat_sn;
  962. };
  963. /* iSCSI connection statistics */
  964. struct iscsi_conn_stats_params {
  965. struct regpair iscsi_tcp_tx_packets_cnt;
  966. struct regpair iscsi_tcp_tx_bytes_cnt;
  967. struct regpair iscsi_tcp_tx_rxmit_cnt;
  968. struct regpair iscsi_tcp_rx_packets_cnt;
  969. struct regpair iscsi_tcp_rx_bytes_cnt;
  970. struct regpair iscsi_tcp_rx_dup_ack_cnt;
  971. __le32 iscsi_tcp_rx_chksum_err_cnt;
  972. __le32 reserved;
  973. };
  974. /* spe message header */
  975. struct iscsi_slow_path_hdr {
  976. u8 op_code;
  977. u8 flags;
  978. #define ISCSI_SLOW_PATH_HDR_RESERVED0_MASK 0xF
  979. #define ISCSI_SLOW_PATH_HDR_RESERVED0_SHIFT 0
  980. #define ISCSI_SLOW_PATH_HDR_LAYER_CODE_MASK 0x7
  981. #define ISCSI_SLOW_PATH_HDR_LAYER_CODE_SHIFT 4
  982. #define ISCSI_SLOW_PATH_HDR_RESERVED1_MASK 0x1
  983. #define ISCSI_SLOW_PATH_HDR_RESERVED1_SHIFT 7
  984. };
  985. /* iSCSI connection update params passed by driver to FW in ISCSI update
  986. *ramrod.
  987. */
  988. struct iscsi_conn_update_ramrod_params {
  989. struct iscsi_slow_path_hdr hdr;
  990. __le16 conn_id;
  991. __le32 fw_cid;
  992. u8 flags;
  993. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_HD_EN_MASK 0x1
  994. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_HD_EN_SHIFT 0
  995. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DD_EN_MASK 0x1
  996. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DD_EN_SHIFT 1
  997. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_INITIAL_R2T_MASK 0x1
  998. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_INITIAL_R2T_SHIFT 2
  999. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_IMMEDIATE_DATA_MASK 0x1
  1000. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_IMMEDIATE_DATA_SHIFT 3
  1001. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_BLOCK_SIZE_MASK 0x1
  1002. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_BLOCK_SIZE_SHIFT 4
  1003. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_HOST_EN_MASK 0x1
  1004. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_HOST_EN_SHIFT 5
  1005. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_IMM_EN_MASK 0x1
  1006. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_IMM_EN_SHIFT 6
  1007. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_LUN_MAPPER_EN_MASK 0x1
  1008. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_LUN_MAPPER_EN_SHIFT 7
  1009. u8 reserved0[3];
  1010. __le32 max_seq_size;
  1011. __le32 max_send_pdu_length;
  1012. __le32 max_recv_pdu_length;
  1013. __le32 first_seq_length;
  1014. __le32 exp_stat_sn;
  1015. union dif_configuration_params dif_on_imme_params;
  1016. };
  1017. /* iSCSI CQ element */
  1018. struct iscsi_cqe_common {
  1019. __le16 conn_id;
  1020. u8 cqe_type;
  1021. union cqe_error_status error_bitmap;
  1022. __le32 reserved[3];
  1023. union iscsi_task_hdr iscsi_hdr;
  1024. };
  1025. /* iSCSI CQ element */
  1026. struct iscsi_cqe_solicited {
  1027. __le16 conn_id;
  1028. u8 cqe_type;
  1029. union cqe_error_status error_bitmap;
  1030. __le16 itid;
  1031. u8 task_type;
  1032. u8 fw_dbg_field;
  1033. u8 caused_conn_err;
  1034. u8 reserved0[3];
  1035. __le32 data_truncated_bytes;
  1036. union iscsi_task_hdr iscsi_hdr;
  1037. };
  1038. /* iSCSI CQ element */
  1039. struct iscsi_cqe_unsolicited {
  1040. __le16 conn_id;
  1041. u8 cqe_type;
  1042. union cqe_error_status error_bitmap;
  1043. __le16 reserved0;
  1044. u8 reserved1;
  1045. u8 unsol_cqe_type;
  1046. __le16 rqe_opaque;
  1047. __le16 reserved2[3];
  1048. union iscsi_task_hdr iscsi_hdr;
  1049. };
  1050. /* iSCSI CQ element */
  1051. union iscsi_cqe {
  1052. struct iscsi_cqe_common cqe_common;
  1053. struct iscsi_cqe_solicited cqe_solicited;
  1054. struct iscsi_cqe_unsolicited cqe_unsolicited;
  1055. };
  1056. /* iSCSI CQE type */
  1057. enum iscsi_cqes_type {
  1058. ISCSI_CQE_TYPE_SOLICITED = 1,
  1059. ISCSI_CQE_TYPE_UNSOLICITED,
  1060. ISCSI_CQE_TYPE_SOLICITED_WITH_SENSE,
  1061. ISCSI_CQE_TYPE_TASK_CLEANUP,
  1062. ISCSI_CQE_TYPE_DUMMY,
  1063. MAX_ISCSI_CQES_TYPE
  1064. };
  1065. /* iSCSI CQE type */
  1066. enum iscsi_cqe_unsolicited_type {
  1067. ISCSI_CQE_UNSOLICITED_NONE,
  1068. ISCSI_CQE_UNSOLICITED_SINGLE,
  1069. ISCSI_CQE_UNSOLICITED_FIRST,
  1070. ISCSI_CQE_UNSOLICITED_MIDDLE,
  1071. ISCSI_CQE_UNSOLICITED_LAST,
  1072. MAX_ISCSI_CQE_UNSOLICITED_TYPE
  1073. };
  1074. /* iscsi debug modes */
  1075. struct iscsi_debug_modes {
  1076. u8 flags;
  1077. #define ISCSI_DEBUG_MODES_ASSERT_IF_RX_CONN_ERROR_MASK 0x1
  1078. #define ISCSI_DEBUG_MODES_ASSERT_IF_RX_CONN_ERROR_SHIFT 0
  1079. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_RESET_MASK 0x1
  1080. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_RESET_SHIFT 1
  1081. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_FIN_MASK 0x1
  1082. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_FIN_SHIFT 2
  1083. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_CLEANUP_MASK 0x1
  1084. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_CLEANUP_SHIFT 3
  1085. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_REJECT_OR_ASYNC_MASK 0x1
  1086. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_REJECT_OR_ASYNC_SHIFT 4
  1087. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_NOP_MASK 0x1
  1088. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_NOP_SHIFT 5
  1089. #define ISCSI_DEBUG_MODES_ASSERT_IF_DIF_OR_DATA_DIGEST_ERROR_MASK 0x1
  1090. #define ISCSI_DEBUG_MODES_ASSERT_IF_DIF_OR_DATA_DIGEST_ERROR_SHIFT 6
  1091. #define ISCSI_DEBUG_MODES_ASSERT_IF_HQ_CORRUPT_MASK 0x1
  1092. #define ISCSI_DEBUG_MODES_ASSERT_IF_HQ_CORRUPT_SHIFT 7
  1093. };
  1094. /* iSCSI kernel completion queue IDs */
  1095. enum iscsi_eqe_opcode {
  1096. ISCSI_EVENT_TYPE_INIT_FUNC = 0,
  1097. ISCSI_EVENT_TYPE_DESTROY_FUNC,
  1098. ISCSI_EVENT_TYPE_OFFLOAD_CONN,
  1099. ISCSI_EVENT_TYPE_UPDATE_CONN,
  1100. ISCSI_EVENT_TYPE_CLEAR_SQ,
  1101. ISCSI_EVENT_TYPE_TERMINATE_CONN,
  1102. ISCSI_EVENT_TYPE_MAC_UPDATE_CONN,
  1103. ISCSI_EVENT_TYPE_COLLECT_STATS_CONN,
  1104. ISCSI_EVENT_TYPE_ASYN_CONNECT_COMPLETE,
  1105. ISCSI_EVENT_TYPE_ASYN_TERMINATE_DONE,
  1106. ISCSI_EVENT_TYPE_START_OF_ERROR_TYPES = 10,
  1107. ISCSI_EVENT_TYPE_ASYN_ABORT_RCVD,
  1108. ISCSI_EVENT_TYPE_ASYN_CLOSE_RCVD,
  1109. ISCSI_EVENT_TYPE_ASYN_SYN_RCVD,
  1110. ISCSI_EVENT_TYPE_ASYN_MAX_RT_TIME,
  1111. ISCSI_EVENT_TYPE_ASYN_MAX_RT_CNT,
  1112. ISCSI_EVENT_TYPE_ASYN_MAX_KA_PROBES_CNT,
  1113. ISCSI_EVENT_TYPE_ASYN_FIN_WAIT2,
  1114. ISCSI_EVENT_TYPE_ISCSI_CONN_ERROR,
  1115. ISCSI_EVENT_TYPE_TCP_CONN_ERROR,
  1116. MAX_ISCSI_EQE_OPCODE
  1117. };
  1118. /* iSCSI EQE and CQE completion status */
  1119. enum iscsi_error_types {
  1120. ISCSI_STATUS_NONE = 0,
  1121. ISCSI_CQE_ERROR_UNSOLICITED_RCV_ON_INVALID_CONN = 1,
  1122. ISCSI_CONN_ERROR_TASK_CID_MISMATCH,
  1123. ISCSI_CONN_ERROR_TASK_NOT_VALID,
  1124. ISCSI_CONN_ERROR_RQ_RING_IS_FULL,
  1125. ISCSI_CONN_ERROR_CMDQ_RING_IS_FULL,
  1126. ISCSI_CONN_ERROR_HQE_CACHING_FAILED,
  1127. ISCSI_CONN_ERROR_HEADER_DIGEST_ERROR,
  1128. ISCSI_CONN_ERROR_LOCAL_COMPLETION_ERROR,
  1129. ISCSI_CONN_ERROR_DATA_OVERRUN,
  1130. ISCSI_CONN_ERROR_OUT_OF_SGES_ERROR,
  1131. ISCSI_CONN_ERROR_IP_OPTIONS_ERROR,
  1132. ISCSI_CONN_ERROR_PRS_ERRORS,
  1133. ISCSI_CONN_ERROR_CONNECT_INVALID_TCP_OPTION,
  1134. ISCSI_CONN_ERROR_TCP_IP_FRAGMENT_ERROR,
  1135. ISCSI_CONN_ERROR_PROTOCOL_ERR_AHS_LEN,
  1136. ISCSI_CONN_ERROR_PROTOCOL_ERR_AHS_TYPE,
  1137. ISCSI_CONN_ERROR_PROTOCOL_ERR_ITT_OUT_OF_RANGE,
  1138. ISCSI_CONN_ERROR_PROTOCOL_ERR_TTT_OUT_OF_RANGE,
  1139. ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SEG_LEN_EXCEEDS_PDU_SIZE,
  1140. ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_OPCODE,
  1141. ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_OPCODE_BEFORE_UPDATE,
  1142. ISCSI_CONN_ERROR_UNVALID_NOPIN_DSL,
  1143. ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_CARRIES_NO_DATA,
  1144. ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SN,
  1145. ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_IN_TTT,
  1146. ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_OUT_ITT,
  1147. ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_TTT,
  1148. ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_BUFFER_OFFSET,
  1149. ISCSI_CONN_ERROR_PROTOCOL_ERR_BUFFER_OFFSET_OOO,
  1150. ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_SN,
  1151. ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_0,
  1152. ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_1,
  1153. ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_2,
  1154. ISCSI_CONN_ERROR_PROTOCOL_ERR_LUN,
  1155. ISCSI_CONN_ERROR_PROTOCOL_ERR_F_BIT_ZERO,
  1156. ISCSI_CONN_ERROR_PROTOCOL_ERR_F_BIT_ZERO_S_BIT_ONE,
  1157. ISCSI_CONN_ERROR_PROTOCOL_ERR_EXP_STAT_SN,
  1158. ISCSI_CONN_ERROR_PROTOCOL_ERR_DSL_NOT_ZERO,
  1159. ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_DSL,
  1160. ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SEG_LEN_TOO_BIG,
  1161. ISCSI_CONN_ERROR_PROTOCOL_ERR_OUTSTANDING_R2T_COUNT,
  1162. ISCSI_CONN_ERROR_PROTOCOL_ERR_DIF_TX,
  1163. ISCSI_CONN_ERROR_SENSE_DATA_LENGTH,
  1164. ISCSI_CONN_ERROR_DATA_PLACEMENT_ERROR,
  1165. ISCSI_CONN_ERROR_INVALID_ITT,
  1166. ISCSI_ERROR_UNKNOWN,
  1167. MAX_ISCSI_ERROR_TYPES
  1168. };
  1169. /* iSCSI Ramrod Command IDs */
  1170. enum iscsi_ramrod_cmd_id {
  1171. ISCSI_RAMROD_CMD_ID_UNUSED = 0,
  1172. ISCSI_RAMROD_CMD_ID_INIT_FUNC = 1,
  1173. ISCSI_RAMROD_CMD_ID_DESTROY_FUNC = 2,
  1174. ISCSI_RAMROD_CMD_ID_OFFLOAD_CONN = 3,
  1175. ISCSI_RAMROD_CMD_ID_UPDATE_CONN = 4,
  1176. ISCSI_RAMROD_CMD_ID_TERMINATION_CONN = 5,
  1177. ISCSI_RAMROD_CMD_ID_CLEAR_SQ = 6,
  1178. ISCSI_RAMROD_CMD_ID_MAC_UPDATE = 7,
  1179. ISCSI_RAMROD_CMD_ID_CONN_STATS = 8,
  1180. MAX_ISCSI_RAMROD_CMD_ID
  1181. };
  1182. /* iSCSI connection termination request */
  1183. struct iscsi_spe_conn_mac_update {
  1184. struct iscsi_slow_path_hdr hdr;
  1185. __le16 conn_id;
  1186. __le32 fw_cid;
  1187. __le16 remote_mac_addr_lo;
  1188. __le16 remote_mac_addr_mid;
  1189. __le16 remote_mac_addr_hi;
  1190. u8 reserved0[2];
  1191. };
  1192. /* iSCSI and TCP connection (Option 1) offload params passed by driver to FW in
  1193. * iSCSI offload ramrod.
  1194. */
  1195. struct iscsi_spe_conn_offload {
  1196. struct iscsi_slow_path_hdr hdr;
  1197. __le16 conn_id;
  1198. __le32 fw_cid;
  1199. struct iscsi_conn_offload_params iscsi;
  1200. struct tcp_offload_params tcp;
  1201. };
  1202. /* iSCSI and TCP connection(Option 2) offload params passed by driver to FW in
  1203. * iSCSI offload ramrod.
  1204. */
  1205. struct iscsi_spe_conn_offload_option2 {
  1206. struct iscsi_slow_path_hdr hdr;
  1207. __le16 conn_id;
  1208. __le32 fw_cid;
  1209. struct iscsi_conn_offload_params iscsi;
  1210. struct tcp_offload_params_opt2 tcp;
  1211. };
  1212. /* iSCSI collect connection statistics request */
  1213. struct iscsi_spe_conn_statistics {
  1214. struct iscsi_slow_path_hdr hdr;
  1215. __le16 conn_id;
  1216. __le32 fw_cid;
  1217. u8 reset_stats;
  1218. u8 reserved0[7];
  1219. struct regpair stats_cnts_addr;
  1220. };
  1221. /* iSCSI connection termination request */
  1222. struct iscsi_spe_conn_termination {
  1223. struct iscsi_slow_path_hdr hdr;
  1224. __le16 conn_id;
  1225. __le32 fw_cid;
  1226. u8 abortive;
  1227. u8 reserved0[7];
  1228. struct regpair queue_cnts_addr;
  1229. struct regpair query_params_addr;
  1230. };
  1231. /* iSCSI firmware function destroy parameters */
  1232. struct iscsi_spe_func_dstry {
  1233. struct iscsi_slow_path_hdr hdr;
  1234. __le16 reserved0;
  1235. __le32 reserved1;
  1236. };
  1237. /* iSCSI firmware function init parameters */
  1238. struct iscsi_spe_func_init {
  1239. struct iscsi_slow_path_hdr hdr;
  1240. __le16 half_way_close_timeout;
  1241. u8 num_sq_pages_in_ring;
  1242. u8 num_r2tq_pages_in_ring;
  1243. u8 num_uhq_pages_in_ring;
  1244. u8 ll2_rx_queue_id;
  1245. u8 flags;
  1246. #define ISCSI_SPE_FUNC_INIT_COUNTERS_EN_MASK 0x1
  1247. #define ISCSI_SPE_FUNC_INIT_COUNTERS_EN_SHIFT 0
  1248. #define ISCSI_SPE_FUNC_INIT_RESERVED0_MASK 0x7F
  1249. #define ISCSI_SPE_FUNC_INIT_RESERVED0_SHIFT 1
  1250. struct iscsi_debug_modes debug_mode;
  1251. __le16 reserved1;
  1252. __le32 reserved2;
  1253. struct scsi_init_func_params func_params;
  1254. struct scsi_init_func_queues q_params;
  1255. };
  1256. /* iSCSI task type */
  1257. enum iscsi_task_type {
  1258. ISCSI_TASK_TYPE_INITIATOR_WRITE,
  1259. ISCSI_TASK_TYPE_INITIATOR_READ,
  1260. ISCSI_TASK_TYPE_MIDPATH,
  1261. ISCSI_TASK_TYPE_UNSOLIC,
  1262. ISCSI_TASK_TYPE_EXCHCLEANUP,
  1263. ISCSI_TASK_TYPE_IRRELEVANT,
  1264. ISCSI_TASK_TYPE_TARGET_WRITE,
  1265. ISCSI_TASK_TYPE_TARGET_READ,
  1266. ISCSI_TASK_TYPE_TARGET_RESPONSE,
  1267. ISCSI_TASK_TYPE_LOGIN_RESPONSE,
  1268. ISCSI_TASK_TYPE_TARGET_IMM_W_DIF,
  1269. MAX_ISCSI_TASK_TYPE
  1270. };
  1271. /* iSCSI DesiredDataTransferLength/ttt union */
  1272. union iscsi_ttt_txlen_union {
  1273. __le32 desired_tx_len;
  1274. __le32 ttt;
  1275. };
  1276. /* iSCSI uHQ element */
  1277. struct iscsi_uhqe {
  1278. __le32 reg1;
  1279. #define ISCSI_UHQE_PDU_PAYLOAD_LEN_MASK 0xFFFFF
  1280. #define ISCSI_UHQE_PDU_PAYLOAD_LEN_SHIFT 0
  1281. #define ISCSI_UHQE_LOCAL_COMP_MASK 0x1
  1282. #define ISCSI_UHQE_LOCAL_COMP_SHIFT 20
  1283. #define ISCSI_UHQE_TOGGLE_BIT_MASK 0x1
  1284. #define ISCSI_UHQE_TOGGLE_BIT_SHIFT 21
  1285. #define ISCSI_UHQE_PURE_PAYLOAD_MASK 0x1
  1286. #define ISCSI_UHQE_PURE_PAYLOAD_SHIFT 22
  1287. #define ISCSI_UHQE_LOGIN_RESPONSE_PDU_MASK 0x1
  1288. #define ISCSI_UHQE_LOGIN_RESPONSE_PDU_SHIFT 23
  1289. #define ISCSI_UHQE_TASK_ID_HI_MASK 0xFF
  1290. #define ISCSI_UHQE_TASK_ID_HI_SHIFT 24
  1291. __le32 reg2;
  1292. #define ISCSI_UHQE_BUFFER_OFFSET_MASK 0xFFFFFF
  1293. #define ISCSI_UHQE_BUFFER_OFFSET_SHIFT 0
  1294. #define ISCSI_UHQE_TASK_ID_LO_MASK 0xFF
  1295. #define ISCSI_UHQE_TASK_ID_LO_SHIFT 24
  1296. };
  1297. /* iSCSI WQ element */
  1298. struct iscsi_wqe {
  1299. __le16 task_id;
  1300. u8 flags;
  1301. #define ISCSI_WQE_WQE_TYPE_MASK 0x7
  1302. #define ISCSI_WQE_WQE_TYPE_SHIFT 0
  1303. #define ISCSI_WQE_NUM_SGES_MASK 0xF
  1304. #define ISCSI_WQE_NUM_SGES_SHIFT 3
  1305. #define ISCSI_WQE_RESPONSE_MASK 0x1
  1306. #define ISCSI_WQE_RESPONSE_SHIFT 7
  1307. struct iscsi_dif_flags prot_flags;
  1308. __le32 contlen_cdbsize;
  1309. #define ISCSI_WQE_CONT_LEN_MASK 0xFFFFFF
  1310. #define ISCSI_WQE_CONT_LEN_SHIFT 0
  1311. #define ISCSI_WQE_CDB_SIZE_MASK 0xFF
  1312. #define ISCSI_WQE_CDB_SIZE_SHIFT 24
  1313. };
  1314. /* iSCSI wqe type */
  1315. enum iscsi_wqe_type {
  1316. ISCSI_WQE_TYPE_NORMAL,
  1317. ISCSI_WQE_TYPE_TASK_CLEANUP,
  1318. ISCSI_WQE_TYPE_MIDDLE_PATH,
  1319. ISCSI_WQE_TYPE_LOGIN,
  1320. ISCSI_WQE_TYPE_FIRST_R2T_CONT,
  1321. ISCSI_WQE_TYPE_NONFIRST_R2T_CONT,
  1322. ISCSI_WQE_TYPE_RESPONSE,
  1323. MAX_ISCSI_WQE_TYPE
  1324. };
  1325. /* iSCSI xHQ element */
  1326. struct iscsi_xhqe {
  1327. union iscsi_ttt_txlen_union ttt_or_txlen;
  1328. __le32 exp_stat_sn;
  1329. struct iscsi_dif_flags prot_flags;
  1330. u8 total_ahs_length;
  1331. u8 opcode;
  1332. u8 flags;
  1333. #define ISCSI_XHQE_FINAL_MASK 0x1
  1334. #define ISCSI_XHQE_FINAL_SHIFT 0
  1335. #define ISCSI_XHQE_STATUS_BIT_MASK 0x1
  1336. #define ISCSI_XHQE_STATUS_BIT_SHIFT 1
  1337. #define ISCSI_XHQE_NUM_SGES_MASK 0xF
  1338. #define ISCSI_XHQE_NUM_SGES_SHIFT 2
  1339. #define ISCSI_XHQE_RESERVED0_MASK 0x3
  1340. #define ISCSI_XHQE_RESERVED0_SHIFT 6
  1341. union iscsi_seq_num seq_num;
  1342. __le16 reserved1;
  1343. };
  1344. /* Per PF iSCSI receive path statistics - mStorm RAM structure */
  1345. struct mstorm_iscsi_stats_drv {
  1346. struct regpair iscsi_rx_dropped_pdus_task_not_valid;
  1347. struct regpair iscsi_rx_dup_ack_cnt;
  1348. };
  1349. /* Per PF iSCSI transmit path statistics - pStorm RAM structure */
  1350. struct pstorm_iscsi_stats_drv {
  1351. struct regpair iscsi_tx_bytes_cnt;
  1352. struct regpair iscsi_tx_packet_cnt;
  1353. };
  1354. /* Per PF iSCSI receive path statistics - tStorm RAM structure */
  1355. struct tstorm_iscsi_stats_drv {
  1356. struct regpair iscsi_rx_bytes_cnt;
  1357. struct regpair iscsi_rx_packet_cnt;
  1358. struct regpair iscsi_rx_new_ooo_isle_events_cnt;
  1359. struct regpair iscsi_rx_tcp_payload_bytes_cnt;
  1360. struct regpair iscsi_rx_tcp_pkt_cnt;
  1361. struct regpair iscsi_rx_pure_ack_cnt;
  1362. __le32 iscsi_cmdq_threshold_cnt;
  1363. __le32 iscsi_rq_threshold_cnt;
  1364. __le32 iscsi_immq_threshold_cnt;
  1365. };
  1366. /* Per PF iSCSI receive path statistics - uStorm RAM structure */
  1367. struct ustorm_iscsi_stats_drv {
  1368. struct regpair iscsi_rx_data_pdu_cnt;
  1369. struct regpair iscsi_rx_r2t_pdu_cnt;
  1370. struct regpair iscsi_rx_total_pdu_cnt;
  1371. };
  1372. /* Per PF iSCSI transmit path statistics - xStorm RAM structure */
  1373. struct xstorm_iscsi_stats_drv {
  1374. struct regpair iscsi_tx_go_to_slow_start_event_cnt;
  1375. struct regpair iscsi_tx_fast_retransmit_event_cnt;
  1376. struct regpair iscsi_tx_pure_ack_cnt;
  1377. struct regpair iscsi_tx_delayed_ack_cnt;
  1378. };
  1379. /* Per PF iSCSI transmit path statistics - yStorm RAM structure */
  1380. struct ystorm_iscsi_stats_drv {
  1381. struct regpair iscsi_tx_data_pdu_cnt;
  1382. struct regpair iscsi_tx_r2t_pdu_cnt;
  1383. struct regpair iscsi_tx_total_pdu_cnt;
  1384. struct regpair iscsi_tx_tcp_payload_bytes_cnt;
  1385. struct regpair iscsi_tx_tcp_pkt_cnt;
  1386. };
  1387. struct e4_tstorm_iscsi_task_ag_ctx {
  1388. u8 byte0;
  1389. u8 byte1;
  1390. __le16 word0;
  1391. u8 flags0;
  1392. #define E4_TSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_MASK 0xF
  1393. #define E4_TSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_SHIFT 0
  1394. #define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT0_MASK 0x1
  1395. #define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT0_SHIFT 4
  1396. #define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT1_MASK 0x1
  1397. #define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT 5
  1398. #define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT2_MASK 0x1
  1399. #define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT2_SHIFT 6
  1400. #define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT3_MASK 0x1
  1401. #define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT3_SHIFT 7
  1402. u8 flags1;
  1403. #define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT4_MASK 0x1
  1404. #define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT4_SHIFT 0
  1405. #define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT5_MASK 0x1
  1406. #define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT5_SHIFT 1
  1407. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0_MASK 0x3
  1408. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0_SHIFT 2
  1409. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1_MASK 0x3
  1410. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT 4
  1411. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2_MASK 0x3
  1412. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2_SHIFT 6
  1413. u8 flags2;
  1414. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3_MASK 0x3
  1415. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3_SHIFT 0
  1416. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4_MASK 0x3
  1417. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4_SHIFT 2
  1418. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5_MASK 0x3
  1419. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5_SHIFT 4
  1420. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6_MASK 0x3
  1421. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6_SHIFT 6
  1422. u8 flags3;
  1423. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7_MASK 0x3
  1424. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7_SHIFT 0
  1425. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0EN_MASK 0x1
  1426. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0EN_SHIFT 2
  1427. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK 0x1
  1428. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT 3
  1429. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2EN_MASK 0x1
  1430. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2EN_SHIFT 4
  1431. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3EN_MASK 0x1
  1432. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3EN_SHIFT 5
  1433. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4EN_MASK 0x1
  1434. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4EN_SHIFT 6
  1435. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5EN_MASK 0x1
  1436. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5EN_SHIFT 7
  1437. u8 flags4;
  1438. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6EN_MASK 0x1
  1439. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6EN_SHIFT 0
  1440. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7EN_MASK 0x1
  1441. #define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7EN_SHIFT 1
  1442. #define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK 0x1
  1443. #define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT 2
  1444. #define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1
  1445. #define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 3
  1446. #define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK 0x1
  1447. #define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT 4
  1448. #define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1
  1449. #define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 5
  1450. #define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1
  1451. #define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 6
  1452. #define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1
  1453. #define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 7
  1454. u8 byte2;
  1455. __le16 word1;
  1456. __le32 reg0;
  1457. u8 byte3;
  1458. u8 byte4;
  1459. __le16 word2;
  1460. __le16 word3;
  1461. __le16 word4;
  1462. __le32 reg1;
  1463. __le32 reg2;
  1464. };
  1465. /* iSCSI doorbell data */
  1466. struct iscsi_db_data {
  1467. u8 params;
  1468. #define ISCSI_DB_DATA_DEST_MASK 0x3
  1469. #define ISCSI_DB_DATA_DEST_SHIFT 0
  1470. #define ISCSI_DB_DATA_AGG_CMD_MASK 0x3
  1471. #define ISCSI_DB_DATA_AGG_CMD_SHIFT 2
  1472. #define ISCSI_DB_DATA_BYPASS_EN_MASK 0x1
  1473. #define ISCSI_DB_DATA_BYPASS_EN_SHIFT 4
  1474. #define ISCSI_DB_DATA_RESERVED_MASK 0x1
  1475. #define ISCSI_DB_DATA_RESERVED_SHIFT 5
  1476. #define ISCSI_DB_DATA_AGG_VAL_SEL_MASK 0x3
  1477. #define ISCSI_DB_DATA_AGG_VAL_SEL_SHIFT 6
  1478. u8 agg_flags;
  1479. __le16 sq_prod;
  1480. };
  1481. #endif /* __ISCSI_COMMON__ */