xref: /OK3568_Linux_fs/kernel/drivers/net/ethernet/emulex/benet/be_cmds.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 /*
15*4882a593Smuzhiyun  * The driver sends configuration and managements command requests to the
16*4882a593Smuzhiyun  * firmware in the BE. These requests are communicated to the processor
17*4882a593Smuzhiyun  * using Work Request Blocks (WRBs) submitted to the MCC-WRB ring or via one
18*4882a593Smuzhiyun  * WRB inside a MAILBOX.
19*4882a593Smuzhiyun  * The commands are serviced by the ARM processor in the BladeEngine's MPU.
20*4882a593Smuzhiyun  */
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun struct be_sge {
23*4882a593Smuzhiyun 	u32 pa_lo;
24*4882a593Smuzhiyun 	u32 pa_hi;
25*4882a593Smuzhiyun 	u32 len;
26*4882a593Smuzhiyun };
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #define MCC_WRB_EMBEDDED_MASK	1 	/* bit 0 of dword 0*/
29*4882a593Smuzhiyun #define MCC_WRB_SGE_CNT_SHIFT	3	/* bits 3 - 7 of dword 0 */
30*4882a593Smuzhiyun #define MCC_WRB_SGE_CNT_MASK	0x1F	/* bits 3 - 7 of dword 0 */
31*4882a593Smuzhiyun struct be_mcc_wrb {
32*4882a593Smuzhiyun 	u32 embedded;		/* dword 0 */
33*4882a593Smuzhiyun 	u32 payload_length;	/* dword 1 */
34*4882a593Smuzhiyun 	u32 tag0;		/* dword 2 */
35*4882a593Smuzhiyun 	u32 tag1;		/* dword 3 */
36*4882a593Smuzhiyun 	u32 rsvd;		/* dword 4 */
37*4882a593Smuzhiyun 	union {
38*4882a593Smuzhiyun 		u8 embedded_payload[236]; /* used by embedded cmds */
39*4882a593Smuzhiyun 		struct be_sge sgl[19];    /* used by non-embedded cmds */
40*4882a593Smuzhiyun 	} payload;
41*4882a593Smuzhiyun };
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun #define CQE_FLAGS_VALID_MASK		BIT(31)
44*4882a593Smuzhiyun #define CQE_FLAGS_ASYNC_MASK		BIT(30)
45*4882a593Smuzhiyun #define CQE_FLAGS_COMPLETED_MASK	BIT(28)
46*4882a593Smuzhiyun #define CQE_FLAGS_CONSUMED_MASK		BIT(27)
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun /* Completion Status */
49*4882a593Smuzhiyun enum mcc_base_status {
50*4882a593Smuzhiyun 	MCC_STATUS_SUCCESS = 0,
51*4882a593Smuzhiyun 	MCC_STATUS_FAILED = 1,
52*4882a593Smuzhiyun 	MCC_STATUS_ILLEGAL_REQUEST = 2,
53*4882a593Smuzhiyun 	MCC_STATUS_ILLEGAL_FIELD = 3,
54*4882a593Smuzhiyun 	MCC_STATUS_INSUFFICIENT_BUFFER = 4,
55*4882a593Smuzhiyun 	MCC_STATUS_UNAUTHORIZED_REQUEST = 5,
56*4882a593Smuzhiyun 	MCC_STATUS_NOT_SUPPORTED = 66,
57*4882a593Smuzhiyun 	MCC_STATUS_FEATURE_NOT_SUPPORTED = 68,
58*4882a593Smuzhiyun 	MCC_STATUS_INVALID_LENGTH = 116
59*4882a593Smuzhiyun };
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun /* Additional status */
62*4882a593Smuzhiyun enum mcc_addl_status {
63*4882a593Smuzhiyun 	MCC_ADDL_STATUS_INSUFFICIENT_RESOURCES = 0x16,
64*4882a593Smuzhiyun 	MCC_ADDL_STATUS_FLASH_IMAGE_CRC_MISMATCH = 0x4d,
65*4882a593Smuzhiyun 	MCC_ADDL_STATUS_TOO_MANY_INTERFACES = 0x4a,
66*4882a593Smuzhiyun 	MCC_ADDL_STATUS_INSUFFICIENT_VLANS = 0xab,
67*4882a593Smuzhiyun 	MCC_ADDL_STATUS_INVALID_SIGNATURE = 0x56,
68*4882a593Smuzhiyun 	MCC_ADDL_STATUS_MISSING_SIGNATURE = 0x57,
69*4882a593Smuzhiyun 	MCC_ADDL_STATUS_INSUFFICIENT_PRIVILEGES = 0x60
70*4882a593Smuzhiyun };
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun #define CQE_BASE_STATUS_MASK		0xFFFF
73*4882a593Smuzhiyun #define CQE_BASE_STATUS_SHIFT		0	/* bits 0 - 15 */
74*4882a593Smuzhiyun #define CQE_ADDL_STATUS_MASK		0xFF
75*4882a593Smuzhiyun #define CQE_ADDL_STATUS_SHIFT		16	/* bits 16 - 31 */
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun #define base_status(status)		\
78*4882a593Smuzhiyun 		((enum mcc_base_status)	\
79*4882a593Smuzhiyun 			(status > 0 ? (status & CQE_BASE_STATUS_MASK) : 0))
80*4882a593Smuzhiyun #define addl_status(status)		\
81*4882a593Smuzhiyun 		((enum mcc_addl_status)	\
82*4882a593Smuzhiyun 			(status > 0 ? (status >> CQE_ADDL_STATUS_SHIFT) & \
83*4882a593Smuzhiyun 					CQE_ADDL_STATUS_MASK : 0))
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun struct be_mcc_compl {
86*4882a593Smuzhiyun 	u32 status;		/* dword 0 */
87*4882a593Smuzhiyun 	u32 tag0;		/* dword 1 */
88*4882a593Smuzhiyun 	u32 tag1;		/* dword 2 */
89*4882a593Smuzhiyun 	u32 flags;		/* dword 3 */
90*4882a593Smuzhiyun };
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun /* When the async bit of mcc_compl flags is set, flags
93*4882a593Smuzhiyun  * is interpreted as follows:
94*4882a593Smuzhiyun  */
95*4882a593Smuzhiyun #define ASYNC_EVENT_CODE_SHIFT		8	/* bits 8 - 15 */
96*4882a593Smuzhiyun #define ASYNC_EVENT_CODE_MASK		0xFF
97*4882a593Smuzhiyun #define ASYNC_EVENT_TYPE_SHIFT		16
98*4882a593Smuzhiyun #define ASYNC_EVENT_TYPE_MASK		0xFF
99*4882a593Smuzhiyun #define ASYNC_EVENT_CODE_LINK_STATE	0x1
100*4882a593Smuzhiyun #define ASYNC_EVENT_CODE_GRP_5		0x5
101*4882a593Smuzhiyun #define ASYNC_EVENT_QOS_SPEED		0x1
102*4882a593Smuzhiyun #define ASYNC_EVENT_COS_PRIORITY	0x2
103*4882a593Smuzhiyun #define ASYNC_EVENT_PVID_STATE		0x3
104*4882a593Smuzhiyun #define ASYNC_EVENT_CODE_QNQ		0x6
105*4882a593Smuzhiyun #define ASYNC_DEBUG_EVENT_TYPE_QNQ	1
106*4882a593Smuzhiyun #define ASYNC_EVENT_CODE_SLIPORT	0x11
107*4882a593Smuzhiyun #define ASYNC_EVENT_PORT_MISCONFIG	0x9
108*4882a593Smuzhiyun #define ASYNC_EVENT_FW_CONTROL		0x5
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun enum {
111*4882a593Smuzhiyun 	LINK_DOWN	= 0x0,
112*4882a593Smuzhiyun 	LINK_UP		= 0x1
113*4882a593Smuzhiyun };
114*4882a593Smuzhiyun #define LINK_STATUS_MASK			0x1
115*4882a593Smuzhiyun #define LOGICAL_LINK_STATUS_MASK		0x2
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun /* When the event code of compl->flags is link-state, the mcc_compl
118*4882a593Smuzhiyun  * must be interpreted as follows
119*4882a593Smuzhiyun  */
120*4882a593Smuzhiyun struct be_async_event_link_state {
121*4882a593Smuzhiyun 	u8 physical_port;
122*4882a593Smuzhiyun 	u8 port_link_status;
123*4882a593Smuzhiyun 	u8 port_duplex;
124*4882a593Smuzhiyun 	u8 port_speed;
125*4882a593Smuzhiyun 	u8 port_fault;
126*4882a593Smuzhiyun 	u8 rsvd0[7];
127*4882a593Smuzhiyun 	u32 flags;
128*4882a593Smuzhiyun } __packed;
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun /* When the event code of compl->flags is GRP-5 and event_type is QOS_SPEED
131*4882a593Smuzhiyun  * the mcc_compl must be interpreted as follows
132*4882a593Smuzhiyun  */
133*4882a593Smuzhiyun struct be_async_event_grp5_qos_link_speed {
134*4882a593Smuzhiyun 	u8 physical_port;
135*4882a593Smuzhiyun 	u8 rsvd[5];
136*4882a593Smuzhiyun 	u16 qos_link_speed;
137*4882a593Smuzhiyun 	u32 event_tag;
138*4882a593Smuzhiyun 	u32 flags;
139*4882a593Smuzhiyun } __packed;
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun /* When the event code of compl->flags is GRP5 and event type is
142*4882a593Smuzhiyun  * CoS-Priority, the mcc_compl must be interpreted as follows
143*4882a593Smuzhiyun  */
144*4882a593Smuzhiyun struct be_async_event_grp5_cos_priority {
145*4882a593Smuzhiyun 	u8 physical_port;
146*4882a593Smuzhiyun 	u8 available_priority_bmap;
147*4882a593Smuzhiyun 	u8 reco_default_priority;
148*4882a593Smuzhiyun 	u8 valid;
149*4882a593Smuzhiyun 	u8 rsvd0;
150*4882a593Smuzhiyun 	u8 event_tag;
151*4882a593Smuzhiyun 	u32 flags;
152*4882a593Smuzhiyun } __packed;
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun /* When the event code of compl->flags is GRP5 and event type is
155*4882a593Smuzhiyun  * PVID state, the mcc_compl must be interpreted as follows
156*4882a593Smuzhiyun  */
157*4882a593Smuzhiyun struct be_async_event_grp5_pvid_state {
158*4882a593Smuzhiyun 	u8 enabled;
159*4882a593Smuzhiyun 	u8 rsvd0;
160*4882a593Smuzhiyun 	u16 tag;
161*4882a593Smuzhiyun 	u32 event_tag;
162*4882a593Smuzhiyun 	u32 rsvd1;
163*4882a593Smuzhiyun 	u32 flags;
164*4882a593Smuzhiyun } __packed;
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun /* async event indicating outer VLAN tag in QnQ */
167*4882a593Smuzhiyun struct be_async_event_qnq {
168*4882a593Smuzhiyun 	u8 valid;	/* Indicates if outer VLAN is valid */
169*4882a593Smuzhiyun 	u8 rsvd0;
170*4882a593Smuzhiyun 	u16 vlan_tag;
171*4882a593Smuzhiyun 	u32 event_tag;
172*4882a593Smuzhiyun 	u8 rsvd1[4];
173*4882a593Smuzhiyun 	u32 flags;
174*4882a593Smuzhiyun } __packed;
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun enum {
177*4882a593Smuzhiyun 	BE_PHY_FUNCTIONAL	= 0,
178*4882a593Smuzhiyun 	BE_PHY_NOT_PRESENT	= 1,
179*4882a593Smuzhiyun 	BE_PHY_DIFF_MEDIA	= 2,
180*4882a593Smuzhiyun 	BE_PHY_INCOMPATIBLE	= 3,
181*4882a593Smuzhiyun 	BE_PHY_UNQUALIFIED	= 4,
182*4882a593Smuzhiyun 	BE_PHY_UNCERTIFIED	= 5
183*4882a593Smuzhiyun };
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun #define PHY_STATE_MSG_SEVERITY		0x6
186*4882a593Smuzhiyun #define PHY_STATE_OPER			0x1
187*4882a593Smuzhiyun #define PHY_STATE_INFO_VALID		0x80
188*4882a593Smuzhiyun #define	PHY_STATE_OPER_MSG_NONE		0x2
189*4882a593Smuzhiyun #define DEFAULT_MSG_SEVERITY		0x1
190*4882a593Smuzhiyun 
191*4882a593Smuzhiyun #define be_phy_state_unknown(phy_state) (phy_state > BE_PHY_UNCERTIFIED)
192*4882a593Smuzhiyun #define be_phy_unqualified(phy_state)				\
193*4882a593Smuzhiyun 			(phy_state == BE_PHY_UNQUALIFIED ||	\
194*4882a593Smuzhiyun 			 phy_state == BE_PHY_UNCERTIFIED)
195*4882a593Smuzhiyun #define be_phy_misconfigured(phy_state)				\
196*4882a593Smuzhiyun 			(phy_state == BE_PHY_INCOMPATIBLE ||	\
197*4882a593Smuzhiyun 			 phy_state == BE_PHY_UNQUALIFIED ||	\
198*4882a593Smuzhiyun 			 phy_state == BE_PHY_UNCERTIFIED)
199*4882a593Smuzhiyun 
200*4882a593Smuzhiyun extern const  char * const be_misconfig_evt_port_state[];
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun /* async event indicating misconfigured port */
203*4882a593Smuzhiyun struct be_async_event_misconfig_port {
204*4882a593Smuzhiyun  /* DATA_WORD1:
205*4882a593Smuzhiyun   * phy state of port 0: bits 7 - 0
206*4882a593Smuzhiyun   * phy state of port 1: bits 15 - 8
207*4882a593Smuzhiyun   * phy state of port 2: bits 23 - 16
208*4882a593Smuzhiyun   * phy state of port 3: bits 31 - 24
209*4882a593Smuzhiyun   */
210*4882a593Smuzhiyun 	u32 event_data_word1;
211*4882a593Smuzhiyun  /* DATA_WORD2:
212*4882a593Smuzhiyun   * phy state info of port 0: bits 7 - 0
213*4882a593Smuzhiyun   * phy state info of port 1: bits 15 - 8
214*4882a593Smuzhiyun   * phy state info of port 2: bits 23 - 16
215*4882a593Smuzhiyun   * phy state info of port 3: bits 31 - 24
216*4882a593Smuzhiyun   *
217*4882a593Smuzhiyun   * PHY STATE INFO:
218*4882a593Smuzhiyun   * Link operability	 :bit 0
219*4882a593Smuzhiyun   * Message severity	 :bit 2 - 1
220*4882a593Smuzhiyun   * Rsvd			 :bits 6 - 3
221*4882a593Smuzhiyun   * phy state info valid	 :bit 7
222*4882a593Smuzhiyun   */
223*4882a593Smuzhiyun 	u32 event_data_word2;
224*4882a593Smuzhiyun 	u32 rsvd0;
225*4882a593Smuzhiyun 	u32 flags;
226*4882a593Smuzhiyun } __packed;
227*4882a593Smuzhiyun 
228*4882a593Smuzhiyun #define BMC_FILT_BROADCAST_ARP				BIT(0)
229*4882a593Smuzhiyun #define BMC_FILT_BROADCAST_DHCP_CLIENT			BIT(1)
230*4882a593Smuzhiyun #define BMC_FILT_BROADCAST_DHCP_SERVER			BIT(2)
231*4882a593Smuzhiyun #define BMC_FILT_BROADCAST_NET_BIOS			BIT(3)
232*4882a593Smuzhiyun #define BMC_FILT_BROADCAST				BIT(7)
233*4882a593Smuzhiyun #define BMC_FILT_MULTICAST_IPV6_NEIGH_ADVER		BIT(8)
234*4882a593Smuzhiyun #define BMC_FILT_MULTICAST_IPV6_RA			BIT(9)
235*4882a593Smuzhiyun #define BMC_FILT_MULTICAST_IPV6_RAS			BIT(10)
236*4882a593Smuzhiyun #define BMC_FILT_MULTICAST				BIT(15)
237*4882a593Smuzhiyun struct be_async_fw_control {
238*4882a593Smuzhiyun 	u32 event_data_word1;
239*4882a593Smuzhiyun 	u32 event_data_word2;
240*4882a593Smuzhiyun 	u32 evt_tag;
241*4882a593Smuzhiyun 	u32 event_data_word4;
242*4882a593Smuzhiyun } __packed;
243*4882a593Smuzhiyun 
244*4882a593Smuzhiyun struct be_mcc_mailbox {
245*4882a593Smuzhiyun 	struct be_mcc_wrb wrb;
246*4882a593Smuzhiyun 	struct be_mcc_compl compl;
247*4882a593Smuzhiyun };
248*4882a593Smuzhiyun 
249*4882a593Smuzhiyun #define CMD_SUBSYSTEM_COMMON	0x1
250*4882a593Smuzhiyun #define CMD_SUBSYSTEM_ETH 	0x3
251*4882a593Smuzhiyun #define CMD_SUBSYSTEM_LOWLEVEL  0xb
252*4882a593Smuzhiyun 
253*4882a593Smuzhiyun #define OPCODE_COMMON_NTWK_MAC_QUERY			1
254*4882a593Smuzhiyun #define OPCODE_COMMON_NTWK_MAC_SET			2
255*4882a593Smuzhiyun #define OPCODE_COMMON_NTWK_MULTICAST_SET		3
256*4882a593Smuzhiyun #define OPCODE_COMMON_NTWK_VLAN_CONFIG  		4
257*4882a593Smuzhiyun #define OPCODE_COMMON_NTWK_LINK_STATUS_QUERY		5
258*4882a593Smuzhiyun #define OPCODE_COMMON_READ_FLASHROM			6
259*4882a593Smuzhiyun #define OPCODE_COMMON_WRITE_FLASHROM			7
260*4882a593Smuzhiyun #define OPCODE_COMMON_CQ_CREATE				12
261*4882a593Smuzhiyun #define OPCODE_COMMON_EQ_CREATE				13
262*4882a593Smuzhiyun #define OPCODE_COMMON_MCC_CREATE			21
263*4882a593Smuzhiyun #define OPCODE_COMMON_SET_QOS				28
264*4882a593Smuzhiyun #define OPCODE_COMMON_MCC_CREATE_EXT			90
265*4882a593Smuzhiyun #define OPCODE_COMMON_SEEPROM_READ			30
266*4882a593Smuzhiyun #define OPCODE_COMMON_GET_CNTL_ATTRIBUTES               32
267*4882a593Smuzhiyun #define OPCODE_COMMON_NTWK_RX_FILTER    		34
268*4882a593Smuzhiyun #define OPCODE_COMMON_GET_FW_VERSION			35
269*4882a593Smuzhiyun #define OPCODE_COMMON_SET_FLOW_CONTROL			36
270*4882a593Smuzhiyun #define OPCODE_COMMON_GET_FLOW_CONTROL			37
271*4882a593Smuzhiyun #define OPCODE_COMMON_SET_FRAME_SIZE			39
272*4882a593Smuzhiyun #define OPCODE_COMMON_MODIFY_EQ_DELAY			41
273*4882a593Smuzhiyun #define OPCODE_COMMON_FIRMWARE_CONFIG			42
274*4882a593Smuzhiyun #define OPCODE_COMMON_NTWK_INTERFACE_CREATE 		50
275*4882a593Smuzhiyun #define OPCODE_COMMON_NTWK_INTERFACE_DESTROY 		51
276*4882a593Smuzhiyun #define OPCODE_COMMON_MCC_DESTROY        		53
277*4882a593Smuzhiyun #define OPCODE_COMMON_CQ_DESTROY        		54
278*4882a593Smuzhiyun #define OPCODE_COMMON_EQ_DESTROY        		55
279*4882a593Smuzhiyun #define OPCODE_COMMON_QUERY_FIRMWARE_CONFIG		58
280*4882a593Smuzhiyun #define OPCODE_COMMON_NTWK_PMAC_ADD			59
281*4882a593Smuzhiyun #define OPCODE_COMMON_NTWK_PMAC_DEL			60
282*4882a593Smuzhiyun #define OPCODE_COMMON_FUNCTION_RESET			61
283*4882a593Smuzhiyun #define OPCODE_COMMON_MANAGE_FAT			68
284*4882a593Smuzhiyun #define OPCODE_COMMON_ENABLE_DISABLE_BEACON		69
285*4882a593Smuzhiyun #define OPCODE_COMMON_GET_BEACON_STATE			70
286*4882a593Smuzhiyun #define OPCODE_COMMON_READ_TRANSRECV_DATA		73
287*4882a593Smuzhiyun #define OPCODE_COMMON_GET_PORT_NAME			77
288*4882a593Smuzhiyun #define OPCODE_COMMON_SET_LOGICAL_LINK_CONFIG		80
289*4882a593Smuzhiyun #define OPCODE_COMMON_SET_INTERRUPT_ENABLE		89
290*4882a593Smuzhiyun #define OPCODE_COMMON_SET_FN_PRIVILEGES			100
291*4882a593Smuzhiyun #define OPCODE_COMMON_GET_PHY_DETAILS			102
292*4882a593Smuzhiyun #define OPCODE_COMMON_SET_DRIVER_FUNCTION_CAP		103
293*4882a593Smuzhiyun #define OPCODE_COMMON_GET_CNTL_ADDITIONAL_ATTRIBUTES	121
294*4882a593Smuzhiyun #define OPCODE_COMMON_GET_EXT_FAT_CAPABILITIES		125
295*4882a593Smuzhiyun #define OPCODE_COMMON_SET_EXT_FAT_CAPABILITIES		126
296*4882a593Smuzhiyun #define OPCODE_COMMON_GET_MAC_LIST			147
297*4882a593Smuzhiyun #define OPCODE_COMMON_SET_MAC_LIST			148
298*4882a593Smuzhiyun #define OPCODE_COMMON_GET_HSW_CONFIG			152
299*4882a593Smuzhiyun #define OPCODE_COMMON_GET_FUNC_CONFIG			160
300*4882a593Smuzhiyun #define OPCODE_COMMON_GET_PROFILE_CONFIG		164
301*4882a593Smuzhiyun #define OPCODE_COMMON_SET_PROFILE_CONFIG		165
302*4882a593Smuzhiyun #define OPCODE_COMMON_GET_ACTIVE_PROFILE		167
303*4882a593Smuzhiyun #define OPCODE_COMMON_SET_HSW_CONFIG			153
304*4882a593Smuzhiyun #define OPCODE_COMMON_GET_FN_PRIVILEGES			170
305*4882a593Smuzhiyun #define OPCODE_COMMON_READ_OBJECT			171
306*4882a593Smuzhiyun #define OPCODE_COMMON_WRITE_OBJECT			172
307*4882a593Smuzhiyun #define OPCODE_COMMON_DELETE_OBJECT			174
308*4882a593Smuzhiyun #define OPCODE_COMMON_SET_FEATURES			191
309*4882a593Smuzhiyun #define OPCODE_COMMON_MANAGE_IFACE_FILTERS		193
310*4882a593Smuzhiyun #define OPCODE_COMMON_GET_IFACE_LIST			194
311*4882a593Smuzhiyun #define OPCODE_COMMON_ENABLE_DISABLE_VF			196
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun #define OPCODE_ETH_RSS_CONFIG				1
314*4882a593Smuzhiyun #define OPCODE_ETH_ACPI_CONFIG				2
315*4882a593Smuzhiyun #define OPCODE_ETH_PROMISCUOUS				3
316*4882a593Smuzhiyun #define OPCODE_ETH_GET_STATISTICS			4
317*4882a593Smuzhiyun #define OPCODE_ETH_TX_CREATE				7
318*4882a593Smuzhiyun #define OPCODE_ETH_RX_CREATE            		8
319*4882a593Smuzhiyun #define OPCODE_ETH_TX_DESTROY           		9
320*4882a593Smuzhiyun #define OPCODE_ETH_RX_DESTROY           		10
321*4882a593Smuzhiyun #define OPCODE_ETH_ACPI_WOL_MAGIC_CONFIG		12
322*4882a593Smuzhiyun #define OPCODE_ETH_GET_PPORT_STATS			18
323*4882a593Smuzhiyun 
324*4882a593Smuzhiyun #define OPCODE_LOWLEVEL_HOST_DDR_DMA                    17
325*4882a593Smuzhiyun #define OPCODE_LOWLEVEL_LOOPBACK_TEST                   18
326*4882a593Smuzhiyun #define OPCODE_LOWLEVEL_SET_LOOPBACK_MODE		19
327*4882a593Smuzhiyun 
328*4882a593Smuzhiyun struct be_cmd_req_hdr {
329*4882a593Smuzhiyun 	u8 opcode;		/* dword 0 */
330*4882a593Smuzhiyun 	u8 subsystem;		/* dword 0 */
331*4882a593Smuzhiyun 	u8 port_number;		/* dword 0 */
332*4882a593Smuzhiyun 	u8 domain;		/* dword 0 */
333*4882a593Smuzhiyun 	u32 timeout;		/* dword 1 */
334*4882a593Smuzhiyun 	u32 request_length;	/* dword 2 */
335*4882a593Smuzhiyun 	u8 version;		/* dword 3 */
336*4882a593Smuzhiyun 	u8 rsvd[3];		/* dword 3 */
337*4882a593Smuzhiyun };
338*4882a593Smuzhiyun 
339*4882a593Smuzhiyun #define RESP_HDR_INFO_OPCODE_SHIFT	0	/* bits 0 - 7 */
340*4882a593Smuzhiyun #define RESP_HDR_INFO_SUBSYS_SHIFT	8 	/* bits 8 - 15 */
341*4882a593Smuzhiyun struct be_cmd_resp_hdr {
342*4882a593Smuzhiyun 	u8 opcode;		/* dword 0 */
343*4882a593Smuzhiyun 	u8 subsystem;		/* dword 0 */
344*4882a593Smuzhiyun 	u8 rsvd[2];		/* dword 0 */
345*4882a593Smuzhiyun 	u8 base_status;		/* dword 1 */
346*4882a593Smuzhiyun 	u8 addl_status;		/* dword 1 */
347*4882a593Smuzhiyun 	u8 rsvd1[2];		/* dword 1 */
348*4882a593Smuzhiyun 	u32 response_length;	/* dword 2 */
349*4882a593Smuzhiyun 	u32 actual_resp_len;	/* dword 3 */
350*4882a593Smuzhiyun };
351*4882a593Smuzhiyun 
352*4882a593Smuzhiyun struct phys_addr {
353*4882a593Smuzhiyun 	u32 lo;
354*4882a593Smuzhiyun 	u32 hi;
355*4882a593Smuzhiyun };
356*4882a593Smuzhiyun 
357*4882a593Smuzhiyun /**************************
358*4882a593Smuzhiyun  * BE Command definitions *
359*4882a593Smuzhiyun  **************************/
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun /* Pseudo amap definition in which each bit of the actual structure is defined
362*4882a593Smuzhiyun  * as a byte: used to calculate offset/shift/mask of each field */
363*4882a593Smuzhiyun struct amap_eq_context {
364*4882a593Smuzhiyun 	u8 cidx[13];		/* dword 0*/
365*4882a593Smuzhiyun 	u8 rsvd0[3];		/* dword 0*/
366*4882a593Smuzhiyun 	u8 epidx[13];		/* dword 0*/
367*4882a593Smuzhiyun 	u8 valid;		/* dword 0*/
368*4882a593Smuzhiyun 	u8 rsvd1;		/* dword 0*/
369*4882a593Smuzhiyun 	u8 size;		/* dword 0*/
370*4882a593Smuzhiyun 	u8 pidx[13];		/* dword 1*/
371*4882a593Smuzhiyun 	u8 rsvd2[3];		/* dword 1*/
372*4882a593Smuzhiyun 	u8 pd[10];		/* dword 1*/
373*4882a593Smuzhiyun 	u8 count[3];		/* dword 1*/
374*4882a593Smuzhiyun 	u8 solevent;		/* dword 1*/
375*4882a593Smuzhiyun 	u8 stalled;		/* dword 1*/
376*4882a593Smuzhiyun 	u8 armed;		/* dword 1*/
377*4882a593Smuzhiyun 	u8 rsvd3[4];		/* dword 2*/
378*4882a593Smuzhiyun 	u8 func[8];		/* dword 2*/
379*4882a593Smuzhiyun 	u8 rsvd4;		/* dword 2*/
380*4882a593Smuzhiyun 	u8 delaymult[10];	/* dword 2*/
381*4882a593Smuzhiyun 	u8 rsvd5[2];		/* dword 2*/
382*4882a593Smuzhiyun 	u8 phase[2];		/* dword 2*/
383*4882a593Smuzhiyun 	u8 nodelay;		/* dword 2*/
384*4882a593Smuzhiyun 	u8 rsvd6[4];		/* dword 2*/
385*4882a593Smuzhiyun 	u8 rsvd7[32];		/* dword 3*/
386*4882a593Smuzhiyun } __packed;
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun struct be_cmd_req_eq_create {
389*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
390*4882a593Smuzhiyun 	u16 num_pages;		/* sword */
391*4882a593Smuzhiyun 	u16 rsvd0;		/* sword */
392*4882a593Smuzhiyun 	u8 context[sizeof(struct amap_eq_context) / 8];
393*4882a593Smuzhiyun 	struct phys_addr pages[8];
394*4882a593Smuzhiyun } __packed;
395*4882a593Smuzhiyun 
396*4882a593Smuzhiyun struct be_cmd_resp_eq_create {
397*4882a593Smuzhiyun 	struct be_cmd_resp_hdr resp_hdr;
398*4882a593Smuzhiyun 	u16 eq_id;		/* sword */
399*4882a593Smuzhiyun 	u16 msix_idx;		/* available only in v2 */
400*4882a593Smuzhiyun } __packed;
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun /******************** Mac query ***************************/
403*4882a593Smuzhiyun enum {
404*4882a593Smuzhiyun 	MAC_ADDRESS_TYPE_STORAGE = 0x0,
405*4882a593Smuzhiyun 	MAC_ADDRESS_TYPE_NETWORK = 0x1,
406*4882a593Smuzhiyun 	MAC_ADDRESS_TYPE_PD = 0x2,
407*4882a593Smuzhiyun 	MAC_ADDRESS_TYPE_MANAGEMENT = 0x3
408*4882a593Smuzhiyun };
409*4882a593Smuzhiyun 
410*4882a593Smuzhiyun struct mac_addr {
411*4882a593Smuzhiyun 	u16 size_of_struct;
412*4882a593Smuzhiyun 	u8 addr[ETH_ALEN];
413*4882a593Smuzhiyun } __packed;
414*4882a593Smuzhiyun 
415*4882a593Smuzhiyun struct be_cmd_req_mac_query {
416*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
417*4882a593Smuzhiyun 	u8 type;
418*4882a593Smuzhiyun 	u8 permanent;
419*4882a593Smuzhiyun 	u16 if_id;
420*4882a593Smuzhiyun 	u32 pmac_id;
421*4882a593Smuzhiyun } __packed;
422*4882a593Smuzhiyun 
423*4882a593Smuzhiyun struct be_cmd_resp_mac_query {
424*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
425*4882a593Smuzhiyun 	struct mac_addr mac;
426*4882a593Smuzhiyun };
427*4882a593Smuzhiyun 
428*4882a593Smuzhiyun /******************** PMac Add ***************************/
429*4882a593Smuzhiyun struct be_cmd_req_pmac_add {
430*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
431*4882a593Smuzhiyun 	u32 if_id;
432*4882a593Smuzhiyun 	u8 mac_address[ETH_ALEN];
433*4882a593Smuzhiyun 	u8 rsvd0[2];
434*4882a593Smuzhiyun } __packed;
435*4882a593Smuzhiyun 
436*4882a593Smuzhiyun struct be_cmd_resp_pmac_add {
437*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
438*4882a593Smuzhiyun 	u32 pmac_id;
439*4882a593Smuzhiyun };
440*4882a593Smuzhiyun 
441*4882a593Smuzhiyun /******************** PMac Del ***************************/
442*4882a593Smuzhiyun struct be_cmd_req_pmac_del {
443*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
444*4882a593Smuzhiyun 	u32 if_id;
445*4882a593Smuzhiyun 	u32 pmac_id;
446*4882a593Smuzhiyun };
447*4882a593Smuzhiyun 
448*4882a593Smuzhiyun /******************** Create CQ ***************************/
449*4882a593Smuzhiyun /* Pseudo amap definition in which each bit of the actual structure is defined
450*4882a593Smuzhiyun  * as a byte: used to calculate offset/shift/mask of each field */
451*4882a593Smuzhiyun struct amap_cq_context_be {
452*4882a593Smuzhiyun 	u8 cidx[11];		/* dword 0*/
453*4882a593Smuzhiyun 	u8 rsvd0;		/* dword 0*/
454*4882a593Smuzhiyun 	u8 coalescwm[2];	/* dword 0*/
455*4882a593Smuzhiyun 	u8 nodelay;		/* dword 0*/
456*4882a593Smuzhiyun 	u8 epidx[11];		/* dword 0*/
457*4882a593Smuzhiyun 	u8 rsvd1;		/* dword 0*/
458*4882a593Smuzhiyun 	u8 count[2];		/* dword 0*/
459*4882a593Smuzhiyun 	u8 valid;		/* dword 0*/
460*4882a593Smuzhiyun 	u8 solevent;		/* dword 0*/
461*4882a593Smuzhiyun 	u8 eventable;		/* dword 0*/
462*4882a593Smuzhiyun 	u8 pidx[11];		/* dword 1*/
463*4882a593Smuzhiyun 	u8 rsvd2;		/* dword 1*/
464*4882a593Smuzhiyun 	u8 pd[10];		/* dword 1*/
465*4882a593Smuzhiyun 	u8 eqid[8];		/* dword 1*/
466*4882a593Smuzhiyun 	u8 stalled;		/* dword 1*/
467*4882a593Smuzhiyun 	u8 armed;		/* dword 1*/
468*4882a593Smuzhiyun 	u8 rsvd3[4];		/* dword 2*/
469*4882a593Smuzhiyun 	u8 func[8];		/* dword 2*/
470*4882a593Smuzhiyun 	u8 rsvd4[20];		/* dword 2*/
471*4882a593Smuzhiyun 	u8 rsvd5[32];		/* dword 3*/
472*4882a593Smuzhiyun } __packed;
473*4882a593Smuzhiyun 
474*4882a593Smuzhiyun struct amap_cq_context_v2 {
475*4882a593Smuzhiyun 	u8 rsvd0[12];		/* dword 0*/
476*4882a593Smuzhiyun 	u8 coalescwm[2];	/* dword 0*/
477*4882a593Smuzhiyun 	u8 nodelay;		/* dword 0*/
478*4882a593Smuzhiyun 	u8 rsvd1[12];		/* dword 0*/
479*4882a593Smuzhiyun 	u8 count[2];		/* dword 0*/
480*4882a593Smuzhiyun 	u8 valid;		/* dword 0*/
481*4882a593Smuzhiyun 	u8 rsvd2;		/* dword 0*/
482*4882a593Smuzhiyun 	u8 eventable;		/* dword 0*/
483*4882a593Smuzhiyun 	u8 eqid[16];		/* dword 1*/
484*4882a593Smuzhiyun 	u8 rsvd3[15];		/* dword 1*/
485*4882a593Smuzhiyun 	u8 armed;		/* dword 1*/
486*4882a593Smuzhiyun 	u8 rsvd4[32];		/* dword 2*/
487*4882a593Smuzhiyun 	u8 rsvd5[32];		/* dword 3*/
488*4882a593Smuzhiyun } __packed;
489*4882a593Smuzhiyun 
490*4882a593Smuzhiyun struct be_cmd_req_cq_create {
491*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
492*4882a593Smuzhiyun 	u16 num_pages;
493*4882a593Smuzhiyun 	u8 page_size;
494*4882a593Smuzhiyun 	u8 rsvd0;
495*4882a593Smuzhiyun 	u8 context[sizeof(struct amap_cq_context_be) / 8];
496*4882a593Smuzhiyun 	struct phys_addr pages[8];
497*4882a593Smuzhiyun } __packed;
498*4882a593Smuzhiyun 
499*4882a593Smuzhiyun 
500*4882a593Smuzhiyun struct be_cmd_resp_cq_create {
501*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
502*4882a593Smuzhiyun 	u16 cq_id;
503*4882a593Smuzhiyun 	u16 rsvd0;
504*4882a593Smuzhiyun } __packed;
505*4882a593Smuzhiyun 
506*4882a593Smuzhiyun struct be_cmd_req_get_fat {
507*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
508*4882a593Smuzhiyun 	u32 fat_operation;
509*4882a593Smuzhiyun 	u32 read_log_offset;
510*4882a593Smuzhiyun 	u32 read_log_length;
511*4882a593Smuzhiyun 	u32 data_buffer_size;
512*4882a593Smuzhiyun 	u32 data_buffer[1];
513*4882a593Smuzhiyun } __packed;
514*4882a593Smuzhiyun 
515*4882a593Smuzhiyun struct be_cmd_resp_get_fat {
516*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
517*4882a593Smuzhiyun 	u32 log_size;
518*4882a593Smuzhiyun 	u32 read_log_length;
519*4882a593Smuzhiyun 	u32 rsvd[2];
520*4882a593Smuzhiyun 	u32 data_buffer[1];
521*4882a593Smuzhiyun } __packed;
522*4882a593Smuzhiyun 
523*4882a593Smuzhiyun 
524*4882a593Smuzhiyun /******************** Create MCCQ ***************************/
525*4882a593Smuzhiyun /* Pseudo amap definition in which each bit of the actual structure is defined
526*4882a593Smuzhiyun  * as a byte: used to calculate offset/shift/mask of each field */
527*4882a593Smuzhiyun struct amap_mcc_context_be {
528*4882a593Smuzhiyun 	u8 con_index[14];
529*4882a593Smuzhiyun 	u8 rsvd0[2];
530*4882a593Smuzhiyun 	u8 ring_size[4];
531*4882a593Smuzhiyun 	u8 fetch_wrb;
532*4882a593Smuzhiyun 	u8 fetch_r2t;
533*4882a593Smuzhiyun 	u8 cq_id[10];
534*4882a593Smuzhiyun 	u8 prod_index[14];
535*4882a593Smuzhiyun 	u8 fid[8];
536*4882a593Smuzhiyun 	u8 pdid[9];
537*4882a593Smuzhiyun 	u8 valid;
538*4882a593Smuzhiyun 	u8 rsvd1[32];
539*4882a593Smuzhiyun 	u8 rsvd2[32];
540*4882a593Smuzhiyun } __packed;
541*4882a593Smuzhiyun 
542*4882a593Smuzhiyun struct amap_mcc_context_v1 {
543*4882a593Smuzhiyun 	u8 async_cq_id[16];
544*4882a593Smuzhiyun 	u8 ring_size[4];
545*4882a593Smuzhiyun 	u8 rsvd0[12];
546*4882a593Smuzhiyun 	u8 rsvd1[31];
547*4882a593Smuzhiyun 	u8 valid;
548*4882a593Smuzhiyun 	u8 async_cq_valid[1];
549*4882a593Smuzhiyun 	u8 rsvd2[31];
550*4882a593Smuzhiyun 	u8 rsvd3[32];
551*4882a593Smuzhiyun } __packed;
552*4882a593Smuzhiyun 
553*4882a593Smuzhiyun struct be_cmd_req_mcc_create {
554*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
555*4882a593Smuzhiyun 	u16 num_pages;
556*4882a593Smuzhiyun 	u16 cq_id;
557*4882a593Smuzhiyun 	u8 context[sizeof(struct amap_mcc_context_be) / 8];
558*4882a593Smuzhiyun 	struct phys_addr pages[8];
559*4882a593Smuzhiyun } __packed;
560*4882a593Smuzhiyun 
561*4882a593Smuzhiyun struct be_cmd_req_mcc_ext_create {
562*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
563*4882a593Smuzhiyun 	u16 num_pages;
564*4882a593Smuzhiyun 	u16 cq_id;
565*4882a593Smuzhiyun 	u32 async_event_bitmap[1];
566*4882a593Smuzhiyun 	u8 context[sizeof(struct amap_mcc_context_v1) / 8];
567*4882a593Smuzhiyun 	struct phys_addr pages[8];
568*4882a593Smuzhiyun } __packed;
569*4882a593Smuzhiyun 
570*4882a593Smuzhiyun struct be_cmd_resp_mcc_create {
571*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
572*4882a593Smuzhiyun 	u16 id;
573*4882a593Smuzhiyun 	u16 rsvd0;
574*4882a593Smuzhiyun } __packed;
575*4882a593Smuzhiyun 
576*4882a593Smuzhiyun /******************** Create TxQ ***************************/
577*4882a593Smuzhiyun #define BE_ETH_TX_RING_TYPE_STANDARD    	2
578*4882a593Smuzhiyun #define BE_ULP1_NUM				1
579*4882a593Smuzhiyun 
580*4882a593Smuzhiyun struct be_cmd_req_eth_tx_create {
581*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
582*4882a593Smuzhiyun 	u8 num_pages;
583*4882a593Smuzhiyun 	u8 ulp_num;
584*4882a593Smuzhiyun 	u16 type;
585*4882a593Smuzhiyun 	u16 if_id;
586*4882a593Smuzhiyun 	u8 queue_size;
587*4882a593Smuzhiyun 	u8 rsvd0;
588*4882a593Smuzhiyun 	u32 rsvd1;
589*4882a593Smuzhiyun 	u16 cq_id;
590*4882a593Smuzhiyun 	u16 rsvd2;
591*4882a593Smuzhiyun 	u32 rsvd3[13];
592*4882a593Smuzhiyun 	struct phys_addr pages[8];
593*4882a593Smuzhiyun } __packed;
594*4882a593Smuzhiyun 
595*4882a593Smuzhiyun struct be_cmd_resp_eth_tx_create {
596*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
597*4882a593Smuzhiyun 	u16 cid;
598*4882a593Smuzhiyun 	u16 rid;
599*4882a593Smuzhiyun 	u32 db_offset;
600*4882a593Smuzhiyun 	u32 rsvd0[4];
601*4882a593Smuzhiyun } __packed;
602*4882a593Smuzhiyun 
603*4882a593Smuzhiyun /******************** Create RxQ ***************************/
604*4882a593Smuzhiyun struct be_cmd_req_eth_rx_create {
605*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
606*4882a593Smuzhiyun 	u16 cq_id;
607*4882a593Smuzhiyun 	u8 frag_size;
608*4882a593Smuzhiyun 	u8 num_pages;
609*4882a593Smuzhiyun 	struct phys_addr pages[2];
610*4882a593Smuzhiyun 	u32 interface_id;
611*4882a593Smuzhiyun 	u16 max_frame_size;
612*4882a593Smuzhiyun 	u16 rsvd0;
613*4882a593Smuzhiyun 	u32 rss_queue;
614*4882a593Smuzhiyun } __packed;
615*4882a593Smuzhiyun 
616*4882a593Smuzhiyun struct be_cmd_resp_eth_rx_create {
617*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
618*4882a593Smuzhiyun 	u16 id;
619*4882a593Smuzhiyun 	u8 rss_id;
620*4882a593Smuzhiyun 	u8 rsvd0;
621*4882a593Smuzhiyun } __packed;
622*4882a593Smuzhiyun 
623*4882a593Smuzhiyun /******************** Q Destroy  ***************************/
624*4882a593Smuzhiyun /* Type of Queue to be destroyed */
625*4882a593Smuzhiyun enum {
626*4882a593Smuzhiyun 	QTYPE_EQ = 1,
627*4882a593Smuzhiyun 	QTYPE_CQ,
628*4882a593Smuzhiyun 	QTYPE_TXQ,
629*4882a593Smuzhiyun 	QTYPE_RXQ,
630*4882a593Smuzhiyun 	QTYPE_MCCQ
631*4882a593Smuzhiyun };
632*4882a593Smuzhiyun 
633*4882a593Smuzhiyun struct be_cmd_req_q_destroy {
634*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
635*4882a593Smuzhiyun 	u16 id;
636*4882a593Smuzhiyun 	u16 bypass_flush;	/* valid only for rx q destroy */
637*4882a593Smuzhiyun } __packed;
638*4882a593Smuzhiyun 
639*4882a593Smuzhiyun /************ I/f Create (it's actually I/f Config Create)**********/
640*4882a593Smuzhiyun 
641*4882a593Smuzhiyun /* Capability flags for the i/f */
642*4882a593Smuzhiyun enum be_if_flags {
643*4882a593Smuzhiyun 	BE_IF_FLAGS_RSS = 0x4,
644*4882a593Smuzhiyun 	BE_IF_FLAGS_PROMISCUOUS = 0x8,
645*4882a593Smuzhiyun 	BE_IF_FLAGS_BROADCAST = 0x10,
646*4882a593Smuzhiyun 	BE_IF_FLAGS_UNTAGGED = 0x20,
647*4882a593Smuzhiyun 	BE_IF_FLAGS_ULP = 0x40,
648*4882a593Smuzhiyun 	BE_IF_FLAGS_VLAN_PROMISCUOUS = 0x80,
649*4882a593Smuzhiyun 	BE_IF_FLAGS_VLAN = 0x100,
650*4882a593Smuzhiyun 	BE_IF_FLAGS_MCAST_PROMISCUOUS = 0x200,
651*4882a593Smuzhiyun 	BE_IF_FLAGS_PASS_L2_ERRORS = 0x400,
652*4882a593Smuzhiyun 	BE_IF_FLAGS_PASS_L3L4_ERRORS = 0x800,
653*4882a593Smuzhiyun 	BE_IF_FLAGS_MULTICAST = 0x1000,
654*4882a593Smuzhiyun 	BE_IF_FLAGS_DEFQ_RSS = 0x1000000
655*4882a593Smuzhiyun };
656*4882a593Smuzhiyun 
657*4882a593Smuzhiyun #define BE_IF_CAP_FLAGS_WANT (BE_IF_FLAGS_RSS | BE_IF_FLAGS_PROMISCUOUS |\
658*4882a593Smuzhiyun 			 BE_IF_FLAGS_BROADCAST | BE_IF_FLAGS_VLAN_PROMISCUOUS |\
659*4882a593Smuzhiyun 			 BE_IF_FLAGS_VLAN | BE_IF_FLAGS_MCAST_PROMISCUOUS |\
660*4882a593Smuzhiyun 			 BE_IF_FLAGS_PASS_L3L4_ERRORS | BE_IF_FLAGS_MULTICAST |\
661*4882a593Smuzhiyun 			 BE_IF_FLAGS_UNTAGGED | BE_IF_FLAGS_DEFQ_RSS)
662*4882a593Smuzhiyun 
663*4882a593Smuzhiyun #define BE_IF_FLAGS_ALL_PROMISCUOUS	(BE_IF_FLAGS_PROMISCUOUS | \
664*4882a593Smuzhiyun 					 BE_IF_FLAGS_VLAN_PROMISCUOUS |\
665*4882a593Smuzhiyun 					 BE_IF_FLAGS_MCAST_PROMISCUOUS)
666*4882a593Smuzhiyun 
667*4882a593Smuzhiyun #define BE_IF_FILT_FLAGS_BASIC (BE_IF_FLAGS_BROADCAST | \
668*4882a593Smuzhiyun 				BE_IF_FLAGS_PASS_L3L4_ERRORS | \
669*4882a593Smuzhiyun 				BE_IF_FLAGS_UNTAGGED)
670*4882a593Smuzhiyun 
671*4882a593Smuzhiyun #define BE_IF_ALL_FILT_FLAGS	(BE_IF_FILT_FLAGS_BASIC | \
672*4882a593Smuzhiyun 				 BE_IF_FLAGS_MULTICAST | \
673*4882a593Smuzhiyun 				 BE_IF_FLAGS_ALL_PROMISCUOUS)
674*4882a593Smuzhiyun 
675*4882a593Smuzhiyun /* An RX interface is an object with one or more MAC addresses and
676*4882a593Smuzhiyun  * filtering capabilities. */
677*4882a593Smuzhiyun struct be_cmd_req_if_create {
678*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
679*4882a593Smuzhiyun 	u32 version;		/* ignore currently */
680*4882a593Smuzhiyun 	u32 capability_flags;
681*4882a593Smuzhiyun 	u32 enable_flags;
682*4882a593Smuzhiyun 	u8 mac_addr[ETH_ALEN];
683*4882a593Smuzhiyun 	u8 rsvd0;
684*4882a593Smuzhiyun 	u8 pmac_invalid; /* if set, don't attach the mac addr to the i/f */
685*4882a593Smuzhiyun 	u32 vlan_tag;	 /* not used currently */
686*4882a593Smuzhiyun } __packed;
687*4882a593Smuzhiyun 
688*4882a593Smuzhiyun struct be_cmd_resp_if_create {
689*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
690*4882a593Smuzhiyun 	u32 interface_id;
691*4882a593Smuzhiyun 	u32 pmac_id;
692*4882a593Smuzhiyun };
693*4882a593Smuzhiyun 
694*4882a593Smuzhiyun /****** I/f Destroy(it's actually I/f Config Destroy )**********/
695*4882a593Smuzhiyun struct be_cmd_req_if_destroy {
696*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
697*4882a593Smuzhiyun 	u32 interface_id;
698*4882a593Smuzhiyun };
699*4882a593Smuzhiyun 
700*4882a593Smuzhiyun /*************** HW Stats Get **********************************/
701*4882a593Smuzhiyun struct be_port_rxf_stats_v0 {
702*4882a593Smuzhiyun 	u32 rx_bytes_lsd;	/* dword 0*/
703*4882a593Smuzhiyun 	u32 rx_bytes_msd;	/* dword 1*/
704*4882a593Smuzhiyun 	u32 rx_total_frames;	/* dword 2*/
705*4882a593Smuzhiyun 	u32 rx_unicast_frames;	/* dword 3*/
706*4882a593Smuzhiyun 	u32 rx_multicast_frames;	/* dword 4*/
707*4882a593Smuzhiyun 	u32 rx_broadcast_frames;	/* dword 5*/
708*4882a593Smuzhiyun 	u32 rx_crc_errors;	/* dword 6*/
709*4882a593Smuzhiyun 	u32 rx_alignment_symbol_errors;	/* dword 7*/
710*4882a593Smuzhiyun 	u32 rx_pause_frames;	/* dword 8*/
711*4882a593Smuzhiyun 	u32 rx_control_frames;	/* dword 9*/
712*4882a593Smuzhiyun 	u32 rx_in_range_errors;	/* dword 10*/
713*4882a593Smuzhiyun 	u32 rx_out_range_errors;	/* dword 11*/
714*4882a593Smuzhiyun 	u32 rx_frame_too_long;	/* dword 12*/
715*4882a593Smuzhiyun 	u32 rx_address_filtered;	/* dword 13*/
716*4882a593Smuzhiyun 	u32 rx_vlan_filtered;	/* dword 14*/
717*4882a593Smuzhiyun 	u32 rx_dropped_too_small;	/* dword 15*/
718*4882a593Smuzhiyun 	u32 rx_dropped_too_short;	/* dword 16*/
719*4882a593Smuzhiyun 	u32 rx_dropped_header_too_small;	/* dword 17*/
720*4882a593Smuzhiyun 	u32 rx_dropped_tcp_length;	/* dword 18*/
721*4882a593Smuzhiyun 	u32 rx_dropped_runt;	/* dword 19*/
722*4882a593Smuzhiyun 	u32 rx_64_byte_packets;	/* dword 20*/
723*4882a593Smuzhiyun 	u32 rx_65_127_byte_packets;	/* dword 21*/
724*4882a593Smuzhiyun 	u32 rx_128_256_byte_packets;	/* dword 22*/
725*4882a593Smuzhiyun 	u32 rx_256_511_byte_packets;	/* dword 23*/
726*4882a593Smuzhiyun 	u32 rx_512_1023_byte_packets;	/* dword 24*/
727*4882a593Smuzhiyun 	u32 rx_1024_1518_byte_packets;	/* dword 25*/
728*4882a593Smuzhiyun 	u32 rx_1519_2047_byte_packets;	/* dword 26*/
729*4882a593Smuzhiyun 	u32 rx_2048_4095_byte_packets;	/* dword 27*/
730*4882a593Smuzhiyun 	u32 rx_4096_8191_byte_packets;	/* dword 28*/
731*4882a593Smuzhiyun 	u32 rx_8192_9216_byte_packets;	/* dword 29*/
732*4882a593Smuzhiyun 	u32 rx_ip_checksum_errs;	/* dword 30*/
733*4882a593Smuzhiyun 	u32 rx_tcp_checksum_errs;	/* dword 31*/
734*4882a593Smuzhiyun 	u32 rx_udp_checksum_errs;	/* dword 32*/
735*4882a593Smuzhiyun 	u32 rx_non_rss_packets;	/* dword 33*/
736*4882a593Smuzhiyun 	u32 rx_ipv4_packets;	/* dword 34*/
737*4882a593Smuzhiyun 	u32 rx_ipv6_packets;	/* dword 35*/
738*4882a593Smuzhiyun 	u32 rx_ipv4_bytes_lsd;	/* dword 36*/
739*4882a593Smuzhiyun 	u32 rx_ipv4_bytes_msd;	/* dword 37*/
740*4882a593Smuzhiyun 	u32 rx_ipv6_bytes_lsd;	/* dword 38*/
741*4882a593Smuzhiyun 	u32 rx_ipv6_bytes_msd;	/* dword 39*/
742*4882a593Smuzhiyun 	u32 rx_chute1_packets;	/* dword 40*/
743*4882a593Smuzhiyun 	u32 rx_chute2_packets;	/* dword 41*/
744*4882a593Smuzhiyun 	u32 rx_chute3_packets;	/* dword 42*/
745*4882a593Smuzhiyun 	u32 rx_management_packets;	/* dword 43*/
746*4882a593Smuzhiyun 	u32 rx_switched_unicast_packets;	/* dword 44*/
747*4882a593Smuzhiyun 	u32 rx_switched_multicast_packets;	/* dword 45*/
748*4882a593Smuzhiyun 	u32 rx_switched_broadcast_packets;	/* dword 46*/
749*4882a593Smuzhiyun 	u32 tx_bytes_lsd;	/* dword 47*/
750*4882a593Smuzhiyun 	u32 tx_bytes_msd;	/* dword 48*/
751*4882a593Smuzhiyun 	u32 tx_unicastframes;	/* dword 49*/
752*4882a593Smuzhiyun 	u32 tx_multicastframes;	/* dword 50*/
753*4882a593Smuzhiyun 	u32 tx_broadcastframes;	/* dword 51*/
754*4882a593Smuzhiyun 	u32 tx_pauseframes;	/* dword 52*/
755*4882a593Smuzhiyun 	u32 tx_controlframes;	/* dword 53*/
756*4882a593Smuzhiyun 	u32 tx_64_byte_packets;	/* dword 54*/
757*4882a593Smuzhiyun 	u32 tx_65_127_byte_packets;	/* dword 55*/
758*4882a593Smuzhiyun 	u32 tx_128_256_byte_packets;	/* dword 56*/
759*4882a593Smuzhiyun 	u32 tx_256_511_byte_packets;	/* dword 57*/
760*4882a593Smuzhiyun 	u32 tx_512_1023_byte_packets;	/* dword 58*/
761*4882a593Smuzhiyun 	u32 tx_1024_1518_byte_packets;	/* dword 59*/
762*4882a593Smuzhiyun 	u32 tx_1519_2047_byte_packets;	/* dword 60*/
763*4882a593Smuzhiyun 	u32 tx_2048_4095_byte_packets;	/* dword 61*/
764*4882a593Smuzhiyun 	u32 tx_4096_8191_byte_packets;	/* dword 62*/
765*4882a593Smuzhiyun 	u32 tx_8192_9216_byte_packets;	/* dword 63*/
766*4882a593Smuzhiyun 	u32 rx_fifo_overflow;	/* dword 64*/
767*4882a593Smuzhiyun 	u32 rx_input_fifo_overflow;	/* dword 65*/
768*4882a593Smuzhiyun };
769*4882a593Smuzhiyun 
770*4882a593Smuzhiyun struct be_rxf_stats_v0 {
771*4882a593Smuzhiyun 	struct be_port_rxf_stats_v0 port[2];
772*4882a593Smuzhiyun 	u32 rx_drops_no_pbuf;	/* dword 132*/
773*4882a593Smuzhiyun 	u32 rx_drops_no_txpb;	/* dword 133*/
774*4882a593Smuzhiyun 	u32 rx_drops_no_erx_descr;	/* dword 134*/
775*4882a593Smuzhiyun 	u32 rx_drops_no_tpre_descr;	/* dword 135*/
776*4882a593Smuzhiyun 	u32 management_rx_port_packets;	/* dword 136*/
777*4882a593Smuzhiyun 	u32 management_rx_port_bytes;	/* dword 137*/
778*4882a593Smuzhiyun 	u32 management_rx_port_pause_frames;	/* dword 138*/
779*4882a593Smuzhiyun 	u32 management_rx_port_errors;	/* dword 139*/
780*4882a593Smuzhiyun 	u32 management_tx_port_packets;	/* dword 140*/
781*4882a593Smuzhiyun 	u32 management_tx_port_bytes;	/* dword 141*/
782*4882a593Smuzhiyun 	u32 management_tx_port_pause;	/* dword 142*/
783*4882a593Smuzhiyun 	u32 management_rx_port_rxfifo_overflow;	/* dword 143*/
784*4882a593Smuzhiyun 	u32 rx_drops_too_many_frags;	/* dword 144*/
785*4882a593Smuzhiyun 	u32 rx_drops_invalid_ring;	/* dword 145*/
786*4882a593Smuzhiyun 	u32 forwarded_packets;	/* dword 146*/
787*4882a593Smuzhiyun 	u32 rx_drops_mtu;	/* dword 147*/
788*4882a593Smuzhiyun 	u32 rsvd0[7];
789*4882a593Smuzhiyun 	u32 port0_jabber_events;
790*4882a593Smuzhiyun 	u32 port1_jabber_events;
791*4882a593Smuzhiyun 	u32 rsvd1[6];
792*4882a593Smuzhiyun };
793*4882a593Smuzhiyun 
794*4882a593Smuzhiyun struct be_erx_stats_v0 {
795*4882a593Smuzhiyun 	u32 rx_drops_no_fragments[44];     /* dwordS 0 to 43*/
796*4882a593Smuzhiyun 	u32 rsvd[4];
797*4882a593Smuzhiyun };
798*4882a593Smuzhiyun 
799*4882a593Smuzhiyun struct be_pmem_stats {
800*4882a593Smuzhiyun 	u32 eth_red_drops;
801*4882a593Smuzhiyun 	u32 rsvd[5];
802*4882a593Smuzhiyun };
803*4882a593Smuzhiyun 
804*4882a593Smuzhiyun struct be_hw_stats_v0 {
805*4882a593Smuzhiyun 	struct be_rxf_stats_v0 rxf;
806*4882a593Smuzhiyun 	u32 rsvd[48];
807*4882a593Smuzhiyun 	struct be_erx_stats_v0 erx;
808*4882a593Smuzhiyun 	struct be_pmem_stats pmem;
809*4882a593Smuzhiyun };
810*4882a593Smuzhiyun 
811*4882a593Smuzhiyun struct be_cmd_req_get_stats_v0 {
812*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
813*4882a593Smuzhiyun 	u8 rsvd[sizeof(struct be_hw_stats_v0)];
814*4882a593Smuzhiyun };
815*4882a593Smuzhiyun 
816*4882a593Smuzhiyun struct be_cmd_resp_get_stats_v0 {
817*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
818*4882a593Smuzhiyun 	struct be_hw_stats_v0 hw_stats;
819*4882a593Smuzhiyun };
820*4882a593Smuzhiyun 
821*4882a593Smuzhiyun struct lancer_pport_stats {
822*4882a593Smuzhiyun 	u32 tx_packets_lo;
823*4882a593Smuzhiyun 	u32 tx_packets_hi;
824*4882a593Smuzhiyun 	u32 tx_unicast_packets_lo;
825*4882a593Smuzhiyun 	u32 tx_unicast_packets_hi;
826*4882a593Smuzhiyun 	u32 tx_multicast_packets_lo;
827*4882a593Smuzhiyun 	u32 tx_multicast_packets_hi;
828*4882a593Smuzhiyun 	u32 tx_broadcast_packets_lo;
829*4882a593Smuzhiyun 	u32 tx_broadcast_packets_hi;
830*4882a593Smuzhiyun 	u32 tx_bytes_lo;
831*4882a593Smuzhiyun 	u32 tx_bytes_hi;
832*4882a593Smuzhiyun 	u32 tx_unicast_bytes_lo;
833*4882a593Smuzhiyun 	u32 tx_unicast_bytes_hi;
834*4882a593Smuzhiyun 	u32 tx_multicast_bytes_lo;
835*4882a593Smuzhiyun 	u32 tx_multicast_bytes_hi;
836*4882a593Smuzhiyun 	u32 tx_broadcast_bytes_lo;
837*4882a593Smuzhiyun 	u32 tx_broadcast_bytes_hi;
838*4882a593Smuzhiyun 	u32 tx_discards_lo;
839*4882a593Smuzhiyun 	u32 tx_discards_hi;
840*4882a593Smuzhiyun 	u32 tx_errors_lo;
841*4882a593Smuzhiyun 	u32 tx_errors_hi;
842*4882a593Smuzhiyun 	u32 tx_pause_frames_lo;
843*4882a593Smuzhiyun 	u32 tx_pause_frames_hi;
844*4882a593Smuzhiyun 	u32 tx_pause_on_frames_lo;
845*4882a593Smuzhiyun 	u32 tx_pause_on_frames_hi;
846*4882a593Smuzhiyun 	u32 tx_pause_off_frames_lo;
847*4882a593Smuzhiyun 	u32 tx_pause_off_frames_hi;
848*4882a593Smuzhiyun 	u32 tx_internal_mac_errors_lo;
849*4882a593Smuzhiyun 	u32 tx_internal_mac_errors_hi;
850*4882a593Smuzhiyun 	u32 tx_control_frames_lo;
851*4882a593Smuzhiyun 	u32 tx_control_frames_hi;
852*4882a593Smuzhiyun 	u32 tx_packets_64_bytes_lo;
853*4882a593Smuzhiyun 	u32 tx_packets_64_bytes_hi;
854*4882a593Smuzhiyun 	u32 tx_packets_65_to_127_bytes_lo;
855*4882a593Smuzhiyun 	u32 tx_packets_65_to_127_bytes_hi;
856*4882a593Smuzhiyun 	u32 tx_packets_128_to_255_bytes_lo;
857*4882a593Smuzhiyun 	u32 tx_packets_128_to_255_bytes_hi;
858*4882a593Smuzhiyun 	u32 tx_packets_256_to_511_bytes_lo;
859*4882a593Smuzhiyun 	u32 tx_packets_256_to_511_bytes_hi;
860*4882a593Smuzhiyun 	u32 tx_packets_512_to_1023_bytes_lo;
861*4882a593Smuzhiyun 	u32 tx_packets_512_to_1023_bytes_hi;
862*4882a593Smuzhiyun 	u32 tx_packets_1024_to_1518_bytes_lo;
863*4882a593Smuzhiyun 	u32 tx_packets_1024_to_1518_bytes_hi;
864*4882a593Smuzhiyun 	u32 tx_packets_1519_to_2047_bytes_lo;
865*4882a593Smuzhiyun 	u32 tx_packets_1519_to_2047_bytes_hi;
866*4882a593Smuzhiyun 	u32 tx_packets_2048_to_4095_bytes_lo;
867*4882a593Smuzhiyun 	u32 tx_packets_2048_to_4095_bytes_hi;
868*4882a593Smuzhiyun 	u32 tx_packets_4096_to_8191_bytes_lo;
869*4882a593Smuzhiyun 	u32 tx_packets_4096_to_8191_bytes_hi;
870*4882a593Smuzhiyun 	u32 tx_packets_8192_to_9216_bytes_lo;
871*4882a593Smuzhiyun 	u32 tx_packets_8192_to_9216_bytes_hi;
872*4882a593Smuzhiyun 	u32 tx_lso_packets_lo;
873*4882a593Smuzhiyun 	u32 tx_lso_packets_hi;
874*4882a593Smuzhiyun 	u32 rx_packets_lo;
875*4882a593Smuzhiyun 	u32 rx_packets_hi;
876*4882a593Smuzhiyun 	u32 rx_unicast_packets_lo;
877*4882a593Smuzhiyun 	u32 rx_unicast_packets_hi;
878*4882a593Smuzhiyun 	u32 rx_multicast_packets_lo;
879*4882a593Smuzhiyun 	u32 rx_multicast_packets_hi;
880*4882a593Smuzhiyun 	u32 rx_broadcast_packets_lo;
881*4882a593Smuzhiyun 	u32 rx_broadcast_packets_hi;
882*4882a593Smuzhiyun 	u32 rx_bytes_lo;
883*4882a593Smuzhiyun 	u32 rx_bytes_hi;
884*4882a593Smuzhiyun 	u32 rx_unicast_bytes_lo;
885*4882a593Smuzhiyun 	u32 rx_unicast_bytes_hi;
886*4882a593Smuzhiyun 	u32 rx_multicast_bytes_lo;
887*4882a593Smuzhiyun 	u32 rx_multicast_bytes_hi;
888*4882a593Smuzhiyun 	u32 rx_broadcast_bytes_lo;
889*4882a593Smuzhiyun 	u32 rx_broadcast_bytes_hi;
890*4882a593Smuzhiyun 	u32 rx_unknown_protos;
891*4882a593Smuzhiyun 	u32 rsvd_69; /* Word 69 is reserved */
892*4882a593Smuzhiyun 	u32 rx_discards_lo;
893*4882a593Smuzhiyun 	u32 rx_discards_hi;
894*4882a593Smuzhiyun 	u32 rx_errors_lo;
895*4882a593Smuzhiyun 	u32 rx_errors_hi;
896*4882a593Smuzhiyun 	u32 rx_crc_errors_lo;
897*4882a593Smuzhiyun 	u32 rx_crc_errors_hi;
898*4882a593Smuzhiyun 	u32 rx_alignment_errors_lo;
899*4882a593Smuzhiyun 	u32 rx_alignment_errors_hi;
900*4882a593Smuzhiyun 	u32 rx_symbol_errors_lo;
901*4882a593Smuzhiyun 	u32 rx_symbol_errors_hi;
902*4882a593Smuzhiyun 	u32 rx_pause_frames_lo;
903*4882a593Smuzhiyun 	u32 rx_pause_frames_hi;
904*4882a593Smuzhiyun 	u32 rx_pause_on_frames_lo;
905*4882a593Smuzhiyun 	u32 rx_pause_on_frames_hi;
906*4882a593Smuzhiyun 	u32 rx_pause_off_frames_lo;
907*4882a593Smuzhiyun 	u32 rx_pause_off_frames_hi;
908*4882a593Smuzhiyun 	u32 rx_frames_too_long_lo;
909*4882a593Smuzhiyun 	u32 rx_frames_too_long_hi;
910*4882a593Smuzhiyun 	u32 rx_internal_mac_errors_lo;
911*4882a593Smuzhiyun 	u32 rx_internal_mac_errors_hi;
912*4882a593Smuzhiyun 	u32 rx_undersize_packets;
913*4882a593Smuzhiyun 	u32 rx_oversize_packets;
914*4882a593Smuzhiyun 	u32 rx_fragment_packets;
915*4882a593Smuzhiyun 	u32 rx_jabbers;
916*4882a593Smuzhiyun 	u32 rx_control_frames_lo;
917*4882a593Smuzhiyun 	u32 rx_control_frames_hi;
918*4882a593Smuzhiyun 	u32 rx_control_frames_unknown_opcode_lo;
919*4882a593Smuzhiyun 	u32 rx_control_frames_unknown_opcode_hi;
920*4882a593Smuzhiyun 	u32 rx_in_range_errors;
921*4882a593Smuzhiyun 	u32 rx_out_of_range_errors;
922*4882a593Smuzhiyun 	u32 rx_address_filtered;
923*4882a593Smuzhiyun 	u32 rx_vlan_filtered;
924*4882a593Smuzhiyun 	u32 rx_dropped_too_small;
925*4882a593Smuzhiyun 	u32 rx_dropped_too_short;
926*4882a593Smuzhiyun 	u32 rx_dropped_header_too_small;
927*4882a593Smuzhiyun 	u32 rx_dropped_invalid_tcp_length;
928*4882a593Smuzhiyun 	u32 rx_dropped_runt;
929*4882a593Smuzhiyun 	u32 rx_ip_checksum_errors;
930*4882a593Smuzhiyun 	u32 rx_tcp_checksum_errors;
931*4882a593Smuzhiyun 	u32 rx_udp_checksum_errors;
932*4882a593Smuzhiyun 	u32 rx_non_rss_packets;
933*4882a593Smuzhiyun 	u32 rsvd_111;
934*4882a593Smuzhiyun 	u32 rx_ipv4_packets_lo;
935*4882a593Smuzhiyun 	u32 rx_ipv4_packets_hi;
936*4882a593Smuzhiyun 	u32 rx_ipv6_packets_lo;
937*4882a593Smuzhiyun 	u32 rx_ipv6_packets_hi;
938*4882a593Smuzhiyun 	u32 rx_ipv4_bytes_lo;
939*4882a593Smuzhiyun 	u32 rx_ipv4_bytes_hi;
940*4882a593Smuzhiyun 	u32 rx_ipv6_bytes_lo;
941*4882a593Smuzhiyun 	u32 rx_ipv6_bytes_hi;
942*4882a593Smuzhiyun 	u32 rx_nic_packets_lo;
943*4882a593Smuzhiyun 	u32 rx_nic_packets_hi;
944*4882a593Smuzhiyun 	u32 rx_tcp_packets_lo;
945*4882a593Smuzhiyun 	u32 rx_tcp_packets_hi;
946*4882a593Smuzhiyun 	u32 rx_iscsi_packets_lo;
947*4882a593Smuzhiyun 	u32 rx_iscsi_packets_hi;
948*4882a593Smuzhiyun 	u32 rx_management_packets_lo;
949*4882a593Smuzhiyun 	u32 rx_management_packets_hi;
950*4882a593Smuzhiyun 	u32 rx_switched_unicast_packets_lo;
951*4882a593Smuzhiyun 	u32 rx_switched_unicast_packets_hi;
952*4882a593Smuzhiyun 	u32 rx_switched_multicast_packets_lo;
953*4882a593Smuzhiyun 	u32 rx_switched_multicast_packets_hi;
954*4882a593Smuzhiyun 	u32 rx_switched_broadcast_packets_lo;
955*4882a593Smuzhiyun 	u32 rx_switched_broadcast_packets_hi;
956*4882a593Smuzhiyun 	u32 num_forwards_lo;
957*4882a593Smuzhiyun 	u32 num_forwards_hi;
958*4882a593Smuzhiyun 	u32 rx_fifo_overflow;
959*4882a593Smuzhiyun 	u32 rx_input_fifo_overflow;
960*4882a593Smuzhiyun 	u32 rx_drops_too_many_frags_lo;
961*4882a593Smuzhiyun 	u32 rx_drops_too_many_frags_hi;
962*4882a593Smuzhiyun 	u32 rx_drops_invalid_queue;
963*4882a593Smuzhiyun 	u32 rsvd_141;
964*4882a593Smuzhiyun 	u32 rx_drops_mtu_lo;
965*4882a593Smuzhiyun 	u32 rx_drops_mtu_hi;
966*4882a593Smuzhiyun 	u32 rx_packets_64_bytes_lo;
967*4882a593Smuzhiyun 	u32 rx_packets_64_bytes_hi;
968*4882a593Smuzhiyun 	u32 rx_packets_65_to_127_bytes_lo;
969*4882a593Smuzhiyun 	u32 rx_packets_65_to_127_bytes_hi;
970*4882a593Smuzhiyun 	u32 rx_packets_128_to_255_bytes_lo;
971*4882a593Smuzhiyun 	u32 rx_packets_128_to_255_bytes_hi;
972*4882a593Smuzhiyun 	u32 rx_packets_256_to_511_bytes_lo;
973*4882a593Smuzhiyun 	u32 rx_packets_256_to_511_bytes_hi;
974*4882a593Smuzhiyun 	u32 rx_packets_512_to_1023_bytes_lo;
975*4882a593Smuzhiyun 	u32 rx_packets_512_to_1023_bytes_hi;
976*4882a593Smuzhiyun 	u32 rx_packets_1024_to_1518_bytes_lo;
977*4882a593Smuzhiyun 	u32 rx_packets_1024_to_1518_bytes_hi;
978*4882a593Smuzhiyun 	u32 rx_packets_1519_to_2047_bytes_lo;
979*4882a593Smuzhiyun 	u32 rx_packets_1519_to_2047_bytes_hi;
980*4882a593Smuzhiyun 	u32 rx_packets_2048_to_4095_bytes_lo;
981*4882a593Smuzhiyun 	u32 rx_packets_2048_to_4095_bytes_hi;
982*4882a593Smuzhiyun 	u32 rx_packets_4096_to_8191_bytes_lo;
983*4882a593Smuzhiyun 	u32 rx_packets_4096_to_8191_bytes_hi;
984*4882a593Smuzhiyun 	u32 rx_packets_8192_to_9216_bytes_lo;
985*4882a593Smuzhiyun 	u32 rx_packets_8192_to_9216_bytes_hi;
986*4882a593Smuzhiyun };
987*4882a593Smuzhiyun 
988*4882a593Smuzhiyun struct pport_stats_params {
989*4882a593Smuzhiyun 	u16 pport_num;
990*4882a593Smuzhiyun 	u8 rsvd;
991*4882a593Smuzhiyun 	u8 reset_stats;
992*4882a593Smuzhiyun };
993*4882a593Smuzhiyun 
994*4882a593Smuzhiyun struct lancer_cmd_req_pport_stats {
995*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
996*4882a593Smuzhiyun 	union {
997*4882a593Smuzhiyun 		struct pport_stats_params params;
998*4882a593Smuzhiyun 		u8 rsvd[sizeof(struct lancer_pport_stats)];
999*4882a593Smuzhiyun 	} cmd_params;
1000*4882a593Smuzhiyun };
1001*4882a593Smuzhiyun 
1002*4882a593Smuzhiyun struct lancer_cmd_resp_pport_stats {
1003*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
1004*4882a593Smuzhiyun 	struct lancer_pport_stats pport_stats;
1005*4882a593Smuzhiyun };
1006*4882a593Smuzhiyun 
1007*4882a593Smuzhiyun static inline struct lancer_pport_stats*
pport_stats_from_cmd(struct be_adapter * adapter)1008*4882a593Smuzhiyun 	pport_stats_from_cmd(struct be_adapter *adapter)
1009*4882a593Smuzhiyun {
1010*4882a593Smuzhiyun 	struct lancer_cmd_resp_pport_stats *cmd = adapter->stats_cmd.va;
1011*4882a593Smuzhiyun 	return &cmd->pport_stats;
1012*4882a593Smuzhiyun }
1013*4882a593Smuzhiyun 
1014*4882a593Smuzhiyun struct be_cmd_req_get_cntl_addnl_attribs {
1015*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1016*4882a593Smuzhiyun 	u8 rsvd[8];
1017*4882a593Smuzhiyun };
1018*4882a593Smuzhiyun 
1019*4882a593Smuzhiyun struct be_cmd_resp_get_cntl_addnl_attribs {
1020*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
1021*4882a593Smuzhiyun 	u16 ipl_file_number;
1022*4882a593Smuzhiyun 	u8 ipl_file_version;
1023*4882a593Smuzhiyun 	u8 rsvd0;
1024*4882a593Smuzhiyun 	u8 on_die_temperature; /* in degrees centigrade*/
1025*4882a593Smuzhiyun 	u8 rsvd1[3];
1026*4882a593Smuzhiyun };
1027*4882a593Smuzhiyun 
1028*4882a593Smuzhiyun struct be_cmd_req_vlan_config {
1029*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1030*4882a593Smuzhiyun 	u8 interface_id;
1031*4882a593Smuzhiyun 	u8 promiscuous;
1032*4882a593Smuzhiyun 	u8 untagged;
1033*4882a593Smuzhiyun 	u8 num_vlan;
1034*4882a593Smuzhiyun 	u16 normal_vlan[64];
1035*4882a593Smuzhiyun } __packed;
1036*4882a593Smuzhiyun 
1037*4882a593Smuzhiyun /******************* RX FILTER ******************************/
1038*4882a593Smuzhiyun #define BE_MAX_MC		64 /* set mcast promisc if > 64 */
1039*4882a593Smuzhiyun struct macaddr {
1040*4882a593Smuzhiyun 	u8 byte[ETH_ALEN];
1041*4882a593Smuzhiyun };
1042*4882a593Smuzhiyun 
1043*4882a593Smuzhiyun struct be_cmd_req_rx_filter {
1044*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1045*4882a593Smuzhiyun 	u32 global_flags_mask;
1046*4882a593Smuzhiyun 	u32 global_flags;
1047*4882a593Smuzhiyun 	u32 if_flags_mask;
1048*4882a593Smuzhiyun 	u32 if_flags;
1049*4882a593Smuzhiyun 	u32 if_id;
1050*4882a593Smuzhiyun 	u32 mcast_num;
1051*4882a593Smuzhiyun 	struct macaddr mcast_mac[BE_MAX_MC];
1052*4882a593Smuzhiyun };
1053*4882a593Smuzhiyun 
1054*4882a593Smuzhiyun /******************** Link Status Query *******************/
1055*4882a593Smuzhiyun struct be_cmd_req_link_status {
1056*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1057*4882a593Smuzhiyun 	u32 rsvd;
1058*4882a593Smuzhiyun };
1059*4882a593Smuzhiyun 
1060*4882a593Smuzhiyun enum {
1061*4882a593Smuzhiyun 	PHY_LINK_DUPLEX_NONE = 0x0,
1062*4882a593Smuzhiyun 	PHY_LINK_DUPLEX_HALF = 0x1,
1063*4882a593Smuzhiyun 	PHY_LINK_DUPLEX_FULL = 0x2
1064*4882a593Smuzhiyun };
1065*4882a593Smuzhiyun 
1066*4882a593Smuzhiyun enum {
1067*4882a593Smuzhiyun 	PHY_LINK_SPEED_ZERO = 0x0, 	/* => No link */
1068*4882a593Smuzhiyun 	PHY_LINK_SPEED_10MBPS = 0x1,
1069*4882a593Smuzhiyun 	PHY_LINK_SPEED_100MBPS = 0x2,
1070*4882a593Smuzhiyun 	PHY_LINK_SPEED_1GBPS = 0x3,
1071*4882a593Smuzhiyun 	PHY_LINK_SPEED_10GBPS = 0x4,
1072*4882a593Smuzhiyun 	PHY_LINK_SPEED_20GBPS = 0x5,
1073*4882a593Smuzhiyun 	PHY_LINK_SPEED_25GBPS = 0x6,
1074*4882a593Smuzhiyun 	PHY_LINK_SPEED_40GBPS = 0x7
1075*4882a593Smuzhiyun };
1076*4882a593Smuzhiyun 
1077*4882a593Smuzhiyun struct be_cmd_resp_link_status {
1078*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
1079*4882a593Smuzhiyun 	u8 physical_port;
1080*4882a593Smuzhiyun 	u8 mac_duplex;
1081*4882a593Smuzhiyun 	u8 mac_speed;
1082*4882a593Smuzhiyun 	u8 mac_fault;
1083*4882a593Smuzhiyun 	u8 mgmt_mac_duplex;
1084*4882a593Smuzhiyun 	u8 mgmt_mac_speed;
1085*4882a593Smuzhiyun 	u16 link_speed;
1086*4882a593Smuzhiyun 	u8 logical_link_status;
1087*4882a593Smuzhiyun 	u8 rsvd1[3];
1088*4882a593Smuzhiyun } __packed;
1089*4882a593Smuzhiyun 
1090*4882a593Smuzhiyun /******************** Port Identification ***************************/
1091*4882a593Smuzhiyun /*    Identifies the type of port attached to NIC     */
1092*4882a593Smuzhiyun struct be_cmd_req_port_type {
1093*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1094*4882a593Smuzhiyun 	__le32 page_num;
1095*4882a593Smuzhiyun 	__le32 port;
1096*4882a593Smuzhiyun };
1097*4882a593Smuzhiyun 
1098*4882a593Smuzhiyun enum {
1099*4882a593Smuzhiyun 	TR_PAGE_A0 = 0xa0,
1100*4882a593Smuzhiyun 	TR_PAGE_A2 = 0xa2
1101*4882a593Smuzhiyun };
1102*4882a593Smuzhiyun 
1103*4882a593Smuzhiyun /* From SFF-8436 QSFP+ spec */
1104*4882a593Smuzhiyun #define	QSFP_PLUS_CABLE_TYPE_OFFSET	0x83
1105*4882a593Smuzhiyun #define	QSFP_PLUS_CR4_CABLE		0x8
1106*4882a593Smuzhiyun #define	QSFP_PLUS_SR4_CABLE		0x4
1107*4882a593Smuzhiyun #define	QSFP_PLUS_LR4_CABLE		0x2
1108*4882a593Smuzhiyun 
1109*4882a593Smuzhiyun /* From SFF-8472 spec */
1110*4882a593Smuzhiyun #define	SFP_PLUS_SFF_8472_COMP		0x5E
1111*4882a593Smuzhiyun #define	SFP_PLUS_CABLE_TYPE_OFFSET	0x8
1112*4882a593Smuzhiyun #define	SFP_PLUS_COPPER_CABLE		0x4
1113*4882a593Smuzhiyun #define SFP_VENDOR_NAME_OFFSET		0x14
1114*4882a593Smuzhiyun #define SFP_VENDOR_PN_OFFSET		0x28
1115*4882a593Smuzhiyun 
1116*4882a593Smuzhiyun #define PAGE_DATA_LEN   256
1117*4882a593Smuzhiyun struct be_cmd_resp_port_type {
1118*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
1119*4882a593Smuzhiyun 	u32 page_num;
1120*4882a593Smuzhiyun 	u32 port;
1121*4882a593Smuzhiyun 	u8  page_data[PAGE_DATA_LEN];
1122*4882a593Smuzhiyun };
1123*4882a593Smuzhiyun 
1124*4882a593Smuzhiyun /******************** Get FW Version *******************/
1125*4882a593Smuzhiyun struct be_cmd_req_get_fw_version {
1126*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1127*4882a593Smuzhiyun 	u8 rsvd0[FW_VER_LEN];
1128*4882a593Smuzhiyun 	u8 rsvd1[FW_VER_LEN];
1129*4882a593Smuzhiyun } __packed;
1130*4882a593Smuzhiyun 
1131*4882a593Smuzhiyun struct be_cmd_resp_get_fw_version {
1132*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
1133*4882a593Smuzhiyun 	u8 firmware_version_string[FW_VER_LEN];
1134*4882a593Smuzhiyun 	u8 fw_on_flash_version_string[FW_VER_LEN];
1135*4882a593Smuzhiyun } __packed;
1136*4882a593Smuzhiyun 
1137*4882a593Smuzhiyun /******************** Set Flow Contrl *******************/
1138*4882a593Smuzhiyun struct be_cmd_req_set_flow_control {
1139*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1140*4882a593Smuzhiyun 	u16 tx_flow_control;
1141*4882a593Smuzhiyun 	u16 rx_flow_control;
1142*4882a593Smuzhiyun } __packed;
1143*4882a593Smuzhiyun 
1144*4882a593Smuzhiyun /******************** Get Flow Contrl *******************/
1145*4882a593Smuzhiyun struct be_cmd_req_get_flow_control {
1146*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1147*4882a593Smuzhiyun 	u32 rsvd;
1148*4882a593Smuzhiyun };
1149*4882a593Smuzhiyun 
1150*4882a593Smuzhiyun struct be_cmd_resp_get_flow_control {
1151*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
1152*4882a593Smuzhiyun 	u16 tx_flow_control;
1153*4882a593Smuzhiyun 	u16 rx_flow_control;
1154*4882a593Smuzhiyun } __packed;
1155*4882a593Smuzhiyun 
1156*4882a593Smuzhiyun /******************** Modify EQ Delay *******************/
1157*4882a593Smuzhiyun struct be_set_eqd {
1158*4882a593Smuzhiyun 	u32 eq_id;
1159*4882a593Smuzhiyun 	u32 phase;
1160*4882a593Smuzhiyun 	u32 delay_multiplier;
1161*4882a593Smuzhiyun };
1162*4882a593Smuzhiyun 
1163*4882a593Smuzhiyun struct be_cmd_req_modify_eq_delay {
1164*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1165*4882a593Smuzhiyun 	u32 num_eq;
1166*4882a593Smuzhiyun 	struct be_set_eqd set_eqd[MAX_EVT_QS];
1167*4882a593Smuzhiyun } __packed;
1168*4882a593Smuzhiyun 
1169*4882a593Smuzhiyun /******************** Get FW Config *******************/
1170*4882a593Smuzhiyun /* The HW can come up in either of the following multi-channel modes
1171*4882a593Smuzhiyun  * based on the skew/IPL.
1172*4882a593Smuzhiyun  */
1173*4882a593Smuzhiyun #define RDMA_ENABLED				0x4
1174*4882a593Smuzhiyun #define QNQ_MODE				0x400
1175*4882a593Smuzhiyun #define VNIC_MODE				0x20000
1176*4882a593Smuzhiyun #define UMC_ENABLED				0x1000000
1177*4882a593Smuzhiyun struct be_cmd_req_query_fw_cfg {
1178*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1179*4882a593Smuzhiyun 	u32 rsvd[31];
1180*4882a593Smuzhiyun };
1181*4882a593Smuzhiyun 
1182*4882a593Smuzhiyun struct be_cmd_resp_query_fw_cfg {
1183*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
1184*4882a593Smuzhiyun 	u32 be_config_number;
1185*4882a593Smuzhiyun 	u32 asic_revision;
1186*4882a593Smuzhiyun 	u32 phys_port;
1187*4882a593Smuzhiyun 	u32 function_mode;
1188*4882a593Smuzhiyun 	u32 rsvd[26];
1189*4882a593Smuzhiyun 	u32 function_caps;
1190*4882a593Smuzhiyun };
1191*4882a593Smuzhiyun 
1192*4882a593Smuzhiyun /******************** RSS Config ****************************************/
1193*4882a593Smuzhiyun /* RSS type		Input parameters used to compute RX hash
1194*4882a593Smuzhiyun  * RSS_ENABLE_IPV4	SRC IPv4, DST IPv4
1195*4882a593Smuzhiyun  * RSS_ENABLE_TCP_IPV4	SRC IPv4, DST IPv4, TCP SRC PORT, TCP DST PORT
1196*4882a593Smuzhiyun  * RSS_ENABLE_IPV6	SRC IPv6, DST IPv6
1197*4882a593Smuzhiyun  * RSS_ENABLE_TCP_IPV6	SRC IPv6, DST IPv6, TCP SRC PORT, TCP DST PORT
1198*4882a593Smuzhiyun  * RSS_ENABLE_UDP_IPV4	SRC IPv4, DST IPv4, UDP SRC PORT, UDP DST PORT
1199*4882a593Smuzhiyun  * RSS_ENABLE_UDP_IPV6	SRC IPv6, DST IPv6, UDP SRC PORT, UDP DST PORT
1200*4882a593Smuzhiyun  *
1201*4882a593Smuzhiyun  * When multiple RSS types are enabled, HW picks the best hash policy
1202*4882a593Smuzhiyun  * based on the type of the received packet.
1203*4882a593Smuzhiyun  */
1204*4882a593Smuzhiyun #define RSS_ENABLE_NONE				0x0
1205*4882a593Smuzhiyun #define RSS_ENABLE_IPV4				0x1
1206*4882a593Smuzhiyun #define RSS_ENABLE_TCP_IPV4			0x2
1207*4882a593Smuzhiyun #define RSS_ENABLE_IPV6				0x4
1208*4882a593Smuzhiyun #define RSS_ENABLE_TCP_IPV6			0x8
1209*4882a593Smuzhiyun #define RSS_ENABLE_UDP_IPV4			0x10
1210*4882a593Smuzhiyun #define RSS_ENABLE_UDP_IPV6			0x20
1211*4882a593Smuzhiyun 
1212*4882a593Smuzhiyun #define L3_RSS_FLAGS				(RXH_IP_DST | RXH_IP_SRC)
1213*4882a593Smuzhiyun #define L4_RSS_FLAGS				(RXH_L4_B_0_1 | RXH_L4_B_2_3)
1214*4882a593Smuzhiyun 
1215*4882a593Smuzhiyun struct be_cmd_req_rss_config {
1216*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1217*4882a593Smuzhiyun 	u32 if_id;
1218*4882a593Smuzhiyun 	u16 enable_rss;
1219*4882a593Smuzhiyun 	u16 cpu_table_size_log2;
1220*4882a593Smuzhiyun 	u32 hash[10];
1221*4882a593Smuzhiyun 	u8 cpu_table[128];
1222*4882a593Smuzhiyun 	u8 flush;
1223*4882a593Smuzhiyun 	u8 rsvd0[3];
1224*4882a593Smuzhiyun };
1225*4882a593Smuzhiyun 
1226*4882a593Smuzhiyun /******************** Port Beacon ***************************/
1227*4882a593Smuzhiyun 
1228*4882a593Smuzhiyun #define BEACON_STATE_ENABLED		0x1
1229*4882a593Smuzhiyun #define BEACON_STATE_DISABLED		0x0
1230*4882a593Smuzhiyun 
1231*4882a593Smuzhiyun struct be_cmd_req_enable_disable_beacon {
1232*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1233*4882a593Smuzhiyun 	u8  port_num;
1234*4882a593Smuzhiyun 	u8  beacon_state;
1235*4882a593Smuzhiyun 	u8  beacon_duration;
1236*4882a593Smuzhiyun 	u8  status_duration;
1237*4882a593Smuzhiyun } __packed;
1238*4882a593Smuzhiyun 
1239*4882a593Smuzhiyun struct be_cmd_req_get_beacon_state {
1240*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1241*4882a593Smuzhiyun 	u8  port_num;
1242*4882a593Smuzhiyun 	u8  rsvd0;
1243*4882a593Smuzhiyun 	u16 rsvd1;
1244*4882a593Smuzhiyun } __packed;
1245*4882a593Smuzhiyun 
1246*4882a593Smuzhiyun struct be_cmd_resp_get_beacon_state {
1247*4882a593Smuzhiyun 	struct be_cmd_resp_hdr resp_hdr;
1248*4882a593Smuzhiyun 	u8 beacon_state;
1249*4882a593Smuzhiyun 	u8 rsvd0[3];
1250*4882a593Smuzhiyun } __packed;
1251*4882a593Smuzhiyun 
1252*4882a593Smuzhiyun /* Flashrom related descriptors */
1253*4882a593Smuzhiyun #define MAX_FLASH_COMP			32
1254*4882a593Smuzhiyun 
1255*4882a593Smuzhiyun /* Optypes of each component in the UFI */
1256*4882a593Smuzhiyun enum {
1257*4882a593Smuzhiyun 	OPTYPE_ISCSI_ACTIVE = 0,
1258*4882a593Smuzhiyun 	OPTYPE_REDBOOT = 1,
1259*4882a593Smuzhiyun 	OPTYPE_BIOS = 2,
1260*4882a593Smuzhiyun 	OPTYPE_PXE_BIOS = 3,
1261*4882a593Smuzhiyun 	OPTYPE_OFFSET_SPECIFIED = 7,
1262*4882a593Smuzhiyun 	OPTYPE_FCOE_BIOS = 8,
1263*4882a593Smuzhiyun 	OPTYPE_ISCSI_BACKUP = 9,
1264*4882a593Smuzhiyun 	OPTYPE_FCOE_FW_ACTIVE = 10,
1265*4882a593Smuzhiyun 	OPTYPE_FCOE_FW_BACKUP = 11,
1266*4882a593Smuzhiyun 	OPTYPE_NCSI_FW = 13,
1267*4882a593Smuzhiyun 	OPTYPE_REDBOOT_DIR = 18,
1268*4882a593Smuzhiyun 	OPTYPE_REDBOOT_CONFIG = 19,
1269*4882a593Smuzhiyun 	OPTYPE_SH_PHY_FW = 21,
1270*4882a593Smuzhiyun 	OPTYPE_FLASHISM_JUMPVECTOR = 22,
1271*4882a593Smuzhiyun 	OPTYPE_UFI_DIR = 23,
1272*4882a593Smuzhiyun 	OPTYPE_PHY_FW = 99
1273*4882a593Smuzhiyun };
1274*4882a593Smuzhiyun 
1275*4882a593Smuzhiyun /* Maximum sizes of components in BE2 FW UFI */
1276*4882a593Smuzhiyun enum {
1277*4882a593Smuzhiyun 	BE2_BIOS_COMP_MAX_SIZE = 0x40000,
1278*4882a593Smuzhiyun 	BE2_REDBOOT_COMP_MAX_SIZE = 0x40000,
1279*4882a593Smuzhiyun 	BE2_COMP_MAX_SIZE = 0x140000
1280*4882a593Smuzhiyun };
1281*4882a593Smuzhiyun 
1282*4882a593Smuzhiyun /* Maximum sizes of components in BE3 FW UFI */
1283*4882a593Smuzhiyun enum {
1284*4882a593Smuzhiyun 	BE3_NCSI_COMP_MAX_SIZE = 0x40000,
1285*4882a593Smuzhiyun 	BE3_PHY_FW_COMP_MAX_SIZE = 0x40000,
1286*4882a593Smuzhiyun 	BE3_BIOS_COMP_MAX_SIZE = 0x80000,
1287*4882a593Smuzhiyun 	BE3_REDBOOT_COMP_MAX_SIZE = 0x100000,
1288*4882a593Smuzhiyun 	BE3_COMP_MAX_SIZE = 0x200000
1289*4882a593Smuzhiyun };
1290*4882a593Smuzhiyun 
1291*4882a593Smuzhiyun /* Offsets for components in BE2 FW UFI */
1292*4882a593Smuzhiyun enum {
1293*4882a593Smuzhiyun 	BE2_REDBOOT_START = 0x8000,
1294*4882a593Smuzhiyun 	BE2_FCOE_BIOS_START = 0x80000,
1295*4882a593Smuzhiyun 	BE2_ISCSI_PRIMARY_IMAGE_START = 0x100000,
1296*4882a593Smuzhiyun 	BE2_ISCSI_BACKUP_IMAGE_START = 0x240000,
1297*4882a593Smuzhiyun 	BE2_FCOE_PRIMARY_IMAGE_START = 0x380000,
1298*4882a593Smuzhiyun 	BE2_FCOE_BACKUP_IMAGE_START = 0x4c0000,
1299*4882a593Smuzhiyun 	BE2_ISCSI_BIOS_START = 0x700000,
1300*4882a593Smuzhiyun 	BE2_PXE_BIOS_START = 0x780000
1301*4882a593Smuzhiyun };
1302*4882a593Smuzhiyun 
1303*4882a593Smuzhiyun /* Offsets for components in BE3 FW UFI */
1304*4882a593Smuzhiyun enum {
1305*4882a593Smuzhiyun 	BE3_REDBOOT_START = 0x40000,
1306*4882a593Smuzhiyun 	BE3_PHY_FW_START = 0x140000,
1307*4882a593Smuzhiyun 	BE3_ISCSI_PRIMARY_IMAGE_START = 0x200000,
1308*4882a593Smuzhiyun 	BE3_ISCSI_BACKUP_IMAGE_START = 0x400000,
1309*4882a593Smuzhiyun 	BE3_FCOE_PRIMARY_IMAGE_START = 0x600000,
1310*4882a593Smuzhiyun 	BE3_FCOE_BACKUP_IMAGE_START = 0x800000,
1311*4882a593Smuzhiyun 	BE3_ISCSI_BIOS_START = 0xc00000,
1312*4882a593Smuzhiyun 	BE3_PXE_BIOS_START = 0xc80000,
1313*4882a593Smuzhiyun 	BE3_FCOE_BIOS_START = 0xd00000,
1314*4882a593Smuzhiyun 	BE3_NCSI_START = 0xf40000
1315*4882a593Smuzhiyun };
1316*4882a593Smuzhiyun 
1317*4882a593Smuzhiyun /* Component entry types */
1318*4882a593Smuzhiyun enum {
1319*4882a593Smuzhiyun 	IMAGE_NCSI = 0x10,
1320*4882a593Smuzhiyun 	IMAGE_OPTION_ROM_PXE = 0x20,
1321*4882a593Smuzhiyun 	IMAGE_OPTION_ROM_FCOE = 0x21,
1322*4882a593Smuzhiyun 	IMAGE_OPTION_ROM_ISCSI = 0x22,
1323*4882a593Smuzhiyun 	IMAGE_FLASHISM_JUMPVECTOR = 0x30,
1324*4882a593Smuzhiyun 	IMAGE_FIRMWARE_ISCSI = 0xa0,
1325*4882a593Smuzhiyun 	IMAGE_FIRMWARE_FCOE = 0xa2,
1326*4882a593Smuzhiyun 	IMAGE_FIRMWARE_BACKUP_ISCSI = 0xb0,
1327*4882a593Smuzhiyun 	IMAGE_FIRMWARE_BACKUP_FCOE = 0xb2,
1328*4882a593Smuzhiyun 	IMAGE_FIRMWARE_PHY = 0xc0,
1329*4882a593Smuzhiyun 	IMAGE_REDBOOT_DIR = 0xd0,
1330*4882a593Smuzhiyun 	IMAGE_REDBOOT_CONFIG = 0xd1,
1331*4882a593Smuzhiyun 	IMAGE_UFI_DIR = 0xd2,
1332*4882a593Smuzhiyun 	IMAGE_BOOT_CODE = 0xe2
1333*4882a593Smuzhiyun };
1334*4882a593Smuzhiyun 
1335*4882a593Smuzhiyun struct controller_id {
1336*4882a593Smuzhiyun 	u32 vendor;
1337*4882a593Smuzhiyun 	u32 device;
1338*4882a593Smuzhiyun 	u32 subvendor;
1339*4882a593Smuzhiyun 	u32 subdevice;
1340*4882a593Smuzhiyun };
1341*4882a593Smuzhiyun 
1342*4882a593Smuzhiyun struct flash_comp {
1343*4882a593Smuzhiyun 	unsigned long offset;
1344*4882a593Smuzhiyun 	int optype;
1345*4882a593Smuzhiyun 	int size;
1346*4882a593Smuzhiyun 	int img_type;
1347*4882a593Smuzhiyun };
1348*4882a593Smuzhiyun 
1349*4882a593Smuzhiyun struct image_hdr {
1350*4882a593Smuzhiyun 	u32 imageid;
1351*4882a593Smuzhiyun 	u32 imageoffset;
1352*4882a593Smuzhiyun 	u32 imagelength;
1353*4882a593Smuzhiyun 	u32 image_checksum;
1354*4882a593Smuzhiyun 	u8 image_version[32];
1355*4882a593Smuzhiyun };
1356*4882a593Smuzhiyun 
1357*4882a593Smuzhiyun struct flash_file_hdr_g2 {
1358*4882a593Smuzhiyun 	u8 sign[32];
1359*4882a593Smuzhiyun 	u32 cksum;
1360*4882a593Smuzhiyun 	u32 antidote;
1361*4882a593Smuzhiyun 	struct controller_id cont_id;
1362*4882a593Smuzhiyun 	u32 file_len;
1363*4882a593Smuzhiyun 	u32 chunk_num;
1364*4882a593Smuzhiyun 	u32 total_chunks;
1365*4882a593Smuzhiyun 	u32 num_imgs;
1366*4882a593Smuzhiyun 	u8 build[24];
1367*4882a593Smuzhiyun };
1368*4882a593Smuzhiyun 
1369*4882a593Smuzhiyun /* First letter of the build version of the image */
1370*4882a593Smuzhiyun #define BLD_STR_UFI_TYPE_BE2	'2'
1371*4882a593Smuzhiyun #define BLD_STR_UFI_TYPE_BE3	'3'
1372*4882a593Smuzhiyun #define BLD_STR_UFI_TYPE_SH	'4'
1373*4882a593Smuzhiyun 
1374*4882a593Smuzhiyun struct flash_file_hdr_g3 {
1375*4882a593Smuzhiyun 	u8 sign[52];
1376*4882a593Smuzhiyun 	u8 ufi_version[4];
1377*4882a593Smuzhiyun 	u32 file_len;
1378*4882a593Smuzhiyun 	u32 cksum;
1379*4882a593Smuzhiyun 	u32 antidote;
1380*4882a593Smuzhiyun 	u32 num_imgs;
1381*4882a593Smuzhiyun 	u8 build[24];
1382*4882a593Smuzhiyun 	u8 asic_type_rev;
1383*4882a593Smuzhiyun 	u8 rsvd[31];
1384*4882a593Smuzhiyun };
1385*4882a593Smuzhiyun 
1386*4882a593Smuzhiyun struct flash_section_hdr {
1387*4882a593Smuzhiyun 	u32 format_rev;
1388*4882a593Smuzhiyun 	u32 cksum;
1389*4882a593Smuzhiyun 	u32 antidote;
1390*4882a593Smuzhiyun 	u32 num_images;
1391*4882a593Smuzhiyun 	u8 id_string[128];
1392*4882a593Smuzhiyun 	u32 rsvd[4];
1393*4882a593Smuzhiyun } __packed;
1394*4882a593Smuzhiyun 
1395*4882a593Smuzhiyun struct flash_section_hdr_g2 {
1396*4882a593Smuzhiyun 	u32 format_rev;
1397*4882a593Smuzhiyun 	u32 cksum;
1398*4882a593Smuzhiyun 	u32 antidote;
1399*4882a593Smuzhiyun 	u32 build_num;
1400*4882a593Smuzhiyun 	u8 id_string[128];
1401*4882a593Smuzhiyun 	u32 rsvd[8];
1402*4882a593Smuzhiyun } __packed;
1403*4882a593Smuzhiyun 
1404*4882a593Smuzhiyun struct flash_section_entry {
1405*4882a593Smuzhiyun 	u32 type;
1406*4882a593Smuzhiyun 	u32 offset;
1407*4882a593Smuzhiyun 	u32 pad_size;
1408*4882a593Smuzhiyun 	u32 image_size;
1409*4882a593Smuzhiyun 	u32 cksum;
1410*4882a593Smuzhiyun 	u32 entry_point;
1411*4882a593Smuzhiyun 	u16 optype;
1412*4882a593Smuzhiyun 	u16 rsvd0;
1413*4882a593Smuzhiyun 	u32 rsvd1;
1414*4882a593Smuzhiyun 	u8 ver_data[32];
1415*4882a593Smuzhiyun } __packed;
1416*4882a593Smuzhiyun 
1417*4882a593Smuzhiyun struct flash_section_info {
1418*4882a593Smuzhiyun 	u8 cookie[32];
1419*4882a593Smuzhiyun 	struct flash_section_hdr fsec_hdr;
1420*4882a593Smuzhiyun 	struct flash_section_entry fsec_entry[32];
1421*4882a593Smuzhiyun } __packed;
1422*4882a593Smuzhiyun 
1423*4882a593Smuzhiyun struct flash_section_info_g2 {
1424*4882a593Smuzhiyun 	u8 cookie[32];
1425*4882a593Smuzhiyun 	struct flash_section_hdr_g2 fsec_hdr;
1426*4882a593Smuzhiyun 	struct flash_section_entry fsec_entry[32];
1427*4882a593Smuzhiyun } __packed;
1428*4882a593Smuzhiyun 
1429*4882a593Smuzhiyun /****************** Firmware Flash ******************/
1430*4882a593Smuzhiyun #define FLASHROM_OPER_FLASH		1
1431*4882a593Smuzhiyun #define FLASHROM_OPER_SAVE		2
1432*4882a593Smuzhiyun #define FLASHROM_OPER_REPORT		4
1433*4882a593Smuzhiyun #define FLASHROM_OPER_PHY_FLASH		9
1434*4882a593Smuzhiyun #define FLASHROM_OPER_PHY_SAVE		10
1435*4882a593Smuzhiyun 
1436*4882a593Smuzhiyun struct flashrom_params {
1437*4882a593Smuzhiyun 	u32 op_code;
1438*4882a593Smuzhiyun 	u32 op_type;
1439*4882a593Smuzhiyun 	u32 data_buf_size;
1440*4882a593Smuzhiyun 	u32 offset;
1441*4882a593Smuzhiyun };
1442*4882a593Smuzhiyun 
1443*4882a593Smuzhiyun struct be_cmd_write_flashrom {
1444*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1445*4882a593Smuzhiyun 	struct flashrom_params params;
1446*4882a593Smuzhiyun 	u8 data_buf[32768];
1447*4882a593Smuzhiyun 	u8 rsvd[4];
1448*4882a593Smuzhiyun } __packed;
1449*4882a593Smuzhiyun 
1450*4882a593Smuzhiyun /* cmd to read flash crc */
1451*4882a593Smuzhiyun struct be_cmd_read_flash_crc {
1452*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1453*4882a593Smuzhiyun 	struct flashrom_params params;
1454*4882a593Smuzhiyun 	u8 crc[4];
1455*4882a593Smuzhiyun 	u8 rsvd[4];
1456*4882a593Smuzhiyun } __packed;
1457*4882a593Smuzhiyun 
1458*4882a593Smuzhiyun /**************** Lancer Firmware Flash ************/
1459*4882a593Smuzhiyun #define LANCER_FW_DOWNLOAD_CHUNK      (32 * 1024)
1460*4882a593Smuzhiyun #define LANCER_FW_DOWNLOAD_LOCATION   "/prg"
1461*4882a593Smuzhiyun 
1462*4882a593Smuzhiyun struct amap_lancer_write_obj_context {
1463*4882a593Smuzhiyun 	u8 write_length[24];
1464*4882a593Smuzhiyun 	u8 reserved1[7];
1465*4882a593Smuzhiyun 	u8 eof;
1466*4882a593Smuzhiyun } __packed;
1467*4882a593Smuzhiyun 
1468*4882a593Smuzhiyun struct lancer_cmd_req_write_object {
1469*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1470*4882a593Smuzhiyun 	u8 context[sizeof(struct amap_lancer_write_obj_context) / 8];
1471*4882a593Smuzhiyun 	u32 write_offset;
1472*4882a593Smuzhiyun 	u8 object_name[104];
1473*4882a593Smuzhiyun 	u32 descriptor_count;
1474*4882a593Smuzhiyun 	u32 buf_len;
1475*4882a593Smuzhiyun 	u32 addr_low;
1476*4882a593Smuzhiyun 	u32 addr_high;
1477*4882a593Smuzhiyun };
1478*4882a593Smuzhiyun 
1479*4882a593Smuzhiyun #define LANCER_NO_RESET_NEEDED		0x00
1480*4882a593Smuzhiyun #define LANCER_FW_RESET_NEEDED		0x02
1481*4882a593Smuzhiyun struct lancer_cmd_resp_write_object {
1482*4882a593Smuzhiyun 	u8 opcode;
1483*4882a593Smuzhiyun 	u8 subsystem;
1484*4882a593Smuzhiyun 	u8 rsvd1[2];
1485*4882a593Smuzhiyun 	u8 status;
1486*4882a593Smuzhiyun 	u8 additional_status;
1487*4882a593Smuzhiyun 	u8 rsvd2[2];
1488*4882a593Smuzhiyun 	u32 resp_len;
1489*4882a593Smuzhiyun 	u32 actual_resp_len;
1490*4882a593Smuzhiyun 	u32 actual_write_len;
1491*4882a593Smuzhiyun 	u8 change_status;
1492*4882a593Smuzhiyun 	u8 rsvd3[3];
1493*4882a593Smuzhiyun };
1494*4882a593Smuzhiyun 
1495*4882a593Smuzhiyun /************************ Lancer Read FW info **************/
1496*4882a593Smuzhiyun #define LANCER_READ_FILE_CHUNK			(32*1024)
1497*4882a593Smuzhiyun #define LANCER_READ_FILE_EOF_MASK		0x80000000
1498*4882a593Smuzhiyun 
1499*4882a593Smuzhiyun #define LANCER_FW_DUMP_FILE			"/dbg/dump.bin"
1500*4882a593Smuzhiyun #define LANCER_VPD_PF_FILE			"/vpd/ntr_pf.vpd"
1501*4882a593Smuzhiyun #define LANCER_VPD_VF_FILE			"/vpd/ntr_vf.vpd"
1502*4882a593Smuzhiyun 
1503*4882a593Smuzhiyun struct lancer_cmd_req_read_object {
1504*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1505*4882a593Smuzhiyun 	u32 desired_read_len;
1506*4882a593Smuzhiyun 	u32 read_offset;
1507*4882a593Smuzhiyun 	u8 object_name[104];
1508*4882a593Smuzhiyun 	u32 descriptor_count;
1509*4882a593Smuzhiyun 	u32 buf_len;
1510*4882a593Smuzhiyun 	u32 addr_low;
1511*4882a593Smuzhiyun 	u32 addr_high;
1512*4882a593Smuzhiyun };
1513*4882a593Smuzhiyun 
1514*4882a593Smuzhiyun struct lancer_cmd_resp_read_object {
1515*4882a593Smuzhiyun 	u8 opcode;
1516*4882a593Smuzhiyun 	u8 subsystem;
1517*4882a593Smuzhiyun 	u8 rsvd1[2];
1518*4882a593Smuzhiyun 	u8 status;
1519*4882a593Smuzhiyun 	u8 additional_status;
1520*4882a593Smuzhiyun 	u8 rsvd2[2];
1521*4882a593Smuzhiyun 	u32 resp_len;
1522*4882a593Smuzhiyun 	u32 actual_resp_len;
1523*4882a593Smuzhiyun 	u32 actual_read_len;
1524*4882a593Smuzhiyun 	u32 eof;
1525*4882a593Smuzhiyun };
1526*4882a593Smuzhiyun 
1527*4882a593Smuzhiyun struct lancer_cmd_req_delete_object {
1528*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1529*4882a593Smuzhiyun 	u32 rsvd1;
1530*4882a593Smuzhiyun 	u32 rsvd2;
1531*4882a593Smuzhiyun 	u8 object_name[104];
1532*4882a593Smuzhiyun };
1533*4882a593Smuzhiyun 
1534*4882a593Smuzhiyun /************************ WOL *******************************/
1535*4882a593Smuzhiyun struct be_cmd_req_acpi_wol_magic_config{
1536*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1537*4882a593Smuzhiyun 	u32 rsvd0[145];
1538*4882a593Smuzhiyun 	u8 magic_mac[6];
1539*4882a593Smuzhiyun 	u8 rsvd2[2];
1540*4882a593Smuzhiyun } __packed;
1541*4882a593Smuzhiyun 
1542*4882a593Smuzhiyun struct be_cmd_req_acpi_wol_magic_config_v1 {
1543*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1544*4882a593Smuzhiyun 	u8 rsvd0[2];
1545*4882a593Smuzhiyun 	u8 query_options;
1546*4882a593Smuzhiyun 	u8 rsvd1[5];
1547*4882a593Smuzhiyun 	u32 rsvd2[288];
1548*4882a593Smuzhiyun 	u8 magic_mac[6];
1549*4882a593Smuzhiyun 	u8 rsvd3[22];
1550*4882a593Smuzhiyun } __packed;
1551*4882a593Smuzhiyun 
1552*4882a593Smuzhiyun struct be_cmd_resp_acpi_wol_magic_config_v1 {
1553*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
1554*4882a593Smuzhiyun 	u8 rsvd0[2];
1555*4882a593Smuzhiyun 	u8 wol_settings;
1556*4882a593Smuzhiyun 	u8 rsvd1[5];
1557*4882a593Smuzhiyun 	u32 rsvd2[288];
1558*4882a593Smuzhiyun 	u8 magic_mac[6];
1559*4882a593Smuzhiyun 	u8 rsvd3[22];
1560*4882a593Smuzhiyun } __packed;
1561*4882a593Smuzhiyun 
1562*4882a593Smuzhiyun #define BE_GET_WOL_CAP			2
1563*4882a593Smuzhiyun 
1564*4882a593Smuzhiyun #define BE_WOL_CAP			0x1
1565*4882a593Smuzhiyun #define BE_PME_D0_CAP			0x8
1566*4882a593Smuzhiyun #define BE_PME_D1_CAP			0x10
1567*4882a593Smuzhiyun #define BE_PME_D2_CAP			0x20
1568*4882a593Smuzhiyun #define BE_PME_D3HOT_CAP		0x40
1569*4882a593Smuzhiyun #define BE_PME_D3COLD_CAP		0x80
1570*4882a593Smuzhiyun 
1571*4882a593Smuzhiyun /********************** LoopBack test *********************/
1572*4882a593Smuzhiyun #define SET_LB_MODE_TIMEOUT		12000
1573*4882a593Smuzhiyun 
1574*4882a593Smuzhiyun struct be_cmd_req_loopback_test {
1575*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1576*4882a593Smuzhiyun 	u32 loopback_type;
1577*4882a593Smuzhiyun 	u32 num_pkts;
1578*4882a593Smuzhiyun 	u64 pattern;
1579*4882a593Smuzhiyun 	u32 src_port;
1580*4882a593Smuzhiyun 	u32 dest_port;
1581*4882a593Smuzhiyun 	u32 pkt_size;
1582*4882a593Smuzhiyun };
1583*4882a593Smuzhiyun 
1584*4882a593Smuzhiyun struct be_cmd_resp_loopback_test {
1585*4882a593Smuzhiyun 	struct be_cmd_resp_hdr resp_hdr;
1586*4882a593Smuzhiyun 	u32    status;
1587*4882a593Smuzhiyun 	u32    num_txfer;
1588*4882a593Smuzhiyun 	u32    num_rx;
1589*4882a593Smuzhiyun 	u32    miscomp_off;
1590*4882a593Smuzhiyun 	u32    ticks_compl;
1591*4882a593Smuzhiyun };
1592*4882a593Smuzhiyun 
1593*4882a593Smuzhiyun struct be_cmd_req_set_lmode {
1594*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1595*4882a593Smuzhiyun 	u8 src_port;
1596*4882a593Smuzhiyun 	u8 dest_port;
1597*4882a593Smuzhiyun 	u8 loopback_type;
1598*4882a593Smuzhiyun 	u8 loopback_state;
1599*4882a593Smuzhiyun };
1600*4882a593Smuzhiyun 
1601*4882a593Smuzhiyun /********************** DDR DMA test *********************/
1602*4882a593Smuzhiyun struct be_cmd_req_ddrdma_test {
1603*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1604*4882a593Smuzhiyun 	u64 pattern;
1605*4882a593Smuzhiyun 	u32 byte_count;
1606*4882a593Smuzhiyun 	u32 rsvd0;
1607*4882a593Smuzhiyun 	u8  snd_buff[4096];
1608*4882a593Smuzhiyun 	u8  rsvd1[4096];
1609*4882a593Smuzhiyun };
1610*4882a593Smuzhiyun 
1611*4882a593Smuzhiyun struct be_cmd_resp_ddrdma_test {
1612*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
1613*4882a593Smuzhiyun 	u64 pattern;
1614*4882a593Smuzhiyun 	u32 byte_cnt;
1615*4882a593Smuzhiyun 	u32 snd_err;
1616*4882a593Smuzhiyun 	u8  rsvd0[4096];
1617*4882a593Smuzhiyun 	u8  rcv_buff[4096];
1618*4882a593Smuzhiyun };
1619*4882a593Smuzhiyun 
1620*4882a593Smuzhiyun /*********************** SEEPROM Read ***********************/
1621*4882a593Smuzhiyun 
1622*4882a593Smuzhiyun #define BE_READ_SEEPROM_LEN 1024
1623*4882a593Smuzhiyun struct be_cmd_req_seeprom_read {
1624*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1625*4882a593Smuzhiyun 	u8 rsvd0[BE_READ_SEEPROM_LEN];
1626*4882a593Smuzhiyun };
1627*4882a593Smuzhiyun 
1628*4882a593Smuzhiyun struct be_cmd_resp_seeprom_read {
1629*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1630*4882a593Smuzhiyun 	u8 seeprom_data[BE_READ_SEEPROM_LEN];
1631*4882a593Smuzhiyun };
1632*4882a593Smuzhiyun 
1633*4882a593Smuzhiyun enum {
1634*4882a593Smuzhiyun 	PHY_TYPE_CX4_10GB = 0,
1635*4882a593Smuzhiyun 	PHY_TYPE_XFP_10GB,
1636*4882a593Smuzhiyun 	PHY_TYPE_SFP_1GB,
1637*4882a593Smuzhiyun 	PHY_TYPE_SFP_PLUS_10GB,
1638*4882a593Smuzhiyun 	PHY_TYPE_KR_10GB,
1639*4882a593Smuzhiyun 	PHY_TYPE_KX4_10GB,
1640*4882a593Smuzhiyun 	PHY_TYPE_BASET_10GB,
1641*4882a593Smuzhiyun 	PHY_TYPE_BASET_1GB,
1642*4882a593Smuzhiyun 	PHY_TYPE_BASEX_1GB,
1643*4882a593Smuzhiyun 	PHY_TYPE_SGMII,
1644*4882a593Smuzhiyun 	PHY_TYPE_QSFP,
1645*4882a593Smuzhiyun 	PHY_TYPE_KR4_40GB,
1646*4882a593Smuzhiyun 	PHY_TYPE_KR2_20GB,
1647*4882a593Smuzhiyun 	PHY_TYPE_TN_8022,
1648*4882a593Smuzhiyun 	PHY_TYPE_DISABLED = 255
1649*4882a593Smuzhiyun };
1650*4882a593Smuzhiyun 
1651*4882a593Smuzhiyun #define BE_SUPPORTED_SPEED_NONE		0
1652*4882a593Smuzhiyun #define BE_SUPPORTED_SPEED_10MBPS	1
1653*4882a593Smuzhiyun #define BE_SUPPORTED_SPEED_100MBPS	2
1654*4882a593Smuzhiyun #define BE_SUPPORTED_SPEED_1GBPS	4
1655*4882a593Smuzhiyun #define BE_SUPPORTED_SPEED_10GBPS	8
1656*4882a593Smuzhiyun #define BE_SUPPORTED_SPEED_20GBPS	0x10
1657*4882a593Smuzhiyun #define BE_SUPPORTED_SPEED_40GBPS	0x20
1658*4882a593Smuzhiyun 
1659*4882a593Smuzhiyun #define BE_AN_EN			0x2
1660*4882a593Smuzhiyun #define BE_PAUSE_SYM_EN			0x80
1661*4882a593Smuzhiyun 
1662*4882a593Smuzhiyun /* MAC speed valid values */
1663*4882a593Smuzhiyun #define SPEED_DEFAULT  0x0
1664*4882a593Smuzhiyun #define SPEED_FORCED_10GB  0x1
1665*4882a593Smuzhiyun #define SPEED_FORCED_1GB  0x2
1666*4882a593Smuzhiyun #define SPEED_AUTONEG_10GB  0x3
1667*4882a593Smuzhiyun #define SPEED_AUTONEG_1GB  0x4
1668*4882a593Smuzhiyun #define SPEED_AUTONEG_100MB  0x5
1669*4882a593Smuzhiyun #define SPEED_AUTONEG_10GB_1GB 0x6
1670*4882a593Smuzhiyun #define SPEED_AUTONEG_10GB_1GB_100MB 0x7
1671*4882a593Smuzhiyun #define SPEED_AUTONEG_1GB_100MB  0x8
1672*4882a593Smuzhiyun #define SPEED_AUTONEG_10MB  0x9
1673*4882a593Smuzhiyun #define SPEED_AUTONEG_1GB_100MB_10MB 0xa
1674*4882a593Smuzhiyun #define SPEED_AUTONEG_100MB_10MB 0xb
1675*4882a593Smuzhiyun #define SPEED_FORCED_100MB  0xc
1676*4882a593Smuzhiyun #define SPEED_FORCED_10MB  0xd
1677*4882a593Smuzhiyun 
1678*4882a593Smuzhiyun struct be_cmd_req_get_phy_info {
1679*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1680*4882a593Smuzhiyun 	u8 rsvd0[24];
1681*4882a593Smuzhiyun };
1682*4882a593Smuzhiyun 
1683*4882a593Smuzhiyun struct be_phy_info {
1684*4882a593Smuzhiyun 	u16 phy_type;
1685*4882a593Smuzhiyun 	u16 interface_type;
1686*4882a593Smuzhiyun 	u32 misc_params;
1687*4882a593Smuzhiyun 	u16 ext_phy_details;
1688*4882a593Smuzhiyun 	u16 rsvd;
1689*4882a593Smuzhiyun 	u16 auto_speeds_supported;
1690*4882a593Smuzhiyun 	u16 fixed_speeds_supported;
1691*4882a593Smuzhiyun 	u32 future_use[2];
1692*4882a593Smuzhiyun };
1693*4882a593Smuzhiyun 
1694*4882a593Smuzhiyun struct be_cmd_resp_get_phy_info {
1695*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1696*4882a593Smuzhiyun 	struct be_phy_info phy_info;
1697*4882a593Smuzhiyun };
1698*4882a593Smuzhiyun 
1699*4882a593Smuzhiyun /*********************** Set QOS ***********************/
1700*4882a593Smuzhiyun 
1701*4882a593Smuzhiyun #define BE_QOS_BITS_NIC				1
1702*4882a593Smuzhiyun 
1703*4882a593Smuzhiyun struct be_cmd_req_set_qos {
1704*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1705*4882a593Smuzhiyun 	u32 valid_bits;
1706*4882a593Smuzhiyun 	u32 max_bps_nic;
1707*4882a593Smuzhiyun 	u32 rsvd[7];
1708*4882a593Smuzhiyun };
1709*4882a593Smuzhiyun 
1710*4882a593Smuzhiyun /*********************** Controller Attributes ***********************/
1711*4882a593Smuzhiyun struct mgmt_hba_attribs {
1712*4882a593Smuzhiyun 	u32 rsvd0[24];
1713*4882a593Smuzhiyun 	u8 controller_model_number[32];
1714*4882a593Smuzhiyun 	u32 rsvd1[16];
1715*4882a593Smuzhiyun 	u32 controller_serial_number[8];
1716*4882a593Smuzhiyun 	u32 rsvd2[55];
1717*4882a593Smuzhiyun 	u8 rsvd3[3];
1718*4882a593Smuzhiyun 	u8 phy_port;
1719*4882a593Smuzhiyun 	u32 rsvd4[15];
1720*4882a593Smuzhiyun 	u8 rsvd5[2];
1721*4882a593Smuzhiyun 	u8 pci_funcnum;
1722*4882a593Smuzhiyun 	u8 rsvd6;
1723*4882a593Smuzhiyun 	u32 rsvd7[6];
1724*4882a593Smuzhiyun } __packed;
1725*4882a593Smuzhiyun 
1726*4882a593Smuzhiyun struct mgmt_controller_attrib {
1727*4882a593Smuzhiyun 	struct mgmt_hba_attribs hba_attribs;
1728*4882a593Smuzhiyun 	u32 rsvd0[10];
1729*4882a593Smuzhiyun } __packed;
1730*4882a593Smuzhiyun 
1731*4882a593Smuzhiyun struct be_cmd_req_cntl_attribs {
1732*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1733*4882a593Smuzhiyun };
1734*4882a593Smuzhiyun 
1735*4882a593Smuzhiyun struct be_cmd_resp_cntl_attribs {
1736*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
1737*4882a593Smuzhiyun 	struct mgmt_controller_attrib attribs;
1738*4882a593Smuzhiyun };
1739*4882a593Smuzhiyun 
1740*4882a593Smuzhiyun /*********************** Set driver function ***********************/
1741*4882a593Smuzhiyun #define CAPABILITY_SW_TIMESTAMPS	2
1742*4882a593Smuzhiyun #define CAPABILITY_BE3_NATIVE_ERX_API	4
1743*4882a593Smuzhiyun 
1744*4882a593Smuzhiyun struct be_cmd_req_set_func_cap {
1745*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1746*4882a593Smuzhiyun 	u32 valid_cap_flags;
1747*4882a593Smuzhiyun 	u32 cap_flags;
1748*4882a593Smuzhiyun 	u8 rsvd[212];
1749*4882a593Smuzhiyun };
1750*4882a593Smuzhiyun 
1751*4882a593Smuzhiyun struct be_cmd_resp_set_func_cap {
1752*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
1753*4882a593Smuzhiyun 	u32 valid_cap_flags;
1754*4882a593Smuzhiyun 	u32 cap_flags;
1755*4882a593Smuzhiyun 	u8 rsvd[212];
1756*4882a593Smuzhiyun };
1757*4882a593Smuzhiyun 
1758*4882a593Smuzhiyun /*********************** Function Privileges ***********************/
1759*4882a593Smuzhiyun enum {
1760*4882a593Smuzhiyun 	BE_PRIV_DEFAULT = 0x1,
1761*4882a593Smuzhiyun 	BE_PRIV_LNKQUERY = 0x2,
1762*4882a593Smuzhiyun 	BE_PRIV_LNKSTATS = 0x4,
1763*4882a593Smuzhiyun 	BE_PRIV_LNKMGMT = 0x8,
1764*4882a593Smuzhiyun 	BE_PRIV_LNKDIAG = 0x10,
1765*4882a593Smuzhiyun 	BE_PRIV_UTILQUERY = 0x20,
1766*4882a593Smuzhiyun 	BE_PRIV_FILTMGMT = 0x40,
1767*4882a593Smuzhiyun 	BE_PRIV_IFACEMGMT = 0x80,
1768*4882a593Smuzhiyun 	BE_PRIV_VHADM = 0x100,
1769*4882a593Smuzhiyun 	BE_PRIV_DEVCFG = 0x200,
1770*4882a593Smuzhiyun 	BE_PRIV_DEVSEC = 0x400
1771*4882a593Smuzhiyun };
1772*4882a593Smuzhiyun #define MAX_PRIVILEGES		(BE_PRIV_VHADM | BE_PRIV_DEVCFG | \
1773*4882a593Smuzhiyun 				 BE_PRIV_DEVSEC)
1774*4882a593Smuzhiyun #define MIN_PRIVILEGES		BE_PRIV_DEFAULT
1775*4882a593Smuzhiyun 
1776*4882a593Smuzhiyun struct be_cmd_priv_map {
1777*4882a593Smuzhiyun 	u8 opcode;
1778*4882a593Smuzhiyun 	u8 subsystem;
1779*4882a593Smuzhiyun 	u32 priv_mask;
1780*4882a593Smuzhiyun };
1781*4882a593Smuzhiyun 
1782*4882a593Smuzhiyun struct be_cmd_req_get_fn_privileges {
1783*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1784*4882a593Smuzhiyun 	u32 rsvd;
1785*4882a593Smuzhiyun };
1786*4882a593Smuzhiyun 
1787*4882a593Smuzhiyun struct be_cmd_resp_get_fn_privileges {
1788*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
1789*4882a593Smuzhiyun 	u32 privilege_mask;
1790*4882a593Smuzhiyun };
1791*4882a593Smuzhiyun 
1792*4882a593Smuzhiyun struct be_cmd_req_set_fn_privileges {
1793*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1794*4882a593Smuzhiyun 	u32 privileges;		/* Used by BE3, SH-R */
1795*4882a593Smuzhiyun 	u32 privileges_lancer;	/* Used by Lancer */
1796*4882a593Smuzhiyun };
1797*4882a593Smuzhiyun 
1798*4882a593Smuzhiyun /******************** GET/SET_MACLIST  **************************/
1799*4882a593Smuzhiyun #define BE_MAX_MAC			64
1800*4882a593Smuzhiyun struct be_cmd_req_get_mac_list {
1801*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1802*4882a593Smuzhiyun 	u8 mac_type;
1803*4882a593Smuzhiyun 	u8 perm_override;
1804*4882a593Smuzhiyun 	u16 iface_id;
1805*4882a593Smuzhiyun 	u32 mac_id;
1806*4882a593Smuzhiyun 	u32 rsvd[3];
1807*4882a593Smuzhiyun } __packed;
1808*4882a593Smuzhiyun 
1809*4882a593Smuzhiyun struct get_list_macaddr {
1810*4882a593Smuzhiyun 	u16 mac_addr_size;
1811*4882a593Smuzhiyun 	union {
1812*4882a593Smuzhiyun 		u8 macaddr[6];
1813*4882a593Smuzhiyun 		struct {
1814*4882a593Smuzhiyun 			u8 rsvd[2];
1815*4882a593Smuzhiyun 			u32 mac_id;
1816*4882a593Smuzhiyun 		} __packed s_mac_id;
1817*4882a593Smuzhiyun 	} __packed mac_addr_id;
1818*4882a593Smuzhiyun } __packed;
1819*4882a593Smuzhiyun 
1820*4882a593Smuzhiyun struct be_cmd_resp_get_mac_list {
1821*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
1822*4882a593Smuzhiyun 	struct get_list_macaddr fd_macaddr; /* Factory default mac */
1823*4882a593Smuzhiyun 	struct get_list_macaddr macid_macaddr; /* soft mac */
1824*4882a593Smuzhiyun 	u8 true_mac_count;
1825*4882a593Smuzhiyun 	u8 pseudo_mac_count;
1826*4882a593Smuzhiyun 	u8 mac_list_size;
1827*4882a593Smuzhiyun 	u8 rsvd;
1828*4882a593Smuzhiyun 	/* perm override mac */
1829*4882a593Smuzhiyun 	struct get_list_macaddr macaddr_list[BE_MAX_MAC];
1830*4882a593Smuzhiyun } __packed;
1831*4882a593Smuzhiyun 
1832*4882a593Smuzhiyun struct be_cmd_req_set_mac_list {
1833*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1834*4882a593Smuzhiyun 	u8 mac_count;
1835*4882a593Smuzhiyun 	u8 rsvd1;
1836*4882a593Smuzhiyun 	u16 rsvd2;
1837*4882a593Smuzhiyun 	struct macaddr mac[BE_MAX_MAC];
1838*4882a593Smuzhiyun } __packed;
1839*4882a593Smuzhiyun 
1840*4882a593Smuzhiyun /*********************** HSW Config ***********************/
1841*4882a593Smuzhiyun #define PORT_FWD_TYPE_VEPA		0x3
1842*4882a593Smuzhiyun #define PORT_FWD_TYPE_VEB		0x2
1843*4882a593Smuzhiyun #define PORT_FWD_TYPE_PASSTHRU		0x1
1844*4882a593Smuzhiyun 
1845*4882a593Smuzhiyun #define ENABLE_MAC_SPOOFCHK		0x2
1846*4882a593Smuzhiyun #define DISABLE_MAC_SPOOFCHK		0x3
1847*4882a593Smuzhiyun 
1848*4882a593Smuzhiyun struct amap_set_hsw_context {
1849*4882a593Smuzhiyun 	u8 interface_id[16];
1850*4882a593Smuzhiyun 	u8 rsvd0[8];
1851*4882a593Smuzhiyun 	u8 mac_spoofchk[2];
1852*4882a593Smuzhiyun 	u8 rsvd1[4];
1853*4882a593Smuzhiyun 	u8 pvid_valid;
1854*4882a593Smuzhiyun 	u8 pport;
1855*4882a593Smuzhiyun 	u8 rsvd2[6];
1856*4882a593Smuzhiyun 	u8 port_fwd_type[3];
1857*4882a593Smuzhiyun 	u8 rsvd3[5];
1858*4882a593Smuzhiyun 	u8 vlan_spoofchk[2];
1859*4882a593Smuzhiyun 	u8 pvid[16];
1860*4882a593Smuzhiyun 	u8 rsvd4[32];
1861*4882a593Smuzhiyun 	u8 rsvd5[32];
1862*4882a593Smuzhiyun 	u8 rsvd6[32];
1863*4882a593Smuzhiyun } __packed;
1864*4882a593Smuzhiyun 
1865*4882a593Smuzhiyun struct be_cmd_req_set_hsw_config {
1866*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1867*4882a593Smuzhiyun 	u8 context[sizeof(struct amap_set_hsw_context) / 8];
1868*4882a593Smuzhiyun } __packed;
1869*4882a593Smuzhiyun 
1870*4882a593Smuzhiyun struct amap_get_hsw_req_context {
1871*4882a593Smuzhiyun 	u8 interface_id[16];
1872*4882a593Smuzhiyun 	u8 rsvd0[14];
1873*4882a593Smuzhiyun 	u8 pvid_valid;
1874*4882a593Smuzhiyun 	u8 pport;
1875*4882a593Smuzhiyun } __packed;
1876*4882a593Smuzhiyun 
1877*4882a593Smuzhiyun struct amap_get_hsw_resp_context {
1878*4882a593Smuzhiyun 	u8 rsvd0[6];
1879*4882a593Smuzhiyun 	u8 port_fwd_type[3];
1880*4882a593Smuzhiyun 	u8 rsvd1[5];
1881*4882a593Smuzhiyun 	u8 spoofchk;
1882*4882a593Smuzhiyun 	u8 rsvd2;
1883*4882a593Smuzhiyun 	u8 pvid[16];
1884*4882a593Smuzhiyun 	u8 rsvd3[32];
1885*4882a593Smuzhiyun 	u8 rsvd4[32];
1886*4882a593Smuzhiyun 	u8 rsvd5[32];
1887*4882a593Smuzhiyun } __packed;
1888*4882a593Smuzhiyun 
1889*4882a593Smuzhiyun struct be_cmd_req_get_hsw_config {
1890*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1891*4882a593Smuzhiyun 	u8 context[sizeof(struct amap_get_hsw_req_context) / 8];
1892*4882a593Smuzhiyun } __packed;
1893*4882a593Smuzhiyun 
1894*4882a593Smuzhiyun struct be_cmd_resp_get_hsw_config {
1895*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
1896*4882a593Smuzhiyun 	u8 context[sizeof(struct amap_get_hsw_resp_context) / 8];
1897*4882a593Smuzhiyun 	u32 rsvd;
1898*4882a593Smuzhiyun };
1899*4882a593Smuzhiyun 
1900*4882a593Smuzhiyun /******************* get port names ***************/
1901*4882a593Smuzhiyun struct be_cmd_req_get_port_name {
1902*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1903*4882a593Smuzhiyun 	u32 rsvd0;
1904*4882a593Smuzhiyun };
1905*4882a593Smuzhiyun 
1906*4882a593Smuzhiyun struct be_cmd_resp_get_port_name {
1907*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
1908*4882a593Smuzhiyun 	u8 port_name[4];
1909*4882a593Smuzhiyun };
1910*4882a593Smuzhiyun 
1911*4882a593Smuzhiyun /*************** HW Stats Get v1 **********************************/
1912*4882a593Smuzhiyun #define BE_TXP_SW_SZ			48
1913*4882a593Smuzhiyun struct be_port_rxf_stats_v1 {
1914*4882a593Smuzhiyun 	u32 rsvd0[12];
1915*4882a593Smuzhiyun 	u32 rx_crc_errors;
1916*4882a593Smuzhiyun 	u32 rx_alignment_symbol_errors;
1917*4882a593Smuzhiyun 	u32 rx_pause_frames;
1918*4882a593Smuzhiyun 	u32 rx_priority_pause_frames;
1919*4882a593Smuzhiyun 	u32 rx_control_frames;
1920*4882a593Smuzhiyun 	u32 rx_in_range_errors;
1921*4882a593Smuzhiyun 	u32 rx_out_range_errors;
1922*4882a593Smuzhiyun 	u32 rx_frame_too_long;
1923*4882a593Smuzhiyun 	u32 rx_address_filtered;
1924*4882a593Smuzhiyun 	u32 rx_dropped_too_small;
1925*4882a593Smuzhiyun 	u32 rx_dropped_too_short;
1926*4882a593Smuzhiyun 	u32 rx_dropped_header_too_small;
1927*4882a593Smuzhiyun 	u32 rx_dropped_tcp_length;
1928*4882a593Smuzhiyun 	u32 rx_dropped_runt;
1929*4882a593Smuzhiyun 	u32 rsvd1[10];
1930*4882a593Smuzhiyun 	u32 rx_ip_checksum_errs;
1931*4882a593Smuzhiyun 	u32 rx_tcp_checksum_errs;
1932*4882a593Smuzhiyun 	u32 rx_udp_checksum_errs;
1933*4882a593Smuzhiyun 	u32 rsvd2[7];
1934*4882a593Smuzhiyun 	u32 rx_switched_unicast_packets;
1935*4882a593Smuzhiyun 	u32 rx_switched_multicast_packets;
1936*4882a593Smuzhiyun 	u32 rx_switched_broadcast_packets;
1937*4882a593Smuzhiyun 	u32 rsvd3[3];
1938*4882a593Smuzhiyun 	u32 tx_pauseframes;
1939*4882a593Smuzhiyun 	u32 tx_priority_pauseframes;
1940*4882a593Smuzhiyun 	u32 tx_controlframes;
1941*4882a593Smuzhiyun 	u32 rsvd4[10];
1942*4882a593Smuzhiyun 	u32 rxpp_fifo_overflow_drop;
1943*4882a593Smuzhiyun 	u32 rx_input_fifo_overflow_drop;
1944*4882a593Smuzhiyun 	u32 pmem_fifo_overflow_drop;
1945*4882a593Smuzhiyun 	u32 jabber_events;
1946*4882a593Smuzhiyun 	u32 rsvd5[3];
1947*4882a593Smuzhiyun };
1948*4882a593Smuzhiyun 
1949*4882a593Smuzhiyun 
1950*4882a593Smuzhiyun struct be_rxf_stats_v1 {
1951*4882a593Smuzhiyun 	struct be_port_rxf_stats_v1 port[4];
1952*4882a593Smuzhiyun 	u32 rsvd0[2];
1953*4882a593Smuzhiyun 	u32 rx_drops_no_pbuf;
1954*4882a593Smuzhiyun 	u32 rx_drops_no_txpb;
1955*4882a593Smuzhiyun 	u32 rx_drops_no_erx_descr;
1956*4882a593Smuzhiyun 	u32 rx_drops_no_tpre_descr;
1957*4882a593Smuzhiyun 	u32 rsvd1[6];
1958*4882a593Smuzhiyun 	u32 rx_drops_too_many_frags;
1959*4882a593Smuzhiyun 	u32 rx_drops_invalid_ring;
1960*4882a593Smuzhiyun 	u32 forwarded_packets;
1961*4882a593Smuzhiyun 	u32 rx_drops_mtu;
1962*4882a593Smuzhiyun 	u32 rsvd2[14];
1963*4882a593Smuzhiyun };
1964*4882a593Smuzhiyun 
1965*4882a593Smuzhiyun struct be_erx_stats_v1 {
1966*4882a593Smuzhiyun 	u32 rx_drops_no_fragments[68];     /* dwordS 0 to 67*/
1967*4882a593Smuzhiyun 	u32 rsvd[4];
1968*4882a593Smuzhiyun };
1969*4882a593Smuzhiyun 
1970*4882a593Smuzhiyun struct be_port_rxf_stats_v2 {
1971*4882a593Smuzhiyun 	u32 rsvd0[10];
1972*4882a593Smuzhiyun 	u32 roce_bytes_received_lsd;
1973*4882a593Smuzhiyun 	u32 roce_bytes_received_msd;
1974*4882a593Smuzhiyun 	u32 rsvd1[5];
1975*4882a593Smuzhiyun 	u32 roce_frames_received;
1976*4882a593Smuzhiyun 	u32 rx_crc_errors;
1977*4882a593Smuzhiyun 	u32 rx_alignment_symbol_errors;
1978*4882a593Smuzhiyun 	u32 rx_pause_frames;
1979*4882a593Smuzhiyun 	u32 rx_priority_pause_frames;
1980*4882a593Smuzhiyun 	u32 rx_control_frames;
1981*4882a593Smuzhiyun 	u32 rx_in_range_errors;
1982*4882a593Smuzhiyun 	u32 rx_out_range_errors;
1983*4882a593Smuzhiyun 	u32 rx_frame_too_long;
1984*4882a593Smuzhiyun 	u32 rx_address_filtered;
1985*4882a593Smuzhiyun 	u32 rx_dropped_too_small;
1986*4882a593Smuzhiyun 	u32 rx_dropped_too_short;
1987*4882a593Smuzhiyun 	u32 rx_dropped_header_too_small;
1988*4882a593Smuzhiyun 	u32 rx_dropped_tcp_length;
1989*4882a593Smuzhiyun 	u32 rx_dropped_runt;
1990*4882a593Smuzhiyun 	u32 rsvd2[10];
1991*4882a593Smuzhiyun 	u32 rx_ip_checksum_errs;
1992*4882a593Smuzhiyun 	u32 rx_tcp_checksum_errs;
1993*4882a593Smuzhiyun 	u32 rx_udp_checksum_errs;
1994*4882a593Smuzhiyun 	u32 rsvd3[7];
1995*4882a593Smuzhiyun 	u32 rx_switched_unicast_packets;
1996*4882a593Smuzhiyun 	u32 rx_switched_multicast_packets;
1997*4882a593Smuzhiyun 	u32 rx_switched_broadcast_packets;
1998*4882a593Smuzhiyun 	u32 rsvd4[3];
1999*4882a593Smuzhiyun 	u32 tx_pauseframes;
2000*4882a593Smuzhiyun 	u32 tx_priority_pauseframes;
2001*4882a593Smuzhiyun 	u32 tx_controlframes;
2002*4882a593Smuzhiyun 	u32 rsvd5[10];
2003*4882a593Smuzhiyun 	u32 rxpp_fifo_overflow_drop;
2004*4882a593Smuzhiyun 	u32 rx_input_fifo_overflow_drop;
2005*4882a593Smuzhiyun 	u32 pmem_fifo_overflow_drop;
2006*4882a593Smuzhiyun 	u32 jabber_events;
2007*4882a593Smuzhiyun 	u32 rsvd6[3];
2008*4882a593Smuzhiyun 	u32 rx_drops_payload_size;
2009*4882a593Smuzhiyun 	u32 rx_drops_clipped_header;
2010*4882a593Smuzhiyun 	u32 rx_drops_crc;
2011*4882a593Smuzhiyun 	u32 roce_drops_payload_len;
2012*4882a593Smuzhiyun 	u32 roce_drops_crc;
2013*4882a593Smuzhiyun 	u32 rsvd7[19];
2014*4882a593Smuzhiyun };
2015*4882a593Smuzhiyun 
2016*4882a593Smuzhiyun struct be_rxf_stats_v2 {
2017*4882a593Smuzhiyun 	struct be_port_rxf_stats_v2 port[4];
2018*4882a593Smuzhiyun 	u32 rsvd0[2];
2019*4882a593Smuzhiyun 	u32 rx_drops_no_pbuf;
2020*4882a593Smuzhiyun 	u32 rx_drops_no_txpb;
2021*4882a593Smuzhiyun 	u32 rx_drops_no_erx_descr;
2022*4882a593Smuzhiyun 	u32 rx_drops_no_tpre_descr;
2023*4882a593Smuzhiyun 	u32 rsvd1[6];
2024*4882a593Smuzhiyun 	u32 rx_drops_too_many_frags;
2025*4882a593Smuzhiyun 	u32 rx_drops_invalid_ring;
2026*4882a593Smuzhiyun 	u32 forwarded_packets;
2027*4882a593Smuzhiyun 	u32 rx_drops_mtu;
2028*4882a593Smuzhiyun 	u32 rsvd2[35];
2029*4882a593Smuzhiyun };
2030*4882a593Smuzhiyun 
2031*4882a593Smuzhiyun struct be_hw_stats_v1 {
2032*4882a593Smuzhiyun 	struct be_rxf_stats_v1 rxf;
2033*4882a593Smuzhiyun 	u32 rsvd0[BE_TXP_SW_SZ];
2034*4882a593Smuzhiyun 	struct be_erx_stats_v1 erx;
2035*4882a593Smuzhiyun 	struct be_pmem_stats pmem;
2036*4882a593Smuzhiyun 	u32 rsvd1[18];
2037*4882a593Smuzhiyun };
2038*4882a593Smuzhiyun 
2039*4882a593Smuzhiyun struct be_cmd_req_get_stats_v1 {
2040*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2041*4882a593Smuzhiyun 	u8 rsvd[sizeof(struct be_hw_stats_v1)];
2042*4882a593Smuzhiyun };
2043*4882a593Smuzhiyun 
2044*4882a593Smuzhiyun struct be_cmd_resp_get_stats_v1 {
2045*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
2046*4882a593Smuzhiyun 	struct be_hw_stats_v1 hw_stats;
2047*4882a593Smuzhiyun };
2048*4882a593Smuzhiyun 
2049*4882a593Smuzhiyun struct be_erx_stats_v2 {
2050*4882a593Smuzhiyun 	u32 rx_drops_no_fragments[136];     /* dwordS 0 to 135*/
2051*4882a593Smuzhiyun 	u32 rsvd[3];
2052*4882a593Smuzhiyun };
2053*4882a593Smuzhiyun 
2054*4882a593Smuzhiyun struct be_hw_stats_v2 {
2055*4882a593Smuzhiyun 	struct be_rxf_stats_v2 rxf;
2056*4882a593Smuzhiyun 	u32 rsvd0[BE_TXP_SW_SZ];
2057*4882a593Smuzhiyun 	struct be_erx_stats_v2 erx;
2058*4882a593Smuzhiyun 	struct be_pmem_stats pmem;
2059*4882a593Smuzhiyun 	u32 rsvd1[18];
2060*4882a593Smuzhiyun };
2061*4882a593Smuzhiyun 
2062*4882a593Smuzhiyun struct be_cmd_req_get_stats_v2 {
2063*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2064*4882a593Smuzhiyun 	u8 rsvd[sizeof(struct be_hw_stats_v2)];
2065*4882a593Smuzhiyun };
2066*4882a593Smuzhiyun 
2067*4882a593Smuzhiyun struct be_cmd_resp_get_stats_v2 {
2068*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
2069*4882a593Smuzhiyun 	struct be_hw_stats_v2 hw_stats;
2070*4882a593Smuzhiyun };
2071*4882a593Smuzhiyun 
2072*4882a593Smuzhiyun /************** get fat capabilites *******************/
2073*4882a593Smuzhiyun #define MAX_MODULES 27
2074*4882a593Smuzhiyun #define MAX_MODES 4
2075*4882a593Smuzhiyun #define MODE_UART 0
2076*4882a593Smuzhiyun #define FW_LOG_LEVEL_DEFAULT 48
2077*4882a593Smuzhiyun #define FW_LOG_LEVEL_FATAL 64
2078*4882a593Smuzhiyun 
2079*4882a593Smuzhiyun struct ext_fat_mode {
2080*4882a593Smuzhiyun 	u8 mode;
2081*4882a593Smuzhiyun 	u8 rsvd0;
2082*4882a593Smuzhiyun 	u16 port_mask;
2083*4882a593Smuzhiyun 	u32 dbg_lvl;
2084*4882a593Smuzhiyun 	u64 fun_mask;
2085*4882a593Smuzhiyun } __packed;
2086*4882a593Smuzhiyun 
2087*4882a593Smuzhiyun struct ext_fat_modules {
2088*4882a593Smuzhiyun 	u8 modules_str[32];
2089*4882a593Smuzhiyun 	u32 modules_id;
2090*4882a593Smuzhiyun 	u32 num_modes;
2091*4882a593Smuzhiyun 	struct ext_fat_mode trace_lvl[MAX_MODES];
2092*4882a593Smuzhiyun } __packed;
2093*4882a593Smuzhiyun 
2094*4882a593Smuzhiyun struct be_fat_conf_params {
2095*4882a593Smuzhiyun 	u32 max_log_entries;
2096*4882a593Smuzhiyun 	u32 log_entry_size;
2097*4882a593Smuzhiyun 	u8 log_type;
2098*4882a593Smuzhiyun 	u8 max_log_funs;
2099*4882a593Smuzhiyun 	u8 max_log_ports;
2100*4882a593Smuzhiyun 	u8 rsvd0;
2101*4882a593Smuzhiyun 	u32 supp_modes;
2102*4882a593Smuzhiyun 	u32 num_modules;
2103*4882a593Smuzhiyun 	struct ext_fat_modules module[MAX_MODULES];
2104*4882a593Smuzhiyun } __packed;
2105*4882a593Smuzhiyun 
2106*4882a593Smuzhiyun struct be_cmd_req_get_ext_fat_caps {
2107*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2108*4882a593Smuzhiyun 	u32 parameter_type;
2109*4882a593Smuzhiyun };
2110*4882a593Smuzhiyun 
2111*4882a593Smuzhiyun struct be_cmd_resp_get_ext_fat_caps {
2112*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
2113*4882a593Smuzhiyun 	struct be_fat_conf_params get_params;
2114*4882a593Smuzhiyun };
2115*4882a593Smuzhiyun 
2116*4882a593Smuzhiyun struct be_cmd_req_set_ext_fat_caps {
2117*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2118*4882a593Smuzhiyun 	struct be_fat_conf_params set_params;
2119*4882a593Smuzhiyun };
2120*4882a593Smuzhiyun 
2121*4882a593Smuzhiyun #define RESOURCE_DESC_SIZE_V0			72
2122*4882a593Smuzhiyun #define RESOURCE_DESC_SIZE_V1			88
2123*4882a593Smuzhiyun #define PCIE_RESOURCE_DESC_TYPE_V0		0x40
2124*4882a593Smuzhiyun #define NIC_RESOURCE_DESC_TYPE_V0		0x41
2125*4882a593Smuzhiyun #define PCIE_RESOURCE_DESC_TYPE_V1		0x50
2126*4882a593Smuzhiyun #define NIC_RESOURCE_DESC_TYPE_V1		0x51
2127*4882a593Smuzhiyun #define PORT_RESOURCE_DESC_TYPE_V1		0x55
2128*4882a593Smuzhiyun #define MAX_RESOURCE_DESC			264
2129*4882a593Smuzhiyun 
2130*4882a593Smuzhiyun #define IF_CAPS_FLAGS_VALID_SHIFT		0	/* IF caps valid */
2131*4882a593Smuzhiyun #define VFT_SHIFT				3	/* VF template */
2132*4882a593Smuzhiyun #define IMM_SHIFT				6	/* Immediate */
2133*4882a593Smuzhiyun #define NOSV_SHIFT				7	/* No save */
2134*4882a593Smuzhiyun 
2135*4882a593Smuzhiyun #define MISSION_NIC				1
2136*4882a593Smuzhiyun #define MISSION_RDMA				8
2137*4882a593Smuzhiyun 
2138*4882a593Smuzhiyun struct be_res_desc_hdr {
2139*4882a593Smuzhiyun 	u8 desc_type;
2140*4882a593Smuzhiyun 	u8 desc_len;
2141*4882a593Smuzhiyun } __packed;
2142*4882a593Smuzhiyun 
2143*4882a593Smuzhiyun struct be_port_res_desc {
2144*4882a593Smuzhiyun 	struct be_res_desc_hdr hdr;
2145*4882a593Smuzhiyun 	u8 rsvd0;
2146*4882a593Smuzhiyun 	u8 flags;
2147*4882a593Smuzhiyun 	u8 link_num;
2148*4882a593Smuzhiyun 	u8 mc_type;
2149*4882a593Smuzhiyun 	u16 rsvd1;
2150*4882a593Smuzhiyun 
2151*4882a593Smuzhiyun #define NV_TYPE_MASK				0x3	/* bits 0-1 */
2152*4882a593Smuzhiyun #define NV_TYPE_DISABLED			1
2153*4882a593Smuzhiyun #define NV_TYPE_VXLAN				3
2154*4882a593Smuzhiyun #define SOCVID_SHIFT				2	/* Strip outer vlan */
2155*4882a593Smuzhiyun #define RCVID_SHIFT				4	/* Report vlan */
2156*4882a593Smuzhiyun #define PF_NUM_IGNORE				255
2157*4882a593Smuzhiyun 	u8 nv_flags;
2158*4882a593Smuzhiyun 	u8 rsvd2;
2159*4882a593Smuzhiyun 	__le16 nv_port;					/* vxlan/gre port */
2160*4882a593Smuzhiyun 	u32 rsvd3[19];
2161*4882a593Smuzhiyun } __packed;
2162*4882a593Smuzhiyun 
2163*4882a593Smuzhiyun struct be_pcie_res_desc {
2164*4882a593Smuzhiyun 	struct be_res_desc_hdr hdr;
2165*4882a593Smuzhiyun 	u8 rsvd0;
2166*4882a593Smuzhiyun 	u8 flags;
2167*4882a593Smuzhiyun 	u16 rsvd1;
2168*4882a593Smuzhiyun 	u8 pf_num;
2169*4882a593Smuzhiyun 	u8 rsvd2;
2170*4882a593Smuzhiyun 	u32 rsvd3;
2171*4882a593Smuzhiyun 	u8 sriov_state;
2172*4882a593Smuzhiyun 	u8 pf_state;
2173*4882a593Smuzhiyun 	u8 pf_type;
2174*4882a593Smuzhiyun 	u8 rsvd4;
2175*4882a593Smuzhiyun 	u16 num_vfs;
2176*4882a593Smuzhiyun 	u16 rsvd5;
2177*4882a593Smuzhiyun 	u32 rsvd6[17];
2178*4882a593Smuzhiyun } __packed;
2179*4882a593Smuzhiyun 
2180*4882a593Smuzhiyun struct be_nic_res_desc {
2181*4882a593Smuzhiyun 	struct be_res_desc_hdr hdr;
2182*4882a593Smuzhiyun 	u8 rsvd1;
2183*4882a593Smuzhiyun 
2184*4882a593Smuzhiyun #define QUN_SHIFT				4 /* QoS is in absolute units */
2185*4882a593Smuzhiyun 	u8 flags;
2186*4882a593Smuzhiyun 	u8 vf_num;
2187*4882a593Smuzhiyun 	u8 rsvd2;
2188*4882a593Smuzhiyun 	u8 pf_num;
2189*4882a593Smuzhiyun 	u8 rsvd3;
2190*4882a593Smuzhiyun 	u16 unicast_mac_count;
2191*4882a593Smuzhiyun 	u8 rsvd4[6];
2192*4882a593Smuzhiyun 	u16 mcc_count;
2193*4882a593Smuzhiyun 	u16 vlan_count;
2194*4882a593Smuzhiyun 	u16 mcast_mac_count;
2195*4882a593Smuzhiyun 	u16 txq_count;
2196*4882a593Smuzhiyun 	u16 rq_count;
2197*4882a593Smuzhiyun 	u16 rssq_count;
2198*4882a593Smuzhiyun 	u16 lro_count;
2199*4882a593Smuzhiyun 	u16 cq_count;
2200*4882a593Smuzhiyun 	u16 toe_conn_count;
2201*4882a593Smuzhiyun 	u16 eq_count;
2202*4882a593Smuzhiyun 	u16 vlan_id;
2203*4882a593Smuzhiyun 	u16 iface_count;
2204*4882a593Smuzhiyun 	u32 cap_flags;
2205*4882a593Smuzhiyun 	u8 link_param;
2206*4882a593Smuzhiyun 	u8 rsvd6;
2207*4882a593Smuzhiyun 	u16 channel_id_param;
2208*4882a593Smuzhiyun 	u32 bw_min;
2209*4882a593Smuzhiyun 	u32 bw_max;
2210*4882a593Smuzhiyun 	u8 acpi_params;
2211*4882a593Smuzhiyun 	u8 wol_param;
2212*4882a593Smuzhiyun 	u16 rsvd7;
2213*4882a593Smuzhiyun 	u16 tunnel_iface_count;
2214*4882a593Smuzhiyun 	u16 direct_tenant_iface_count;
2215*4882a593Smuzhiyun 	u32 rsvd8[6];
2216*4882a593Smuzhiyun } __packed;
2217*4882a593Smuzhiyun 
2218*4882a593Smuzhiyun /************ Multi-Channel type ***********/
2219*4882a593Smuzhiyun enum mc_type {
2220*4882a593Smuzhiyun 	MC_NONE = 0x01,
2221*4882a593Smuzhiyun 	UMC = 0x02,
2222*4882a593Smuzhiyun 	FLEX10 = 0x03,
2223*4882a593Smuzhiyun 	vNIC1 = 0x04,
2224*4882a593Smuzhiyun 	nPAR = 0x05,
2225*4882a593Smuzhiyun 	UFP = 0x06,
2226*4882a593Smuzhiyun 	vNIC2 = 0x07
2227*4882a593Smuzhiyun };
2228*4882a593Smuzhiyun 
2229*4882a593Smuzhiyun /* Is BE in a multi-channel mode */
be_is_mc(struct be_adapter * adapter)2230*4882a593Smuzhiyun static inline bool be_is_mc(struct be_adapter *adapter)
2231*4882a593Smuzhiyun {
2232*4882a593Smuzhiyun 	return adapter->mc_type > MC_NONE;
2233*4882a593Smuzhiyun }
2234*4882a593Smuzhiyun 
2235*4882a593Smuzhiyun struct be_cmd_req_get_func_config {
2236*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2237*4882a593Smuzhiyun };
2238*4882a593Smuzhiyun 
2239*4882a593Smuzhiyun struct be_cmd_resp_get_func_config {
2240*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
2241*4882a593Smuzhiyun 	u32 desc_count;
2242*4882a593Smuzhiyun 	u8 func_param[MAX_RESOURCE_DESC * RESOURCE_DESC_SIZE_V1];
2243*4882a593Smuzhiyun };
2244*4882a593Smuzhiyun 
2245*4882a593Smuzhiyun enum {
2246*4882a593Smuzhiyun 	RESOURCE_LIMITS,
2247*4882a593Smuzhiyun 	RESOURCE_MODIFIABLE
2248*4882a593Smuzhiyun };
2249*4882a593Smuzhiyun 
2250*4882a593Smuzhiyun struct be_cmd_req_get_profile_config {
2251*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2252*4882a593Smuzhiyun 	u8 rsvd;
2253*4882a593Smuzhiyun #define ACTIVE_PROFILE_TYPE			0x2
2254*4882a593Smuzhiyun #define SAVED_PROFILE_TYPE			0x0
2255*4882a593Smuzhiyun #define QUERY_MODIFIABLE_FIELDS_TYPE		BIT(3)
2256*4882a593Smuzhiyun 	u8 type;
2257*4882a593Smuzhiyun 	u16 rsvd1;
2258*4882a593Smuzhiyun };
2259*4882a593Smuzhiyun 
2260*4882a593Smuzhiyun struct be_cmd_resp_get_profile_config {
2261*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
2262*4882a593Smuzhiyun 	__le16 desc_count;
2263*4882a593Smuzhiyun 	u16 rsvd;
2264*4882a593Smuzhiyun 	u8 func_param[MAX_RESOURCE_DESC * RESOURCE_DESC_SIZE_V1];
2265*4882a593Smuzhiyun };
2266*4882a593Smuzhiyun 
2267*4882a593Smuzhiyun #define FIELD_MODIFIABLE			0xFFFF
2268*4882a593Smuzhiyun struct be_cmd_req_set_profile_config {
2269*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2270*4882a593Smuzhiyun 	u32 rsvd;
2271*4882a593Smuzhiyun 	u32 desc_count;
2272*4882a593Smuzhiyun 	u8 desc[2 * RESOURCE_DESC_SIZE_V1];
2273*4882a593Smuzhiyun } __packed;
2274*4882a593Smuzhiyun 
2275*4882a593Smuzhiyun struct be_cmd_req_get_active_profile {
2276*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2277*4882a593Smuzhiyun 	u32 rsvd;
2278*4882a593Smuzhiyun } __packed;
2279*4882a593Smuzhiyun 
2280*4882a593Smuzhiyun struct be_cmd_resp_get_active_profile {
2281*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
2282*4882a593Smuzhiyun 	u16 active_profile_id;
2283*4882a593Smuzhiyun 	u16 next_profile_id;
2284*4882a593Smuzhiyun } __packed;
2285*4882a593Smuzhiyun 
2286*4882a593Smuzhiyun struct be_cmd_enable_disable_vf {
2287*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2288*4882a593Smuzhiyun 	u8 enable;
2289*4882a593Smuzhiyun 	u8 rsvd[3];
2290*4882a593Smuzhiyun };
2291*4882a593Smuzhiyun 
2292*4882a593Smuzhiyun struct be_cmd_req_intr_set {
2293*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2294*4882a593Smuzhiyun 	u8 intr_enabled;
2295*4882a593Smuzhiyun 	u8 rsvd[3];
2296*4882a593Smuzhiyun };
2297*4882a593Smuzhiyun 
check_privilege(struct be_adapter * adapter,u32 flags)2298*4882a593Smuzhiyun static inline bool check_privilege(struct be_adapter *adapter, u32 flags)
2299*4882a593Smuzhiyun {
2300*4882a593Smuzhiyun 	return flags & adapter->cmd_privileges ? true : false;
2301*4882a593Smuzhiyun }
2302*4882a593Smuzhiyun 
2303*4882a593Smuzhiyun /************** Get IFACE LIST *******************/
2304*4882a593Smuzhiyun struct be_if_desc {
2305*4882a593Smuzhiyun 	u32 if_id;
2306*4882a593Smuzhiyun 	u32 cap_flags;
2307*4882a593Smuzhiyun 	u32 en_flags;
2308*4882a593Smuzhiyun };
2309*4882a593Smuzhiyun 
2310*4882a593Smuzhiyun struct be_cmd_req_get_iface_list {
2311*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2312*4882a593Smuzhiyun };
2313*4882a593Smuzhiyun 
2314*4882a593Smuzhiyun struct be_cmd_resp_get_iface_list {
2315*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2316*4882a593Smuzhiyun 	u32 if_cnt;
2317*4882a593Smuzhiyun 	struct be_if_desc if_desc;
2318*4882a593Smuzhiyun };
2319*4882a593Smuzhiyun 
2320*4882a593Smuzhiyun /************** Set Features *******************/
2321*4882a593Smuzhiyun #define	BE_FEATURE_UE_RECOVERY		0x10
2322*4882a593Smuzhiyun #define	BE_UE_RECOVERY_UER_MASK		0x1
2323*4882a593Smuzhiyun 
2324*4882a593Smuzhiyun struct be_req_ue_recovery {
2325*4882a593Smuzhiyun 	u32	uer;
2326*4882a593Smuzhiyun 	u32	rsvd;
2327*4882a593Smuzhiyun };
2328*4882a593Smuzhiyun 
2329*4882a593Smuzhiyun struct be_cmd_req_set_features {
2330*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2331*4882a593Smuzhiyun 	u32 features;
2332*4882a593Smuzhiyun 	u32 parameter_len;
2333*4882a593Smuzhiyun 	union {
2334*4882a593Smuzhiyun 		struct be_req_ue_recovery req;
2335*4882a593Smuzhiyun 		u32 rsvd[2];
2336*4882a593Smuzhiyun 	} parameter;
2337*4882a593Smuzhiyun };
2338*4882a593Smuzhiyun 
2339*4882a593Smuzhiyun struct be_resp_ue_recovery {
2340*4882a593Smuzhiyun 	u32 uer;
2341*4882a593Smuzhiyun 	u16 ue2rp;
2342*4882a593Smuzhiyun 	u16 ue2sr;
2343*4882a593Smuzhiyun };
2344*4882a593Smuzhiyun 
2345*4882a593Smuzhiyun struct be_cmd_resp_set_features {
2346*4882a593Smuzhiyun 	struct be_cmd_resp_hdr hdr;
2347*4882a593Smuzhiyun 	u32 features;
2348*4882a593Smuzhiyun 	u32 parameter_len;
2349*4882a593Smuzhiyun 	union {
2350*4882a593Smuzhiyun 		struct be_resp_ue_recovery resp;
2351*4882a593Smuzhiyun 		u32 rsvd[2];
2352*4882a593Smuzhiyun 	} parameter;
2353*4882a593Smuzhiyun };
2354*4882a593Smuzhiyun 
2355*4882a593Smuzhiyun /*************** Set logical link ********************/
2356*4882a593Smuzhiyun #define PLINK_ENABLE            BIT(0)
2357*4882a593Smuzhiyun #define PLINK_TRACK             BIT(8)
2358*4882a593Smuzhiyun struct be_cmd_req_set_ll_link {
2359*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2360*4882a593Smuzhiyun 	u32 link_config; /* Bit 0: UP_DOWN, Bit 9: PLINK */
2361*4882a593Smuzhiyun };
2362*4882a593Smuzhiyun 
2363*4882a593Smuzhiyun /************** Manage IFACE Filters *******************/
2364*4882a593Smuzhiyun #define OP_CONVERT_NORMAL_TO_TUNNEL		0
2365*4882a593Smuzhiyun #define OP_CONVERT_TUNNEL_TO_NORMAL		1
2366*4882a593Smuzhiyun 
2367*4882a593Smuzhiyun struct be_cmd_req_manage_iface_filters {
2368*4882a593Smuzhiyun 	struct be_cmd_req_hdr hdr;
2369*4882a593Smuzhiyun 	u8  op;
2370*4882a593Smuzhiyun 	u8  rsvd0;
2371*4882a593Smuzhiyun 	u8  flags;
2372*4882a593Smuzhiyun 	u8  rsvd1;
2373*4882a593Smuzhiyun 	u32 tunnel_iface_id;
2374*4882a593Smuzhiyun 	u32 target_iface_id;
2375*4882a593Smuzhiyun 	u8  mac[6];
2376*4882a593Smuzhiyun 	u16 vlan_tag;
2377*4882a593Smuzhiyun 	u32 tenant_id;
2378*4882a593Smuzhiyun 	u32 filter_id;
2379*4882a593Smuzhiyun 	u32 cap_flags;
2380*4882a593Smuzhiyun 	u32 cap_control_flags;
2381*4882a593Smuzhiyun } __packed;
2382*4882a593Smuzhiyun 
2383*4882a593Smuzhiyun u16 be_POST_stage_get(struct be_adapter *adapter);
2384*4882a593Smuzhiyun int be_pci_fnum_get(struct be_adapter *adapter);
2385*4882a593Smuzhiyun int be_fw_wait_ready(struct be_adapter *adapter);
2386*4882a593Smuzhiyun int be_cmd_mac_addr_query(struct be_adapter *adapter, u8 *mac_addr,
2387*4882a593Smuzhiyun 			  bool permanent, u32 if_handle, u32 pmac_id);
2388*4882a593Smuzhiyun int be_cmd_pmac_add(struct be_adapter *adapter, u8 *mac_addr, u32 if_id,
2389*4882a593Smuzhiyun 		    u32 *pmac_id, u32 domain);
2390*4882a593Smuzhiyun int be_cmd_pmac_del(struct be_adapter *adapter, u32 if_id, int pmac_id,
2391*4882a593Smuzhiyun 		    u32 domain);
2392*4882a593Smuzhiyun int be_cmd_if_create(struct be_adapter *adapter, u32 cap_flags, u32 en_flags,
2393*4882a593Smuzhiyun 		     u32 *if_handle, u32 domain);
2394*4882a593Smuzhiyun int be_cmd_if_destroy(struct be_adapter *adapter, int if_handle, u32 domain);
2395*4882a593Smuzhiyun int be_cmd_eq_create(struct be_adapter *adapter, struct be_eq_obj *eqo);
2396*4882a593Smuzhiyun int be_cmd_cq_create(struct be_adapter *adapter, struct be_queue_info *cq,
2397*4882a593Smuzhiyun 		     struct be_queue_info *eq, bool no_delay,
2398*4882a593Smuzhiyun 		     int num_cqe_dma_coalesce);
2399*4882a593Smuzhiyun int be_cmd_mccq_create(struct be_adapter *adapter, struct be_queue_info *mccq,
2400*4882a593Smuzhiyun 		       struct be_queue_info *cq);
2401*4882a593Smuzhiyun int be_cmd_txq_create(struct be_adapter *adapter, struct be_tx_obj *txo);
2402*4882a593Smuzhiyun int be_cmd_rxq_create(struct be_adapter *adapter, struct be_queue_info *rxq,
2403*4882a593Smuzhiyun 		      u16 cq_id, u16 frag_size, u32 if_id, u32 rss, u8 *rss_id);
2404*4882a593Smuzhiyun int be_cmd_q_destroy(struct be_adapter *adapter, struct be_queue_info *q,
2405*4882a593Smuzhiyun 		     int type);
2406*4882a593Smuzhiyun int be_cmd_rxq_destroy(struct be_adapter *adapter, struct be_queue_info *q);
2407*4882a593Smuzhiyun int be_cmd_link_status_query(struct be_adapter *adapter, u16 *link_speed,
2408*4882a593Smuzhiyun 			     u8 *link_status, u32 dom);
2409*4882a593Smuzhiyun int be_cmd_reset(struct be_adapter *adapter);
2410*4882a593Smuzhiyun int be_cmd_get_stats(struct be_adapter *adapter, struct be_dma_mem *nonemb_cmd);
2411*4882a593Smuzhiyun int lancer_cmd_get_pport_stats(struct be_adapter *adapter,
2412*4882a593Smuzhiyun 			       struct be_dma_mem *nonemb_cmd);
2413*4882a593Smuzhiyun int be_cmd_get_fw_ver(struct be_adapter *adapter);
2414*4882a593Smuzhiyun int be_cmd_modify_eqd(struct be_adapter *adapter, struct be_set_eqd *, int num);
2415*4882a593Smuzhiyun int be_cmd_vlan_config(struct be_adapter *adapter, u32 if_id, u16 *vtag_array,
2416*4882a593Smuzhiyun 		       u32 num, u32 domain);
2417*4882a593Smuzhiyun int be_cmd_rx_filter(struct be_adapter *adapter, u32 flags, u32 status);
2418*4882a593Smuzhiyun int be_cmd_set_flow_control(struct be_adapter *adapter, u32 tx_fc, u32 rx_fc);
2419*4882a593Smuzhiyun int be_cmd_get_flow_control(struct be_adapter *adapter, u32 *tx_fc, u32 *rx_fc);
2420*4882a593Smuzhiyun int be_cmd_query_fw_cfg(struct be_adapter *adapter);
2421*4882a593Smuzhiyun int be_cmd_reset_function(struct be_adapter *adapter);
2422*4882a593Smuzhiyun int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable,
2423*4882a593Smuzhiyun 		      u32 rss_hash_opts, u16 table_size, const u8 *rss_hkey);
2424*4882a593Smuzhiyun int be_process_mcc(struct be_adapter *adapter);
2425*4882a593Smuzhiyun int be_cmd_set_beacon_state(struct be_adapter *adapter, u8 port_num, u8 beacon,
2426*4882a593Smuzhiyun 			    u8 status, u8 state);
2427*4882a593Smuzhiyun int be_cmd_get_beacon_state(struct be_adapter *adapter, u8 port_num,
2428*4882a593Smuzhiyun 			    u32 *state);
2429*4882a593Smuzhiyun int be_cmd_read_port_transceiver_data(struct be_adapter *adapter,
2430*4882a593Smuzhiyun 				      u8 page_num, u32 off, u32 len, u8 *data);
2431*4882a593Smuzhiyun int be_cmd_query_cable_type(struct be_adapter *adapter);
2432*4882a593Smuzhiyun int be_cmd_query_sfp_info(struct be_adapter *adapter);
2433*4882a593Smuzhiyun int lancer_cmd_read_object(struct be_adapter *adapter, struct be_dma_mem *cmd,
2434*4882a593Smuzhiyun 			   u32 data_size, u32 data_offset, const char *obj_name,
2435*4882a593Smuzhiyun 			   u32 *data_read, u32 *eof, u8 *addn_status);
2436*4882a593Smuzhiyun int lancer_fw_download(struct be_adapter *adapter, const struct firmware *fw);
2437*4882a593Smuzhiyun int be_fw_download(struct be_adapter *adapter, const struct firmware *fw);
2438*4882a593Smuzhiyun int be_cmd_enable_magic_wol(struct be_adapter *adapter, u8 *mac,
2439*4882a593Smuzhiyun 			    struct be_dma_mem *nonemb_cmd);
2440*4882a593Smuzhiyun int be_cmd_fw_init(struct be_adapter *adapter);
2441*4882a593Smuzhiyun int be_cmd_fw_clean(struct be_adapter *adapter);
2442*4882a593Smuzhiyun void be_async_mcc_enable(struct be_adapter *adapter);
2443*4882a593Smuzhiyun void be_async_mcc_disable(struct be_adapter *adapter);
2444*4882a593Smuzhiyun int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
2445*4882a593Smuzhiyun 			 u32 loopback_type, u32 pkt_size, u32 num_pkts,
2446*4882a593Smuzhiyun 			 u64 pattern);
2447*4882a593Smuzhiyun int be_cmd_ddr_dma_test(struct be_adapter *adapter, u64 pattern, u32 byte_cnt,
2448*4882a593Smuzhiyun 			struct be_dma_mem *cmd);
2449*4882a593Smuzhiyun int be_cmd_get_seeprom_data(struct be_adapter *adapter,
2450*4882a593Smuzhiyun 			    struct be_dma_mem *nonemb_cmd);
2451*4882a593Smuzhiyun int be_cmd_set_loopback(struct be_adapter *adapter, u8 port_num,
2452*4882a593Smuzhiyun 			u8 loopback_type, u8 enable);
2453*4882a593Smuzhiyun int be_cmd_get_phy_info(struct be_adapter *adapter);
2454*4882a593Smuzhiyun int be_cmd_config_qos(struct be_adapter *adapter, u32 max_rate,
2455*4882a593Smuzhiyun 		      u16 link_speed, u8 domain);
2456*4882a593Smuzhiyun void be_detect_error(struct be_adapter *adapter);
2457*4882a593Smuzhiyun int be_cmd_get_die_temperature(struct be_adapter *adapter);
2458*4882a593Smuzhiyun int be_cmd_get_cntl_attributes(struct be_adapter *adapter);
2459*4882a593Smuzhiyun int be_cmd_get_fat_dump_len(struct be_adapter *adapter, u32 *dump_size);
2460*4882a593Smuzhiyun int be_cmd_get_fat_dump(struct be_adapter *adapter, u32 buf_len, void *buf);
2461*4882a593Smuzhiyun int be_cmd_req_native_mode(struct be_adapter *adapter);
2462*4882a593Smuzhiyun int be_cmd_get_fn_privileges(struct be_adapter *adapter, u32 *privilege,
2463*4882a593Smuzhiyun 			     u32 domain);
2464*4882a593Smuzhiyun int be_cmd_set_fn_privileges(struct be_adapter *adapter, u32 privileges,
2465*4882a593Smuzhiyun 			     u32 vf_num);
2466*4882a593Smuzhiyun int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac,
2467*4882a593Smuzhiyun 			     bool *pmac_id_active, u32 *pmac_id,
2468*4882a593Smuzhiyun 			     u32 if_handle, u8 domain);
2469*4882a593Smuzhiyun int be_cmd_get_active_mac(struct be_adapter *adapter, u32 pmac_id, u8 *mac,
2470*4882a593Smuzhiyun 			  u32 if_handle, bool active, u32 domain);
2471*4882a593Smuzhiyun int be_cmd_get_perm_mac(struct be_adapter *adapter, u8 *mac);
2472*4882a593Smuzhiyun int be_cmd_set_mac_list(struct be_adapter *adapter, u8 *mac_array, u8 mac_count,
2473*4882a593Smuzhiyun 			u32 domain);
2474*4882a593Smuzhiyun int be_cmd_set_mac(struct be_adapter *adapter, u8 *mac, int if_id, u32 dom);
2475*4882a593Smuzhiyun int be_cmd_set_hsw_config(struct be_adapter *adapter, u16 pvid, u32 domain,
2476*4882a593Smuzhiyun 			  u16 intf_id, u16 hsw_mode, u8 spoofchk);
2477*4882a593Smuzhiyun int be_cmd_get_hsw_config(struct be_adapter *adapter, u16 *pvid, u32 domain,
2478*4882a593Smuzhiyun 			  u16 intf_id, u8 *mode, bool *spoofchk);
2479*4882a593Smuzhiyun int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter);
2480*4882a593Smuzhiyun int be_cmd_set_fw_log_level(struct be_adapter *adapter, u32 level);
2481*4882a593Smuzhiyun int be_cmd_get_fw_log_level(struct be_adapter *adapter);
2482*4882a593Smuzhiyun int be_cmd_get_ext_fat_capabilites(struct be_adapter *adapter,
2483*4882a593Smuzhiyun 				   struct be_dma_mem *cmd);
2484*4882a593Smuzhiyun int be_cmd_set_ext_fat_capabilites(struct be_adapter *adapter,
2485*4882a593Smuzhiyun 				   struct be_dma_mem *cmd,
2486*4882a593Smuzhiyun 				   struct be_fat_conf_params *cfgs);
2487*4882a593Smuzhiyun int lancer_physdev_ctrl(struct be_adapter *adapter, u32 mask);
2488*4882a593Smuzhiyun int lancer_initiate_dump(struct be_adapter *adapter);
2489*4882a593Smuzhiyun int lancer_delete_dump(struct be_adapter *adapter);
2490*4882a593Smuzhiyun bool dump_present(struct be_adapter *adapter);
2491*4882a593Smuzhiyun int lancer_test_and_set_rdy_state(struct be_adapter *adapter);
2492*4882a593Smuzhiyun int be_cmd_query_port_name(struct be_adapter *adapter);
2493*4882a593Smuzhiyun int be_cmd_get_func_config(struct be_adapter *adapter,
2494*4882a593Smuzhiyun 			   struct be_resources *res);
2495*4882a593Smuzhiyun int be_cmd_get_profile_config(struct be_adapter *adapter,
2496*4882a593Smuzhiyun 			      struct be_resources *res,
2497*4882a593Smuzhiyun 			      struct be_port_resources *port_res,
2498*4882a593Smuzhiyun 			      u8 profile_type, u8 query, u8 domain);
2499*4882a593Smuzhiyun int be_cmd_get_active_profile(struct be_adapter *adapter, u16 *profile);
2500*4882a593Smuzhiyun int be_cmd_get_if_id(struct be_adapter *adapter, struct be_vf_cfg *vf_cfg,
2501*4882a593Smuzhiyun 		     int vf_num);
2502*4882a593Smuzhiyun int be_cmd_enable_vf(struct be_adapter *adapter, u8 domain);
2503*4882a593Smuzhiyun int be_cmd_intr_set(struct be_adapter *adapter, bool intr_enable);
2504*4882a593Smuzhiyun int be_cmd_set_logical_link_config(struct be_adapter *adapter,
2505*4882a593Smuzhiyun 					  int link_state, u8 domain);
2506*4882a593Smuzhiyun int be_cmd_set_vxlan_port(struct be_adapter *adapter, __be16 port);
2507*4882a593Smuzhiyun int be_cmd_manage_iface(struct be_adapter *adapter, u32 iface, u8 op);
2508*4882a593Smuzhiyun int be_cmd_set_sriov_config(struct be_adapter *adapter,
2509*4882a593Smuzhiyun 			    struct be_resources res, u16 num_vfs,
2510*4882a593Smuzhiyun 			    struct be_resources *vft_res);
2511*4882a593Smuzhiyun int be_cmd_set_features(struct be_adapter *adapter);
2512