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