fcoe_common.h 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742
  1. /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
  2. /* QLogic qed NIC Driver
  3. * Copyright (c) 2015 QLogic Corporation
  4. * Copyright (c) 2019-2020 Marvell International Ltd.
  5. */
  6. #ifndef __FCOE_COMMON__
  7. #define __FCOE_COMMON__
  8. /*********************/
  9. /* FCOE FW CONSTANTS */
  10. /*********************/
  11. #define FC_ABTS_REPLY_MAX_PAYLOAD_LEN 12
  12. /* The fcoe storm task context protection-information of Ystorm */
  13. struct protection_info_ctx {
  14. __le16 flags;
  15. #define PROTECTION_INFO_CTX_HOST_INTERFACE_MASK 0x3
  16. #define PROTECTION_INFO_CTX_HOST_INTERFACE_SHIFT 0
  17. #define PROTECTION_INFO_CTX_DIF_TO_PEER_MASK 0x1
  18. #define PROTECTION_INFO_CTX_DIF_TO_PEER_SHIFT 2
  19. #define PROTECTION_INFO_CTX_VALIDATE_DIX_APP_TAG_MASK 0x1
  20. #define PROTECTION_INFO_CTX_VALIDATE_DIX_APP_TAG_SHIFT 3
  21. #define PROTECTION_INFO_CTX_INTERVAL_SIZE_LOG_MASK 0xF
  22. #define PROTECTION_INFO_CTX_INTERVAL_SIZE_LOG_SHIFT 4
  23. #define PROTECTION_INFO_CTX_VALIDATE_DIX_REF_TAG_MASK 0x1
  24. #define PROTECTION_INFO_CTX_VALIDATE_DIX_REF_TAG_SHIFT 8
  25. #define PROTECTION_INFO_CTX_RESERVED0_MASK 0x7F
  26. #define PROTECTION_INFO_CTX_RESERVED0_SHIFT 9
  27. u8 dix_block_size;
  28. u8 dst_size;
  29. };
  30. /* The fcoe storm task context protection-information of Ystorm */
  31. union protection_info_union_ctx {
  32. struct protection_info_ctx info;
  33. __le32 value;
  34. };
  35. /* FCP CMD payload */
  36. struct fcoe_fcp_cmd_payload {
  37. __le32 opaque[8];
  38. };
  39. /* FCP RSP payload */
  40. struct fcoe_fcp_rsp_payload {
  41. __le32 opaque[6];
  42. };
  43. /* FCP RSP payload */
  44. struct fcp_rsp_payload_padded {
  45. struct fcoe_fcp_rsp_payload rsp_payload;
  46. __le32 reserved[2];
  47. };
  48. /* FCP RSP payload */
  49. struct fcoe_fcp_xfer_payload {
  50. __le32 opaque[3];
  51. };
  52. /* FCP RSP payload */
  53. struct fcp_xfer_payload_padded {
  54. struct fcoe_fcp_xfer_payload xfer_payload;
  55. __le32 reserved[5];
  56. };
  57. /* Task params */
  58. struct fcoe_tx_data_params {
  59. __le32 data_offset;
  60. __le32 offset_in_io;
  61. u8 flags;
  62. #define FCOE_TX_DATA_PARAMS_OFFSET_IN_IO_VALID_MASK 0x1
  63. #define FCOE_TX_DATA_PARAMS_OFFSET_IN_IO_VALID_SHIFT 0
  64. #define FCOE_TX_DATA_PARAMS_DROP_DATA_MASK 0x1
  65. #define FCOE_TX_DATA_PARAMS_DROP_DATA_SHIFT 1
  66. #define FCOE_TX_DATA_PARAMS_AFTER_SEQ_REC_MASK 0x1
  67. #define FCOE_TX_DATA_PARAMS_AFTER_SEQ_REC_SHIFT 2
  68. #define FCOE_TX_DATA_PARAMS_RESERVED0_MASK 0x1F
  69. #define FCOE_TX_DATA_PARAMS_RESERVED0_SHIFT 3
  70. u8 dif_residual;
  71. __le16 seq_cnt;
  72. __le16 single_sge_saved_offset;
  73. __le16 next_dif_offset;
  74. __le16 seq_id;
  75. __le16 reserved3;
  76. };
  77. /* Middle path parameters: FC header fields provided by the driver */
  78. struct fcoe_tx_mid_path_params {
  79. __le32 parameter;
  80. u8 r_ctl;
  81. u8 type;
  82. u8 cs_ctl;
  83. u8 df_ctl;
  84. __le16 rx_id;
  85. __le16 ox_id;
  86. };
  87. /* Task params */
  88. struct fcoe_tx_params {
  89. struct fcoe_tx_data_params data;
  90. struct fcoe_tx_mid_path_params mid_path;
  91. };
  92. /* Union of FCP CMD payload \ TX params \ ABTS \ Cleanup */
  93. union fcoe_tx_info_union_ctx {
  94. struct fcoe_fcp_cmd_payload fcp_cmd_payload;
  95. struct fcp_rsp_payload_padded fcp_rsp_payload;
  96. struct fcp_xfer_payload_padded fcp_xfer_payload;
  97. struct fcoe_tx_params tx_params;
  98. };
  99. /* Data sgl */
  100. struct fcoe_slow_sgl_ctx {
  101. struct regpair base_sgl_addr;
  102. __le16 curr_sge_off;
  103. __le16 remainder_num_sges;
  104. __le16 curr_sgl_index;
  105. __le16 reserved;
  106. };
  107. /* Union of DIX SGL \ cached DIX sges */
  108. union fcoe_dix_desc_ctx {
  109. struct fcoe_slow_sgl_ctx dix_sgl;
  110. struct scsi_sge cached_dix_sge;
  111. };
  112. /* The fcoe storm task context of Ystorm */
  113. struct ystorm_fcoe_task_st_ctx {
  114. u8 task_type;
  115. u8 sgl_mode;
  116. #define YSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_MASK 0x1
  117. #define YSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_SHIFT 0
  118. #define YSTORM_FCOE_TASK_ST_CTX_RSRV_MASK 0x7F
  119. #define YSTORM_FCOE_TASK_ST_CTX_RSRV_SHIFT 1
  120. u8 cached_dix_sge;
  121. u8 expect_first_xfer;
  122. __le32 num_pbf_zero_write;
  123. union protection_info_union_ctx protection_info_union;
  124. __le32 data_2_trns_rem;
  125. struct scsi_sgl_params sgl_params;
  126. u8 reserved1[12];
  127. union fcoe_tx_info_union_ctx tx_info_union;
  128. union fcoe_dix_desc_ctx dix_desc;
  129. struct scsi_cached_sges data_desc;
  130. __le16 ox_id;
  131. __le16 rx_id;
  132. __le32 task_rety_identifier;
  133. u8 reserved2[8];
  134. };
  135. struct ystorm_fcoe_task_ag_ctx {
  136. u8 byte0;
  137. u8 byte1;
  138. __le16 word0;
  139. u8 flags0;
  140. #define YSTORM_FCOE_TASK_AG_CTX_NIBBLE0_MASK 0xF
  141. #define YSTORM_FCOE_TASK_AG_CTX_NIBBLE0_SHIFT 0
  142. #define YSTORM_FCOE_TASK_AG_CTX_BIT0_MASK 0x1
  143. #define YSTORM_FCOE_TASK_AG_CTX_BIT0_SHIFT 4
  144. #define YSTORM_FCOE_TASK_AG_CTX_BIT1_MASK 0x1
  145. #define YSTORM_FCOE_TASK_AG_CTX_BIT1_SHIFT 5
  146. #define YSTORM_FCOE_TASK_AG_CTX_BIT2_MASK 0x1
  147. #define YSTORM_FCOE_TASK_AG_CTX_BIT2_SHIFT 6
  148. #define YSTORM_FCOE_TASK_AG_CTX_BIT3_MASK 0x1
  149. #define YSTORM_FCOE_TASK_AG_CTX_BIT3_SHIFT 7
  150. u8 flags1;
  151. #define YSTORM_FCOE_TASK_AG_CTX_CF0_MASK 0x3
  152. #define YSTORM_FCOE_TASK_AG_CTX_CF0_SHIFT 0
  153. #define YSTORM_FCOE_TASK_AG_CTX_CF1_MASK 0x3
  154. #define YSTORM_FCOE_TASK_AG_CTX_CF1_SHIFT 2
  155. #define YSTORM_FCOE_TASK_AG_CTX_CF2SPECIAL_MASK 0x3
  156. #define YSTORM_FCOE_TASK_AG_CTX_CF2SPECIAL_SHIFT 4
  157. #define YSTORM_FCOE_TASK_AG_CTX_CF0EN_MASK 0x1
  158. #define YSTORM_FCOE_TASK_AG_CTX_CF0EN_SHIFT 6
  159. #define YSTORM_FCOE_TASK_AG_CTX_CF1EN_MASK 0x1
  160. #define YSTORM_FCOE_TASK_AG_CTX_CF1EN_SHIFT 7
  161. u8 flags2;
  162. #define YSTORM_FCOE_TASK_AG_CTX_BIT4_MASK 0x1
  163. #define YSTORM_FCOE_TASK_AG_CTX_BIT4_SHIFT 0
  164. #define YSTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK 0x1
  165. #define YSTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT 1
  166. #define YSTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK 0x1
  167. #define YSTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT 2
  168. #define YSTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK 0x1
  169. #define YSTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT 3
  170. #define YSTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK 0x1
  171. #define YSTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT 4
  172. #define YSTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK 0x1
  173. #define YSTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT 5
  174. #define YSTORM_FCOE_TASK_AG_CTX_RULE5EN_MASK 0x1
  175. #define YSTORM_FCOE_TASK_AG_CTX_RULE5EN_SHIFT 6
  176. #define YSTORM_FCOE_TASK_AG_CTX_RULE6EN_MASK 0x1
  177. #define YSTORM_FCOE_TASK_AG_CTX_RULE6EN_SHIFT 7
  178. u8 byte2;
  179. __le32 reg0;
  180. u8 byte3;
  181. u8 byte4;
  182. __le16 rx_id;
  183. __le16 word2;
  184. __le16 word3;
  185. __le16 word4;
  186. __le16 word5;
  187. __le32 reg1;
  188. __le32 reg2;
  189. };
  190. struct tstorm_fcoe_task_ag_ctx {
  191. u8 reserved;
  192. u8 byte1;
  193. __le16 icid;
  194. u8 flags0;
  195. #define TSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF
  196. #define TSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0
  197. #define TSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1
  198. #define TSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4
  199. #define TSTORM_FCOE_TASK_AG_CTX_BIT1_MASK 0x1
  200. #define TSTORM_FCOE_TASK_AG_CTX_BIT1_SHIFT 5
  201. #define TSTORM_FCOE_TASK_AG_CTX_WAIT_ABTS_RSP_F_MASK 0x1
  202. #define TSTORM_FCOE_TASK_AG_CTX_WAIT_ABTS_RSP_F_SHIFT 6
  203. #define TSTORM_FCOE_TASK_AG_CTX_VALID_MASK 0x1
  204. #define TSTORM_FCOE_TASK_AG_CTX_VALID_SHIFT 7
  205. u8 flags1;
  206. #define TSTORM_FCOE_TASK_AG_CTX_FALSE_RR_TOV_MASK 0x1
  207. #define TSTORM_FCOE_TASK_AG_CTX_FALSE_RR_TOV_SHIFT 0
  208. #define TSTORM_FCOE_TASK_AG_CTX_BIT5_MASK 0x1
  209. #define TSTORM_FCOE_TASK_AG_CTX_BIT5_SHIFT 1
  210. #define TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_MASK 0x3
  211. #define TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_SHIFT 2
  212. #define TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_MASK 0x3
  213. #define TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_SHIFT 4
  214. #define TSTORM_FCOE_TASK_AG_CTX_CF2_MASK 0x3
  215. #define TSTORM_FCOE_TASK_AG_CTX_CF2_SHIFT 6
  216. u8 flags2;
  217. #define TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_MASK 0x3
  218. #define TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_SHIFT 0
  219. #define TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_MASK 0x3
  220. #define TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_SHIFT 2
  221. #define TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_MASK 0x3
  222. #define TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_SHIFT 4
  223. #define TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_MASK 0x3
  224. #define TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_SHIFT 6
  225. u8 flags3;
  226. #define TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_MASK 0x3
  227. #define TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_SHIFT 0
  228. #define TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_EN_MASK 0x1
  229. #define TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_EN_SHIFT 2
  230. #define TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_EN_MASK 0x1
  231. #define TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_EN_SHIFT 3
  232. #define TSTORM_FCOE_TASK_AG_CTX_CF2EN_MASK 0x1
  233. #define TSTORM_FCOE_TASK_AG_CTX_CF2EN_SHIFT 4
  234. #define TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_EN_MASK 0x1
  235. #define TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_EN_SHIFT 5
  236. #define TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_MASK 0x1
  237. #define TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_SHIFT 6
  238. #define TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_EN_MASK 0x1
  239. #define TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_EN_SHIFT 7
  240. u8 flags4;
  241. #define TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_EN_MASK 0x1
  242. #define TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_EN_SHIFT 0
  243. #define TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_EN_MASK 0x1
  244. #define TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_EN_SHIFT 1
  245. #define TSTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK 0x1
  246. #define TSTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT 2
  247. #define TSTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK 0x1
  248. #define TSTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT 3
  249. #define TSTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK 0x1
  250. #define TSTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT 4
  251. #define TSTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK 0x1
  252. #define TSTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT 5
  253. #define TSTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK 0x1
  254. #define TSTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT 6
  255. #define TSTORM_FCOE_TASK_AG_CTX_RULE5EN_MASK 0x1
  256. #define TSTORM_FCOE_TASK_AG_CTX_RULE5EN_SHIFT 7
  257. u8 cleanup_state;
  258. __le16 last_sent_tid;
  259. __le32 rec_rr_tov_exp_timeout;
  260. u8 byte3;
  261. u8 byte4;
  262. __le16 word2;
  263. __le16 word3;
  264. __le16 word4;
  265. __le32 data_offset_end_of_seq;
  266. __le32 data_offset_next;
  267. };
  268. /* Cached data sges */
  269. struct fcoe_exp_ro {
  270. __le32 data_offset;
  271. __le32 reserved;
  272. };
  273. /* Union of Cleanup address \ expected relative offsets */
  274. union fcoe_cleanup_addr_exp_ro_union {
  275. struct regpair abts_rsp_fc_payload_hi;
  276. struct fcoe_exp_ro exp_ro;
  277. };
  278. /* Fields coppied from ABTSrsp pckt */
  279. struct fcoe_abts_pkt {
  280. __le32 abts_rsp_fc_payload_lo;
  281. __le16 abts_rsp_rx_id;
  282. u8 abts_rsp_rctl;
  283. u8 reserved2;
  284. };
  285. /* FW read- write (modifyable) part The fcoe task storm context of Tstorm */
  286. struct fcoe_tstorm_fcoe_task_st_ctx_read_write {
  287. union fcoe_cleanup_addr_exp_ro_union cleanup_addr_exp_ro_union;
  288. __le16 flags;
  289. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RX_SGL_MODE_MASK 0x1
  290. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RX_SGL_MODE_SHIFT 0
  291. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_EXP_FIRST_FRAME_MASK 0x1
  292. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_EXP_FIRST_FRAME_SHIFT 1
  293. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_ACTIVE_MASK 0x1
  294. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_ACTIVE_SHIFT 2
  295. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_TIMEOUT_MASK 0x1
  296. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_TIMEOUT_SHIFT 3
  297. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SINGLE_PKT_IN_EX_MASK 0x1
  298. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SINGLE_PKT_IN_EX_SHIFT 4
  299. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_OOO_RX_SEQ_STAT_MASK 0x1
  300. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_OOO_RX_SEQ_STAT_SHIFT 5
  301. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_CQ_ADD_ADV_MASK 0x3
  302. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_CQ_ADD_ADV_SHIFT 6
  303. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RSRV1_MASK 0xFF
  304. #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RSRV1_SHIFT 8
  305. __le16 seq_cnt;
  306. u8 seq_id;
  307. u8 ooo_rx_seq_id;
  308. __le16 rx_id;
  309. struct fcoe_abts_pkt abts_data;
  310. __le32 e_d_tov_exp_timeout_val;
  311. __le16 ooo_rx_seq_cnt;
  312. __le16 reserved1;
  313. };
  314. /* FW read only part The fcoe task storm context of Tstorm */
  315. struct fcoe_tstorm_fcoe_task_st_ctx_read_only {
  316. u8 task_type;
  317. u8 dev_type;
  318. u8 conf_supported;
  319. u8 glbl_q_num;
  320. __le32 cid;
  321. __le32 fcp_cmd_trns_size;
  322. __le32 rsrv;
  323. };
  324. /** The fcoe task storm context of Tstorm */
  325. struct tstorm_fcoe_task_st_ctx {
  326. struct fcoe_tstorm_fcoe_task_st_ctx_read_write read_write;
  327. struct fcoe_tstorm_fcoe_task_st_ctx_read_only read_only;
  328. };
  329. struct mstorm_fcoe_task_ag_ctx {
  330. u8 byte0;
  331. u8 byte1;
  332. __le16 icid;
  333. u8 flags0;
  334. #define MSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF
  335. #define MSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0
  336. #define MSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1
  337. #define MSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4
  338. #define MSTORM_FCOE_TASK_AG_CTX_CQE_PLACED_MASK 0x1
  339. #define MSTORM_FCOE_TASK_AG_CTX_CQE_PLACED_SHIFT 5
  340. #define MSTORM_FCOE_TASK_AG_CTX_BIT2_MASK 0x1
  341. #define MSTORM_FCOE_TASK_AG_CTX_BIT2_SHIFT 6
  342. #define MSTORM_FCOE_TASK_AG_CTX_BIT3_MASK 0x1
  343. #define MSTORM_FCOE_TASK_AG_CTX_BIT3_SHIFT 7
  344. u8 flags1;
  345. #define MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_MASK 0x3
  346. #define MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_SHIFT 0
  347. #define MSTORM_FCOE_TASK_AG_CTX_CF1_MASK 0x3
  348. #define MSTORM_FCOE_TASK_AG_CTX_CF1_SHIFT 2
  349. #define MSTORM_FCOE_TASK_AG_CTX_CF2_MASK 0x3
  350. #define MSTORM_FCOE_TASK_AG_CTX_CF2_SHIFT 4
  351. #define MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_MASK 0x1
  352. #define MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_SHIFT 6
  353. #define MSTORM_FCOE_TASK_AG_CTX_CF1EN_MASK 0x1
  354. #define MSTORM_FCOE_TASK_AG_CTX_CF1EN_SHIFT 7
  355. u8 flags2;
  356. #define MSTORM_FCOE_TASK_AG_CTX_CF2EN_MASK 0x1
  357. #define MSTORM_FCOE_TASK_AG_CTX_CF2EN_SHIFT 0
  358. #define MSTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK 0x1
  359. #define MSTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT 1
  360. #define MSTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK 0x1
  361. #define MSTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT 2
  362. #define MSTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK 0x1
  363. #define MSTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT 3
  364. #define MSTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK 0x1
  365. #define MSTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT 4
  366. #define MSTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK 0x1
  367. #define MSTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT 5
  368. #define MSTORM_FCOE_TASK_AG_CTX_XFER_PLACEMENT_EN_MASK 0x1
  369. #define MSTORM_FCOE_TASK_AG_CTX_XFER_PLACEMENT_EN_SHIFT 6
  370. #define MSTORM_FCOE_TASK_AG_CTX_RULE6EN_MASK 0x1
  371. #define MSTORM_FCOE_TASK_AG_CTX_RULE6EN_SHIFT 7
  372. u8 cleanup_state;
  373. __le32 received_bytes;
  374. u8 byte3;
  375. u8 glbl_q_num;
  376. __le16 word1;
  377. __le16 tid_to_xfer;
  378. __le16 word3;
  379. __le16 word4;
  380. __le16 word5;
  381. __le32 expected_bytes;
  382. __le32 reg2;
  383. };
  384. /* The fcoe task storm context of Mstorm */
  385. struct mstorm_fcoe_task_st_ctx {
  386. struct regpair rsp_buf_addr;
  387. __le32 rsrv[2];
  388. struct scsi_sgl_params sgl_params;
  389. __le32 data_2_trns_rem;
  390. __le32 data_buffer_offset;
  391. __le16 parent_id;
  392. __le16 flags;
  393. #define MSTORM_FCOE_TASK_ST_CTX_INTERVAL_SIZE_LOG_MASK 0xF
  394. #define MSTORM_FCOE_TASK_ST_CTX_INTERVAL_SIZE_LOG_SHIFT 0
  395. #define MSTORM_FCOE_TASK_ST_CTX_HOST_INTERFACE_MASK 0x3
  396. #define MSTORM_FCOE_TASK_ST_CTX_HOST_INTERFACE_SHIFT 4
  397. #define MSTORM_FCOE_TASK_ST_CTX_DIF_TO_PEER_MASK 0x1
  398. #define MSTORM_FCOE_TASK_ST_CTX_DIF_TO_PEER_SHIFT 6
  399. #define MSTORM_FCOE_TASK_ST_CTX_MP_INCLUDE_FC_HEADER_MASK 0x1
  400. #define MSTORM_FCOE_TASK_ST_CTX_MP_INCLUDE_FC_HEADER_SHIFT 7
  401. #define MSTORM_FCOE_TASK_ST_CTX_DIX_BLOCK_SIZE_MASK 0x3
  402. #define MSTORM_FCOE_TASK_ST_CTX_DIX_BLOCK_SIZE_SHIFT 8
  403. #define MSTORM_FCOE_TASK_ST_CTX_VALIDATE_DIX_REF_TAG_MASK 0x1
  404. #define MSTORM_FCOE_TASK_ST_CTX_VALIDATE_DIX_REF_TAG_SHIFT 10
  405. #define MSTORM_FCOE_TASK_ST_CTX_DIX_CACHED_SGE_FLG_MASK 0x1
  406. #define MSTORM_FCOE_TASK_ST_CTX_DIX_CACHED_SGE_FLG_SHIFT 11
  407. #define MSTORM_FCOE_TASK_ST_CTX_DIF_SUPPORTED_MASK 0x1
  408. #define MSTORM_FCOE_TASK_ST_CTX_DIF_SUPPORTED_SHIFT 12
  409. #define MSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_MASK 0x1
  410. #define MSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_SHIFT 13
  411. #define MSTORM_FCOE_TASK_ST_CTX_RESERVED_MASK 0x3
  412. #define MSTORM_FCOE_TASK_ST_CTX_RESERVED_SHIFT 14
  413. struct scsi_cached_sges data_desc;
  414. };
  415. struct ustorm_fcoe_task_ag_ctx {
  416. u8 reserved;
  417. u8 byte1;
  418. __le16 icid;
  419. u8 flags0;
  420. #define USTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF
  421. #define USTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0
  422. #define USTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1
  423. #define USTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4
  424. #define USTORM_FCOE_TASK_AG_CTX_BIT1_MASK 0x1
  425. #define USTORM_FCOE_TASK_AG_CTX_BIT1_SHIFT 5
  426. #define USTORM_FCOE_TASK_AG_CTX_CF0_MASK 0x3
  427. #define USTORM_FCOE_TASK_AG_CTX_CF0_SHIFT 6
  428. u8 flags1;
  429. #define USTORM_FCOE_TASK_AG_CTX_CF1_MASK 0x3
  430. #define USTORM_FCOE_TASK_AG_CTX_CF1_SHIFT 0
  431. #define USTORM_FCOE_TASK_AG_CTX_CF2_MASK 0x3
  432. #define USTORM_FCOE_TASK_AG_CTX_CF2_SHIFT 2
  433. #define USTORM_FCOE_TASK_AG_CTX_CF3_MASK 0x3
  434. #define USTORM_FCOE_TASK_AG_CTX_CF3_SHIFT 4
  435. #define USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_MASK 0x3
  436. #define USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_SHIFT 6
  437. u8 flags2;
  438. #define USTORM_FCOE_TASK_AG_CTX_CF0EN_MASK 0x1
  439. #define USTORM_FCOE_TASK_AG_CTX_CF0EN_SHIFT 0
  440. #define USTORM_FCOE_TASK_AG_CTX_CF1EN_MASK 0x1
  441. #define USTORM_FCOE_TASK_AG_CTX_CF1EN_SHIFT 1
  442. #define USTORM_FCOE_TASK_AG_CTX_CF2EN_MASK 0x1
  443. #define USTORM_FCOE_TASK_AG_CTX_CF2EN_SHIFT 2
  444. #define USTORM_FCOE_TASK_AG_CTX_CF3EN_MASK 0x1
  445. #define USTORM_FCOE_TASK_AG_CTX_CF3EN_SHIFT 3
  446. #define USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_EN_MASK 0x1
  447. #define USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_EN_SHIFT 4
  448. #define USTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK 0x1
  449. #define USTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT 5
  450. #define USTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK 0x1
  451. #define USTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT 6
  452. #define USTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK 0x1
  453. #define USTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT 7
  454. u8 flags3;
  455. #define USTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK 0x1
  456. #define USTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT 0
  457. #define USTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK 0x1
  458. #define USTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT 1
  459. #define USTORM_FCOE_TASK_AG_CTX_RULE5EN_MASK 0x1
  460. #define USTORM_FCOE_TASK_AG_CTX_RULE5EN_SHIFT 2
  461. #define USTORM_FCOE_TASK_AG_CTX_RULE6EN_MASK 0x1
  462. #define USTORM_FCOE_TASK_AG_CTX_RULE6EN_SHIFT 3
  463. #define USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_TYPE_MASK 0xF
  464. #define USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_TYPE_SHIFT 4
  465. __le32 dif_err_intervals;
  466. __le32 dif_error_1st_interval;
  467. __le32 global_cq_num;
  468. __le32 reg3;
  469. __le32 reg4;
  470. __le32 reg5;
  471. };
  472. /* FCoE task context */
  473. struct fcoe_task_context {
  474. struct ystorm_fcoe_task_st_ctx ystorm_st_context;
  475. struct regpair ystorm_st_padding[2];
  476. struct tdif_task_context tdif_context;
  477. struct ystorm_fcoe_task_ag_ctx ystorm_ag_context;
  478. struct tstorm_fcoe_task_ag_ctx tstorm_ag_context;
  479. struct timers_context timer_context;
  480. struct tstorm_fcoe_task_st_ctx tstorm_st_context;
  481. struct regpair tstorm_st_padding[2];
  482. struct mstorm_fcoe_task_ag_ctx mstorm_ag_context;
  483. struct mstorm_fcoe_task_st_ctx mstorm_st_context;
  484. struct ustorm_fcoe_task_ag_ctx ustorm_ag_context;
  485. struct rdif_task_context rdif_context;
  486. };
  487. /* FCoE additional WQE (Sq/XferQ) information */
  488. union fcoe_additional_info_union {
  489. __le32 previous_tid;
  490. __le32 parent_tid;
  491. __le32 burst_length;
  492. __le32 seq_rec_updated_offset;
  493. };
  494. /* FCoE Ramrod Command IDs */
  495. enum fcoe_completion_status {
  496. FCOE_COMPLETION_STATUS_SUCCESS,
  497. FCOE_COMPLETION_STATUS_FCOE_VER_ERR,
  498. FCOE_COMPLETION_STATUS_SRC_MAC_ADD_ARR_ERR,
  499. MAX_FCOE_COMPLETION_STATUS
  500. };
  501. /* FC address (SID/DID) network presentation */
  502. struct fc_addr_nw {
  503. u8 addr_lo;
  504. u8 addr_mid;
  505. u8 addr_hi;
  506. };
  507. /* FCoE connection offload */
  508. struct fcoe_conn_offload_ramrod_data {
  509. struct regpair sq_pbl_addr;
  510. struct regpair sq_curr_page_addr;
  511. struct regpair sq_next_page_addr;
  512. struct regpair xferq_pbl_addr;
  513. struct regpair xferq_curr_page_addr;
  514. struct regpair xferq_next_page_addr;
  515. struct regpair respq_pbl_addr;
  516. struct regpair respq_curr_page_addr;
  517. struct regpair respq_next_page_addr;
  518. __le16 dst_mac_addr_lo;
  519. __le16 dst_mac_addr_mid;
  520. __le16 dst_mac_addr_hi;
  521. __le16 src_mac_addr_lo;
  522. __le16 src_mac_addr_mid;
  523. __le16 src_mac_addr_hi;
  524. __le16 tx_max_fc_pay_len;
  525. __le16 e_d_tov_timer_val;
  526. __le16 rx_max_fc_pay_len;
  527. __le16 vlan_tag;
  528. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_VLAN_ID_MASK 0xFFF
  529. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_VLAN_ID_SHIFT 0
  530. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_CFI_MASK 0x1
  531. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_CFI_SHIFT 12
  532. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_PRIORITY_MASK 0x7
  533. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_PRIORITY_SHIFT 13
  534. __le16 physical_q0;
  535. __le16 rec_rr_tov_timer_val;
  536. struct fc_addr_nw s_id;
  537. u8 max_conc_seqs_c3;
  538. struct fc_addr_nw d_id;
  539. u8 flags;
  540. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONT_INCR_SEQ_CNT_MASK 0x1
  541. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONT_INCR_SEQ_CNT_SHIFT 0
  542. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONF_REQ_MASK 0x1
  543. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONF_REQ_SHIFT 1
  544. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_REC_VALID_MASK 0x1
  545. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_REC_VALID_SHIFT 2
  546. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_VLAN_FLAG_MASK 0x1
  547. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_VLAN_FLAG_SHIFT 3
  548. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_SINGLE_VLAN_MASK 0x1
  549. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_SINGLE_VLAN_SHIFT 4
  550. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_MODE_MASK 0x3
  551. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_MODE_SHIFT 5
  552. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_RESERVED0_MASK 0x1
  553. #define FCOE_CONN_OFFLOAD_RAMROD_DATA_RESERVED0_SHIFT 7
  554. __le16 conn_id;
  555. u8 def_q_idx;
  556. u8 reserved[5];
  557. };
  558. /* FCoE terminate connection request */
  559. struct fcoe_conn_terminate_ramrod_data {
  560. struct regpair terminate_params_addr;
  561. };
  562. /* FCoE device type */
  563. enum fcoe_device_type {
  564. FCOE_TASK_DEV_TYPE_DISK,
  565. FCOE_TASK_DEV_TYPE_TAPE,
  566. MAX_FCOE_DEVICE_TYPE
  567. };
  568. /* Data sgl */
  569. struct fcoe_fast_sgl_ctx {
  570. struct regpair sgl_start_addr;
  571. __le32 sgl_byte_offset;
  572. __le16 task_reuse_cnt;
  573. __le16 init_offset_in_first_sge;
  574. };
  575. /* FCoE firmware function init */
  576. struct fcoe_init_func_ramrod_data {
  577. struct scsi_init_func_params func_params;
  578. struct scsi_init_func_queues q_params;
  579. __le16 mtu;
  580. __le16 sq_num_pages_in_pbl;
  581. __le32 reserved[3];
  582. };
  583. /* FCoE: Mode of the connection: Target or Initiator or both */
  584. enum fcoe_mode_type {
  585. FCOE_INITIATOR_MODE = 0x0,
  586. FCOE_TARGET_MODE = 0x1,
  587. FCOE_BOTH_OR_NOT_CHOSEN = 0x3,
  588. MAX_FCOE_MODE_TYPE
  589. };
  590. /* Per PF FCoE receive path statistics - tStorm RAM structure */
  591. struct fcoe_rx_stat {
  592. struct regpair fcoe_rx_byte_cnt;
  593. struct regpair fcoe_rx_data_pkt_cnt;
  594. struct regpair fcoe_rx_xfer_pkt_cnt;
  595. struct regpair fcoe_rx_other_pkt_cnt;
  596. __le32 fcoe_silent_drop_pkt_cmdq_full_cnt;
  597. __le32 fcoe_silent_drop_pkt_rq_full_cnt;
  598. __le32 fcoe_silent_drop_pkt_crc_error_cnt;
  599. __le32 fcoe_silent_drop_pkt_task_invalid_cnt;
  600. __le32 fcoe_silent_drop_total_pkt_cnt;
  601. __le32 rsrv;
  602. };
  603. /* FCoE SQE request type */
  604. enum fcoe_sqe_request_type {
  605. SEND_FCOE_CMD,
  606. SEND_FCOE_MIDPATH,
  607. SEND_FCOE_ABTS_REQUEST,
  608. FCOE_EXCHANGE_CLEANUP,
  609. FCOE_SEQUENCE_RECOVERY,
  610. SEND_FCOE_XFER_RDY,
  611. SEND_FCOE_RSP,
  612. SEND_FCOE_RSP_WITH_SENSE_DATA,
  613. SEND_FCOE_TARGET_DATA,
  614. SEND_FCOE_INITIATOR_DATA,
  615. SEND_FCOE_XFER_CONTINUATION_RDY,
  616. SEND_FCOE_TARGET_ABTS_RSP,
  617. MAX_FCOE_SQE_REQUEST_TYPE
  618. };
  619. /* FCoe statistics request */
  620. struct fcoe_stat_ramrod_data {
  621. struct regpair stat_params_addr;
  622. };
  623. /* FCoE task type */
  624. enum fcoe_task_type {
  625. FCOE_TASK_TYPE_WRITE_INITIATOR,
  626. FCOE_TASK_TYPE_READ_INITIATOR,
  627. FCOE_TASK_TYPE_MIDPATH,
  628. FCOE_TASK_TYPE_UNSOLICITED,
  629. FCOE_TASK_TYPE_ABTS,
  630. FCOE_TASK_TYPE_EXCHANGE_CLEANUP,
  631. FCOE_TASK_TYPE_SEQUENCE_CLEANUP,
  632. FCOE_TASK_TYPE_WRITE_TARGET,
  633. FCOE_TASK_TYPE_READ_TARGET,
  634. FCOE_TASK_TYPE_RSP,
  635. FCOE_TASK_TYPE_RSP_SENSE_DATA,
  636. FCOE_TASK_TYPE_ABTS_TARGET,
  637. FCOE_TASK_TYPE_ENUM_SIZE,
  638. MAX_FCOE_TASK_TYPE
  639. };
  640. /* Per PF FCoE transmit path statistics - pStorm RAM structure */
  641. struct fcoe_tx_stat {
  642. struct regpair fcoe_tx_byte_cnt;
  643. struct regpair fcoe_tx_data_pkt_cnt;
  644. struct regpair fcoe_tx_xfer_pkt_cnt;
  645. struct regpair fcoe_tx_other_pkt_cnt;
  646. };
  647. /* FCoE SQ/XferQ element */
  648. struct fcoe_wqe {
  649. __le16 task_id;
  650. __le16 flags;
  651. #define FCOE_WQE_REQ_TYPE_MASK 0xF
  652. #define FCOE_WQE_REQ_TYPE_SHIFT 0
  653. #define FCOE_WQE_SGL_MODE_MASK 0x1
  654. #define FCOE_WQE_SGL_MODE_SHIFT 4
  655. #define FCOE_WQE_CONTINUATION_MASK 0x1
  656. #define FCOE_WQE_CONTINUATION_SHIFT 5
  657. #define FCOE_WQE_SEND_AUTO_RSP_MASK 0x1
  658. #define FCOE_WQE_SEND_AUTO_RSP_SHIFT 6
  659. #define FCOE_WQE_RESERVED_MASK 0x1
  660. #define FCOE_WQE_RESERVED_SHIFT 7
  661. #define FCOE_WQE_NUM_SGES_MASK 0xF
  662. #define FCOE_WQE_NUM_SGES_SHIFT 8
  663. #define FCOE_WQE_RESERVED1_MASK 0xF
  664. #define FCOE_WQE_RESERVED1_SHIFT 12
  665. union fcoe_additional_info_union additional_info_union;
  666. };
  667. /* FCoE XFRQ element */
  668. struct xfrqe_prot_flags {
  669. u8 flags;
  670. #define XFRQE_PROT_FLAGS_PROT_INTERVAL_SIZE_LOG_MASK 0xF
  671. #define XFRQE_PROT_FLAGS_PROT_INTERVAL_SIZE_LOG_SHIFT 0
  672. #define XFRQE_PROT_FLAGS_DIF_TO_PEER_MASK 0x1
  673. #define XFRQE_PROT_FLAGS_DIF_TO_PEER_SHIFT 4
  674. #define XFRQE_PROT_FLAGS_HOST_INTERFACE_MASK 0x3
  675. #define XFRQE_PROT_FLAGS_HOST_INTERFACE_SHIFT 5
  676. #define XFRQE_PROT_FLAGS_RESERVED_MASK 0x1
  677. #define XFRQE_PROT_FLAGS_RESERVED_SHIFT 7
  678. };
  679. /* FCoE doorbell data */
  680. struct fcoe_db_data {
  681. u8 params;
  682. #define FCOE_DB_DATA_DEST_MASK 0x3
  683. #define FCOE_DB_DATA_DEST_SHIFT 0
  684. #define FCOE_DB_DATA_AGG_CMD_MASK 0x3
  685. #define FCOE_DB_DATA_AGG_CMD_SHIFT 2
  686. #define FCOE_DB_DATA_BYPASS_EN_MASK 0x1
  687. #define FCOE_DB_DATA_BYPASS_EN_SHIFT 4
  688. #define FCOE_DB_DATA_RESERVED_MASK 0x1
  689. #define FCOE_DB_DATA_RESERVED_SHIFT 5
  690. #define FCOE_DB_DATA_AGG_VAL_SEL_MASK 0x3
  691. #define FCOE_DB_DATA_AGG_VAL_SEL_SHIFT 6
  692. u8 agg_flags;
  693. __le16 sq_prod;
  694. };
  695. #endif /* __FCOE_COMMON__ */