57xx_hsi_bnx2fc.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991
  1. #ifndef __57XX_FCOE_HSI_LINUX_LE__
  2. #define __57XX_FCOE_HSI_LINUX_LE__
  3. /*
  4. * common data for all protocols
  5. */
  6. struct b577xx_doorbell_hdr {
  7. u8 header;
  8. #define B577XX_DOORBELL_HDR_RX (0x1<<0)
  9. #define B577XX_DOORBELL_HDR_RX_SHIFT 0
  10. #define B577XX_DOORBELL_HDR_DB_TYPE (0x1<<1)
  11. #define B577XX_DOORBELL_HDR_DB_TYPE_SHIFT 1
  12. #define B577XX_DOORBELL_HDR_DPM_SIZE (0x3<<2)
  13. #define B577XX_DOORBELL_HDR_DPM_SIZE_SHIFT 2
  14. #define B577XX_DOORBELL_HDR_CONN_TYPE (0xF<<4)
  15. #define B577XX_DOORBELL_HDR_CONN_TYPE_SHIFT 4
  16. };
  17. /*
  18. * doorbell message sent to the chip
  19. */
  20. struct b577xx_doorbell {
  21. #if defined(__BIG_ENDIAN)
  22. u16 zero_fill2;
  23. u8 zero_fill1;
  24. struct b577xx_doorbell_hdr header;
  25. #elif defined(__LITTLE_ENDIAN)
  26. struct b577xx_doorbell_hdr header;
  27. u8 zero_fill1;
  28. u16 zero_fill2;
  29. #endif
  30. };
  31. /*
  32. * doorbell message sent to the chip
  33. */
  34. struct b577xx_doorbell_set_prod {
  35. #if defined(__BIG_ENDIAN)
  36. u16 prod;
  37. u8 zero_fill1;
  38. struct b577xx_doorbell_hdr header;
  39. #elif defined(__LITTLE_ENDIAN)
  40. struct b577xx_doorbell_hdr header;
  41. u8 zero_fill1;
  42. u16 prod;
  43. #endif
  44. };
  45. struct regpair {
  46. __le32 lo;
  47. __le32 hi;
  48. };
  49. /*
  50. * ABTS info $$KEEP_ENDIANNESS$$
  51. */
  52. struct fcoe_abts_info {
  53. __le16 aborted_task_id;
  54. __le16 reserved0;
  55. __le32 reserved1;
  56. };
  57. /*
  58. * Fixed size structure in order to plant it in Union structure
  59. * $$KEEP_ENDIANNESS$$
  60. */
  61. struct fcoe_abts_rsp_union {
  62. u8 r_ctl;
  63. u8 rsrv[3];
  64. __le32 abts_rsp_payload[7];
  65. };
  66. /*
  67. * 4 regs size $$KEEP_ENDIANNESS$$
  68. */
  69. struct fcoe_bd_ctx {
  70. __le32 buf_addr_hi;
  71. __le32 buf_addr_lo;
  72. __le16 buf_len;
  73. __le16 rsrv0;
  74. __le16 flags;
  75. __le16 rsrv1;
  76. };
  77. /*
  78. * FCoE cached sges context $$KEEP_ENDIANNESS$$
  79. */
  80. struct fcoe_cached_sge_ctx {
  81. struct regpair cur_buf_addr;
  82. __le16 cur_buf_rem;
  83. __le16 second_buf_rem;
  84. struct regpair second_buf_addr;
  85. };
  86. /*
  87. * Cleanup info $$KEEP_ENDIANNESS$$
  88. */
  89. struct fcoe_cleanup_info {
  90. __le16 cleaned_task_id;
  91. __le16 rolled_tx_seq_cnt;
  92. __le32 rolled_tx_data_offset;
  93. };
  94. /*
  95. * Fcp RSP flags $$KEEP_ENDIANNESS$$
  96. */
  97. struct fcoe_fcp_rsp_flags {
  98. u8 flags;
  99. #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID (0x1<<0)
  100. #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_SHIFT 0
  101. #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID (0x1<<1)
  102. #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_SHIFT 1
  103. #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER (0x1<<2)
  104. #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_SHIFT 2
  105. #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER (0x1<<3)
  106. #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_SHIFT 3
  107. #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ (0x1<<4)
  108. #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_SHIFT 4
  109. #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS (0x7<<5)
  110. #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_SHIFT 5
  111. };
  112. /*
  113. * Fcp RSP payload $$KEEP_ENDIANNESS$$
  114. */
  115. struct fcoe_fcp_rsp_payload {
  116. struct regpair reserved0;
  117. __le32 fcp_resid;
  118. u8 scsi_status_code;
  119. struct fcoe_fcp_rsp_flags fcp_flags;
  120. __le16 retry_delay_timer;
  121. __le32 fcp_rsp_len;
  122. __le32 fcp_sns_len;
  123. };
  124. /*
  125. * Fixed size structure in order to plant it in Union structure
  126. * $$KEEP_ENDIANNESS$$
  127. */
  128. struct fcoe_fcp_rsp_union {
  129. struct fcoe_fcp_rsp_payload payload;
  130. struct regpair reserved0;
  131. };
  132. /*
  133. * FC header $$KEEP_ENDIANNESS$$
  134. */
  135. struct fcoe_fc_hdr {
  136. u8 s_id[3];
  137. u8 cs_ctl;
  138. u8 d_id[3];
  139. u8 r_ctl;
  140. __le16 seq_cnt;
  141. u8 df_ctl;
  142. u8 seq_id;
  143. u8 f_ctl[3];
  144. u8 type;
  145. __le32 parameters;
  146. __le16 rx_id;
  147. __le16 ox_id;
  148. };
  149. /*
  150. * FC header union $$KEEP_ENDIANNESS$$
  151. */
  152. struct fcoe_mp_rsp_union {
  153. struct fcoe_fc_hdr fc_hdr;
  154. __le32 mp_payload_len;
  155. __le32 rsrv;
  156. };
  157. /*
  158. * Completion information $$KEEP_ENDIANNESS$$
  159. */
  160. union fcoe_comp_flow_info {
  161. struct fcoe_fcp_rsp_union fcp_rsp;
  162. struct fcoe_abts_rsp_union abts_rsp;
  163. struct fcoe_mp_rsp_union mp_rsp;
  164. __le32 opaque[8];
  165. };
  166. /*
  167. * External ABTS info $$KEEP_ENDIANNESS$$
  168. */
  169. struct fcoe_ext_abts_info {
  170. __le32 rsrv0[6];
  171. struct fcoe_abts_info ctx;
  172. };
  173. /*
  174. * External cleanup info $$KEEP_ENDIANNESS$$
  175. */
  176. struct fcoe_ext_cleanup_info {
  177. __le32 rsrv0[6];
  178. struct fcoe_cleanup_info ctx;
  179. };
  180. /*
  181. * Fcoe FW Tx sequence context $$KEEP_ENDIANNESS$$
  182. */
  183. struct fcoe_fw_tx_seq_ctx {
  184. __le32 data_offset;
  185. __le16 seq_cnt;
  186. __le16 rsrv0;
  187. };
  188. /*
  189. * Fcoe external FW Tx sequence context $$KEEP_ENDIANNESS$$
  190. */
  191. struct fcoe_ext_fw_tx_seq_ctx {
  192. __le32 rsrv0[6];
  193. struct fcoe_fw_tx_seq_ctx ctx;
  194. };
  195. /*
  196. * FCoE multiple sges context $$KEEP_ENDIANNESS$$
  197. */
  198. struct fcoe_mul_sges_ctx {
  199. struct regpair cur_sge_addr;
  200. __le16 cur_sge_off;
  201. u8 cur_sge_idx;
  202. u8 sgl_size;
  203. };
  204. /*
  205. * FCoE external multiple sges context $$KEEP_ENDIANNESS$$
  206. */
  207. struct fcoe_ext_mul_sges_ctx {
  208. struct fcoe_mul_sges_ctx mul_sgl;
  209. struct regpair rsrv0;
  210. };
  211. /*
  212. * FCP CMD payload $$KEEP_ENDIANNESS$$
  213. */
  214. struct fcoe_fcp_cmd_payload {
  215. __le32 opaque[8];
  216. };
  217. /*
  218. * Fcp xfr rdy payload $$KEEP_ENDIANNESS$$
  219. */
  220. struct fcoe_fcp_xfr_rdy_payload {
  221. __le32 burst_len;
  222. __le32 data_ro;
  223. };
  224. /*
  225. * FC frame $$KEEP_ENDIANNESS$$
  226. */
  227. struct fcoe_fc_frame {
  228. struct fcoe_fc_hdr fc_hdr;
  229. __le32 reserved0[2];
  230. };
  231. /*
  232. * FCoE KCQ CQE parameters $$KEEP_ENDIANNESS$$
  233. */
  234. union fcoe_kcqe_params {
  235. __le32 reserved0[4];
  236. };
  237. /*
  238. * FCoE KCQ CQE $$KEEP_ENDIANNESS$$
  239. */
  240. struct fcoe_kcqe {
  241. __le32 fcoe_conn_id;
  242. __le32 completion_status;
  243. __le32 fcoe_conn_context_id;
  244. union fcoe_kcqe_params params;
  245. __le16 qe_self_seq;
  246. u8 op_code;
  247. u8 flags;
  248. #define FCOE_KCQE_RESERVED0 (0x7<<0)
  249. #define FCOE_KCQE_RESERVED0_SHIFT 0
  250. #define FCOE_KCQE_RAMROD_COMPLETION (0x1<<3)
  251. #define FCOE_KCQE_RAMROD_COMPLETION_SHIFT 3
  252. #define FCOE_KCQE_LAYER_CODE (0x7<<4)
  253. #define FCOE_KCQE_LAYER_CODE_SHIFT 4
  254. #define FCOE_KCQE_LINKED_WITH_NEXT (0x1<<7)
  255. #define FCOE_KCQE_LINKED_WITH_NEXT_SHIFT 7
  256. };
  257. /*
  258. * FCoE KWQE header $$KEEP_ENDIANNESS$$
  259. */
  260. struct fcoe_kwqe_header {
  261. u8 op_code;
  262. u8 flags;
  263. #define FCOE_KWQE_HEADER_RESERVED0 (0xF<<0)
  264. #define FCOE_KWQE_HEADER_RESERVED0_SHIFT 0
  265. #define FCOE_KWQE_HEADER_LAYER_CODE (0x7<<4)
  266. #define FCOE_KWQE_HEADER_LAYER_CODE_SHIFT 4
  267. #define FCOE_KWQE_HEADER_RESERVED1 (0x1<<7)
  268. #define FCOE_KWQE_HEADER_RESERVED1_SHIFT 7
  269. };
  270. /*
  271. * FCoE firmware init request 1 $$KEEP_ENDIANNESS$$
  272. */
  273. struct fcoe_kwqe_init1 {
  274. __le16 num_tasks;
  275. struct fcoe_kwqe_header hdr;
  276. __le32 task_list_pbl_addr_lo;
  277. __le32 task_list_pbl_addr_hi;
  278. __le32 dummy_buffer_addr_lo;
  279. __le32 dummy_buffer_addr_hi;
  280. __le16 sq_num_wqes;
  281. __le16 rq_num_wqes;
  282. __le16 rq_buffer_log_size;
  283. __le16 cq_num_wqes;
  284. __le16 mtu;
  285. u8 num_sessions_log;
  286. u8 flags;
  287. #define FCOE_KWQE_INIT1_LOG_PAGE_SIZE (0xF<<0)
  288. #define FCOE_KWQE_INIT1_LOG_PAGE_SIZE_SHIFT 0
  289. #define FCOE_KWQE_INIT1_LOG_CACHED_PBES_PER_FUNC (0x7<<4)
  290. #define FCOE_KWQE_INIT1_LOG_CACHED_PBES_PER_FUNC_SHIFT 4
  291. #define FCOE_KWQE_INIT1_RESERVED1 (0x1<<7)
  292. #define FCOE_KWQE_INIT1_RESERVED1_SHIFT 7
  293. };
  294. /*
  295. * FCoE firmware init request 2 $$KEEP_ENDIANNESS$$
  296. */
  297. struct fcoe_kwqe_init2 {
  298. u8 hsi_major_version;
  299. u8 hsi_minor_version;
  300. struct fcoe_kwqe_header hdr;
  301. __le32 hash_tbl_pbl_addr_lo;
  302. __le32 hash_tbl_pbl_addr_hi;
  303. __le32 t2_hash_tbl_addr_lo;
  304. __le32 t2_hash_tbl_addr_hi;
  305. __le32 t2_ptr_hash_tbl_addr_lo;
  306. __le32 t2_ptr_hash_tbl_addr_hi;
  307. __le32 free_list_count;
  308. };
  309. /*
  310. * FCoE firmware init request 3 $$KEEP_ENDIANNESS$$
  311. */
  312. struct fcoe_kwqe_init3 {
  313. __le16 reserved0;
  314. struct fcoe_kwqe_header hdr;
  315. __le32 error_bit_map_lo;
  316. __le32 error_bit_map_hi;
  317. u8 perf_config;
  318. u8 reserved21[3];
  319. __le32 reserved2[4];
  320. };
  321. /*
  322. * FCoE connection offload request 1 $$KEEP_ENDIANNESS$$
  323. */
  324. struct fcoe_kwqe_conn_offload1 {
  325. __le16 fcoe_conn_id;
  326. struct fcoe_kwqe_header hdr;
  327. __le32 sq_addr_lo;
  328. __le32 sq_addr_hi;
  329. __le32 rq_pbl_addr_lo;
  330. __le32 rq_pbl_addr_hi;
  331. __le32 rq_first_pbe_addr_lo;
  332. __le32 rq_first_pbe_addr_hi;
  333. __le16 rq_prod;
  334. __le16 reserved0;
  335. };
  336. /*
  337. * FCoE connection offload request 2 $$KEEP_ENDIANNESS$$
  338. */
  339. struct fcoe_kwqe_conn_offload2 {
  340. __le16 tx_max_fc_pay_len;
  341. struct fcoe_kwqe_header hdr;
  342. __le32 cq_addr_lo;
  343. __le32 cq_addr_hi;
  344. __le32 xferq_addr_lo;
  345. __le32 xferq_addr_hi;
  346. __le32 conn_db_addr_lo;
  347. __le32 conn_db_addr_hi;
  348. __le32 reserved1;
  349. };
  350. /*
  351. * FCoE connection offload request 3 $$KEEP_ENDIANNESS$$
  352. */
  353. struct fcoe_kwqe_conn_offload3 {
  354. __le16 vlan_tag;
  355. #define FCOE_KWQE_CONN_OFFLOAD3_VLAN_ID (0xFFF<<0)
  356. #define FCOE_KWQE_CONN_OFFLOAD3_VLAN_ID_SHIFT 0
  357. #define FCOE_KWQE_CONN_OFFLOAD3_CFI (0x1<<12)
  358. #define FCOE_KWQE_CONN_OFFLOAD3_CFI_SHIFT 12
  359. #define FCOE_KWQE_CONN_OFFLOAD3_PRIORITY (0x7<<13)
  360. #define FCOE_KWQE_CONN_OFFLOAD3_PRIORITY_SHIFT 13
  361. struct fcoe_kwqe_header hdr;
  362. u8 s_id[3];
  363. u8 tx_max_conc_seqs_c3;
  364. u8 d_id[3];
  365. u8 flags;
  366. #define FCOE_KWQE_CONN_OFFLOAD3_B_MUL_N_PORT_IDS (0x1<<0)
  367. #define FCOE_KWQE_CONN_OFFLOAD3_B_MUL_N_PORT_IDS_SHIFT 0
  368. #define FCOE_KWQE_CONN_OFFLOAD3_B_E_D_TOV_RES (0x1<<1)
  369. #define FCOE_KWQE_CONN_OFFLOAD3_B_E_D_TOV_RES_SHIFT 1
  370. #define FCOE_KWQE_CONN_OFFLOAD3_B_CONT_INCR_SEQ_CNT (0x1<<2)
  371. #define FCOE_KWQE_CONN_OFFLOAD3_B_CONT_INCR_SEQ_CNT_SHIFT 2
  372. #define FCOE_KWQE_CONN_OFFLOAD3_B_CONF_REQ (0x1<<3)
  373. #define FCOE_KWQE_CONN_OFFLOAD3_B_CONF_REQ_SHIFT 3
  374. #define FCOE_KWQE_CONN_OFFLOAD3_B_REC_VALID (0x1<<4)
  375. #define FCOE_KWQE_CONN_OFFLOAD3_B_REC_VALID_SHIFT 4
  376. #define FCOE_KWQE_CONN_OFFLOAD3_B_C2_VALID (0x1<<5)
  377. #define FCOE_KWQE_CONN_OFFLOAD3_B_C2_VALID_SHIFT 5
  378. #define FCOE_KWQE_CONN_OFFLOAD3_B_ACK_0 (0x1<<6)
  379. #define FCOE_KWQE_CONN_OFFLOAD3_B_ACK_0_SHIFT 6
  380. #define FCOE_KWQE_CONN_OFFLOAD3_B_VLAN_FLAG (0x1<<7)
  381. #define FCOE_KWQE_CONN_OFFLOAD3_B_VLAN_FLAG_SHIFT 7
  382. __le32 reserved;
  383. __le32 confq_first_pbe_addr_lo;
  384. __le32 confq_first_pbe_addr_hi;
  385. __le16 tx_total_conc_seqs;
  386. __le16 rx_max_fc_pay_len;
  387. __le16 rx_total_conc_seqs;
  388. u8 rx_max_conc_seqs_c3;
  389. u8 rx_open_seqs_exch_c3;
  390. };
  391. /*
  392. * FCoE connection offload request 4 $$KEEP_ENDIANNESS$$
  393. */
  394. struct fcoe_kwqe_conn_offload4 {
  395. u8 e_d_tov_timer_val;
  396. u8 reserved2;
  397. struct fcoe_kwqe_header hdr;
  398. u8 src_mac_addr_lo[2];
  399. u8 src_mac_addr_mid[2];
  400. u8 src_mac_addr_hi[2];
  401. u8 dst_mac_addr_hi[2];
  402. u8 dst_mac_addr_lo[2];
  403. u8 dst_mac_addr_mid[2];
  404. __le32 lcq_addr_lo;
  405. __le32 lcq_addr_hi;
  406. __le32 confq_pbl_base_addr_lo;
  407. __le32 confq_pbl_base_addr_hi;
  408. };
  409. /*
  410. * FCoE connection enable request $$KEEP_ENDIANNESS$$
  411. */
  412. struct fcoe_kwqe_conn_enable_disable {
  413. __le16 reserved0;
  414. struct fcoe_kwqe_header hdr;
  415. u8 src_mac_addr_lo[2];
  416. u8 src_mac_addr_mid[2];
  417. u8 src_mac_addr_hi[2];
  418. u16 vlan_tag;
  419. #define FCOE_KWQE_CONN_ENABLE_DISABLE_VLAN_ID (0xFFF<<0)
  420. #define FCOE_KWQE_CONN_ENABLE_DISABLE_VLAN_ID_SHIFT 0
  421. #define FCOE_KWQE_CONN_ENABLE_DISABLE_CFI (0x1<<12)
  422. #define FCOE_KWQE_CONN_ENABLE_DISABLE_CFI_SHIFT 12
  423. #define FCOE_KWQE_CONN_ENABLE_DISABLE_PRIORITY (0x7<<13)
  424. #define FCOE_KWQE_CONN_ENABLE_DISABLE_PRIORITY_SHIFT 13
  425. u8 dst_mac_addr_lo[2];
  426. u8 dst_mac_addr_mid[2];
  427. u8 dst_mac_addr_hi[2];
  428. __le16 reserved1;
  429. u8 s_id[3];
  430. u8 vlan_flag;
  431. u8 d_id[3];
  432. u8 reserved3;
  433. __le32 context_id;
  434. __le32 conn_id;
  435. __le32 reserved4;
  436. };
  437. /*
  438. * FCoE connection destroy request $$KEEP_ENDIANNESS$$
  439. */
  440. struct fcoe_kwqe_conn_destroy {
  441. __le16 reserved0;
  442. struct fcoe_kwqe_header hdr;
  443. __le32 context_id;
  444. __le32 conn_id;
  445. __le32 reserved1[5];
  446. };
  447. /*
  448. * FCoe destroy request $$KEEP_ENDIANNESS$$
  449. */
  450. struct fcoe_kwqe_destroy {
  451. __le16 reserved0;
  452. struct fcoe_kwqe_header hdr;
  453. __le32 reserved1[7];
  454. };
  455. /*
  456. * FCoe statistics request $$KEEP_ENDIANNESS$$
  457. */
  458. struct fcoe_kwqe_stat {
  459. __le16 reserved0;
  460. struct fcoe_kwqe_header hdr;
  461. __le32 stat_params_addr_lo;
  462. __le32 stat_params_addr_hi;
  463. __le32 reserved1[5];
  464. };
  465. /*
  466. * FCoE KWQ WQE $$KEEP_ENDIANNESS$$
  467. */
  468. union fcoe_kwqe {
  469. struct fcoe_kwqe_init1 init1;
  470. struct fcoe_kwqe_init2 init2;
  471. struct fcoe_kwqe_init3 init3;
  472. struct fcoe_kwqe_conn_offload1 conn_offload1;
  473. struct fcoe_kwqe_conn_offload2 conn_offload2;
  474. struct fcoe_kwqe_conn_offload3 conn_offload3;
  475. struct fcoe_kwqe_conn_offload4 conn_offload4;
  476. struct fcoe_kwqe_conn_enable_disable conn_enable_disable;
  477. struct fcoe_kwqe_conn_destroy conn_destroy;
  478. struct fcoe_kwqe_destroy destroy;
  479. struct fcoe_kwqe_stat statistics;
  480. };
  481. /*
  482. * TX SGL context $$KEEP_ENDIANNESS$$
  483. */
  484. union fcoe_sgl_union_ctx {
  485. struct fcoe_cached_sge_ctx cached_sge;
  486. struct fcoe_ext_mul_sges_ctx sgl;
  487. __le32 opaque[5];
  488. };
  489. /*
  490. * Data-In/ELS/BLS information $$KEEP_ENDIANNESS$$
  491. */
  492. struct fcoe_read_flow_info {
  493. union fcoe_sgl_union_ctx sgl_ctx;
  494. __le32 rsrv0[3];
  495. };
  496. /*
  497. * Fcoe stat context $$KEEP_ENDIANNESS$$
  498. */
  499. struct fcoe_s_stat_ctx {
  500. u8 flags;
  501. #define FCOE_S_STAT_CTX_ACTIVE (0x1<<0)
  502. #define FCOE_S_STAT_CTX_ACTIVE_SHIFT 0
  503. #define FCOE_S_STAT_CTX_ACK_ABORT_SEQ_COND (0x1<<1)
  504. #define FCOE_S_STAT_CTX_ACK_ABORT_SEQ_COND_SHIFT 1
  505. #define FCOE_S_STAT_CTX_ABTS_PERFORMED (0x1<<2)
  506. #define FCOE_S_STAT_CTX_ABTS_PERFORMED_SHIFT 2
  507. #define FCOE_S_STAT_CTX_SEQ_TIMEOUT (0x1<<3)
  508. #define FCOE_S_STAT_CTX_SEQ_TIMEOUT_SHIFT 3
  509. #define FCOE_S_STAT_CTX_P_RJT (0x1<<4)
  510. #define FCOE_S_STAT_CTX_P_RJT_SHIFT 4
  511. #define FCOE_S_STAT_CTX_ACK_EOFT (0x1<<5)
  512. #define FCOE_S_STAT_CTX_ACK_EOFT_SHIFT 5
  513. #define FCOE_S_STAT_CTX_RSRV1 (0x3<<6)
  514. #define FCOE_S_STAT_CTX_RSRV1_SHIFT 6
  515. };
  516. /*
  517. * Fcoe rx seq context $$KEEP_ENDIANNESS$$
  518. */
  519. struct fcoe_rx_seq_ctx {
  520. u8 seq_id;
  521. struct fcoe_s_stat_ctx s_stat;
  522. __le16 seq_cnt;
  523. __le32 low_exp_ro;
  524. __le32 high_exp_ro;
  525. };
  526. /*
  527. * Fcoe rx_wr union context $$KEEP_ENDIANNESS$$
  528. */
  529. union fcoe_rx_wr_union_ctx {
  530. struct fcoe_read_flow_info read_info;
  531. union fcoe_comp_flow_info comp_info;
  532. __le32 opaque[8];
  533. };
  534. /*
  535. * FCoE SQ element $$KEEP_ENDIANNESS$$
  536. */
  537. struct fcoe_sqe {
  538. __le16 wqe;
  539. #define FCOE_SQE_TASK_ID (0x7FFF<<0)
  540. #define FCOE_SQE_TASK_ID_SHIFT 0
  541. #define FCOE_SQE_TOGGLE_BIT (0x1<<15)
  542. #define FCOE_SQE_TOGGLE_BIT_SHIFT 15
  543. };
  544. /*
  545. * 14 regs $$KEEP_ENDIANNESS$$
  546. */
  547. struct fcoe_tce_tx_only {
  548. union fcoe_sgl_union_ctx sgl_ctx;
  549. __le32 rsrv0;
  550. };
  551. /*
  552. * 32 bytes (8 regs) used for TX only purposes $$KEEP_ENDIANNESS$$
  553. */
  554. union fcoe_tx_wr_rx_rd_union_ctx {
  555. struct fcoe_fc_frame tx_frame;
  556. struct fcoe_fcp_cmd_payload fcp_cmd;
  557. struct fcoe_ext_cleanup_info cleanup;
  558. struct fcoe_ext_abts_info abts;
  559. struct fcoe_ext_fw_tx_seq_ctx tx_seq;
  560. __le32 opaque[8];
  561. };
  562. /*
  563. * tce_tx_wr_rx_rd_const $$KEEP_ENDIANNESS$$
  564. */
  565. struct fcoe_tce_tx_wr_rx_rd_const {
  566. u8 init_flags;
  567. #define FCOE_TCE_TX_WR_RX_RD_CONST_TASK_TYPE (0x7<<0)
  568. #define FCOE_TCE_TX_WR_RX_RD_CONST_TASK_TYPE_SHIFT 0
  569. #define FCOE_TCE_TX_WR_RX_RD_CONST_DEV_TYPE (0x1<<3)
  570. #define FCOE_TCE_TX_WR_RX_RD_CONST_DEV_TYPE_SHIFT 3
  571. #define FCOE_TCE_TX_WR_RX_RD_CONST_CLASS_TYPE (0x1<<4)
  572. #define FCOE_TCE_TX_WR_RX_RD_CONST_CLASS_TYPE_SHIFT 4
  573. #define FCOE_TCE_TX_WR_RX_RD_CONST_CACHED_SGE (0x3<<5)
  574. #define FCOE_TCE_TX_WR_RX_RD_CONST_CACHED_SGE_SHIFT 5
  575. #define FCOE_TCE_TX_WR_RX_RD_CONST_SUPPORT_REC_TOV (0x1<<7)
  576. #define FCOE_TCE_TX_WR_RX_RD_CONST_SUPPORT_REC_TOV_SHIFT 7
  577. u8 tx_flags;
  578. #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_VALID (0x1<<0)
  579. #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_VALID_SHIFT 0
  580. #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_STATE (0xF<<1)
  581. #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_STATE_SHIFT 1
  582. #define FCOE_TCE_TX_WR_RX_RD_CONST_RSRV1 (0x1<<5)
  583. #define FCOE_TCE_TX_WR_RX_RD_CONST_RSRV1_SHIFT 5
  584. #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_SEQ_INIT (0x1<<6)
  585. #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_SEQ_INIT_SHIFT 6
  586. #define FCOE_TCE_TX_WR_RX_RD_CONST_RSRV2 (0x1<<7)
  587. #define FCOE_TCE_TX_WR_RX_RD_CONST_RSRV2_SHIFT 7
  588. __le16 rsrv3;
  589. __le32 verify_tx_seq;
  590. };
  591. /*
  592. * tce_tx_wr_rx_rd $$KEEP_ENDIANNESS$$
  593. */
  594. struct fcoe_tce_tx_wr_rx_rd {
  595. union fcoe_tx_wr_rx_rd_union_ctx union_ctx;
  596. struct fcoe_tce_tx_wr_rx_rd_const const_ctx;
  597. };
  598. /*
  599. * tce_rx_wr_tx_rd_const $$KEEP_ENDIANNESS$$
  600. */
  601. struct fcoe_tce_rx_wr_tx_rd_const {
  602. __le32 data_2_trns;
  603. __le32 init_flags;
  604. #define FCOE_TCE_RX_WR_TX_RD_CONST_CID (0xFFFFFF<<0)
  605. #define FCOE_TCE_RX_WR_TX_RD_CONST_CID_SHIFT 0
  606. #define FCOE_TCE_RX_WR_TX_RD_CONST_RSRV0 (0xFF<<24)
  607. #define FCOE_TCE_RX_WR_TX_RD_CONST_RSRV0_SHIFT 24
  608. };
  609. /*
  610. * tce_rx_wr_tx_rd_var $$KEEP_ENDIANNESS$$
  611. */
  612. struct fcoe_tce_rx_wr_tx_rd_var {
  613. __le16 rx_flags;
  614. #define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV1 (0xF<<0)
  615. #define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV1_SHIFT 0
  616. #define FCOE_TCE_RX_WR_TX_RD_VAR_NUM_RQ_WQE (0x7<<4)
  617. #define FCOE_TCE_RX_WR_TX_RD_VAR_NUM_RQ_WQE_SHIFT 4
  618. #define FCOE_TCE_RX_WR_TX_RD_VAR_CONF_REQ (0x1<<7)
  619. #define FCOE_TCE_RX_WR_TX_RD_VAR_CONF_REQ_SHIFT 7
  620. #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_STATE (0xF<<8)
  621. #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_STATE_SHIFT 8
  622. #define FCOE_TCE_RX_WR_TX_RD_VAR_EXP_FIRST_FRAME (0x1<<12)
  623. #define FCOE_TCE_RX_WR_TX_RD_VAR_EXP_FIRST_FRAME_SHIFT 12
  624. #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_SEQ_INIT (0x1<<13)
  625. #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_SEQ_INIT_SHIFT 13
  626. #define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV2 (0x1<<14)
  627. #define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV2_SHIFT 14
  628. #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_VALID (0x1<<15)
  629. #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_VALID_SHIFT 15
  630. __le16 rx_id;
  631. struct fcoe_fcp_xfr_rdy_payload fcp_xfr_rdy;
  632. };
  633. /*
  634. * tce_rx_wr_tx_rd $$KEEP_ENDIANNESS$$
  635. */
  636. struct fcoe_tce_rx_wr_tx_rd {
  637. struct fcoe_tce_rx_wr_tx_rd_const const_ctx;
  638. struct fcoe_tce_rx_wr_tx_rd_var var_ctx;
  639. };
  640. /*
  641. * tce_rx_only $$KEEP_ENDIANNESS$$
  642. */
  643. struct fcoe_tce_rx_only {
  644. struct fcoe_rx_seq_ctx rx_seq_ctx;
  645. union fcoe_rx_wr_union_ctx union_ctx;
  646. };
  647. /*
  648. * task_ctx_entry $$KEEP_ENDIANNESS$$
  649. */
  650. struct fcoe_task_ctx_entry {
  651. struct fcoe_tce_tx_only txwr_only;
  652. struct fcoe_tce_tx_wr_rx_rd txwr_rxrd;
  653. struct fcoe_tce_rx_wr_tx_rd rxwr_txrd;
  654. struct fcoe_tce_rx_only rxwr_only;
  655. };
  656. /*
  657. * FCoE XFRQ element $$KEEP_ENDIANNESS$$
  658. */
  659. struct fcoe_xfrqe {
  660. __le16 wqe;
  661. #define FCOE_XFRQE_TASK_ID (0x7FFF<<0)
  662. #define FCOE_XFRQE_TASK_ID_SHIFT 0
  663. #define FCOE_XFRQE_TOGGLE_BIT (0x1<<15)
  664. #define FCOE_XFRQE_TOGGLE_BIT_SHIFT 15
  665. };
  666. /*
  667. * fcoe rx doorbell message sent to the chip $$KEEP_ENDIANNESS$$
  668. */
  669. struct b577xx_fcoe_rx_doorbell {
  670. struct b577xx_doorbell_hdr hdr;
  671. u8 params;
  672. #define B577XX_FCOE_RX_DOORBELL_NEGATIVE_ARM (0x1F<<0)
  673. #define B577XX_FCOE_RX_DOORBELL_NEGATIVE_ARM_SHIFT 0
  674. #define B577XX_FCOE_RX_DOORBELL_OPCODE (0x7<<5)
  675. #define B577XX_FCOE_RX_DOORBELL_OPCODE_SHIFT 5
  676. __le16 doorbell_cq_cons;
  677. };
  678. /*
  679. * FCoE CONFQ element $$KEEP_ENDIANNESS$$
  680. */
  681. struct fcoe_confqe {
  682. __le16 ox_id;
  683. __le16 rx_id;
  684. __le32 param;
  685. };
  686. /*
  687. * FCoE conection data base
  688. */
  689. struct fcoe_conn_db {
  690. #if defined(__BIG_ENDIAN)
  691. u16 rsrv0;
  692. u16 rq_prod;
  693. #elif defined(__LITTLE_ENDIAN)
  694. u16 rq_prod;
  695. u16 rsrv0;
  696. #endif
  697. u32 rsrv1;
  698. struct regpair cq_arm;
  699. };
  700. /*
  701. * FCoE CQ element $$KEEP_ENDIANNESS$$
  702. */
  703. struct fcoe_cqe {
  704. __le16 wqe;
  705. #define FCOE_CQE_CQE_INFO (0x3FFF<<0)
  706. #define FCOE_CQE_CQE_INFO_SHIFT 0
  707. #define FCOE_CQE_CQE_TYPE (0x1<<14)
  708. #define FCOE_CQE_CQE_TYPE_SHIFT 14
  709. #define FCOE_CQE_TOGGLE_BIT (0x1<<15)
  710. #define FCOE_CQE_TOGGLE_BIT_SHIFT 15
  711. };
  712. /*
  713. * FCoE error/warning reporting entry $$KEEP_ENDIANNESS$$
  714. */
  715. struct fcoe_partial_err_report_entry {
  716. __le32 err_warn_bitmap_lo;
  717. __le32 err_warn_bitmap_hi;
  718. __le32 tx_buf_off;
  719. __le32 rx_buf_off;
  720. };
  721. /*
  722. * FCoE error/warning reporting entry $$KEEP_ENDIANNESS$$
  723. */
  724. struct fcoe_err_report_entry {
  725. struct fcoe_partial_err_report_entry data;
  726. struct fcoe_fc_hdr fc_hdr;
  727. };
  728. /*
  729. * FCoE hash table entry (32 bytes) $$KEEP_ENDIANNESS$$
  730. */
  731. struct fcoe_hash_table_entry {
  732. u8 s_id_0;
  733. u8 s_id_1;
  734. u8 s_id_2;
  735. u8 d_id_0;
  736. u8 d_id_1;
  737. u8 d_id_2;
  738. __le16 dst_mac_addr_hi;
  739. __le16 dst_mac_addr_mid;
  740. __le16 dst_mac_addr_lo;
  741. __le16 src_mac_addr_hi;
  742. __le16 vlan_id;
  743. __le16 src_mac_addr_lo;
  744. __le16 src_mac_addr_mid;
  745. u8 vlan_flag;
  746. u8 reserved0;
  747. __le16 reserved1;
  748. __le32 reserved2;
  749. __le32 field_id;
  750. #define FCOE_HASH_TABLE_ENTRY_CID (0xFFFFFF<<0)
  751. #define FCOE_HASH_TABLE_ENTRY_CID_SHIFT 0
  752. #define FCOE_HASH_TABLE_ENTRY_RESERVED3 (0x7F<<24)
  753. #define FCOE_HASH_TABLE_ENTRY_RESERVED3_SHIFT 24
  754. #define FCOE_HASH_TABLE_ENTRY_VALID (0x1<<31)
  755. #define FCOE_HASH_TABLE_ENTRY_VALID_SHIFT 31
  756. };
  757. /*
  758. * FCoE LCQ element $$KEEP_ENDIANNESS$$
  759. */
  760. struct fcoe_lcqe {
  761. __le32 wqe;
  762. #define FCOE_LCQE_TASK_ID (0xFFFF<<0)
  763. #define FCOE_LCQE_TASK_ID_SHIFT 0
  764. #define FCOE_LCQE_LCQE_TYPE (0xFF<<16)
  765. #define FCOE_LCQE_LCQE_TYPE_SHIFT 16
  766. #define FCOE_LCQE_RESERVED (0xFF<<24)
  767. #define FCOE_LCQE_RESERVED_SHIFT 24
  768. };
  769. /*
  770. * FCoE pending work request CQE $$KEEP_ENDIANNESS$$
  771. */
  772. struct fcoe_pend_wq_cqe {
  773. __le16 wqe;
  774. #define FCOE_PEND_WQ_CQE_TASK_ID (0x3FFF<<0)
  775. #define FCOE_PEND_WQ_CQE_TASK_ID_SHIFT 0
  776. #define FCOE_PEND_WQ_CQE_CQE_TYPE (0x1<<14)
  777. #define FCOE_PEND_WQ_CQE_CQE_TYPE_SHIFT 14
  778. #define FCOE_PEND_WQ_CQE_TOGGLE_BIT (0x1<<15)
  779. #define FCOE_PEND_WQ_CQE_TOGGLE_BIT_SHIFT 15
  780. };
  781. /*
  782. * FCoE RX statistics parameters section#0 $$KEEP_ENDIANNESS$$
  783. */
  784. struct fcoe_rx_stat_params_section0 {
  785. __le32 fcoe_rx_pkt_cnt;
  786. __le32 fcoe_rx_byte_cnt;
  787. };
  788. /*
  789. * FCoE RX statistics parameters section#1 $$KEEP_ENDIANNESS$$
  790. */
  791. struct fcoe_rx_stat_params_section1 {
  792. __le32 fcoe_ver_cnt;
  793. __le32 fcoe_rx_drop_pkt_cnt;
  794. };
  795. /*
  796. * FCoE RX statistics parameters section#2 $$KEEP_ENDIANNESS$$
  797. */
  798. struct fcoe_rx_stat_params_section2 {
  799. __le32 fc_crc_cnt;
  800. __le32 eofa_del_cnt;
  801. __le32 miss_frame_cnt;
  802. __le32 seq_timeout_cnt;
  803. __le32 drop_seq_cnt;
  804. __le32 fcoe_rx_drop_pkt_cnt;
  805. __le32 fcp_rx_pkt_cnt;
  806. __le32 reserved0;
  807. };
  808. /*
  809. * FCoE TX statistics parameters $$KEEP_ENDIANNESS$$
  810. */
  811. struct fcoe_tx_stat_params {
  812. __le32 fcoe_tx_pkt_cnt;
  813. __le32 fcoe_tx_byte_cnt;
  814. __le32 fcp_tx_pkt_cnt;
  815. __le32 reserved0;
  816. };
  817. /*
  818. * FCoE statistics parameters $$KEEP_ENDIANNESS$$
  819. */
  820. struct fcoe_statistics_params {
  821. struct fcoe_tx_stat_params tx_stat;
  822. struct fcoe_rx_stat_params_section0 rx_stat0;
  823. struct fcoe_rx_stat_params_section1 rx_stat1;
  824. struct fcoe_rx_stat_params_section2 rx_stat2;
  825. };
  826. /*
  827. * FCoE t2 hash table entry (64 bytes) $$KEEP_ENDIANNESS$$
  828. */
  829. struct fcoe_t2_hash_table_entry {
  830. struct fcoe_hash_table_entry data;
  831. struct regpair next;
  832. struct regpair reserved0[3];
  833. };
  834. /*
  835. * FCoE unsolicited CQE $$KEEP_ENDIANNESS$$
  836. */
  837. struct fcoe_unsolicited_cqe {
  838. __le16 wqe;
  839. #define FCOE_UNSOLICITED_CQE_SUBTYPE (0x3<<0)
  840. #define FCOE_UNSOLICITED_CQE_SUBTYPE_SHIFT 0
  841. #define FCOE_UNSOLICITED_CQE_PKT_LEN (0xFFF<<2)
  842. #define FCOE_UNSOLICITED_CQE_PKT_LEN_SHIFT 2
  843. #define FCOE_UNSOLICITED_CQE_CQE_TYPE (0x1<<14)
  844. #define FCOE_UNSOLICITED_CQE_CQE_TYPE_SHIFT 14
  845. #define FCOE_UNSOLICITED_CQE_TOGGLE_BIT (0x1<<15)
  846. #define FCOE_UNSOLICITED_CQE_TOGGLE_BIT_SHIFT 15
  847. };
  848. #endif /* __57XX_FCOE_HSI_LINUX_LE__ */