xref: /OK3568_Linux_fs/kernel/drivers/net/ethernet/emulex/benet/be_hw.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2005-2016 Broadcom.
4*4882a593Smuzhiyun  * All rights reserved.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Contact Information:
7*4882a593Smuzhiyun  * linux-drivers@emulex.com
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * Emulex
10*4882a593Smuzhiyun  * 3333 Susan Street
11*4882a593Smuzhiyun  * Costa Mesa, CA 92626
12*4882a593Smuzhiyun  */
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /********* Mailbox door bell *************/
15*4882a593Smuzhiyun /* Used for driver communication with the FW.
16*4882a593Smuzhiyun  * The software must write this register twice to post any command. First,
17*4882a593Smuzhiyun  * it writes the register with hi=1 and the upper bits of the physical address
18*4882a593Smuzhiyun  * for the MAILBOX structure. Software must poll the ready bit until this
19*4882a593Smuzhiyun  * is acknowledged. Then, sotware writes the register with hi=0 with the lower
20*4882a593Smuzhiyun  * bits in the address. It must poll the ready bit until the command is
21*4882a593Smuzhiyun  * complete. Upon completion, the MAILBOX will contain a valid completion
22*4882a593Smuzhiyun  * queue entry.
23*4882a593Smuzhiyun  */
24*4882a593Smuzhiyun #define MPU_MAILBOX_DB_OFFSET	0x160
25*4882a593Smuzhiyun #define MPU_MAILBOX_DB_RDY_MASK	0x1 	/* bit 0 */
26*4882a593Smuzhiyun #define MPU_MAILBOX_DB_HI_MASK	0x2	/* bit 1 */
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #define MPU_EP_CONTROL 		0
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun /********** MPU semphore: used for SH & BE  *************/
31*4882a593Smuzhiyun #define SLIPORT_SOFTRESET_OFFSET		0x5c	/* CSR BAR offset */
32*4882a593Smuzhiyun #define SLIPORT_SEMAPHORE_OFFSET_BEx		0xac  /* CSR BAR offset */
33*4882a593Smuzhiyun #define SLIPORT_SEMAPHORE_OFFSET_SH		0x94  /* PCI-CFG offset */
34*4882a593Smuzhiyun #define POST_STAGE_MASK				0x0000FFFF
35*4882a593Smuzhiyun #define POST_ERR_MASK				0x1
36*4882a593Smuzhiyun #define POST_ERR_SHIFT				31
37*4882a593Smuzhiyun #define POST_ERR_RECOVERY_CODE_MASK		0xFFF
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun /* Soft Reset register masks */
40*4882a593Smuzhiyun #define SLIPORT_SOFTRESET_SR_MASK		0x00000080	/* SR bit */
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun /* MPU semphore POST stage values */
43*4882a593Smuzhiyun #define POST_STAGE_AWAITING_HOST_RDY 	0x1 /* FW awaiting goahead from host */
44*4882a593Smuzhiyun #define POST_STAGE_HOST_RDY 		0x2 /* Host has given go-ahed to FW */
45*4882a593Smuzhiyun #define POST_STAGE_BE_RESET		0x3 /* Host wants to reset chip */
46*4882a593Smuzhiyun #define POST_STAGE_ARMFW_RDY		0xc000	/* FW is done with POST */
47*4882a593Smuzhiyun #define POST_STAGE_RECOVERABLE_ERR	0xE000	/* Recoverable err detected */
48*4882a593Smuzhiyun /* FW has detected a UE and is dumping FAT log data */
49*4882a593Smuzhiyun #define POST_STAGE_FAT_LOG_START       0x0D00
50*4882a593Smuzhiyun #define POST_STAGE_ARMFW_UE            0xF000  /*FW has asserted an UE*/
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun /* Lancer SLIPORT registers */
53*4882a593Smuzhiyun #define SLIPORT_STATUS_OFFSET		0x404
54*4882a593Smuzhiyun #define SLIPORT_CONTROL_OFFSET		0x408
55*4882a593Smuzhiyun #define SLIPORT_ERROR1_OFFSET		0x40C
56*4882a593Smuzhiyun #define SLIPORT_ERROR2_OFFSET		0x410
57*4882a593Smuzhiyun #define PHYSDEV_CONTROL_OFFSET		0x414
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun #define SLIPORT_STATUS_ERR_MASK		0x80000000
60*4882a593Smuzhiyun #define SLIPORT_STATUS_DIP_MASK		0x02000000
61*4882a593Smuzhiyun #define SLIPORT_STATUS_RN_MASK		0x01000000
62*4882a593Smuzhiyun #define SLIPORT_STATUS_RDY_MASK		0x00800000
63*4882a593Smuzhiyun #define SLI_PORT_CONTROL_IP_MASK	0x08000000
64*4882a593Smuzhiyun #define PHYSDEV_CONTROL_FW_RESET_MASK	0x00000002
65*4882a593Smuzhiyun #define PHYSDEV_CONTROL_DD_MASK		0x00000004
66*4882a593Smuzhiyun #define PHYSDEV_CONTROL_INP_MASK	0x40000000
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun #define SLIPORT_ERROR_NO_RESOURCE1	0x2
69*4882a593Smuzhiyun #define SLIPORT_ERROR_NO_RESOURCE2	0x9
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun #define SLIPORT_ERROR_FW_RESET1		0x2
72*4882a593Smuzhiyun #define SLIPORT_ERROR_FW_RESET2		0x0
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun /********* Memory BAR register ************/
75*4882a593Smuzhiyun #define PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET 	0xfc
76*4882a593Smuzhiyun /* Host Interrupt Enable, if set interrupts are enabled although "PCI Interrupt
77*4882a593Smuzhiyun  * Disable" may still globally block interrupts in addition to individual
78*4882a593Smuzhiyun  * interrupt masks; a mechanism for the device driver to block all interrupts
79*4882a593Smuzhiyun  * atomically without having to arbitrate for the PCI Interrupt Disable bit
80*4882a593Smuzhiyun  * with the OS.
81*4882a593Smuzhiyun  */
82*4882a593Smuzhiyun #define MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK	BIT(29) /* bit 29 */
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun /********* PCI Function Capability *********/
85*4882a593Smuzhiyun #define BE_FUNCTION_CAPS_RSS			0x2
86*4882a593Smuzhiyun #define BE_FUNCTION_CAPS_SUPER_NIC		0x40
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun /********* Power management (WOL) **********/
89*4882a593Smuzhiyun #define PCICFG_PM_CONTROL_OFFSET		0x44
90*4882a593Smuzhiyun #define PCICFG_PM_CONTROL_MASK			0x108	/* bits 3 & 8 */
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun /********* Online Control Registers *******/
93*4882a593Smuzhiyun #define PCICFG_ONLINE0				0xB0
94*4882a593Smuzhiyun #define PCICFG_ONLINE1				0xB4
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun /********* UE Status and Mask Registers ***/
97*4882a593Smuzhiyun #define PCICFG_UE_STATUS_LOW			0xA0
98*4882a593Smuzhiyun #define PCICFG_UE_STATUS_HIGH			0xA4
99*4882a593Smuzhiyun #define PCICFG_UE_STATUS_LOW_MASK		0xA8
100*4882a593Smuzhiyun #define PCICFG_UE_STATUS_HI_MASK		0xAC
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun /******** SLI_INTF ***********************/
103*4882a593Smuzhiyun #define SLI_INTF_REG_OFFSET			0x58
104*4882a593Smuzhiyun #define SLI_INTF_VALID_MASK			0xE0000000
105*4882a593Smuzhiyun #define SLI_INTF_VALID				0xC0000000
106*4882a593Smuzhiyun #define SLI_INTF_HINT2_MASK			0x1F000000
107*4882a593Smuzhiyun #define SLI_INTF_HINT2_SHIFT			24
108*4882a593Smuzhiyun #define SLI_INTF_HINT1_MASK			0x00FF0000
109*4882a593Smuzhiyun #define SLI_INTF_HINT1_SHIFT			16
110*4882a593Smuzhiyun #define SLI_INTF_FAMILY_MASK			0x00000F00
111*4882a593Smuzhiyun #define SLI_INTF_FAMILY_SHIFT			8
112*4882a593Smuzhiyun #define SLI_INTF_IF_TYPE_MASK			0x0000F000
113*4882a593Smuzhiyun #define SLI_INTF_IF_TYPE_SHIFT			12
114*4882a593Smuzhiyun #define SLI_INTF_REV_MASK			0x000000F0
115*4882a593Smuzhiyun #define SLI_INTF_REV_SHIFT			4
116*4882a593Smuzhiyun #define SLI_INTF_FT_MASK			0x00000001
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun #define SLI_INTF_TYPE_2		2
119*4882a593Smuzhiyun #define SLI_INTF_TYPE_3		3
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun /********* ISR0 Register offset **********/
122*4882a593Smuzhiyun #define CEV_ISR0_OFFSET 			0xC18
123*4882a593Smuzhiyun #define CEV_ISR_SIZE				4
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun /********* Event Q door bell *************/
126*4882a593Smuzhiyun #define DB_EQ_OFFSET			DB_CQ_OFFSET
127*4882a593Smuzhiyun #define DB_EQ_RING_ID_MASK		0x1FF	/* bits 0 - 8 */
128*4882a593Smuzhiyun #define DB_EQ_RING_ID_EXT_MASK		0x3e00  /* bits 9-13 */
129*4882a593Smuzhiyun #define DB_EQ_RING_ID_EXT_MASK_SHIFT	(2) /* qid bits 9-13 placing at 11-15 */
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun /* Clear the interrupt for this eq */
132*4882a593Smuzhiyun #define DB_EQ_CLR_SHIFT			(9)	/* bit 9 */
133*4882a593Smuzhiyun /* Must be 1 */
134*4882a593Smuzhiyun #define DB_EQ_EVNT_SHIFT		(10)	/* bit 10 */
135*4882a593Smuzhiyun /* Number of event entries processed */
136*4882a593Smuzhiyun #define DB_EQ_NUM_POPPED_SHIFT		(16)	/* bits 16 - 28 */
137*4882a593Smuzhiyun /* Rearm bit */
138*4882a593Smuzhiyun #define DB_EQ_REARM_SHIFT		(29)	/* bit 29 */
139*4882a593Smuzhiyun /* Rearm to interrupt delay encoding */
140*4882a593Smuzhiyun #define DB_EQ_R2I_DLY_SHIFT		(30)    /* bits 30 - 31 */
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun /* Rearm to interrupt (R2I) delay multiplier encoding represents 3 different
143*4882a593Smuzhiyun  * values configured in CEV_REARM2IRPT_DLY_MULT_CSR register. This value is
144*4882a593Smuzhiyun  * programmed by host driver while ringing an EQ doorbell(EQ_DB) if a delay
145*4882a593Smuzhiyun  * between rearming the EQ and next interrupt on this EQ is desired.
146*4882a593Smuzhiyun  */
147*4882a593Smuzhiyun #define	R2I_DLY_ENC_0			0	/* No delay */
148*4882a593Smuzhiyun #define	R2I_DLY_ENC_1			1	/* maps to 160us EQ delay */
149*4882a593Smuzhiyun #define	R2I_DLY_ENC_2			2	/* maps to 96us EQ delay */
150*4882a593Smuzhiyun #define	R2I_DLY_ENC_3			3	/* maps to 48us EQ delay */
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun /********* Compl Q door bell *************/
153*4882a593Smuzhiyun #define DB_CQ_OFFSET 			0x120
154*4882a593Smuzhiyun #define DB_CQ_RING_ID_MASK		0x3FF	/* bits 0 - 9 */
155*4882a593Smuzhiyun #define DB_CQ_RING_ID_EXT_MASK		0x7C00	/* bits 10-14 */
156*4882a593Smuzhiyun #define DB_CQ_RING_ID_EXT_MASK_SHIFT	(1)	/* qid bits 10-14
157*4882a593Smuzhiyun 						 placing at 11-15 */
158*4882a593Smuzhiyun 
159*4882a593Smuzhiyun /* Number of event entries processed */
160*4882a593Smuzhiyun #define DB_CQ_NUM_POPPED_SHIFT		(16) 	/* bits 16 - 28 */
161*4882a593Smuzhiyun /* Rearm bit */
162*4882a593Smuzhiyun #define DB_CQ_REARM_SHIFT		(29) 	/* bit 29 */
163*4882a593Smuzhiyun 
164*4882a593Smuzhiyun /********** TX ULP door bell *************/
165*4882a593Smuzhiyun #define DB_TXULP1_OFFSET		0x60
166*4882a593Smuzhiyun #define DB_TXULP_RING_ID_MASK		0x7FF	/* bits 0 - 10 */
167*4882a593Smuzhiyun /* Number of tx entries posted */
168*4882a593Smuzhiyun #define DB_TXULP_NUM_POSTED_SHIFT	(16)	/* bits 16 - 29 */
169*4882a593Smuzhiyun #define DB_TXULP_NUM_POSTED_MASK	0x3FFF	/* bits 16 - 29 */
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun /********** RQ(erx) door bell ************/
172*4882a593Smuzhiyun #define DB_RQ_OFFSET 			0x100
173*4882a593Smuzhiyun #define DB_RQ_RING_ID_MASK		0x3FF	/* bits 0 - 9 */
174*4882a593Smuzhiyun /* Number of rx frags posted */
175*4882a593Smuzhiyun #define DB_RQ_NUM_POSTED_SHIFT		(24)	/* bits 24 - 31 */
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun /********** MCC door bell ************/
178*4882a593Smuzhiyun #define DB_MCCQ_OFFSET 			0x140
179*4882a593Smuzhiyun #define DB_MCCQ_RING_ID_MASK		0x7FF	/* bits 0 - 10 */
180*4882a593Smuzhiyun /* Number of entries posted */
181*4882a593Smuzhiyun #define DB_MCCQ_NUM_POSTED_SHIFT	(16)	/* bits 16 - 29 */
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun /********** SRIOV VF PCICFG OFFSET ********/
184*4882a593Smuzhiyun #define SRIOV_VF_PCICFG_OFFSET		(4096)
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun /********** FAT TABLE  ********/
187*4882a593Smuzhiyun #define RETRIEVE_FAT	0
188*4882a593Smuzhiyun #define QUERY_FAT	1
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun /************* Rx Packet Type Encoding **************/
191*4882a593Smuzhiyun #define BE_UNICAST_PACKET		0
192*4882a593Smuzhiyun #define BE_MULTICAST_PACKET		1
193*4882a593Smuzhiyun #define BE_BROADCAST_PACKET		2
194*4882a593Smuzhiyun #define BE_RSVD_PACKET			3
195*4882a593Smuzhiyun 
196*4882a593Smuzhiyun /*
197*4882a593Smuzhiyun  * BE descriptors: host memory data structures whose formats
198*4882a593Smuzhiyun  * are hardwired in BE silicon.
199*4882a593Smuzhiyun  */
200*4882a593Smuzhiyun /* Event Queue Descriptor */
201*4882a593Smuzhiyun #define EQ_ENTRY_VALID_MASK 		0x1	/* bit 0 */
202*4882a593Smuzhiyun #define EQ_ENTRY_RES_ID_MASK 		0xFFFF	/* bits 16 - 31 */
203*4882a593Smuzhiyun #define EQ_ENTRY_RES_ID_SHIFT 		16
204*4882a593Smuzhiyun 
205*4882a593Smuzhiyun struct be_eq_entry {
206*4882a593Smuzhiyun 	u32 evt;
207*4882a593Smuzhiyun };
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun /* TX Queue Descriptor */
210*4882a593Smuzhiyun #define ETH_WRB_FRAG_LEN_MASK		0xFFFF
211*4882a593Smuzhiyun struct be_eth_wrb {
212*4882a593Smuzhiyun 	__le32 frag_pa_hi;		/* dword 0 */
213*4882a593Smuzhiyun 	__le32 frag_pa_lo;		/* dword 1 */
214*4882a593Smuzhiyun 	u32 rsvd0;			/* dword 2 */
215*4882a593Smuzhiyun 	__le32 frag_len;		/* dword 3: bits 0 - 15 */
216*4882a593Smuzhiyun } __packed;
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun /* Pseudo amap definition for eth_hdr_wrb in which each bit of the
219*4882a593Smuzhiyun  * actual structure is defined as a byte : used to calculate
220*4882a593Smuzhiyun  * offset/shift/mask of each field */
221*4882a593Smuzhiyun struct amap_eth_hdr_wrb {
222*4882a593Smuzhiyun 	u8 rsvd0[32];		/* dword 0 */
223*4882a593Smuzhiyun 	u8 rsvd1[32];		/* dword 1 */
224*4882a593Smuzhiyun 	u8 complete;		/* dword 2 */
225*4882a593Smuzhiyun 	u8 event;
226*4882a593Smuzhiyun 	u8 crc;
227*4882a593Smuzhiyun 	u8 forward;
228*4882a593Smuzhiyun 	u8 lso6;
229*4882a593Smuzhiyun 	u8 mgmt;
230*4882a593Smuzhiyun 	u8 ipcs;
231*4882a593Smuzhiyun 	u8 udpcs;
232*4882a593Smuzhiyun 	u8 tcpcs;
233*4882a593Smuzhiyun 	u8 lso;
234*4882a593Smuzhiyun 	u8 vlan;
235*4882a593Smuzhiyun 	u8 gso[2];
236*4882a593Smuzhiyun 	u8 num_wrb[5];
237*4882a593Smuzhiyun 	u8 lso_mss[14];
238*4882a593Smuzhiyun 	u8 len[16];		/* dword 3 */
239*4882a593Smuzhiyun 	u8 vlan_tag[16];
240*4882a593Smuzhiyun } __packed;
241*4882a593Smuzhiyun 
242*4882a593Smuzhiyun #define TX_HDR_WRB_COMPL		1		/* word 2 */
243*4882a593Smuzhiyun #define TX_HDR_WRB_EVT			BIT(1)		/* word 2 */
244*4882a593Smuzhiyun #define TX_HDR_WRB_NUM_SHIFT		13		/* word 2: bits 13:17 */
245*4882a593Smuzhiyun #define TX_HDR_WRB_NUM_MASK		0x1F		/* word 2: bits 13:17 */
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun struct be_eth_hdr_wrb {
248*4882a593Smuzhiyun 	__le32 dw[4];
249*4882a593Smuzhiyun };
250*4882a593Smuzhiyun 
251*4882a593Smuzhiyun /********* Tx Compl Status Encoding *********/
252*4882a593Smuzhiyun #define BE_TX_COMP_HDR_PARSE_ERR	0x2
253*4882a593Smuzhiyun #define BE_TX_COMP_NDMA_ERR		0x3
254*4882a593Smuzhiyun #define BE_TX_COMP_ACL_ERR		0x5
255*4882a593Smuzhiyun 
256*4882a593Smuzhiyun #define LANCER_TX_COMP_LSO_ERR			0x1
257*4882a593Smuzhiyun #define LANCER_TX_COMP_HSW_DROP_MAC_ERR		0x3
258*4882a593Smuzhiyun #define LANCER_TX_COMP_HSW_DROP_VLAN_ERR	0x5
259*4882a593Smuzhiyun #define LANCER_TX_COMP_QINQ_ERR			0x7
260*4882a593Smuzhiyun #define LANCER_TX_COMP_SGE_ERR			0x9
261*4882a593Smuzhiyun #define LANCER_TX_COMP_PARITY_ERR		0xb
262*4882a593Smuzhiyun #define LANCER_TX_COMP_DMA_ERR			0xd
263*4882a593Smuzhiyun 
264*4882a593Smuzhiyun /* TX Compl Queue Descriptor */
265*4882a593Smuzhiyun 
266*4882a593Smuzhiyun /* Pseudo amap definition for eth_tx_compl in which each bit of the
267*4882a593Smuzhiyun  * actual structure is defined as a byte: used to calculate
268*4882a593Smuzhiyun  * offset/shift/mask of each field */
269*4882a593Smuzhiyun struct amap_eth_tx_compl {
270*4882a593Smuzhiyun 	u8 wrb_index[16];	/* dword 0 */
271*4882a593Smuzhiyun 	u8 ct[2]; 		/* dword 0 */
272*4882a593Smuzhiyun 	u8 port[2];		/* dword 0 */
273*4882a593Smuzhiyun 	u8 rsvd0[8];		/* dword 0 */
274*4882a593Smuzhiyun 	u8 status[4];		/* dword 0 */
275*4882a593Smuzhiyun 	u8 user_bytes[16];	/* dword 1 */
276*4882a593Smuzhiyun 	u8 nwh_bytes[8];	/* dword 1 */
277*4882a593Smuzhiyun 	u8 lso;			/* dword 1 */
278*4882a593Smuzhiyun 	u8 cast_enc[2];		/* dword 1 */
279*4882a593Smuzhiyun 	u8 rsvd1[5];		/* dword 1 */
280*4882a593Smuzhiyun 	u8 rsvd2[32];		/* dword 2 */
281*4882a593Smuzhiyun 	u8 pkts[16];		/* dword 3 */
282*4882a593Smuzhiyun 	u8 ringid[11];		/* dword 3 */
283*4882a593Smuzhiyun 	u8 hash_val[4];		/* dword 3 */
284*4882a593Smuzhiyun 	u8 valid;		/* dword 3 */
285*4882a593Smuzhiyun } __packed;
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun struct be_eth_tx_compl {
288*4882a593Smuzhiyun 	u32 dw[4];
289*4882a593Smuzhiyun };
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun /* RX Queue Descriptor */
292*4882a593Smuzhiyun struct be_eth_rx_d {
293*4882a593Smuzhiyun 	u32 fragpa_hi;
294*4882a593Smuzhiyun 	u32 fragpa_lo;
295*4882a593Smuzhiyun };
296*4882a593Smuzhiyun 
297*4882a593Smuzhiyun /* RX Compl Queue Descriptor */
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun /* Pseudo amap definition for BE2 and BE3 legacy mode eth_rx_compl in which
300*4882a593Smuzhiyun  * each bit of the actual structure is defined as a byte: used to calculate
301*4882a593Smuzhiyun  * offset/shift/mask of each field */
302*4882a593Smuzhiyun struct amap_eth_rx_compl_v0 {
303*4882a593Smuzhiyun 	u8 vlan_tag[16];	/* dword 0 */
304*4882a593Smuzhiyun 	u8 pktsize[14];		/* dword 0 */
305*4882a593Smuzhiyun 	u8 port;		/* dword 0 */
306*4882a593Smuzhiyun 	u8 ip_opt;		/* dword 0 */
307*4882a593Smuzhiyun 	u8 err;			/* dword 1 */
308*4882a593Smuzhiyun 	u8 rsshp;		/* dword 1 */
309*4882a593Smuzhiyun 	u8 ipf;			/* dword 1 */
310*4882a593Smuzhiyun 	u8 tcpf;		/* dword 1 */
311*4882a593Smuzhiyun 	u8 udpf;		/* dword 1 */
312*4882a593Smuzhiyun 	u8 ipcksm;		/* dword 1 */
313*4882a593Smuzhiyun 	u8 l4_cksm;		/* dword 1 */
314*4882a593Smuzhiyun 	u8 ip_version;		/* dword 1 */
315*4882a593Smuzhiyun 	u8 macdst[6];		/* dword 1 */
316*4882a593Smuzhiyun 	u8 vtp;			/* dword 1 */
317*4882a593Smuzhiyun 	u8 ip_frag;		/* dword 1 */
318*4882a593Smuzhiyun 	u8 fragndx[10];		/* dword 1 */
319*4882a593Smuzhiyun 	u8 ct[2];		/* dword 1 */
320*4882a593Smuzhiyun 	u8 sw;			/* dword 1 */
321*4882a593Smuzhiyun 	u8 numfrags[3];		/* dword 1 */
322*4882a593Smuzhiyun 	u8 rss_flush;		/* dword 2 */
323*4882a593Smuzhiyun 	u8 cast_enc[2];		/* dword 2 */
324*4882a593Smuzhiyun 	u8 qnq;			/* dword 2 */
325*4882a593Smuzhiyun 	u8 rss_bank;		/* dword 2 */
326*4882a593Smuzhiyun 	u8 rsvd1[23];		/* dword 2 */
327*4882a593Smuzhiyun 	u8 lro_pkt;		/* dword 2 */
328*4882a593Smuzhiyun 	u8 rsvd2[2];		/* dword 2 */
329*4882a593Smuzhiyun 	u8 valid;		/* dword 2 */
330*4882a593Smuzhiyun 	u8 rsshash[32];		/* dword 3 */
331*4882a593Smuzhiyun } __packed;
332*4882a593Smuzhiyun 
333*4882a593Smuzhiyun /* Pseudo amap definition for BE3 native mode eth_rx_compl in which
334*4882a593Smuzhiyun  * each bit of the actual structure is defined as a byte: used to calculate
335*4882a593Smuzhiyun  * offset/shift/mask of each field */
336*4882a593Smuzhiyun struct amap_eth_rx_compl_v1 {
337*4882a593Smuzhiyun 	u8 vlan_tag[16];	/* dword 0 */
338*4882a593Smuzhiyun 	u8 pktsize[14];		/* dword 0 */
339*4882a593Smuzhiyun 	u8 vtp;			/* dword 0 */
340*4882a593Smuzhiyun 	u8 ip_opt;		/* dword 0 */
341*4882a593Smuzhiyun 	u8 err;			/* dword 1 */
342*4882a593Smuzhiyun 	u8 rsshp;		/* dword 1 */
343*4882a593Smuzhiyun 	u8 ipf;			/* dword 1 */
344*4882a593Smuzhiyun 	u8 tcpf;		/* dword 1 */
345*4882a593Smuzhiyun 	u8 udpf;		/* dword 1 */
346*4882a593Smuzhiyun 	u8 ipcksm;		/* dword 1 */
347*4882a593Smuzhiyun 	u8 l4_cksm;		/* dword 1 */
348*4882a593Smuzhiyun 	u8 ip_version;		/* dword 1 */
349*4882a593Smuzhiyun 	u8 macdst[7];		/* dword 1 */
350*4882a593Smuzhiyun 	u8 rsvd0;		/* dword 1 */
351*4882a593Smuzhiyun 	u8 fragndx[10];		/* dword 1 */
352*4882a593Smuzhiyun 	u8 ct[2];		/* dword 1 */
353*4882a593Smuzhiyun 	u8 sw;			/* dword 1 */
354*4882a593Smuzhiyun 	u8 numfrags[3];		/* dword 1 */
355*4882a593Smuzhiyun 	u8 rss_flush;		/* dword 2 */
356*4882a593Smuzhiyun 	u8 cast_enc[2];		/* dword 2 */
357*4882a593Smuzhiyun 	u8 qnq;			/* dword 2 */
358*4882a593Smuzhiyun 	u8 rss_bank;		/* dword 2 */
359*4882a593Smuzhiyun 	u8 port[2];		/* dword 2 */
360*4882a593Smuzhiyun 	u8 vntagp;		/* dword 2 */
361*4882a593Smuzhiyun 	u8 header_len[8];	/* dword 2 */
362*4882a593Smuzhiyun 	u8 header_split[2];	/* dword 2 */
363*4882a593Smuzhiyun 	u8 rsvd1[12];		/* dword 2 */
364*4882a593Smuzhiyun 	u8 tunneled;
365*4882a593Smuzhiyun 	u8 valid;		/* dword 2 */
366*4882a593Smuzhiyun 	u8 rsshash[32];		/* dword 3 */
367*4882a593Smuzhiyun } __packed;
368*4882a593Smuzhiyun 
369*4882a593Smuzhiyun struct be_eth_rx_compl {
370*4882a593Smuzhiyun 	u32 dw[4];
371*4882a593Smuzhiyun };
372