iscsi_common.h 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441
  1. /* QLogic qed NIC Driver
  2. * Copyright (c) 2015 QLogic Corporation
  3. *
  4. * This software is available under the terms of the GNU General Public License
  5. * (GPL) Version 2, available from the file COPYING in the main directory of
  6. * this source tree.
  7. */
  8. #ifndef __ISCSI_COMMON__
  9. #define __ISCSI_COMMON__
  10. /**********************/
  11. /* ISCSI FW CONSTANTS */
  12. /**********************/
  13. /* iSCSI HSI constants */
  14. #define ISCSI_DEFAULT_MTU (1500)
  15. /* Current iSCSI HSI version number composed of two fields (16 bit) */
  16. #define ISCSI_HSI_MAJOR_VERSION (0)
  17. #define ISCSI_HSI_MINOR_VERSION (0)
  18. /* KWQ (kernel work queue) layer codes */
  19. #define ISCSI_SLOW_PATH_LAYER_CODE (6)
  20. /* CQE completion status */
  21. #define ISCSI_EQE_COMPLETION_SUCCESS (0x0)
  22. #define ISCSI_EQE_RST_CONN_RCVD (0x1)
  23. /* iSCSI parameter defaults */
  24. #define ISCSI_DEFAULT_HEADER_DIGEST (0)
  25. #define ISCSI_DEFAULT_DATA_DIGEST (0)
  26. #define ISCSI_DEFAULT_INITIAL_R2T (1)
  27. #define ISCSI_DEFAULT_IMMEDIATE_DATA (1)
  28. #define ISCSI_DEFAULT_MAX_PDU_LENGTH (0x2000)
  29. #define ISCSI_DEFAULT_FIRST_BURST_LENGTH (0x10000)
  30. #define ISCSI_DEFAULT_MAX_BURST_LENGTH (0x40000)
  31. #define ISCSI_DEFAULT_MAX_OUTSTANDING_R2T (1)
  32. /* iSCSI parameter limits */
  33. #define ISCSI_MIN_VAL_MAX_PDU_LENGTH (0x200)
  34. #define ISCSI_MAX_VAL_MAX_PDU_LENGTH (0xffffff)
  35. #define ISCSI_MIN_VAL_BURST_LENGTH (0x200)
  36. #define ISCSI_MAX_VAL_BURST_LENGTH (0xffffff)
  37. #define ISCSI_MIN_VAL_MAX_OUTSTANDING_R2T (1)
  38. #define ISCSI_MAX_VAL_MAX_OUTSTANDING_R2T (0xff)
  39. /* iSCSI reserved params */
  40. #define ISCSI_ITT_ALL_ONES (0xffffffff)
  41. #define ISCSI_TTT_ALL_ONES (0xffffffff)
  42. #define ISCSI_OPTION_1_OFF_CHIP_TCP 1
  43. #define ISCSI_OPTION_2_ON_CHIP_TCP 2
  44. #define ISCSI_INITIATOR_MODE 0
  45. #define ISCSI_TARGET_MODE 1
  46. /* iSCSI request op codes */
  47. #define ISCSI_OPCODE_NOP_OUT_NO_IMM (0)
  48. #define ISCSI_OPCODE_NOP_OUT ( \
  49. ISCSI_OPCODE_NOP_OUT_NO_IMM | 0x40)
  50. #define ISCSI_OPCODE_SCSI_CMD_NO_IMM (1)
  51. #define ISCSI_OPCODE_SCSI_CMD ( \
  52. ISCSI_OPCODE_SCSI_CMD_NO_IMM | 0x40)
  53. #define ISCSI_OPCODE_TMF_REQUEST_NO_IMM (2)
  54. #define ISCSI_OPCODE_TMF_REQUEST ( \
  55. ISCSI_OPCODE_TMF_REQUEST_NO_IMM | 0x40)
  56. #define ISCSI_OPCODE_LOGIN_REQUEST_NO_IMM (3)
  57. #define ISCSI_OPCODE_LOGIN_REQUEST ( \
  58. ISCSI_OPCODE_LOGIN_REQUEST_NO_IMM | 0x40)
  59. #define ISCSI_OPCODE_TEXT_REQUEST_NO_IMM (4)
  60. #define ISCSI_OPCODE_TEXT_REQUEST ( \
  61. ISCSI_OPCODE_TEXT_REQUEST_NO_IMM | 0x40)
  62. #define ISCSI_OPCODE_DATA_OUT (5)
  63. #define ISCSI_OPCODE_LOGOUT_REQUEST_NO_IMM (6)
  64. #define ISCSI_OPCODE_LOGOUT_REQUEST ( \
  65. ISCSI_OPCODE_LOGOUT_REQUEST_NO_IMM | 0x40)
  66. /* iSCSI response/messages op codes */
  67. #define ISCSI_OPCODE_NOP_IN (0x20)
  68. #define ISCSI_OPCODE_SCSI_RESPONSE (0x21)
  69. #define ISCSI_OPCODE_TMF_RESPONSE (0x22)
  70. #define ISCSI_OPCODE_LOGIN_RESPONSE (0x23)
  71. #define ISCSI_OPCODE_TEXT_RESPONSE (0x24)
  72. #define ISCSI_OPCODE_DATA_IN (0x25)
  73. #define ISCSI_OPCODE_LOGOUT_RESPONSE (0x26)
  74. #define ISCSI_OPCODE_R2T (0x31)
  75. #define ISCSI_OPCODE_ASYNC_MSG (0x32)
  76. #define ISCSI_OPCODE_REJECT (0x3f)
  77. /* iSCSI stages */
  78. #define ISCSI_STAGE_SECURITY_NEGOTIATION (0)
  79. #define ISCSI_STAGE_LOGIN_OPERATIONAL_NEGOTIATION (1)
  80. #define ISCSI_STAGE_FULL_FEATURE_PHASE (3)
  81. /* iSCSI CQE errors */
  82. #define CQE_ERROR_BITMAP_DATA_DIGEST (0x08)
  83. #define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN (0x10)
  84. #define CQE_ERROR_BITMAP_DATA_TRUNCATED (0x20)
  85. struct cqe_error_bitmap {
  86. u8 cqe_error_status_bits;
  87. #define CQE_ERROR_BITMAP_DIF_ERR_BITS_MASK 0x7
  88. #define CQE_ERROR_BITMAP_DIF_ERR_BITS_SHIFT 0
  89. #define CQE_ERROR_BITMAP_DATA_DIGEST_ERR_MASK 0x1
  90. #define CQE_ERROR_BITMAP_DATA_DIGEST_ERR_SHIFT 3
  91. #define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN_MASK 0x1
  92. #define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN_SHIFT 4
  93. #define CQE_ERROR_BITMAP_DATA_TRUNCATED_ERR_MASK 0x1
  94. #define CQE_ERROR_BITMAP_DATA_TRUNCATED_ERR_SHIFT 5
  95. #define CQE_ERROR_BITMAP_UNDER_RUN_ERR_MASK 0x1
  96. #define CQE_ERROR_BITMAP_UNDER_RUN_ERR_SHIFT 6
  97. #define CQE_ERROR_BITMAP_RESERVED2_MASK 0x1
  98. #define CQE_ERROR_BITMAP_RESERVED2_SHIFT 7
  99. };
  100. union cqe_error_status {
  101. u8 error_status;
  102. struct cqe_error_bitmap error_bits;
  103. };
  104. struct data_hdr {
  105. __le32 data[12];
  106. };
  107. struct iscsi_async_msg_hdr {
  108. __le16 reserved0;
  109. u8 flags_attr;
  110. #define ISCSI_ASYNC_MSG_HDR_RSRV_MASK 0x7F
  111. #define ISCSI_ASYNC_MSG_HDR_RSRV_SHIFT 0
  112. #define ISCSI_ASYNC_MSG_HDR_CONST1_MASK 0x1
  113. #define ISCSI_ASYNC_MSG_HDR_CONST1_SHIFT 7
  114. u8 opcode;
  115. __le32 hdr_second_dword;
  116. #define ISCSI_ASYNC_MSG_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  117. #define ISCSI_ASYNC_MSG_HDR_DATA_SEG_LEN_SHIFT 0
  118. #define ISCSI_ASYNC_MSG_HDR_TOTAL_AHS_LEN_MASK 0xFF
  119. #define ISCSI_ASYNC_MSG_HDR_TOTAL_AHS_LEN_SHIFT 24
  120. struct regpair lun;
  121. __le32 all_ones;
  122. __le32 reserved1;
  123. __le32 stat_sn;
  124. __le32 exp_cmd_sn;
  125. __le32 max_cmd_sn;
  126. __le16 param1_rsrv;
  127. u8 async_vcode;
  128. u8 async_event;
  129. __le16 param3_rsrv;
  130. __le16 param2_rsrv;
  131. __le32 reserved7;
  132. };
  133. struct iscsi_sge {
  134. struct regpair sge_addr;
  135. __le16 sge_len;
  136. __le16 reserved0;
  137. __le32 reserved1;
  138. };
  139. struct iscsi_cached_sge_ctx {
  140. struct iscsi_sge sge;
  141. struct regpair reserved;
  142. __le32 dsgl_curr_offset[2];
  143. };
  144. struct iscsi_cmd_hdr {
  145. __le16 reserved1;
  146. u8 flags_attr;
  147. #define ISCSI_CMD_HDR_ATTR_MASK 0x7
  148. #define ISCSI_CMD_HDR_ATTR_SHIFT 0
  149. #define ISCSI_CMD_HDR_RSRV_MASK 0x3
  150. #define ISCSI_CMD_HDR_RSRV_SHIFT 3
  151. #define ISCSI_CMD_HDR_WRITE_MASK 0x1
  152. #define ISCSI_CMD_HDR_WRITE_SHIFT 5
  153. #define ISCSI_CMD_HDR_READ_MASK 0x1
  154. #define ISCSI_CMD_HDR_READ_SHIFT 6
  155. #define ISCSI_CMD_HDR_FINAL_MASK 0x1
  156. #define ISCSI_CMD_HDR_FINAL_SHIFT 7
  157. u8 opcode;
  158. __le32 hdr_second_dword;
  159. #define ISCSI_CMD_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  160. #define ISCSI_CMD_HDR_DATA_SEG_LEN_SHIFT 0
  161. #define ISCSI_CMD_HDR_TOTAL_AHS_LEN_MASK 0xFF
  162. #define ISCSI_CMD_HDR_TOTAL_AHS_LEN_SHIFT 24
  163. struct regpair lun;
  164. __le32 itt;
  165. __le32 expected_transfer_length;
  166. __le32 cmd_sn;
  167. __le32 exp_stat_sn;
  168. __le32 cdb[4];
  169. };
  170. struct iscsi_common_hdr {
  171. u8 hdr_status;
  172. u8 hdr_response;
  173. u8 hdr_flags;
  174. u8 hdr_first_byte;
  175. #define ISCSI_COMMON_HDR_OPCODE_MASK 0x3F
  176. #define ISCSI_COMMON_HDR_OPCODE_SHIFT 0
  177. #define ISCSI_COMMON_HDR_IMM_MASK 0x1
  178. #define ISCSI_COMMON_HDR_IMM_SHIFT 6
  179. #define ISCSI_COMMON_HDR_RSRV_MASK 0x1
  180. #define ISCSI_COMMON_HDR_RSRV_SHIFT 7
  181. __le32 hdr_second_dword;
  182. #define ISCSI_COMMON_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  183. #define ISCSI_COMMON_HDR_DATA_SEG_LEN_SHIFT 0
  184. #define ISCSI_COMMON_HDR_TOTAL_AHS_LEN_MASK 0xFF
  185. #define ISCSI_COMMON_HDR_TOTAL_AHS_LEN_SHIFT 24
  186. __le32 lun_reserved[4];
  187. __le32 data[6];
  188. };
  189. struct iscsi_conn_offload_params {
  190. struct regpair sq_pbl_addr;
  191. struct regpair r2tq_pbl_addr;
  192. struct regpair xhq_pbl_addr;
  193. struct regpair uhq_pbl_addr;
  194. __le32 initial_ack;
  195. __le16 physical_q0;
  196. __le16 physical_q1;
  197. u8 flags;
  198. #define ISCSI_CONN_OFFLOAD_PARAMS_TCP_ON_CHIP_1B_MASK 0x1
  199. #define ISCSI_CONN_OFFLOAD_PARAMS_TCP_ON_CHIP_1B_SHIFT 0
  200. #define ISCSI_CONN_OFFLOAD_PARAMS_TARGET_MODE_MASK 0x1
  201. #define ISCSI_CONN_OFFLOAD_PARAMS_TARGET_MODE_SHIFT 1
  202. #define ISCSI_CONN_OFFLOAD_PARAMS_RESERVED1_MASK 0x3F
  203. #define ISCSI_CONN_OFFLOAD_PARAMS_RESERVED1_SHIFT 2
  204. u8 pbl_page_size_log;
  205. u8 pbe_page_size_log;
  206. u8 default_cq;
  207. __le32 stat_sn;
  208. };
  209. struct iscsi_slow_path_hdr {
  210. u8 op_code;
  211. u8 flags;
  212. #define ISCSI_SLOW_PATH_HDR_RESERVED0_MASK 0xF
  213. #define ISCSI_SLOW_PATH_HDR_RESERVED0_SHIFT 0
  214. #define ISCSI_SLOW_PATH_HDR_LAYER_CODE_MASK 0x7
  215. #define ISCSI_SLOW_PATH_HDR_LAYER_CODE_SHIFT 4
  216. #define ISCSI_SLOW_PATH_HDR_RESERVED1_MASK 0x1
  217. #define ISCSI_SLOW_PATH_HDR_RESERVED1_SHIFT 7
  218. };
  219. struct iscsi_conn_update_ramrod_params {
  220. struct iscsi_slow_path_hdr hdr;
  221. __le16 conn_id;
  222. __le32 fw_cid;
  223. u8 flags;
  224. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_HD_EN_MASK 0x1
  225. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_HD_EN_SHIFT 0
  226. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DD_EN_MASK 0x1
  227. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DD_EN_SHIFT 1
  228. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_INITIAL_R2T_MASK 0x1
  229. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_INITIAL_R2T_SHIFT 2
  230. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_IMMEDIATE_DATA_MASK 0x1
  231. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_IMMEDIATE_DATA_SHIFT 3
  232. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_RESERVED1_MASK 0xF
  233. #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_RESERVED1_SHIFT 4
  234. u8 reserved0[3];
  235. __le32 max_seq_size;
  236. __le32 max_send_pdu_length;
  237. __le32 max_recv_pdu_length;
  238. __le32 first_seq_length;
  239. __le32 exp_stat_sn;
  240. };
  241. struct iscsi_ext_cdb_cmd_hdr {
  242. __le16 reserved1;
  243. u8 flags_attr;
  244. #define ISCSI_EXT_CDB_CMD_HDR_ATTR_MASK 0x7
  245. #define ISCSI_EXT_CDB_CMD_HDR_ATTR_SHIFT 0
  246. #define ISCSI_EXT_CDB_CMD_HDR_RSRV_MASK 0x3
  247. #define ISCSI_EXT_CDB_CMD_HDR_RSRV_SHIFT 3
  248. #define ISCSI_EXT_CDB_CMD_HDR_WRITE_MASK 0x1
  249. #define ISCSI_EXT_CDB_CMD_HDR_WRITE_SHIFT 5
  250. #define ISCSI_EXT_CDB_CMD_HDR_READ_MASK 0x1
  251. #define ISCSI_EXT_CDB_CMD_HDR_READ_SHIFT 6
  252. #define ISCSI_EXT_CDB_CMD_HDR_FINAL_MASK 0x1
  253. #define ISCSI_EXT_CDB_CMD_HDR_FINAL_SHIFT 7
  254. u8 opcode;
  255. __le32 hdr_second_dword;
  256. #define ISCSI_EXT_CDB_CMD_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  257. #define ISCSI_EXT_CDB_CMD_HDR_DATA_SEG_LEN_SHIFT 0
  258. #define ISCSI_EXT_CDB_CMD_HDR_CDB_SIZE_MASK 0xFF
  259. #define ISCSI_EXT_CDB_CMD_HDR_CDB_SIZE_SHIFT 24
  260. struct regpair lun;
  261. __le32 itt;
  262. __le32 expected_transfer_length;
  263. __le32 cmd_sn;
  264. __le32 exp_stat_sn;
  265. struct iscsi_sge cdb_sge;
  266. };
  267. struct iscsi_login_req_hdr {
  268. u8 version_min;
  269. u8 version_max;
  270. u8 flags_attr;
  271. #define ISCSI_LOGIN_REQ_HDR_NSG_MASK 0x3
  272. #define ISCSI_LOGIN_REQ_HDR_NSG_SHIFT 0
  273. #define ISCSI_LOGIN_REQ_HDR_CSG_MASK 0x3
  274. #define ISCSI_LOGIN_REQ_HDR_CSG_SHIFT 2
  275. #define ISCSI_LOGIN_REQ_HDR_RSRV_MASK 0x3
  276. #define ISCSI_LOGIN_REQ_HDR_RSRV_SHIFT 4
  277. #define ISCSI_LOGIN_REQ_HDR_C_MASK 0x1
  278. #define ISCSI_LOGIN_REQ_HDR_C_SHIFT 6
  279. #define ISCSI_LOGIN_REQ_HDR_T_MASK 0x1
  280. #define ISCSI_LOGIN_REQ_HDR_T_SHIFT 7
  281. u8 opcode;
  282. __le32 hdr_second_dword;
  283. #define ISCSI_LOGIN_REQ_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  284. #define ISCSI_LOGIN_REQ_HDR_DATA_SEG_LEN_SHIFT 0
  285. #define ISCSI_LOGIN_REQ_HDR_TOTAL_AHS_LEN_MASK 0xFF
  286. #define ISCSI_LOGIN_REQ_HDR_TOTAL_AHS_LEN_SHIFT 24
  287. __le32 isid_tabc;
  288. __le16 tsih;
  289. __le16 isid_d;
  290. __le32 itt;
  291. __le16 reserved1;
  292. __le16 cid;
  293. __le32 cmd_sn;
  294. __le32 exp_stat_sn;
  295. __le32 reserved2[4];
  296. };
  297. struct iscsi_logout_req_hdr {
  298. __le16 reserved0;
  299. u8 reason_code;
  300. u8 opcode;
  301. __le32 reserved1;
  302. __le32 reserved2[2];
  303. __le32 itt;
  304. __le16 reserved3;
  305. __le16 cid;
  306. __le32 cmd_sn;
  307. __le32 exp_stat_sn;
  308. __le32 reserved4[4];
  309. };
  310. struct iscsi_data_out_hdr {
  311. __le16 reserved1;
  312. u8 flags_attr;
  313. #define ISCSI_DATA_OUT_HDR_RSRV_MASK 0x7F
  314. #define ISCSI_DATA_OUT_HDR_RSRV_SHIFT 0
  315. #define ISCSI_DATA_OUT_HDR_FINAL_MASK 0x1
  316. #define ISCSI_DATA_OUT_HDR_FINAL_SHIFT 7
  317. u8 opcode;
  318. __le32 reserved2;
  319. struct regpair lun;
  320. __le32 itt;
  321. __le32 ttt;
  322. __le32 reserved3;
  323. __le32 exp_stat_sn;
  324. __le32 reserved4;
  325. __le32 data_sn;
  326. __le32 buffer_offset;
  327. __le32 reserved5;
  328. };
  329. struct iscsi_data_in_hdr {
  330. u8 status_rsvd;
  331. u8 reserved1;
  332. u8 flags;
  333. #define ISCSI_DATA_IN_HDR_STATUS_MASK 0x1
  334. #define ISCSI_DATA_IN_HDR_STATUS_SHIFT 0
  335. #define ISCSI_DATA_IN_HDR_UNDERFLOW_MASK 0x1
  336. #define ISCSI_DATA_IN_HDR_UNDERFLOW_SHIFT 1
  337. #define ISCSI_DATA_IN_HDR_OVERFLOW_MASK 0x1
  338. #define ISCSI_DATA_IN_HDR_OVERFLOW_SHIFT 2
  339. #define ISCSI_DATA_IN_HDR_RSRV_MASK 0x7
  340. #define ISCSI_DATA_IN_HDR_RSRV_SHIFT 3
  341. #define ISCSI_DATA_IN_HDR_ACK_MASK 0x1
  342. #define ISCSI_DATA_IN_HDR_ACK_SHIFT 6
  343. #define ISCSI_DATA_IN_HDR_FINAL_MASK 0x1
  344. #define ISCSI_DATA_IN_HDR_FINAL_SHIFT 7
  345. u8 opcode;
  346. __le32 reserved2;
  347. struct regpair lun;
  348. __le32 itt;
  349. __le32 ttt;
  350. __le32 stat_sn;
  351. __le32 exp_cmd_sn;
  352. __le32 max_cmd_sn;
  353. __le32 data_sn;
  354. __le32 buffer_offset;
  355. __le32 residual_count;
  356. };
  357. struct iscsi_r2t_hdr {
  358. u8 reserved0[3];
  359. u8 opcode;
  360. __le32 reserved2;
  361. struct regpair lun;
  362. __le32 itt;
  363. __le32 ttt;
  364. __le32 stat_sn;
  365. __le32 exp_cmd_sn;
  366. __le32 max_cmd_sn;
  367. __le32 r2t_sn;
  368. __le32 buffer_offset;
  369. __le32 desired_data_trns_len;
  370. };
  371. struct iscsi_nop_out_hdr {
  372. __le16 reserved1;
  373. u8 flags_attr;
  374. #define ISCSI_NOP_OUT_HDR_RSRV_MASK 0x7F
  375. #define ISCSI_NOP_OUT_HDR_RSRV_SHIFT 0
  376. #define ISCSI_NOP_OUT_HDR_CONST1_MASK 0x1
  377. #define ISCSI_NOP_OUT_HDR_CONST1_SHIFT 7
  378. u8 opcode;
  379. __le32 reserved2;
  380. struct regpair lun;
  381. __le32 itt;
  382. __le32 ttt;
  383. __le32 cmd_sn;
  384. __le32 exp_stat_sn;
  385. __le32 reserved3;
  386. __le32 reserved4;
  387. __le32 reserved5;
  388. __le32 reserved6;
  389. };
  390. struct iscsi_nop_in_hdr {
  391. __le16 reserved0;
  392. u8 flags_attr;
  393. #define ISCSI_NOP_IN_HDR_RSRV_MASK 0x7F
  394. #define ISCSI_NOP_IN_HDR_RSRV_SHIFT 0
  395. #define ISCSI_NOP_IN_HDR_CONST1_MASK 0x1
  396. #define ISCSI_NOP_IN_HDR_CONST1_SHIFT 7
  397. u8 opcode;
  398. __le32 hdr_second_dword;
  399. #define ISCSI_NOP_IN_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  400. #define ISCSI_NOP_IN_HDR_DATA_SEG_LEN_SHIFT 0
  401. #define ISCSI_NOP_IN_HDR_TOTAL_AHS_LEN_MASK 0xFF
  402. #define ISCSI_NOP_IN_HDR_TOTAL_AHS_LEN_SHIFT 24
  403. struct regpair lun;
  404. __le32 itt;
  405. __le32 ttt;
  406. __le32 stat_sn;
  407. __le32 exp_cmd_sn;
  408. __le32 max_cmd_sn;
  409. __le32 reserved5;
  410. __le32 reserved6;
  411. __le32 reserved7;
  412. };
  413. struct iscsi_login_response_hdr {
  414. u8 version_active;
  415. u8 version_max;
  416. u8 flags_attr;
  417. #define ISCSI_LOGIN_RESPONSE_HDR_NSG_MASK 0x3
  418. #define ISCSI_LOGIN_RESPONSE_HDR_NSG_SHIFT 0
  419. #define ISCSI_LOGIN_RESPONSE_HDR_CSG_MASK 0x3
  420. #define ISCSI_LOGIN_RESPONSE_HDR_CSG_SHIFT 2
  421. #define ISCSI_LOGIN_RESPONSE_HDR_RSRV_MASK 0x3
  422. #define ISCSI_LOGIN_RESPONSE_HDR_RSRV_SHIFT 4
  423. #define ISCSI_LOGIN_RESPONSE_HDR_C_MASK 0x1
  424. #define ISCSI_LOGIN_RESPONSE_HDR_C_SHIFT 6
  425. #define ISCSI_LOGIN_RESPONSE_HDR_T_MASK 0x1
  426. #define ISCSI_LOGIN_RESPONSE_HDR_T_SHIFT 7
  427. u8 opcode;
  428. __le32 hdr_second_dword;
  429. #define ISCSI_LOGIN_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  430. #define ISCSI_LOGIN_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
  431. #define ISCSI_LOGIN_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
  432. #define ISCSI_LOGIN_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
  433. __le32 isid_tabc;
  434. __le16 tsih;
  435. __le16 isid_d;
  436. __le32 itt;
  437. __le32 reserved1;
  438. __le32 stat_sn;
  439. __le32 exp_cmd_sn;
  440. __le32 max_cmd_sn;
  441. __le16 reserved2;
  442. u8 status_detail;
  443. u8 status_class;
  444. __le32 reserved4[2];
  445. };
  446. struct iscsi_logout_response_hdr {
  447. u8 reserved1;
  448. u8 response;
  449. u8 flags;
  450. u8 opcode;
  451. __le32 hdr_second_dword;
  452. #define ISCSI_LOGOUT_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  453. #define ISCSI_LOGOUT_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
  454. #define ISCSI_LOGOUT_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
  455. #define ISCSI_LOGOUT_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
  456. __le32 reserved2[2];
  457. __le32 itt;
  458. __le32 reserved3;
  459. __le32 stat_sn;
  460. __le32 exp_cmd_sn;
  461. __le32 max_cmd_sn;
  462. __le32 reserved4;
  463. __le16 time2retain;
  464. __le16 time2wait;
  465. __le32 reserved5[1];
  466. };
  467. struct iscsi_text_request_hdr {
  468. __le16 reserved0;
  469. u8 flags_attr;
  470. #define ISCSI_TEXT_REQUEST_HDR_RSRV_MASK 0x3F
  471. #define ISCSI_TEXT_REQUEST_HDR_RSRV_SHIFT 0
  472. #define ISCSI_TEXT_REQUEST_HDR_C_MASK 0x1
  473. #define ISCSI_TEXT_REQUEST_HDR_C_SHIFT 6
  474. #define ISCSI_TEXT_REQUEST_HDR_F_MASK 0x1
  475. #define ISCSI_TEXT_REQUEST_HDR_F_SHIFT 7
  476. u8 opcode;
  477. __le32 hdr_second_dword;
  478. #define ISCSI_TEXT_REQUEST_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  479. #define ISCSI_TEXT_REQUEST_HDR_DATA_SEG_LEN_SHIFT 0
  480. #define ISCSI_TEXT_REQUEST_HDR_TOTAL_AHS_LEN_MASK 0xFF
  481. #define ISCSI_TEXT_REQUEST_HDR_TOTAL_AHS_LEN_SHIFT 24
  482. struct regpair lun;
  483. __le32 itt;
  484. __le32 ttt;
  485. __le32 cmd_sn;
  486. __le32 exp_stat_sn;
  487. __le32 reserved4[4];
  488. };
  489. struct iscsi_text_response_hdr {
  490. __le16 reserved1;
  491. u8 flags;
  492. #define ISCSI_TEXT_RESPONSE_HDR_RSRV_MASK 0x3F
  493. #define ISCSI_TEXT_RESPONSE_HDR_RSRV_SHIFT 0
  494. #define ISCSI_TEXT_RESPONSE_HDR_C_MASK 0x1
  495. #define ISCSI_TEXT_RESPONSE_HDR_C_SHIFT 6
  496. #define ISCSI_TEXT_RESPONSE_HDR_F_MASK 0x1
  497. #define ISCSI_TEXT_RESPONSE_HDR_F_SHIFT 7
  498. u8 opcode;
  499. __le32 hdr_second_dword;
  500. #define ISCSI_TEXT_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  501. #define ISCSI_TEXT_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
  502. #define ISCSI_TEXT_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
  503. #define ISCSI_TEXT_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
  504. struct regpair lun;
  505. __le32 itt;
  506. __le32 ttt;
  507. __le32 stat_sn;
  508. __le32 exp_cmd_sn;
  509. __le32 max_cmd_sn;
  510. __le32 reserved4[3];
  511. };
  512. struct iscsi_tmf_request_hdr {
  513. __le16 reserved0;
  514. u8 function;
  515. u8 opcode;
  516. __le32 hdr_second_dword;
  517. #define ISCSI_TMF_REQUEST_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  518. #define ISCSI_TMF_REQUEST_HDR_DATA_SEG_LEN_SHIFT 0
  519. #define ISCSI_TMF_REQUEST_HDR_TOTAL_AHS_LEN_MASK 0xFF
  520. #define ISCSI_TMF_REQUEST_HDR_TOTAL_AHS_LEN_SHIFT 24
  521. struct regpair lun;
  522. __le32 itt;
  523. __le32 rtt;
  524. __le32 cmd_sn;
  525. __le32 exp_stat_sn;
  526. __le32 ref_cmd_sn;
  527. __le32 exp_data_sn;
  528. __le32 reserved4[2];
  529. };
  530. struct iscsi_tmf_response_hdr {
  531. u8 reserved2;
  532. u8 hdr_response;
  533. u8 hdr_flags;
  534. u8 opcode;
  535. __le32 hdr_second_dword;
  536. #define ISCSI_TMF_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  537. #define ISCSI_TMF_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
  538. #define ISCSI_TMF_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
  539. #define ISCSI_TMF_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
  540. struct regpair reserved0;
  541. __le32 itt;
  542. __le32 rtt;
  543. __le32 stat_sn;
  544. __le32 exp_cmd_sn;
  545. __le32 max_cmd_sn;
  546. __le32 reserved4[3];
  547. };
  548. struct iscsi_response_hdr {
  549. u8 hdr_status;
  550. u8 hdr_response;
  551. u8 hdr_flags;
  552. u8 opcode;
  553. __le32 hdr_second_dword;
  554. #define ISCSI_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  555. #define ISCSI_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
  556. #define ISCSI_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
  557. #define ISCSI_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
  558. struct regpair lun;
  559. __le32 itt;
  560. __le32 snack_tag;
  561. __le32 stat_sn;
  562. __le32 exp_cmd_sn;
  563. __le32 max_cmd_sn;
  564. __le32 exp_data_sn;
  565. __le32 bi_residual_count;
  566. __le32 residual_count;
  567. };
  568. struct iscsi_reject_hdr {
  569. u8 reserved4;
  570. u8 hdr_reason;
  571. u8 hdr_flags;
  572. u8 opcode;
  573. __le32 hdr_second_dword;
  574. #define ISCSI_REJECT_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
  575. #define ISCSI_REJECT_HDR_DATA_SEG_LEN_SHIFT 0
  576. #define ISCSI_REJECT_HDR_TOTAL_AHS_LEN_MASK 0xFF
  577. #define ISCSI_REJECT_HDR_TOTAL_AHS_LEN_SHIFT 24
  578. struct regpair reserved0;
  579. __le32 reserved1;
  580. __le32 reserved2;
  581. __le32 stat_sn;
  582. __le32 exp_cmd_sn;
  583. __le32 max_cmd_sn;
  584. __le32 data_sn;
  585. __le32 reserved3[2];
  586. };
  587. union iscsi_task_hdr {
  588. struct iscsi_common_hdr common;
  589. struct data_hdr data;
  590. struct iscsi_cmd_hdr cmd;
  591. struct iscsi_ext_cdb_cmd_hdr ext_cdb_cmd;
  592. struct iscsi_login_req_hdr login_req;
  593. struct iscsi_logout_req_hdr logout_req;
  594. struct iscsi_data_out_hdr data_out;
  595. struct iscsi_data_in_hdr data_in;
  596. struct iscsi_r2t_hdr r2t;
  597. struct iscsi_nop_out_hdr nop_out;
  598. struct iscsi_nop_in_hdr nop_in;
  599. struct iscsi_login_response_hdr login_response;
  600. struct iscsi_logout_response_hdr logout_response;
  601. struct iscsi_text_request_hdr text_request;
  602. struct iscsi_text_response_hdr text_response;
  603. struct iscsi_tmf_request_hdr tmf_request;
  604. struct iscsi_tmf_response_hdr tmf_response;
  605. struct iscsi_response_hdr response;
  606. struct iscsi_reject_hdr reject;
  607. struct iscsi_async_msg_hdr async_msg;
  608. };
  609. struct iscsi_cqe_common {
  610. __le16 conn_id;
  611. u8 cqe_type;
  612. union cqe_error_status error_bitmap;
  613. __le32 reserved[3];
  614. union iscsi_task_hdr iscsi_hdr;
  615. };
  616. struct iscsi_cqe_solicited {
  617. __le16 conn_id;
  618. u8 cqe_type;
  619. union cqe_error_status error_bitmap;
  620. __le16 itid;
  621. u8 task_type;
  622. u8 fw_dbg_field;
  623. __le32 reserved1[2];
  624. union iscsi_task_hdr iscsi_hdr;
  625. };
  626. struct iscsi_cqe_unsolicited {
  627. __le16 conn_id;
  628. u8 cqe_type;
  629. union cqe_error_status error_bitmap;
  630. __le16 reserved0;
  631. u8 reserved1;
  632. u8 unsol_cqe_type;
  633. struct regpair rqe_opaque;
  634. union iscsi_task_hdr iscsi_hdr;
  635. };
  636. union iscsi_cqe {
  637. struct iscsi_cqe_common cqe_common;
  638. struct iscsi_cqe_solicited cqe_solicited;
  639. struct iscsi_cqe_unsolicited cqe_unsolicited;
  640. };
  641. enum iscsi_cqes_type {
  642. ISCSI_CQE_TYPE_SOLICITED = 1,
  643. ISCSI_CQE_TYPE_UNSOLICITED,
  644. ISCSI_CQE_TYPE_SOLICITED_WITH_SENSE,
  645. ISCSI_CQE_TYPE_TASK_CLEANUP,
  646. ISCSI_CQE_TYPE_DUMMY,
  647. MAX_ISCSI_CQES_TYPE
  648. };
  649. enum iscsi_cqe_unsolicited_type {
  650. ISCSI_CQE_UNSOLICITED_NONE,
  651. ISCSI_CQE_UNSOLICITED_SINGLE,
  652. ISCSI_CQE_UNSOLICITED_FIRST,
  653. ISCSI_CQE_UNSOLICITED_MIDDLE,
  654. ISCSI_CQE_UNSOLICITED_LAST,
  655. MAX_ISCSI_CQE_UNSOLICITED_TYPE
  656. };
  657. struct iscsi_virt_sgl_ctx {
  658. struct regpair sgl_base;
  659. struct regpair dsgl_base;
  660. __le32 sgl_initial_offset;
  661. __le32 dsgl_initial_offset;
  662. __le32 dsgl_curr_offset[2];
  663. };
  664. struct iscsi_sgl_var_params {
  665. u8 sgl_ptr;
  666. u8 dsgl_ptr;
  667. __le16 sge_offset;
  668. __le16 dsge_offset;
  669. };
  670. struct iscsi_phys_sgl_ctx {
  671. struct regpair sgl_base;
  672. struct regpair dsgl_base;
  673. u8 sgl_size;
  674. u8 dsgl_size;
  675. __le16 reserved;
  676. struct iscsi_sgl_var_params var_params[2];
  677. };
  678. union iscsi_data_desc_ctx {
  679. struct iscsi_virt_sgl_ctx virt_sgl;
  680. struct iscsi_phys_sgl_ctx phys_sgl;
  681. struct iscsi_cached_sge_ctx cached_sge;
  682. };
  683. struct iscsi_debug_modes {
  684. u8 flags;
  685. #define ISCSI_DEBUG_MODES_ASSERT_IF_RX_CONN_ERROR_MASK 0x1
  686. #define ISCSI_DEBUG_MODES_ASSERT_IF_RX_CONN_ERROR_SHIFT 0
  687. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_RESET_MASK 0x1
  688. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_RESET_SHIFT 1
  689. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_FIN_MASK 0x1
  690. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_FIN_SHIFT 2
  691. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_CLEANUP_MASK 0x1
  692. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_CLEANUP_SHIFT 3
  693. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_REJECT_OR_ASYNC_MASK 0x1
  694. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_REJECT_OR_ASYNC_SHIFT 4
  695. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_NOP_MASK 0x1
  696. #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_NOP_SHIFT 5
  697. #define ISCSI_DEBUG_MODES_RESERVED0_MASK 0x3
  698. #define ISCSI_DEBUG_MODES_RESERVED0_SHIFT 6
  699. };
  700. struct iscsi_dif_flags {
  701. u8 flags;
  702. #define ISCSI_DIF_FLAGS_PROT_INTERVAL_SIZE_LOG_MASK 0xF
  703. #define ISCSI_DIF_FLAGS_PROT_INTERVAL_SIZE_LOG_SHIFT 0
  704. #define ISCSI_DIF_FLAGS_DIF_TO_PEER_MASK 0x1
  705. #define ISCSI_DIF_FLAGS_DIF_TO_PEER_SHIFT 4
  706. #define ISCSI_DIF_FLAGS_HOST_INTERFACE_MASK 0x7
  707. #define ISCSI_DIF_FLAGS_HOST_INTERFACE_SHIFT 5
  708. };
  709. enum iscsi_eqe_opcode {
  710. ISCSI_EVENT_TYPE_INIT_FUNC = 0,
  711. ISCSI_EVENT_TYPE_DESTROY_FUNC,
  712. ISCSI_EVENT_TYPE_OFFLOAD_CONN,
  713. ISCSI_EVENT_TYPE_UPDATE_CONN,
  714. ISCSI_EVENT_TYPE_CLEAR_SQ,
  715. ISCSI_EVENT_TYPE_TERMINATE_CONN,
  716. ISCSI_EVENT_TYPE_MAC_UPDATE_CONN,
  717. ISCSI_EVENT_TYPE_ASYN_CONNECT_COMPLETE,
  718. ISCSI_EVENT_TYPE_ASYN_TERMINATE_DONE,
  719. RESERVED9,
  720. ISCSI_EVENT_TYPE_START_OF_ERROR_TYPES = 10,
  721. ISCSI_EVENT_TYPE_ASYN_ABORT_RCVD,
  722. ISCSI_EVENT_TYPE_ASYN_CLOSE_RCVD,
  723. ISCSI_EVENT_TYPE_ASYN_SYN_RCVD,
  724. ISCSI_EVENT_TYPE_ASYN_MAX_RT_TIME,
  725. ISCSI_EVENT_TYPE_ASYN_MAX_RT_CNT,
  726. ISCSI_EVENT_TYPE_ASYN_MAX_KA_PROBES_CNT,
  727. ISCSI_EVENT_TYPE_ASYN_FIN_WAIT2,
  728. ISCSI_EVENT_TYPE_ISCSI_CONN_ERROR,
  729. ISCSI_EVENT_TYPE_TCP_CONN_ERROR,
  730. ISCSI_EVENT_TYPE_ASYN_DELETE_OOO_ISLES,
  731. MAX_ISCSI_EQE_OPCODE
  732. };
  733. enum iscsi_error_types {
  734. ISCSI_STATUS_NONE = 0,
  735. ISCSI_CQE_ERROR_UNSOLICITED_RCV_ON_INVALID_CONN = 1,
  736. ISCSI_CONN_ERROR_TASK_CID_MISMATCH,
  737. ISCSI_CONN_ERROR_TASK_NOT_VALID,
  738. ISCSI_CONN_ERROR_RQ_RING_IS_FULL,
  739. ISCSI_CONN_ERROR_CMDQ_RING_IS_FULL,
  740. ISCSI_CONN_ERROR_HQE_CACHING_FAILED,
  741. ISCSI_CONN_ERROR_HEADER_DIGEST_ERROR,
  742. ISCSI_CONN_ERROR_LOCAL_COMPLETION_ERROR,
  743. ISCSI_CONN_ERROR_DATA_OVERRUN,
  744. ISCSI_CONN_ERROR_OUT_OF_SGES_ERROR,
  745. ISCSI_CONN_ERROR_TCP_SEG_PROC_URG_ERROR,
  746. ISCSI_CONN_ERROR_TCP_SEG_PROC_IP_OPTIONS_ERROR,
  747. ISCSI_CONN_ERROR_TCP_SEG_PROC_CONNECT_INVALID_WS_OPTION,
  748. ISCSI_CONN_ERROR_TCP_IP_FRAGMENT_ERROR,
  749. ISCSI_CONN_ERROR_PROTOCOL_ERR_AHS_LEN,
  750. ISCSI_CONN_ERROR_PROTOCOL_ERR_AHS_TYPE,
  751. ISCSI_CONN_ERROR_PROTOCOL_ERR_ITT_OUT_OF_RANGE,
  752. ISCSI_CONN_ERROR_PROTOCOL_ERR_TTT_OUT_OF_RANGE,
  753. ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SEG_LEN_EXCEEDS_PDU_SIZE,
  754. ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_OPCODE,
  755. ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_OPCODE_BEFORE_UPDATE,
  756. ISCSI_CONN_ERROR_UNVALID_NOPIN_DSL,
  757. ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_CARRIES_NO_DATA,
  758. ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SN,
  759. ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_IN_TTT,
  760. ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_OUT_ITT,
  761. ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_TTT,
  762. ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_BUFFER_OFFSET,
  763. ISCSI_CONN_ERROR_PROTOCOL_ERR_BUFFER_OFFSET_OOO,
  764. ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_SN,
  765. ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_0,
  766. ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_1,
  767. ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_2,
  768. ISCSI_CONN_ERROR_PROTOCOL_ERR_LUN,
  769. ISCSI_CONN_ERROR_PROTOCOL_ERR_F_BIT_ZERO,
  770. ISCSI_CONN_ERROR_PROTOCOL_ERR_F_BIT_ZERO_S_BIT_ONE,
  771. ISCSI_CONN_ERROR_PROTOCOL_ERR_EXP_STAT_SN,
  772. ISCSI_CONN_ERROR_PROTOCOL_ERR_DSL_NOT_ZERO,
  773. ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_DSL,
  774. ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SEG_LEN_TOO_BIG,
  775. ISCSI_CONN_ERROR_PROTOCOL_ERR_OUTSTANDING_R2T_COUNT,
  776. ISCSI_CONN_ERROR_PROTOCOL_ERR_DIF_TX,
  777. ISCSI_CONN_ERROR_SENSE_DATA_LENGTH,
  778. ISCSI_CONN_ERROR_DATA_PLACEMENT_ERROR,
  779. ISCSI_ERROR_UNKNOWN,
  780. MAX_ISCSI_ERROR_TYPES
  781. };
  782. struct iscsi_mflags {
  783. u8 mflags;
  784. #define ISCSI_MFLAGS_SLOW_IO_MASK 0x1
  785. #define ISCSI_MFLAGS_SLOW_IO_SHIFT 0
  786. #define ISCSI_MFLAGS_SINGLE_SGE_MASK 0x1
  787. #define ISCSI_MFLAGS_SINGLE_SGE_SHIFT 1
  788. #define ISCSI_MFLAGS_RESERVED_MASK 0x3F
  789. #define ISCSI_MFLAGS_RESERVED_SHIFT 2
  790. };
  791. struct iscsi_sgl {
  792. struct regpair sgl_addr;
  793. __le16 updated_sge_size;
  794. __le16 updated_sge_offset;
  795. __le32 byte_offset;
  796. };
  797. union iscsi_mstorm_sgl {
  798. struct iscsi_sgl sgl_struct;
  799. struct iscsi_sge single_sge;
  800. };
  801. enum iscsi_ramrod_cmd_id {
  802. ISCSI_RAMROD_CMD_ID_UNUSED = 0,
  803. ISCSI_RAMROD_CMD_ID_INIT_FUNC = 1,
  804. ISCSI_RAMROD_CMD_ID_DESTROY_FUNC = 2,
  805. ISCSI_RAMROD_CMD_ID_OFFLOAD_CONN = 3,
  806. ISCSI_RAMROD_CMD_ID_UPDATE_CONN = 4,
  807. ISCSI_RAMROD_CMD_ID_TERMINATION_CONN = 5,
  808. ISCSI_RAMROD_CMD_ID_CLEAR_SQ = 6,
  809. ISCSI_RAMROD_CMD_ID_MAC_UPDATE = 7,
  810. MAX_ISCSI_RAMROD_CMD_ID
  811. };
  812. struct iscsi_reg1 {
  813. __le32 reg1_map;
  814. #define ISCSI_REG1_NUM_FAST_SGES_MASK 0x7
  815. #define ISCSI_REG1_NUM_FAST_SGES_SHIFT 0
  816. #define ISCSI_REG1_RESERVED1_MASK 0x1FFFFFFF
  817. #define ISCSI_REG1_RESERVED1_SHIFT 3
  818. };
  819. union iscsi_seq_num {
  820. __le16 data_sn;
  821. __le16 r2t_sn;
  822. };
  823. struct iscsi_spe_conn_mac_update {
  824. struct iscsi_slow_path_hdr hdr;
  825. __le16 conn_id;
  826. __le32 fw_cid;
  827. __le16 remote_mac_addr_lo;
  828. __le16 remote_mac_addr_mid;
  829. __le16 remote_mac_addr_hi;
  830. u8 reserved0[2];
  831. };
  832. struct iscsi_spe_conn_offload {
  833. struct iscsi_slow_path_hdr hdr;
  834. __le16 conn_id;
  835. __le32 fw_cid;
  836. struct iscsi_conn_offload_params iscsi;
  837. struct tcp_offload_params tcp;
  838. };
  839. struct iscsi_spe_conn_offload_option2 {
  840. struct iscsi_slow_path_hdr hdr;
  841. __le16 conn_id;
  842. __le32 fw_cid;
  843. struct iscsi_conn_offload_params iscsi;
  844. struct tcp_offload_params_opt2 tcp;
  845. };
  846. struct iscsi_spe_conn_termination {
  847. struct iscsi_slow_path_hdr hdr;
  848. __le16 conn_id;
  849. __le32 fw_cid;
  850. u8 abortive;
  851. u8 reserved0[7];
  852. struct regpair queue_cnts_addr;
  853. struct regpair query_params_addr;
  854. };
  855. struct iscsi_spe_func_dstry {
  856. struct iscsi_slow_path_hdr hdr;
  857. __le16 reserved0;
  858. __le32 reserved1;
  859. };
  860. struct iscsi_spe_func_init {
  861. struct iscsi_slow_path_hdr hdr;
  862. __le16 half_way_close_timeout;
  863. u8 num_sq_pages_in_ring;
  864. u8 num_r2tq_pages_in_ring;
  865. u8 num_uhq_pages_in_ring;
  866. u8 ll2_rx_queue_id;
  867. u8 ooo_enable;
  868. struct iscsi_debug_modes debug_mode;
  869. __le16 reserved1;
  870. __le32 reserved2;
  871. __le32 reserved3;
  872. __le32 reserved4;
  873. struct scsi_init_func_params func_params;
  874. struct scsi_init_func_queues q_params;
  875. };
  876. struct ystorm_iscsi_task_state {
  877. union iscsi_data_desc_ctx sgl_ctx_union;
  878. __le32 buffer_offset[2];
  879. __le16 bytes_nxt_dif;
  880. __le16 rxmit_bytes_nxt_dif;
  881. union iscsi_seq_num seq_num_union;
  882. u8 dif_bytes_leftover;
  883. u8 rxmit_dif_bytes_leftover;
  884. __le16 reuse_count;
  885. struct iscsi_dif_flags dif_flags;
  886. u8 local_comp;
  887. __le32 exp_r2t_sn;
  888. __le32 sgl_offset[2];
  889. };
  890. struct ystorm_iscsi_task_st_ctx {
  891. struct ystorm_iscsi_task_state state;
  892. union iscsi_task_hdr pdu_hdr;
  893. };
  894. struct ystorm_iscsi_task_ag_ctx {
  895. u8 reserved;
  896. u8 byte1;
  897. __le16 word0;
  898. u8 flags0;
  899. #define YSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_MASK 0xF
  900. #define YSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_SHIFT 0
  901. #define YSTORM_ISCSI_TASK_AG_CTX_BIT0_MASK 0x1
  902. #define YSTORM_ISCSI_TASK_AG_CTX_BIT0_SHIFT 4
  903. #define YSTORM_ISCSI_TASK_AG_CTX_BIT1_MASK 0x1
  904. #define YSTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT 5
  905. #define YSTORM_ISCSI_TASK_AG_CTX_VALID_MASK 0x1
  906. #define YSTORM_ISCSI_TASK_AG_CTX_VALID_SHIFT 6
  907. #define YSTORM_ISCSI_TASK_AG_CTX_BIT3_MASK 0x1
  908. #define YSTORM_ISCSI_TASK_AG_CTX_BIT3_SHIFT 7
  909. u8 flags1;
  910. #define YSTORM_ISCSI_TASK_AG_CTX_CF0_MASK 0x3
  911. #define YSTORM_ISCSI_TASK_AG_CTX_CF0_SHIFT 0
  912. #define YSTORM_ISCSI_TASK_AG_CTX_CF1_MASK 0x3
  913. #define YSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT 2
  914. #define YSTORM_ISCSI_TASK_AG_CTX_CF2SPECIAL_MASK 0x3
  915. #define YSTORM_ISCSI_TASK_AG_CTX_CF2SPECIAL_SHIFT 4
  916. #define YSTORM_ISCSI_TASK_AG_CTX_CF0EN_MASK 0x1
  917. #define YSTORM_ISCSI_TASK_AG_CTX_CF0EN_SHIFT 6
  918. #define YSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK 0x1
  919. #define YSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT 7
  920. u8 flags2;
  921. #define YSTORM_ISCSI_TASK_AG_CTX_BIT4_MASK 0x1
  922. #define YSTORM_ISCSI_TASK_AG_CTX_BIT4_SHIFT 0
  923. #define YSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK 0x1
  924. #define YSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT 1
  925. #define YSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1
  926. #define YSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 2
  927. #define YSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK 0x1
  928. #define YSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT 3
  929. #define YSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1
  930. #define YSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 4
  931. #define YSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1
  932. #define YSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 5
  933. #define YSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1
  934. #define YSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 6
  935. #define YSTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK 0x1
  936. #define YSTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT 7
  937. u8 byte2;
  938. __le32 TTT;
  939. u8 byte3;
  940. u8 byte4;
  941. __le16 word1;
  942. };
  943. struct mstorm_iscsi_task_ag_ctx {
  944. u8 cdu_validation;
  945. u8 byte1;
  946. __le16 task_cid;
  947. u8 flags0;
  948. #define MSTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF
  949. #define MSTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0
  950. #define MSTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1
  951. #define MSTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4
  952. #define MSTORM_ISCSI_TASK_AG_CTX_BIT1_MASK 0x1
  953. #define MSTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT 5
  954. #define MSTORM_ISCSI_TASK_AG_CTX_VALID_MASK 0x1
  955. #define MSTORM_ISCSI_TASK_AG_CTX_VALID_SHIFT 6
  956. #define MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_FLAG_MASK 0x1
  957. #define MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_FLAG_SHIFT 7
  958. u8 flags1;
  959. #define MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_MASK 0x3
  960. #define MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_SHIFT 0
  961. #define MSTORM_ISCSI_TASK_AG_CTX_CF1_MASK 0x3
  962. #define MSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT 2
  963. #define MSTORM_ISCSI_TASK_AG_CTX_CF2_MASK 0x3
  964. #define MSTORM_ISCSI_TASK_AG_CTX_CF2_SHIFT 4
  965. #define MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_EN_MASK 0x1
  966. #define MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_EN_SHIFT 6
  967. #define MSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK 0x1
  968. #define MSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT 7
  969. u8 flags2;
  970. #define MSTORM_ISCSI_TASK_AG_CTX_CF2EN_MASK 0x1
  971. #define MSTORM_ISCSI_TASK_AG_CTX_CF2EN_SHIFT 0
  972. #define MSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK 0x1
  973. #define MSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT 1
  974. #define MSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1
  975. #define MSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 2
  976. #define MSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK 0x1
  977. #define MSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT 3
  978. #define MSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1
  979. #define MSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 4
  980. #define MSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1
  981. #define MSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 5
  982. #define MSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1
  983. #define MSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 6
  984. #define MSTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK 0x1
  985. #define MSTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT 7
  986. u8 byte2;
  987. __le32 reg0;
  988. u8 byte3;
  989. u8 byte4;
  990. __le16 word1;
  991. };
  992. struct ustorm_iscsi_task_ag_ctx {
  993. u8 reserved;
  994. u8 state;
  995. __le16 icid;
  996. u8 flags0;
  997. #define USTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF
  998. #define USTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0
  999. #define USTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1
  1000. #define USTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4
  1001. #define USTORM_ISCSI_TASK_AG_CTX_BIT1_MASK 0x1
  1002. #define USTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT 5
  1003. #define USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_MASK 0x3
  1004. #define USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_SHIFT 6
  1005. u8 flags1;
  1006. #define USTORM_ISCSI_TASK_AG_CTX_RESERVED1_MASK 0x3
  1007. #define USTORM_ISCSI_TASK_AG_CTX_RESERVED1_SHIFT 0
  1008. #define USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_MASK 0x3
  1009. #define USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_SHIFT 2
  1010. #define USTORM_ISCSI_TASK_AG_CTX_CF3_MASK 0x3
  1011. #define USTORM_ISCSI_TASK_AG_CTX_CF3_SHIFT 4
  1012. #define USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_MASK 0x3
  1013. #define USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_SHIFT 6
  1014. u8 flags2;
  1015. #define USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_EN_MASK 0x1
  1016. #define USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_EN_SHIFT 0
  1017. #define USTORM_ISCSI_TASK_AG_CTX_DISABLE_DATA_ACKED_MASK 0x1
  1018. #define USTORM_ISCSI_TASK_AG_CTX_DISABLE_DATA_ACKED_SHIFT 1
  1019. #define USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_EN_MASK 0x1
  1020. #define USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_EN_SHIFT 2
  1021. #define USTORM_ISCSI_TASK_AG_CTX_CF3EN_MASK 0x1
  1022. #define USTORM_ISCSI_TASK_AG_CTX_CF3EN_SHIFT 3
  1023. #define USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_EN_MASK 0x1
  1024. #define USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_EN_SHIFT 4
  1025. #define USTORM_ISCSI_TASK_AG_CTX_CMP_DATA_TOTAL_EXP_EN_MASK 0x1
  1026. #define USTORM_ISCSI_TASK_AG_CTX_CMP_DATA_TOTAL_EXP_EN_SHIFT 5
  1027. #define USTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1
  1028. #define USTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 6
  1029. #define USTORM_ISCSI_TASK_AG_CTX_CMP_CONT_RCV_EXP_EN_MASK 0x1
  1030. #define USTORM_ISCSI_TASK_AG_CTX_CMP_CONT_RCV_EXP_EN_SHIFT 7
  1031. u8 flags3;
  1032. #define USTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1
  1033. #define USTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 0
  1034. #define USTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1
  1035. #define USTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 1
  1036. #define USTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1
  1037. #define USTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 2
  1038. #define USTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK 0x1
  1039. #define USTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT 3
  1040. #define USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_TYPE_MASK 0xF
  1041. #define USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_TYPE_SHIFT 4
  1042. __le32 dif_err_intervals;
  1043. __le32 dif_error_1st_interval;
  1044. __le32 rcv_cont_len;
  1045. __le32 exp_cont_len;
  1046. __le32 total_data_acked;
  1047. __le32 exp_data_acked;
  1048. u8 next_tid_valid;
  1049. u8 byte3;
  1050. __le16 word1;
  1051. __le16 next_tid;
  1052. __le16 word3;
  1053. __le32 hdr_residual_count;
  1054. __le32 exp_r2t_sn;
  1055. };
  1056. struct mstorm_iscsi_task_st_ctx {
  1057. union iscsi_mstorm_sgl sgl_union;
  1058. struct iscsi_dif_flags dif_flags;
  1059. struct iscsi_mflags flags;
  1060. u8 sgl_size;
  1061. u8 host_sge_index;
  1062. __le16 dix_cur_sge_offset;
  1063. __le16 dix_cur_sge_size;
  1064. __le32 data_offset_rtid;
  1065. u8 dif_offset;
  1066. u8 dix_sgl_size;
  1067. u8 dix_sge_index;
  1068. u8 task_type;
  1069. struct regpair sense_db;
  1070. struct regpair dix_sgl_cur_sge;
  1071. __le32 rem_task_size;
  1072. __le16 reuse_count;
  1073. __le16 dif_data_residue;
  1074. u8 reserved0[4];
  1075. __le32 reserved1[1];
  1076. };
  1077. struct ustorm_iscsi_task_st_ctx {
  1078. __le32 rem_rcv_len;
  1079. __le32 exp_data_transfer_len;
  1080. __le32 exp_data_sn;
  1081. struct regpair lun;
  1082. struct iscsi_reg1 reg1;
  1083. u8 flags2;
  1084. #define USTORM_ISCSI_TASK_ST_CTX_AHS_EXIST_MASK 0x1
  1085. #define USTORM_ISCSI_TASK_ST_CTX_AHS_EXIST_SHIFT 0
  1086. #define USTORM_ISCSI_TASK_ST_CTX_RESERVED1_MASK 0x7F
  1087. #define USTORM_ISCSI_TASK_ST_CTX_RESERVED1_SHIFT 1
  1088. u8 reserved2;
  1089. __le16 reserved3;
  1090. __le32 reserved4;
  1091. __le32 reserved5;
  1092. __le32 reserved6;
  1093. __le32 reserved7;
  1094. u8 task_type;
  1095. u8 error_flags;
  1096. #define USTORM_ISCSI_TASK_ST_CTX_DATA_DIGEST_ERROR_MASK 0x1
  1097. #define USTORM_ISCSI_TASK_ST_CTX_DATA_DIGEST_ERROR_SHIFT 0
  1098. #define USTORM_ISCSI_TASK_ST_CTX_DATA_TRUNCATED_ERROR_MASK 0x1
  1099. #define USTORM_ISCSI_TASK_ST_CTX_DATA_TRUNCATED_ERROR_SHIFT 1
  1100. #define USTORM_ISCSI_TASK_ST_CTX_UNDER_RUN_ERROR_MASK 0x1
  1101. #define USTORM_ISCSI_TASK_ST_CTX_UNDER_RUN_ERROR_SHIFT 2
  1102. #define USTORM_ISCSI_TASK_ST_CTX_RESERVED8_MASK 0x1F
  1103. #define USTORM_ISCSI_TASK_ST_CTX_RESERVED8_SHIFT 3
  1104. u8 flags;
  1105. #define USTORM_ISCSI_TASK_ST_CTX_CQE_WRITE_MASK 0x3
  1106. #define USTORM_ISCSI_TASK_ST_CTX_CQE_WRITE_SHIFT 0
  1107. #define USTORM_ISCSI_TASK_ST_CTX_LOCAL_COMP_MASK 0x1
  1108. #define USTORM_ISCSI_TASK_ST_CTX_LOCAL_COMP_SHIFT 2
  1109. #define USTORM_ISCSI_TASK_ST_CTX_Q0_R2TQE_WRITE_MASK 0x1
  1110. #define USTORM_ISCSI_TASK_ST_CTX_Q0_R2TQE_WRITE_SHIFT 3
  1111. #define USTORM_ISCSI_TASK_ST_CTX_TOTALDATAACKED_DONE_MASK 0x1
  1112. #define USTORM_ISCSI_TASK_ST_CTX_TOTALDATAACKED_DONE_SHIFT 4
  1113. #define USTORM_ISCSI_TASK_ST_CTX_HQSCANNED_DONE_MASK 0x1
  1114. #define USTORM_ISCSI_TASK_ST_CTX_HQSCANNED_DONE_SHIFT 5
  1115. #define USTORM_ISCSI_TASK_ST_CTX_R2T2RECV_DONE_MASK 0x1
  1116. #define USTORM_ISCSI_TASK_ST_CTX_R2T2RECV_DONE_SHIFT 6
  1117. #define USTORM_ISCSI_TASK_ST_CTX_RESERVED0_MASK 0x1
  1118. #define USTORM_ISCSI_TASK_ST_CTX_RESERVED0_SHIFT 7
  1119. u8 cq_rss_number;
  1120. };
  1121. struct iscsi_task_context {
  1122. struct ystorm_iscsi_task_st_ctx ystorm_st_context;
  1123. struct regpair ystorm_st_padding[2];
  1124. struct ystorm_iscsi_task_ag_ctx ystorm_ag_context;
  1125. struct regpair ystorm_ag_padding[2];
  1126. struct tdif_task_context tdif_context;
  1127. struct mstorm_iscsi_task_ag_ctx mstorm_ag_context;
  1128. struct regpair mstorm_ag_padding[2];
  1129. struct ustorm_iscsi_task_ag_ctx ustorm_ag_context;
  1130. struct mstorm_iscsi_task_st_ctx mstorm_st_context;
  1131. struct ustorm_iscsi_task_st_ctx ustorm_st_context;
  1132. struct rdif_task_context rdif_context;
  1133. };
  1134. enum iscsi_task_type {
  1135. ISCSI_TASK_TYPE_INITIATOR_WRITE,
  1136. ISCSI_TASK_TYPE_INITIATOR_READ,
  1137. ISCSI_TASK_TYPE_MIDPATH,
  1138. ISCSI_TASK_TYPE_UNSOLIC,
  1139. ISCSI_TASK_TYPE_EXCHCLEANUP,
  1140. ISCSI_TASK_TYPE_IRRELEVANT,
  1141. ISCSI_TASK_TYPE_TARGET_WRITE,
  1142. ISCSI_TASK_TYPE_TARGET_READ,
  1143. ISCSI_TASK_TYPE_TARGET_RESPONSE,
  1144. ISCSI_TASK_TYPE_LOGIN_RESPONSE,
  1145. MAX_ISCSI_TASK_TYPE
  1146. };
  1147. union iscsi_ttt_txlen_union {
  1148. __le32 desired_tx_len;
  1149. __le32 ttt;
  1150. };
  1151. struct iscsi_uhqe {
  1152. __le32 reg1;
  1153. #define ISCSI_UHQE_PDU_PAYLOAD_LEN_MASK 0xFFFFF
  1154. #define ISCSI_UHQE_PDU_PAYLOAD_LEN_SHIFT 0
  1155. #define ISCSI_UHQE_LOCAL_COMP_MASK 0x1
  1156. #define ISCSI_UHQE_LOCAL_COMP_SHIFT 20
  1157. #define ISCSI_UHQE_TOGGLE_BIT_MASK 0x1
  1158. #define ISCSI_UHQE_TOGGLE_BIT_SHIFT 21
  1159. #define ISCSI_UHQE_PURE_PAYLOAD_MASK 0x1
  1160. #define ISCSI_UHQE_PURE_PAYLOAD_SHIFT 22
  1161. #define ISCSI_UHQE_LOGIN_RESPONSE_PDU_MASK 0x1
  1162. #define ISCSI_UHQE_LOGIN_RESPONSE_PDU_SHIFT 23
  1163. #define ISCSI_UHQE_TASK_ID_HI_MASK 0xFF
  1164. #define ISCSI_UHQE_TASK_ID_HI_SHIFT 24
  1165. __le32 reg2;
  1166. #define ISCSI_UHQE_BUFFER_OFFSET_MASK 0xFFFFFF
  1167. #define ISCSI_UHQE_BUFFER_OFFSET_SHIFT 0
  1168. #define ISCSI_UHQE_TASK_ID_LO_MASK 0xFF
  1169. #define ISCSI_UHQE_TASK_ID_LO_SHIFT 24
  1170. };
  1171. struct iscsi_wqe_field {
  1172. __le32 contlen_cdbsize_field;
  1173. #define ISCSI_WQE_FIELD_CONT_LEN_MASK 0xFFFFFF
  1174. #define ISCSI_WQE_FIELD_CONT_LEN_SHIFT 0
  1175. #define ISCSI_WQE_FIELD_CDB_SIZE_MASK 0xFF
  1176. #define ISCSI_WQE_FIELD_CDB_SIZE_SHIFT 24
  1177. };
  1178. union iscsi_wqe_field_union {
  1179. struct iscsi_wqe_field cont_field;
  1180. __le32 prev_tid;
  1181. };
  1182. struct iscsi_wqe {
  1183. __le16 task_id;
  1184. u8 flags;
  1185. #define ISCSI_WQE_WQE_TYPE_MASK 0x7
  1186. #define ISCSI_WQE_WQE_TYPE_SHIFT 0
  1187. #define ISCSI_WQE_NUM_FAST_SGES_MASK 0x7
  1188. #define ISCSI_WQE_NUM_FAST_SGES_SHIFT 3
  1189. #define ISCSI_WQE_PTU_INVALIDATE_MASK 0x1
  1190. #define ISCSI_WQE_PTU_INVALIDATE_SHIFT 6
  1191. #define ISCSI_WQE_RESPONSE_MASK 0x1
  1192. #define ISCSI_WQE_RESPONSE_SHIFT 7
  1193. struct iscsi_dif_flags prot_flags;
  1194. union iscsi_wqe_field_union cont_prevtid_union;
  1195. };
  1196. enum iscsi_wqe_type {
  1197. ISCSI_WQE_TYPE_NORMAL,
  1198. ISCSI_WQE_TYPE_TASK_CLEANUP,
  1199. ISCSI_WQE_TYPE_MIDDLE_PATH,
  1200. ISCSI_WQE_TYPE_LOGIN,
  1201. ISCSI_WQE_TYPE_FIRST_R2T_CONT,
  1202. ISCSI_WQE_TYPE_NONFIRST_R2T_CONT,
  1203. ISCSI_WQE_TYPE_RESPONSE,
  1204. MAX_ISCSI_WQE_TYPE
  1205. };
  1206. struct iscsi_xhqe {
  1207. union iscsi_ttt_txlen_union ttt_or_txlen;
  1208. __le32 exp_stat_sn;
  1209. struct iscsi_dif_flags prot_flags;
  1210. u8 total_ahs_length;
  1211. u8 opcode;
  1212. u8 flags;
  1213. #define ISCSI_XHQE_NUM_FAST_SGES_MASK 0x7
  1214. #define ISCSI_XHQE_NUM_FAST_SGES_SHIFT 0
  1215. #define ISCSI_XHQE_FINAL_MASK 0x1
  1216. #define ISCSI_XHQE_FINAL_SHIFT 3
  1217. #define ISCSI_XHQE_SUPER_IO_MASK 0x1
  1218. #define ISCSI_XHQE_SUPER_IO_SHIFT 4
  1219. #define ISCSI_XHQE_STATUS_BIT_MASK 0x1
  1220. #define ISCSI_XHQE_STATUS_BIT_SHIFT 5
  1221. #define ISCSI_XHQE_RESERVED_MASK 0x3
  1222. #define ISCSI_XHQE_RESERVED_SHIFT 6
  1223. union iscsi_seq_num seq_num_union;
  1224. __le16 reserved1;
  1225. };
  1226. struct mstorm_iscsi_stats_drv {
  1227. struct regpair iscsi_rx_dropped_pdus_task_not_valid;
  1228. };
  1229. struct pstorm_iscsi_stats_drv {
  1230. struct regpair iscsi_tx_bytes_cnt;
  1231. struct regpair iscsi_tx_packet_cnt;
  1232. };
  1233. struct tstorm_iscsi_stats_drv {
  1234. struct regpair iscsi_rx_bytes_cnt;
  1235. struct regpair iscsi_rx_packet_cnt;
  1236. struct regpair iscsi_rx_new_ooo_isle_events_cnt;
  1237. __le32 iscsi_cmdq_threshold_cnt;
  1238. __le32 iscsi_rq_threshold_cnt;
  1239. __le32 iscsi_immq_threshold_cnt;
  1240. };
  1241. struct ustorm_iscsi_stats_drv {
  1242. struct regpair iscsi_rx_data_pdu_cnt;
  1243. struct regpair iscsi_rx_r2t_pdu_cnt;
  1244. struct regpair iscsi_rx_total_pdu_cnt;
  1245. };
  1246. struct xstorm_iscsi_stats_drv {
  1247. struct regpair iscsi_tx_go_to_slow_start_event_cnt;
  1248. struct regpair iscsi_tx_fast_retransmit_event_cnt;
  1249. };
  1250. struct ystorm_iscsi_stats_drv {
  1251. struct regpair iscsi_tx_data_pdu_cnt;
  1252. struct regpair iscsi_tx_r2t_pdu_cnt;
  1253. struct regpair iscsi_tx_total_pdu_cnt;
  1254. };
  1255. struct iscsi_db_data {
  1256. u8 params;
  1257. #define ISCSI_DB_DATA_DEST_MASK 0x3
  1258. #define ISCSI_DB_DATA_DEST_SHIFT 0
  1259. #define ISCSI_DB_DATA_AGG_CMD_MASK 0x3
  1260. #define ISCSI_DB_DATA_AGG_CMD_SHIFT 2
  1261. #define ISCSI_DB_DATA_BYPASS_EN_MASK 0x1
  1262. #define ISCSI_DB_DATA_BYPASS_EN_SHIFT 4
  1263. #define ISCSI_DB_DATA_RESERVED_MASK 0x1
  1264. #define ISCSI_DB_DATA_RESERVED_SHIFT 5
  1265. #define ISCSI_DB_DATA_AGG_VAL_SEL_MASK 0x3
  1266. #define ISCSI_DB_DATA_AGG_VAL_SEL_SHIFT 6
  1267. u8 agg_flags;
  1268. __le16 sq_prod;
  1269. };
  1270. struct tstorm_iscsi_task_ag_ctx {
  1271. u8 byte0;
  1272. u8 byte1;
  1273. __le16 word0;
  1274. u8 flags0;
  1275. #define TSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_MASK 0xF
  1276. #define TSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_SHIFT 0
  1277. #define TSTORM_ISCSI_TASK_AG_CTX_BIT0_MASK 0x1
  1278. #define TSTORM_ISCSI_TASK_AG_CTX_BIT0_SHIFT 4
  1279. #define TSTORM_ISCSI_TASK_AG_CTX_BIT1_MASK 0x1
  1280. #define TSTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT 5
  1281. #define TSTORM_ISCSI_TASK_AG_CTX_BIT2_MASK 0x1
  1282. #define TSTORM_ISCSI_TASK_AG_CTX_BIT2_SHIFT 6
  1283. #define TSTORM_ISCSI_TASK_AG_CTX_BIT3_MASK 0x1
  1284. #define TSTORM_ISCSI_TASK_AG_CTX_BIT3_SHIFT 7
  1285. u8 flags1;
  1286. #define TSTORM_ISCSI_TASK_AG_CTX_BIT4_MASK 0x1
  1287. #define TSTORM_ISCSI_TASK_AG_CTX_BIT4_SHIFT 0
  1288. #define TSTORM_ISCSI_TASK_AG_CTX_BIT5_MASK 0x1
  1289. #define TSTORM_ISCSI_TASK_AG_CTX_BIT5_SHIFT 1
  1290. #define TSTORM_ISCSI_TASK_AG_CTX_CF0_MASK 0x3
  1291. #define TSTORM_ISCSI_TASK_AG_CTX_CF0_SHIFT 2
  1292. #define TSTORM_ISCSI_TASK_AG_CTX_CF1_MASK 0x3
  1293. #define TSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT 4
  1294. #define TSTORM_ISCSI_TASK_AG_CTX_CF2_MASK 0x3
  1295. #define TSTORM_ISCSI_TASK_AG_CTX_CF2_SHIFT 6
  1296. u8 flags2;
  1297. #define TSTORM_ISCSI_TASK_AG_CTX_CF3_MASK 0x3
  1298. #define TSTORM_ISCSI_TASK_AG_CTX_CF3_SHIFT 0
  1299. #define TSTORM_ISCSI_TASK_AG_CTX_CF4_MASK 0x3
  1300. #define TSTORM_ISCSI_TASK_AG_CTX_CF4_SHIFT 2
  1301. #define TSTORM_ISCSI_TASK_AG_CTX_CF5_MASK 0x3
  1302. #define TSTORM_ISCSI_TASK_AG_CTX_CF5_SHIFT 4
  1303. #define TSTORM_ISCSI_TASK_AG_CTX_CF6_MASK 0x3
  1304. #define TSTORM_ISCSI_TASK_AG_CTX_CF6_SHIFT 6
  1305. u8 flags3;
  1306. #define TSTORM_ISCSI_TASK_AG_CTX_CF7_MASK 0x3
  1307. #define TSTORM_ISCSI_TASK_AG_CTX_CF7_SHIFT 0
  1308. #define TSTORM_ISCSI_TASK_AG_CTX_CF0EN_MASK 0x1
  1309. #define TSTORM_ISCSI_TASK_AG_CTX_CF0EN_SHIFT 2
  1310. #define TSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK 0x1
  1311. #define TSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT 3
  1312. #define TSTORM_ISCSI_TASK_AG_CTX_CF2EN_MASK 0x1
  1313. #define TSTORM_ISCSI_TASK_AG_CTX_CF2EN_SHIFT 4
  1314. #define TSTORM_ISCSI_TASK_AG_CTX_CF3EN_MASK 0x1
  1315. #define TSTORM_ISCSI_TASK_AG_CTX_CF3EN_SHIFT 5
  1316. #define TSTORM_ISCSI_TASK_AG_CTX_CF4EN_MASK 0x1
  1317. #define TSTORM_ISCSI_TASK_AG_CTX_CF4EN_SHIFT 6
  1318. #define TSTORM_ISCSI_TASK_AG_CTX_CF5EN_MASK 0x1
  1319. #define TSTORM_ISCSI_TASK_AG_CTX_CF5EN_SHIFT 7
  1320. u8 flags4;
  1321. #define TSTORM_ISCSI_TASK_AG_CTX_CF6EN_MASK 0x1
  1322. #define TSTORM_ISCSI_TASK_AG_CTX_CF6EN_SHIFT 0
  1323. #define TSTORM_ISCSI_TASK_AG_CTX_CF7EN_MASK 0x1
  1324. #define TSTORM_ISCSI_TASK_AG_CTX_CF7EN_SHIFT 1
  1325. #define TSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK 0x1
  1326. #define TSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT 2
  1327. #define TSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1
  1328. #define TSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 3
  1329. #define TSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK 0x1
  1330. #define TSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT 4
  1331. #define TSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1
  1332. #define TSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 5
  1333. #define TSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1
  1334. #define TSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 6
  1335. #define TSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1
  1336. #define TSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 7
  1337. u8 byte2;
  1338. __le16 word1;
  1339. __le32 reg0;
  1340. u8 byte3;
  1341. u8 byte4;
  1342. __le16 word2;
  1343. __le16 word3;
  1344. __le16 word4;
  1345. __le32 reg1;
  1346. __le32 reg2;
  1347. };
  1348. #endif /* __ISCSI_COMMON__ */