1 /*-
2  *   BSD LICENSE
3  *
4  *   Copyright(c) 2001-2017 Broadcom Limited.
5  *   All rights reserved.
6  *
7  *   Redistribution and use in source and binary forms, with or without
8  *   modification, are permitted provided that the following conditions
9  *   are met:
10  *
11  *     * Redistributions of source code must retain the above copyright
12  *       notice, this list of conditions and the following disclaimer.
13  *     * Redistributions in binary form must reproduce the above copyright
14  *       notice, this list of conditions and the following disclaimer in
15  *       the documentation and/or other materials provided with the
16  *       distribution.
17  *     * Neither the name of Broadcom Corporation nor the names of its
18  *       contributors may be used to endorse or promote products derived
19  *       from this software without specific prior written permission.
20  *
21  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  */
33 
34 #ifndef _HSI_STRUCT_DEF_DPDK_
35 #define _HSI_STRUCT_DEF_DPDK_
36 /* HSI and HWRM Specification 1.8.2 */
37 #define HWRM_VERSION_MAJOR	1
38 #define HWRM_VERSION_MINOR	8
39 #define HWRM_VERSION_UPDATE	2
40 
41 #define HWRM_VERSION_RSVD	0 /* non-zero means beta version */
42 
43 #define HWRM_VERSION_STR	"1.8.2.0"
44 /*
45  * Following is the signature for HWRM message field that indicates not
46  * applicable	(All F's). Need to cast it the size of the field if needed.
47  */
48 #define HWRM_NA_SIGNATURE	((uint32_t)(-1))
49 #define HWRM_MAX_REQ_LEN	(128)  /* hwrm_func_buf_rgtr */
50 #define HWRM_MAX_RESP_LEN	(280)  /* hwrm_selftest_qlist */
51 #define HW_HASH_INDEX_SIZE	 0x80	/* 7 bit indirection table index. */
52 #define HW_HASH_KEY_SIZE	40
53 #define HWRM_RESP_VALID_KEY	1 /* valid key for HWRM response */
54 #define HWRM_ROCE_SP_HSI_VERSION_MAJOR	1
55 #define HWRM_ROCE_SP_HSI_VERSION_MINOR	8
56 #define HWRM_ROCE_SP_HSI_VERSION_UPDATE	2
57 
58 /*
59  * Request types
60  */
61 #define HWRM_VER_GET			(UINT32_C(0x0))
62 #define HWRM_FUNC_BUF_UNRGTR		(UINT32_C(0xe))
63 #define HWRM_FUNC_VF_CFG		(UINT32_C(0xf))
64     /* Reserved for future use */
65 #define RESERVED1			(UINT32_C(0x10))
66 #define HWRM_FUNC_RESET			(UINT32_C(0x11))
67 #define HWRM_FUNC_GETFID		(UINT32_C(0x12))
68 #define HWRM_FUNC_VF_ALLOC		(UINT32_C(0x13))
69 #define HWRM_FUNC_VF_FREE		(UINT32_C(0x14))
70 #define HWRM_FUNC_QCAPS			(UINT32_C(0x15))
71 #define HWRM_FUNC_QCFG			(UINT32_C(0x16))
72 #define HWRM_FUNC_CFG			(UINT32_C(0x17))
73 #define HWRM_FUNC_QSTATS		(UINT32_C(0x18))
74 #define HWRM_FUNC_CLR_STATS		(UINT32_C(0x19))
75 #define HWRM_FUNC_DRV_UNRGTR		(UINT32_C(0x1a))
76 #define HWRM_FUNC_VF_RESC_FREE		(UINT32_C(0x1b))
77 #define HWRM_FUNC_VF_VNIC_IDS_QUERY	(UINT32_C(0x1c))
78 #define HWRM_FUNC_DRV_RGTR		(UINT32_C(0x1d))
79 #define HWRM_FUNC_DRV_QVER		(UINT32_C(0x1e))
80 #define HWRM_FUNC_BUF_RGTR		(UINT32_C(0x1f))
81 #define HWRM_PORT_PHY_CFG		(UINT32_C(0x20))
82 #define HWRM_PORT_MAC_CFG		(UINT32_C(0x21))
83 #define HWRM_PORT_QSTATS		(UINT32_C(0x23))
84 #define HWRM_PORT_LPBK_QSTATS		(UINT32_C(0x24))
85 #define HWRM_PORT_CLR_STATS		(UINT32_C(0x25))
86 #define HWRM_PORT_PHY_QCFG		(UINT32_C(0x27))
87 #define HWRM_PORT_MAC_QCFG		(UINT32_C(0x28))
88 #define HWRM_PORT_PHY_QCAPS		(UINT32_C(0x2a))
89 #define HWRM_PORT_LED_CFG		(UINT32_C(0x2d))
90 #define HWRM_PORT_LED_QCFG		(UINT32_C(0x2e))
91 #define HWRM_PORT_LED_QCAPS		(UINT32_C(0x2f))
92 #define HWRM_QUEUE_QPORTCFG		(UINT32_C(0x30))
93 #define HWRM_QUEUE_QCFG			(UINT32_C(0x31))
94 #define HWRM_QUEUE_CFG			(UINT32_C(0x32))
95 #define HWRM_FUNC_VLAN_CFG		(UINT32_C(0x33))
96 #define HWRM_FUNC_VLAN_QCFG		(UINT32_C(0x34))
97 #define HWRM_QUEUE_PFCENABLE_QCFG	(UINT32_C(0x35))
98 #define HWRM_QUEUE_PFCENABLE_CFG	(UINT32_C(0x36))
99 #define HWRM_QUEUE_PRI2COS_QCFG		(UINT32_C(0x37))
100 #define HWRM_QUEUE_PRI2COS_CFG		(UINT32_C(0x38))
101 #define HWRM_QUEUE_COS2BW_QCFG		(UINT32_C(0x39))
102 #define HWRM_QUEUE_COS2BW_CFG		(UINT32_C(0x3a))
103 #define HWRM_VNIC_ALLOC			(UINT32_C(0x40))
104 #define HWRM_VNIC_ALLOC			(UINT32_C(0x40))
105 #define HWRM_VNIC_FREE			(UINT32_C(0x41))
106 #define HWRM_VNIC_CFG			(UINT32_C(0x42))
107 #define HWRM_VNIC_QCFG			(UINT32_C(0x43))
108 #define HWRM_VNIC_TPA_CFG		(UINT32_C(0x44))
109 #define HWRM_VNIC_RSS_CFG		(UINT32_C(0x46))
110 #define HWRM_VNIC_RSS_QCFG		(UINT32_C(0x47))
111 #define HWRM_VNIC_PLCMODES_CFG		(UINT32_C(0x48))
112 #define HWRM_VNIC_PLCMODES_QCFG		(UINT32_C(0x49))
113 #define HWRM_VNIC_QCAPS			(UINT32_C(0x4a))
114 #define HWRM_RING_ALLOC			(UINT32_C(0x50))
115 #define HWRM_RING_FREE			(UINT32_C(0x51))
116 #define HWRM_RING_CMPL_RING_QAGGINT_PARAMS	(UINT32_C(0x52))
117 #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS	(UINT32_C(0x53))
118 #define HWRM_RING_RESET			(UINT32_C(0x5e))
119 #define HWRM_RING_GRP_ALLOC		(UINT32_C(0x60))
120 #define HWRM_RING_GRP_FREE		(UINT32_C(0x61))
121 #define HWRM_VNIC_RSS_COS_LB_CTX_ALLOC	(UINT32_C(0x70))
122 #define HWRM_VNIC_RSS_COS_LB_CTX_FREE	(UINT32_C(0x71))
123 #define HWRM_CFA_L2_FILTER_ALLOC	(UINT32_C(0x90))
124 #define HWRM_CFA_L2_FILTER_FREE		(UINT32_C(0x91))
125 #define HWRM_CFA_L2_FILTER_CFG		(UINT32_C(0x92))
126 #define HWRM_CFA_L2_SET_RX_MASK		(UINT32_C(0x93))
127     /* Reserved for future use */
128 #define HWRM_CFA_VLAN_ANTISPOOF_CFG	(UINT32_C(0x94))
129 #define HWRM_CFA_TUNNEL_FILTER_ALLOC	(UINT32_C(0x95))
130 #define HWRM_CFA_TUNNEL_FILTER_FREE	(UINT32_C(0x96))
131 #define HWRM_CFA_NTUPLE_FILTER_ALLOC	(UINT32_C(0x99))
132 #define HWRM_CFA_NTUPLE_FILTER_FREE	(UINT32_C(0x9a))
133 #define HWRM_CFA_NTUPLE_FILTER_CFG	(UINT32_C(0x9b))
134 #define HWRM_CFA_EM_FLOW_ALLOC		(UINT32_C(0x9c))
135 #define HWRM_CFA_EM_FLOW_FREE		(UINT32_C(0x9d))
136 #define HWRM_CFA_EM_FLOW_CFG		(UINT32_C(0x9e))
137 #define HWRM_TUNNEL_DST_PORT_QUERY	(UINT32_C(0xa0))
138 #define HWRM_TUNNEL_DST_PORT_ALLOC	(UINT32_C(0xa1))
139 #define HWRM_TUNNEL_DST_PORT_FREE	(UINT32_C(0xa2))
140 #define HWRM_STAT_CTX_ALLOC		(UINT32_C(0xb0))
141 #define HWRM_STAT_CTX_FREE		(UINT32_C(0xb1))
142 #define HWRM_STAT_CTX_QUERY		(UINT32_C(0xb2))
143 #define HWRM_STAT_CTX_CLR_STATS		(UINT32_C(0xb3))
144 #define HWRM_FW_RESET			(UINT32_C(0xc0))
145 #define HWRM_FW_QSTATUS			(UINT32_C(0xc1))
146 #define HWRM_EXEC_FWD_RESP		(UINT32_C(0xd0))
147 #define HWRM_REJECT_FWD_RESP		(UINT32_C(0xd1))
148 #define HWRM_FWD_RESP			(UINT32_C(0xd2))
149 #define HWRM_FWD_ASYNC_EVENT_CMPL	(UINT32_C(0xd3))
150 #define HWRM_TEMP_MONITOR_QUERY		(UINT32_C(0xe0))
151 #define HWRM_WOL_FILTER_ALLOC		(UINT32_C(0xf0))
152 #define HWRM_WOL_FILTER_FREE		(UINT32_C(0xf1))
153 #define HWRM_WOL_FILTER_QCFG		(UINT32_C(0xf2))
154 #define HWRM_WOL_REASON_QCFG		(UINT32_C(0xf3))
155 #define HWRM_DBG_DUMP			(UINT32_C(0xff14))
156 #define HWRM_NVM_VALIDATE_OPTION	(UINT32_C(0xffef))
157 #define HWRM_NVM_FLUSH			(UINT32_C(0xfff0))
158 #define HWRM_NVM_GET_VARIABLE		(UINT32_C(0xfff1))
159 #define HWRM_NVM_SET_VARIABLE		(UINT32_C(0xfff2))
160 #define HWRM_NVM_INSTALL_UPDATE		(UINT32_C(0xfff3))
161 #define HWRM_NVM_MODIFY			(UINT32_C(0xfff4))
162 #define HWRM_NVM_VERIFY_UPDATE		(UINT32_C(0xfff5))
163 #define HWRM_NVM_GET_DEV_INFO		(UINT32_C(0xfff6))
164 #define HWRM_NVM_ERASE_DIR_ENTRY	(UINT32_C(0xfff7))
165 #define HWRM_NVM_MOD_DIR_ENTRY		(UINT32_C(0xfff8))
166 #define HWRM_NVM_FIND_DIR_ENTRY		(UINT32_C(0xfff9))
167 #define HWRM_NVM_GET_DIR_ENTRIES	(UINT32_C(0xfffa))
168 #define HWRM_NVM_GET_DIR_INFO		(UINT32_C(0xfffb))
169 #define HWRM_NVM_RAW_DUMP		(UINT32_C(0xfffc))
170 #define HWRM_NVM_READ			(UINT32_C(0xfffd))
171 #define HWRM_NVM_WRITE			(UINT32_C(0xfffe))
172 #define HWRM_NVM_RAW_WRITE_BLK		(UINT32_C(0xffff))
173 
174 /*
175  * Note: The Host Software Interface (HSI) and Hardware Resource Manager (HWRM)
176  * specification describes the data structures used in Ethernet packet or RDMA
177  * message data transfers as well as an abstract interface for managing Ethernet
178  * NIC hardware resources.
179  */
180 /* Ethernet Data path Host Structures */
181 /*
182  * Description: The following three sections document the host structures used
183  * between device and software drivers for communicating Ethernet packets.
184  */
185 /* BD Ring Structures */
186 /*
187  * Description: This structure is used to inform the NIC of a location for and
188  * an aggregation buffer that will be used for packet data that is received. An
189  * aggregation buffer creates a different kind of completion operation for a
190  * packet where a variable number of BDs may be used to place the packet in the
191  * host. RX Rings that have aggregation buffers are known as aggregation rings
192  * and must contain only aggregation buffers.
193  */
194 /* Short TX BD	(16 bytes) */
195 struct tx_bd_short {
196 	uint16_t flags_type;
197 	/*
198 	 * All bits in this field must be valid on the first BD of a
199 	 * packet. Only the packet_end bit must be valid for the
200 	 * remaining BDs of a packet.
201 	 */
202 	/* This value identifies the type of buffer descriptor. */
203 	#define TX_BD_SHORT_TYPE_MASK	UINT32_C(0x3f)
204 	#define TX_BD_SHORT_TYPE_SFT	0
205 	/*
206 	 * Indicates that this BD is 16B long and is
207 	 * used for normal L2 packet transmission.
208 	 */
209 	#define TX_BD_SHORT_TYPE_TX_BD_SHORT	UINT32_C(0x0)
210 	/*
211 	 * If set to 1, the packet ends with the data in the buffer
212 	 * pointed to by this descriptor. This flag must be valid on
213 	 * every BD.
214 	 */
215 	#define TX_BD_SHORT_FLAGS_PACKET_END	UINT32_C(0x40)
216 	/*
217 	 * If set to 1, the device will not generate a completion for
218 	 * this transmit packet unless there is an error in it's
219 	 * processing. If this bit is set to 0, then the packet will be
220 	 * completed normally. This bit must be valid only on the first
221 	 * BD of a packet.
222 	 */
223 	#define TX_BD_SHORT_FLAGS_NO_CMPL	UINT32_C(0x80)
224 	/*
225 	 * This value indicates how many 16B BD locations are consumed
226 	 * in the ring by this packet. A value of 1 indicates that this
227 	 * BD is the only BD	(and that the it is a short BD). A value of
228 	 * 3 indicates either 3 short BDs or 1 long BD and one short BD
229 	 * in the packet. A value of 0 indicates that there are 32 BD
230 	 * locations in the packet	(the maximum). This field is valid
231 	 * only on the first BD of a packet.
232 	 */
233 	#define TX_BD_SHORT_FLAGS_BD_CNT_MASK	UINT32_C(0x1f00)
234 	#define TX_BD_SHORT_FLAGS_BD_CNT_SFT	8
235 	/*
236 	 * This value is a hint for the length of the entire packet. It
237 	 * is used by the chip to optimize internal processing. The
238 	 * packet will be dropped if the hint is too short. This field
239 	 * is valid only on the first BD of a packet.
240 	 */
241 	#define TX_BD_SHORT_FLAGS_LHINT_MASK	UINT32_C(0x6000)
242 	#define TX_BD_SHORT_FLAGS_LHINT_SFT	13
243 	/* indicates packet length < 512B */
244 	#define TX_BD_SHORT_FLAGS_LHINT_LT512	(UINT32_C(0x0) << 13)
245 	/* indicates 512 <= packet length < 1KB */
246 	#define TX_BD_SHORT_FLAGS_LHINT_LT1K	(UINT32_C(0x1) << 13)
247 	/* indicates 1KB <= packet length < 2KB */
248 	#define TX_BD_SHORT_FLAGS_LHINT_LT2K	(UINT32_C(0x2) << 13)
249 	/* indicates packet length >= 2KB */
250 	#define TX_BD_SHORT_FLAGS_LHINT_GTE2K	(UINT32_C(0x3) << 13)
251 	#define TX_BD_SHORT_FLAGS_LHINT_LAST \
252 		TX_BD_SHORT_FLAGS_LHINT_GTE2K
253 	/*
254 	 * If set to 1, the device immediately updates the Send Consumer
255 	 * Index after the buffer associated with this descriptor has
256 	 * been transferred via DMA to NIC memory from host memory. An
257 	 * interrupt may or may not be generated according to the state
258 	 * of the interrupt avoidance mechanisms. If this bit is set to
259 	 * 0, then the Consumer Index is only updated as soon as one of
260 	 * the host interrupt coalescing conditions has been met. This
261 	 * bit must be valid on the first BD of a packet.
262 	 */
263 	#define TX_BD_SHORT_FLAGS_COAL_NOW	UINT32_C(0x8000)
264 	/*
265 	 * All bits in this field must be valid on the first BD of a
266 	 * packet. Only the packet_end bit must be valid for the
267 	 * remaining BDs of a packet.
268 	 */
269 	#define TX_BD_SHORT_FLAGS_MASK	UINT32_C(0xffc0)
270 	#define TX_BD_SHORT_FLAGS_SFT	6
271 	uint16_t len;
272 	/*
273 	 * This is the length of the host physical buffer this BD
274 	 * describes in bytes. This field must be valid on all BDs of a
275 	 * packet.
276 	 */
277 	uint32_t opaque;
278 	/*
279 	 * The opaque data field is pass through to the completion and
280 	 * can be used for any data that the driver wants to associate
281 	 * with the transmit BD. This field must be valid on the first
282 	 * BD of a packet.
283 	 */
284 	uint64_t addr;
285 	/*
286 	 * This is the host physical address for the portion of the
287 	 * packet described by this TX BD. This value must be valid on
288 	 * all BDs of a packet.
289 	 */
290 } __attribute__((packed));
291 
292 /* Long TX BD	(32 bytes split to 2 16-byte struct) */
293 struct tx_bd_long {
294 	uint16_t flags_type;
295 	/*
296 	 * All bits in this field must be valid on the first BD of a
297 	 * packet. Only the packet_end bit must be valid for the
298 	 * remaining BDs of a packet.
299 	 */
300 	/* This value identifies the type of buffer descriptor. */
301 	#define TX_BD_LONG_TYPE_MASK	UINT32_C(0x3f)
302 	#define TX_BD_LONG_TYPE_SFT	0
303 	/*
304 	 * Indicates that this BD is 32B long and is
305 	 * used for normal L2 packet transmission.
306 	 */
307 	#define TX_BD_LONG_TYPE_TX_BD_LONG	UINT32_C(0x10)
308 	/*
309 	 * If set to 1, the packet ends with the data in the buffer
310 	 * pointed to by this descriptor. This flag must be valid on
311 	 * every BD.
312 	 */
313 	#define TX_BD_LONG_FLAGS_PACKET_END	UINT32_C(0x40)
314 	/*
315 	 * If set to 1, the device will not generate a completion for
316 	 * this transmit packet unless there is an error in it's
317 	 * processing. If this bit is set to 0, then the packet will be
318 	 * completed normally. This bit must be valid only on the first
319 	 * BD of a packet.
320 	 */
321 	#define TX_BD_LONG_FLAGS_NO_CMPL	UINT32_C(0x80)
322 	/*
323 	 * This value indicates how many 16B BD locations are consumed
324 	 * in the ring by this packet. A value of 1 indicates that this
325 	 * BD is the only BD	(and that the it is a short BD). A value of
326 	 * 3 indicates either 3 short BDs or 1 long BD and one short BD
327 	 * in the packet. A value of 0 indicates that there are 32 BD
328 	 * locations in the packet	(the maximum). This field is valid
329 	 * only on the first BD of a packet.
330 	 */
331 	#define TX_BD_LONG_FLAGS_BD_CNT_MASK	UINT32_C(0x1f00)
332 	#define TX_BD_LONG_FLAGS_BD_CNT_SFT	8
333 	/*
334 	 * This value is a hint for the length of the entire packet. It
335 	 * is used by the chip to optimize internal processing. The
336 	 * packet will be dropped if the hint is too short. This field
337 	 * is valid only on the first BD of a packet.
338 	 */
339 	#define TX_BD_LONG_FLAGS_LHINT_MASK	UINT32_C(0x6000)
340 	#define TX_BD_LONG_FLAGS_LHINT_SFT	13
341 	/* indicates packet length < 512B */
342 	#define TX_BD_LONG_FLAGS_LHINT_LT512	(UINT32_C(0x0) << 13)
343 	/* indicates 512 <= packet length < 1KB */
344 	#define TX_BD_LONG_FLAGS_LHINT_LT1K	(UINT32_C(0x1) << 13)
345 	/* indicates 1KB <= packet length < 2KB */
346 	#define TX_BD_LONG_FLAGS_LHINT_LT2K	(UINT32_C(0x2) << 13)
347 	/* indicates packet length >= 2KB */
348 	#define TX_BD_LONG_FLAGS_LHINT_GTE2K	(UINT32_C(0x3) << 13)
349 	#define TX_BD_LONG_FLAGS_LHINT_LAST \
350 		TX_BD_LONG_FLAGS_LHINT_GTE2K
351 	/*
352 	 * If set to 1, the device immediately updates the Send Consumer
353 	 * Index after the buffer associated with this descriptor has
354 	 * been transferred via DMA to NIC memory from host memory. An
355 	 * interrupt may or may not be generated according to the state
356 	 * of the interrupt avoidance mechanisms. If this bit is set to
357 	 * 0, then the Consumer Index is only updated as soon as one of
358 	 * the host interrupt coalescing conditions has been met. This
359 	 * bit must be valid on the first BD of a packet.
360 	 */
361 	#define TX_BD_LONG_FLAGS_COAL_NOW	UINT32_C(0x8000)
362 	/*
363 	 * All bits in this field must be valid on the first BD of a
364 	 * packet. Only the packet_end bit must be valid for the
365 	 * remaining BDs of a packet.
366 	 */
367 	#define TX_BD_LONG_FLAGS_MASK	UINT32_C(0xffc0)
368 	#define TX_BD_LONG_FLAGS_SFT	6
369 	uint16_t len;
370 	/*
371 	 * This is the length of the host physical buffer this BD
372 	 * describes in bytes. This field must be valid on all BDs of a
373 	 * packet.
374 	 */
375 	uint32_t opaque;
376 	/*
377 	 * The opaque data field is pass through to the completion and
378 	 * can be used for any data that the driver wants to associate
379 	 * with the transmit BD. This field must be valid on the first
380 	 * BD of a packet.
381 	 */
382 	uint64_t addr;
383 	/*
384 	 * This is the host physical address for the portion of the
385 	 * packet described by this TX BD. This value must be valid on
386 	 * all BDs of a packet.
387 	 */
388 } __attribute__((packed));
389 
390 /* last 16 bytes of Long TX BD */
391 struct tx_bd_long_hi {
392 	uint16_t lflags;
393 	/*
394 	 * All bits in this field must be valid on the first BD of a
395 	 * packet. Their value on other BDs of the packet will be
396 	 * ignored.
397 	 */
398 	/*
399 	 * If set to 1, the controller replaces the TCP/UPD checksum
400 	 * fields of normal TCP/UPD checksum, or the inner TCP/UDP
401 	 * checksum field of the encapsulated TCP/UDP packets with the
402 	 * hardware calculated TCP/UDP checksum for the packet
403 	 * associated with this descriptor. The flag is ignored if the
404 	 * LSO flag is set. This bit must be valid on the first BD of a
405 	 * packet.
406 	 */
407 	#define TX_BD_LONG_LFLAGS_TCP_UDP_CHKSUM	UINT32_C(0x1)
408 	/*
409 	 * If set to 1, the controller replaces the IP checksum of the
410 	 * normal packets, or the inner IP checksum of the encapsulated
411 	 * packets with the hardware calculated IP checksum for the
412 	 * packet associated with this descriptor. This bit must be
413 	 * valid on the first BD of a packet.
414 	 */
415 	#define TX_BD_LONG_LFLAGS_IP_CHKSUM	UINT32_C(0x2)
416 	/*
417 	 * If set to 1, the controller will not append an Ethernet CRC
418 	 * to the end of the frame. This bit must be valid on the first
419 	 * BD of a packet. Packet must be 64B or longer when this flag
420 	 * is set. It is not useful to use this bit with any form of TX
421 	 * offload such as CSO or LSO. The intent is that the packet
422 	 * from the host already has a valid Ethernet CRC on the packet.
423 	 */
424 	#define TX_BD_LONG_LFLAGS_NOCRC	UINT32_C(0x4)
425 	/*
426 	 * If set to 1, the device will record the time at which the
427 	 * packet was actually transmitted at the TX MAC. This bit must
428 	 * be valid on the first BD of a packet.
429 	 */
430 	#define TX_BD_LONG_LFLAGS_STAMP	UINT32_C(0x8)
431 	/*
432 	 * If set to 1, The controller replaces the tunnel IP checksum
433 	 * field with hardware calculated IP checksum for the IP header
434 	 * of the packet associated with this descriptor. For outer UDP
435 	 * checksum, global outer UDP checksum TE_NIC register needs to
436 	 * be enabled. If the global outer UDP checksum TE_NIC register
437 	 * bit is set, outer UDP checksum will be calculated for the
438 	 * following cases: 1. Packets with tcp_udp_chksum flag set to
439 	 * offload checksum for inner packet AND the inner packet is
440 	 * TCP/UDP. If the inner packet is ICMP for example	(non-
441 	 * TCP/UDP), even if the tcp_udp_chksum is set, the outer UDP
442 	 * checksum will not be calculated. 2. Packets with lso flag set
443 	 * which implies inner TCP checksum calculation as part of LSO
444 	 * operation.
445 	 */
446 	#define TX_BD_LONG_LFLAGS_T_IP_CHKSUM	UINT32_C(0x10)
447 	/*
448 	 * If set to 1, the device will treat this packet with LSO(Large
449 	 * Send Offload) processing for both normal or encapsulated
450 	 * packets, which is a form of TCP segmentation. When this bit
451 	 * is 1, the hdr_size and mss fields must be valid. The driver
452 	 * doesn't need to set t_ip_chksum, ip_chksum, and
453 	 * tcp_udp_chksum flags since the controller will replace the
454 	 * appropriate checksum fields for segmented packets. When this
455 	 * bit is 1, the hdr_size and mss fields must be valid.
456 	 */
457 	#define TX_BD_LONG_LFLAGS_LSO	UINT32_C(0x20)
458 	/*
459 	 * If set to zero when LSO is '1', then the IPID will be treated
460 	 * as a 16b number and will be wrapped if it exceeds a value of
461 	 * 0xffff. If set to one when LSO is '1', then the IPID will be
462 	 * treated as a 15b number and will be wrapped if it exceeds a
463 	 * value 0f 0x7fff.
464 	 */
465 	#define TX_BD_LONG_LFLAGS_IPID_FMT	UINT32_C(0x40)
466 	/*
467 	 * If set to zero when LSO is '1', then the IPID of the tunnel
468 	 * IP header will not be modified during LSO operations. If set
469 	 * to one when LSO is '1', then the IPID of the tunnel IP header
470 	 * will be incremented for each subsequent segment of an LSO
471 	 * operation. The flag is ignored if the LSO packet is a normal
472 	 *	(non-tunneled) TCP packet.
473 	 */
474 	#define TX_BD_LONG_LFLAGS_T_IPID	UINT32_C(0x80)
475 	/*
476 	 * If set to '1', then the RoCE ICRC will be appended to the
477 	 * packet. Packet must be a valid RoCE format packet.
478 	 */
479 	#define TX_BD_LONG_LFLAGS_ROCE_CRC	UINT32_C(0x100)
480 	/*
481 	 * If set to '1', then the FCoE CRC will be appended to the
482 	 * packet. Packet must be a valid FCoE format packet.
483 	 */
484 	#define TX_BD_LONG_LFLAGS_FCOE_CRC	UINT32_C(0x200)
485 	uint16_t hdr_size;
486 	/*
487 	 * When LSO is '1', this field must contain the offset of the
488 	 * TCP payload from the beginning of the packet in as 16b words.
489 	 * In case of encapsulated/tunneling packet, this field contains
490 	 * the offset of the inner TCP payload from beginning of the
491 	 * packet as 16-bit words. This value must be valid on the first
492 	 * BD of a packet.
493 	 */
494 	#define TX_BD_LONG_HDR_SIZE_MASK	UINT32_C(0x1ff)
495 	#define TX_BD_LONG_HDR_SIZE_SFT	0
496 	uint32_t mss;
497 	/*
498 	 * This is the MSS value that will be used to do the LSO
499 	 * processing. The value is the length in bytes of the TCP
500 	 * payload for each segment generated by the LSO operation. This
501 	 * value must be valid on the first BD of a packet.
502 	 */
503 	#define TX_BD_LONG_MSS_MASK	UINT32_C(0x7fff)
504 	#define TX_BD_LONG_MSS_SFT	0
505 	uint16_t unused_2;
506 	uint16_t cfa_action;
507 	/*
508 	 * This value selects a CFA action to perform on the packet. Set
509 	 * this value to zero if no CFA action is desired. This value
510 	 * must be valid on the first BD of a packet.
511 	 */
512 	uint32_t cfa_meta;
513 	/*
514 	 * This value is action meta-data that defines CFA edit
515 	 * operations that are done in addition to any action editing.
516 	 */
517 	/* When key=1, This is the VLAN tag VID value. */
518 	#define TX_BD_LONG_CFA_META_VLAN_VID_MASK	UINT32_C(0xfff)
519 	#define TX_BD_LONG_CFA_META_VLAN_VID_SFT	0
520 	/* When key=1, This is the VLAN tag DE value. */
521 	#define TX_BD_LONG_CFA_META_VLAN_DE	UINT32_C(0x1000)
522 	/* When key=1, This is the VLAN tag PRI value. */
523 	#define TX_BD_LONG_CFA_META_VLAN_PRI_MASK	UINT32_C(0xe000)
524 	#define TX_BD_LONG_CFA_META_VLAN_PRI_SFT	13
525 	/* When key=1, This is the VLAN tag TPID select value. */
526 	#define TX_BD_LONG_CFA_META_VLAN_TPID_MASK	UINT32_C(0x70000)
527 	#define TX_BD_LONG_CFA_META_VLAN_TPID_SFT	16
528 	/* 0x88a8 */
529 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID88A8	(UINT32_C(0x0) << 16)
530 	/* 0x8100 */
531 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID8100	(UINT32_C(0x1) << 16)
532 	/* 0x9100 */
533 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9100	(UINT32_C(0x2) << 16)
534 	/* 0x9200 */
535 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9200	(UINT32_C(0x3) << 16)
536 	/* 0x9300 */
537 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9300	(UINT32_C(0x4) << 16)
538 	/* Value programmed in CFA VLANTPID register. */
539 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPIDCFG	(UINT32_C(0x5) << 16)
540 	#define TX_BD_LONG_CFA_META_VLAN_TPID_LAST \
541 		TX_BD_LONG_CFA_META_VLAN_TPID_TPIDCFG
542 	/* When key=1, This is the VLAN tag TPID select value. */
543 	#define TX_BD_LONG_CFA_META_VLAN_RESERVED_MASK	UINT32_C(0xff80000)
544 	#define TX_BD_LONG_CFA_META_VLAN_RESERVED_SFT	19
545 	/*
546 	 * This field identifies the type of edit to be performed on the
547 	 * packet. This value must be valid on the first BD of a packet.
548 	 */
549 	#define TX_BD_LONG_CFA_META_KEY_MASK	UINT32_C(0xf0000000)
550 	#define TX_BD_LONG_CFA_META_KEY_SFT	28
551 	/* No editing */
552 	#define TX_BD_LONG_CFA_META_KEY_NONE	(UINT32_C(0x0) << 28)
553 	/*
554 	 * - meta[17:16] - TPID select value	(0 =
555 	 * 0x8100). - meta[15:12] - PRI/DE value. -
556 	 * meta[11:0] - VID value.
557 	 */
558 	#define TX_BD_LONG_CFA_META_KEY_VLAN_TAG	(UINT32_C(0x1) << 28)
559 	#define TX_BD_LONG_CFA_META_KEY_LAST \
560 		TX_BD_LONG_CFA_META_KEY_VLAN_TAG
561 } __attribute__((packed));
562 
563 /* RX Producer Packet BD	(16 bytes) */
564 struct rx_prod_pkt_bd {
565 	uint16_t flags_type;
566 	/* This value identifies the type of buffer descriptor. */
567 	#define RX_PROD_PKT_BD_TYPE_MASK	UINT32_C(0x3f)
568 	#define RX_PROD_PKT_BD_TYPE_SFT	0
569 	/*
570 	 * Indicates that this BD is 16B long and is an
571 	 * RX Producer	(ie. empty) buffer descriptor.
572 	 */
573 	#define RX_PROD_PKT_BD_TYPE_RX_PROD_PKT	UINT32_C(0x4)
574 	/*
575 	 * If set to 1, the packet will be placed at the address plus
576 	 * 2B. The 2 Bytes of padding will be written as zero.
577 	 */
578 	/*
579 	 * This is intended to be used when the host buffer is cache-
580 	 * line aligned to produce packets that are easy to parse in
581 	 * host memory while still allowing writes to be cache line
582 	 * aligned.
583 	 */
584 	#define RX_PROD_PKT_BD_FLAGS_SOP_PAD	UINT32_C(0x40)
585 	/*
586 	 * If set to 1, the packet write will be padded out to the
587 	 * nearest cache-line with zero value padding.
588 	 */
589 	/*
590 	 * If receive buffers start/end on cache-line boundaries, this
591 	 * feature will ensure that all data writes on the PCI bus
592 	 * start/end on cache line boundaries.
593 	 */
594 	#define RX_PROD_PKT_BD_FLAGS_EOP_PAD	UINT32_C(0x80)
595 	/*
596 	 * This value is the number of additional buffers in the ring
597 	 * that describe the buffer space to be consumed for the this
598 	 * packet. If the value is zero, then the packet must fit within
599 	 * the space described by this BD. If this value is 1 or more,
600 	 * it indicates how many additional "buffer" BDs are in the ring
601 	 * immediately following this BD to be used for the same network
602 	 * packet. Even if the packet to be placed does not need all the
603 	 * additional buffers, they will be consumed anyway.
604 	 */
605 	#define RX_PROD_PKT_BD_FLAGS_BUFFERS_MASK	UINT32_C(0x300)
606 	#define RX_PROD_PKT_BD_FLAGS_BUFFERS_SFT	8
607 	#define RX_PROD_PKT_BD_FLAGS_MASK	UINT32_C(0xffc0)
608 	#define RX_PROD_PKT_BD_FLAGS_SFT	6
609 	uint16_t len;
610 	/*
611 	 * This is the length in Bytes of the host physical buffer where
612 	 * data for the packet may be placed in host memory.
613 	 */
614 	/*
615 	 * While this is a Byte resolution value, it is often
616 	 * advantageous to ensure that the buffers provided end on a
617 	 * host cache line.
618 	 */
619 	uint32_t opaque;
620 	/*
621 	 * The opaque data field is pass through to the completion and
622 	 * can be used for any data that the driver wants to associate
623 	 * with this receive buffer set.
624 	 */
625 	uint64_t addr;
626 	/*
627 	 * This is the host physical address where data for the packet
628 	 * may by placed in host memory.
629 	 */
630 	/*
631 	 * While this is a Byte resolution value, it is often
632 	 * advantageous to ensure that the buffers provide start on a
633 	 * host cache line.
634 	 */
635 } __attribute__((packed));
636 
637 /* Completion Ring Structures */
638 /* Note: This structure is used by the HWRM to communicate HWRM Error. */
639 /* Base Completion Record	(16 bytes) */
640 struct cmpl_base {
641 	uint16_t type;
642 	/* unused is 10 b */
643 	/*
644 	 * This field indicates the exact type of the completion. By
645 	 * convention, the LSB identifies the length of the record in
646 	 * 16B units. Even values indicate 16B records. Odd values
647 	 * indicate 32B records.
648 	 */
649 	#define CMPL_BASE_TYPE_MASK	UINT32_C(0x3f)
650 	#define CMPL_BASE_TYPE_SFT	0
651 	/* TX L2 completion: Completion of TX packet. Length = 16B */
652 	#define CMPL_BASE_TYPE_TX_L2	UINT32_C(0x0)
653 	/*
654 	 * RX L2 completion: Completion of and L2 RX
655 	 * packet. Length = 32B
656 	 */
657 	#define CMPL_BASE_TYPE_RX_L2	UINT32_C(0x11)
658 	/*
659 	 * RX Aggregation Buffer completion : Completion
660 	 * of an L2 aggregation buffer in support of
661 	 * TPA, HDS, or Jumbo packet completion. Length
662 	 * = 16B
663 	 */
664 	#define CMPL_BASE_TYPE_RX_AGG	UINT32_C(0x12)
665 	/*
666 	 * RX L2 TPA Start Completion: Completion at the
667 	 * beginning of a TPA operation. Length = 32B
668 	 */
669 	#define CMPL_BASE_TYPE_RX_TPA_START	UINT32_C(0x13)
670 	/*
671 	 * RX L2 TPA End Completion: Completion at the
672 	 * end of a TPA operation. Length = 32B
673 	 */
674 	#define CMPL_BASE_TYPE_RX_TPA_END	UINT32_C(0x15)
675 	/*
676 	 * Statistics Ejection Completion: Completion of
677 	 * statistics data ejection buffer. Length = 16B
678 	 */
679 	#define CMPL_BASE_TYPE_STAT_EJECT	UINT32_C(0x1a)
680 	/* HWRM Command Completion: Completion of an HWRM command. */
681 	#define CMPL_BASE_TYPE_HWRM_DONE	UINT32_C(0x20)
682 	/* Forwarded HWRM Request */
683 	#define CMPL_BASE_TYPE_HWRM_FWD_REQ	UINT32_C(0x22)
684 	/* Forwarded HWRM Response */
685 	#define CMPL_BASE_TYPE_HWRM_FWD_RESP	UINT32_C(0x24)
686 	/* HWRM Asynchronous Event Information */
687 	#define CMPL_BASE_TYPE_HWRM_ASYNC_EVENT	UINT32_C(0x2e)
688 	/* CQ Notification */
689 	#define CMPL_BASE_TYPE_CQ_NOTIFICATION	UINT32_C(0x30)
690 	/* SRQ Threshold Event */
691 	#define CMPL_BASE_TYPE_SRQ_EVENT	UINT32_C(0x32)
692 	/* DBQ Threshold Event */
693 	#define CMPL_BASE_TYPE_DBQ_EVENT	UINT32_C(0x34)
694 	/* QP Async Notification */
695 	#define CMPL_BASE_TYPE_QP_EVENT	UINT32_C(0x38)
696 	/* Function Async Notification */
697 	#define CMPL_BASE_TYPE_FUNC_EVENT	UINT32_C(0x3a)
698 	/* unused is 10 b */
699 	uint16_t info1;
700 	/* info1 is 16 b */
701 	uint32_t info2;
702 	/* info2 is 32 b */
703 	uint32_t info3_v;
704 	/* info3 is 31 b */
705 	/*
706 	 * This value is written by the NIC such that it will be
707 	 * different for each pass through the completion queue. The
708 	 * even passes will write 1. The odd passes will write 0.
709 	 */
710 	#define CMPL_BASE_V	UINT32_C(0x1)
711 	/* info3 is 31 b */
712 	#define CMPL_BASE_INFO3_MASK	UINT32_C(0xfffffffe)
713 	#define CMPL_BASE_INFO3_SFT	1
714 	uint32_t info4;
715 	/* info4 is 32 b */
716 } __attribute__((packed));
717 
718 /* TX Completion Record	(16 bytes) */
719 struct tx_cmpl {
720 	uint16_t flags_type;
721 	/*
722 	 * This field indicates the exact type of the completion. By
723 	 * convention, the LSB identifies the length of the record in
724 	 * 16B units. Even values indicate 16B records. Odd values
725 	 * indicate 32B records.
726 	 */
727 	#define TX_CMPL_TYPE_MASK	UINT32_C(0x3f)
728 	#define TX_CMPL_TYPE_SFT	0
729 	/* TX L2 completion: Completion of TX packet. Length = 16B */
730 	#define TX_CMPL_TYPE_TX_L2	UINT32_C(0x0)
731 	/*
732 	 * When this bit is '1', it indicates a packet that has an error
733 	 * of some type. Type of error is indicated in error_flags.
734 	 */
735 	#define TX_CMPL_FLAGS_ERROR	UINT32_C(0x40)
736 	/*
737 	 * When this bit is '1', it indicates that the packet completed
738 	 * was transmitted using the push acceleration data provided by
739 	 * the driver. When this bit is '0', it indicates that the
740 	 * packet had not push acceleration data written or was executed
741 	 * as a normal packet even though push data was provided.
742 	 */
743 	#define TX_CMPL_FLAGS_PUSH	UINT32_C(0x80)
744 	#define TX_CMPL_FLAGS_MASK	UINT32_C(0xffc0)
745 	#define TX_CMPL_FLAGS_SFT	6
746 	uint16_t unused_0;
747 	/* unused1 is 16 b */
748 	uint32_t opaque;
749 	/*
750 	 * This is a copy of the opaque field from the first TX BD of
751 	 * this transmitted packet.
752 	 */
753 	uint16_t errors_v;
754 	/*
755 	 * This value is written by the NIC such that it will be
756 	 * different for each pass through the completion queue. The
757 	 * even passes will write 1. The odd passes will write 0.
758 	 */
759 	#define TX_CMPL_V	UINT32_C(0x1)
760 	/*
761 	 * This error indicates that there was some sort of problem with
762 	 * the BDs for the packet.
763 	 */
764 	#define TX_CMPL_ERRORS_BUFFER_ERROR_MASK	UINT32_C(0xe)
765 	#define TX_CMPL_ERRORS_BUFFER_ERROR_SFT	1
766 	/* No error */
767 	#define TX_CMPL_ERRORS_BUFFER_ERROR_NO_ERROR	(UINT32_C(0x0) << 1)
768 	/* Bad Format: BDs were not formatted correctly. */
769 	#define TX_CMPL_ERRORS_BUFFER_ERROR_BAD_FMT	(UINT32_C(0x2) << 1)
770 	#define TX_CMPL_ERRORS_BUFFER_ERROR_LAST \
771 		TX_CMPL_ERRORS_BUFFER_ERROR_BAD_FMT
772 	/*
773 	 * When this bit is '1', it indicates that the length of the
774 	 * packet was zero. No packet was transmitted.
775 	 */
776 	#define TX_CMPL_ERRORS_ZERO_LENGTH_PKT	UINT32_C(0x10)
777 	/*
778 	 * When this bit is '1', it indicates that the packet was longer
779 	 * than the programmed limit in TDI. No packet was transmitted.
780 	 */
781 	#define TX_CMPL_ERRORS_EXCESSIVE_BD_LENGTH	UINT32_C(0x20)
782 	/*
783 	 * When this bit is '1', it indicates that one or more of the
784 	 * BDs associated with this packet generated a PCI error. This
785 	 * probably means the address was not valid.
786 	 */
787 	#define TX_CMPL_ERRORS_DMA_ERROR	UINT32_C(0x40)
788 	/*
789 	 * When this bit is '1', it indicates that the packet was longer
790 	 * than indicated by the hint. No packet was transmitted.
791 	 */
792 	#define TX_CMPL_ERRORS_HINT_TOO_SHORT	UINT32_C(0x80)
793 	/*
794 	 * When this bit is '1', it indicates that the packet was
795 	 * dropped due to Poison TLP error on one or more of the TLPs in
796 	 * the PXP completion.
797 	 */
798 	#define TX_CMPL_ERRORS_POISON_TLP_ERROR	UINT32_C(0x100)
799 	#define TX_CMPL_ERRORS_MASK	UINT32_C(0xfffe)
800 	#define TX_CMPL_ERRORS_SFT	1
801 	uint16_t unused_1;
802 	/* unused2 is 16 b */
803 	uint32_t unused_2;
804 	/* unused3 is 32 b */
805 } __attribute__((packed));
806 
807 /* RX Packet Completion Record	(32 bytes split to 2 16-byte struct) */
808 struct rx_pkt_cmpl {
809 	uint16_t flags_type;
810 	/*
811 	 * This field indicates the exact type of the completion. By
812 	 * convention, the LSB identifies the length of the record in
813 	 * 16B units. Even values indicate 16B records. Odd values
814 	 * indicate 32B records.
815 	 */
816 	#define RX_PKT_CMPL_TYPE_MASK	UINT32_C(0x3f)
817 	#define RX_PKT_CMPL_TYPE_SFT	0
818 	/*
819 	 * RX L2 completion: Completion of and L2 RX
820 	 * packet. Length = 32B
821 	 */
822 	#define RX_PKT_CMPL_TYPE_RX_L2			UINT32_C(0x11)
823 	/*
824 	 * When this bit is '1', it indicates a packet that has an error
825 	 * of some type. Type of error is indicated in error_flags.
826 	 */
827 	#define RX_PKT_CMPL_FLAGS_ERROR	UINT32_C(0x40)
828 	/* This field indicates how the packet was placed in the buffer. */
829 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_MASK	UINT32_C(0x380)
830 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_SFT	7
831 	/* Normal: Packet was placed using normal algorithm. */
832 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_NORMAL	(UINT32_C(0x0) << 7)
833 	/* Jumbo: Packet was placed using jumbo algorithm. */
834 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_JUMBO	(UINT32_C(0x1) << 7)
835 	/*
836 	 * Header/Data Separation: Packet was placed
837 	 * using Header/Data separation algorithm. The
838 	 * separation location is indicated by the itype
839 	 * field.
840 	 */
841 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_HDS	(UINT32_C(0x2) << 7)
842 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_LAST \
843 		RX_PKT_CMPL_FLAGS_PLACEMENT_HDS
844 	/* This bit is '1' if the RSS field in this completion is valid. */
845 	#define RX_PKT_CMPL_FLAGS_RSS_VALID	UINT32_C(0x400)
846 	/* unused is 1 b */
847 	#define RX_PKT_CMPL_FLAGS_UNUSED	UINT32_C(0x800)
848 	/*
849 	 * This value indicates what the inner packet determined for the
850 	 * packet was.
851 	 */
852 	#define RX_PKT_CMPL_FLAGS_ITYPE_MASK	UINT32_C(0xf000)
853 	#define RX_PKT_CMPL_FLAGS_ITYPE_SFT	12
854 	/* Not Known: Indicates that the packet type was not known. */
855 	#define RX_PKT_CMPL_FLAGS_ITYPE_NOT_KNOWN	(UINT32_C(0x0) << 12)
856 	/*
857 	 * IP Packet: Indicates that the packet was an
858 	 * IP packet, but further classification was not
859 	 * possible.
860 	 */
861 	#define RX_PKT_CMPL_FLAGS_ITYPE_IP	(UINT32_C(0x1) << 12)
862 	/*
863 	 * TCP Packet: Indicates that the packet was IP
864 	 * and TCP. This indicates that the
865 	 * payload_offset field is valid.
866 	 */
867 	#define RX_PKT_CMPL_FLAGS_ITYPE_TCP	(UINT32_C(0x2) << 12)
868 	/*
869 	 * UDP Packet: Indicates that the packet was IP
870 	 * and UDP. This indicates that the
871 	 * payload_offset field is valid.
872 	 */
873 	#define RX_PKT_CMPL_FLAGS_ITYPE_UDP	(UINT32_C(0x3) << 12)
874 	/*
875 	 * FCoE Packet: Indicates that the packet was
876 	 * recognized as a FCoE. This also indicates
877 	 * that the payload_offset field is valid.
878 	 */
879 	#define RX_PKT_CMPL_FLAGS_ITYPE_FCOE	(UINT32_C(0x4) << 12)
880 	/*
881 	 * RoCE Packet: Indicates that the packet was
882 	 * recognized as a RoCE. This also indicates
883 	 * that the payload_offset field is valid.
884 	 */
885 	#define RX_PKT_CMPL_FLAGS_ITYPE_ROCE	(UINT32_C(0x5) << 12)
886 	/*
887 	 * ICMP Packet: Indicates that the packet was
888 	 * recognized as ICMP. This indicates that the
889 	 * payload_offset field is valid.
890 	 */
891 	#define RX_PKT_CMPL_FLAGS_ITYPE_ICMP	(UINT32_C(0x7) << 12)
892 	/*
893 	 * PtP packet wo/timestamp: Indicates that the
894 	 * packet was recognized as a PtP packet.
895 	 */
896 	#define RX_PKT_CMPL_FLAGS_ITYPE_PTP_WO_TIMESTAMP	(UINT32_C(0x8) << 12)
897 	/*
898 	 * PtP packet w/timestamp: Indicates that the
899 	 * packet was recognized as a PtP packet and
900 	 * that a timestamp was taken for the packet.
901 	 */
902 	#define RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP	(UINT32_C(0x9) << 12)
903 	#define RX_PKT_CMPL_FLAGS_ITYPE_LAST \
904 		RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP
905 	#define RX_PKT_CMPL_FLAGS_MASK	UINT32_C(0xffc0)
906 	#define RX_PKT_CMPL_FLAGS_SFT	6
907 	uint16_t len;
908 	/*
909 	 * This is the length of the data for the packet stored in the
910 	 * buffer(s) identified by the opaque value. This includes the
911 	 * packet BD and any associated buffer BDs. This does not
912 	 * include the the length of any data places in aggregation BDs.
913 	 */
914 	uint32_t opaque;
915 	/*
916 	 * This is a copy of the opaque field from the RX BD this
917 	 * completion corresponds to.
918 	 */
919 	uint8_t agg_bufs_v1;
920 	/* unused1 is 2 b */
921 	/*
922 	 * This value is written by the NIC such that it will be
923 	 * different for each pass through the completion queue. The
924 	 * even passes will write 1. The odd passes will write 0.
925 	 */
926 	#define RX_PKT_CMPL_V1	UINT32_C(0x1)
927 	/*
928 	 * This value is the number of aggregation buffers that follow
929 	 * this entry in the completion ring that are a part of this
930 	 * packet. If the value is zero, then the packet is completely
931 	 * contained in the buffer space provided for the packet in the
932 	 * RX ring.
933 	 */
934 	#define RX_PKT_CMPL_AGG_BUFS_MASK	UINT32_C(0x3e)
935 	#define RX_PKT_CMPL_AGG_BUFS_SFT	1
936 	/* unused1 is 2 b */
937 	uint8_t rss_hash_type;
938 	/*
939 	 * This is the RSS hash type for the packet. The value is packed
940 	 * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}
941 	 * . The value of tuple_extrac_op provides the information about
942 	 * what fields the hash was computed on. * 0: The RSS hash was
943 	 * computed over source IP address, destination IP address,
944 	 * source port, and destination port of inner IP and TCP or UDP
945 	 * headers. Note: For non-tunneled packets, the packet headers
946 	 * are considered inner packet headers for the RSS hash
947 	 * computation purpose. * 1: The RSS hash was computed over
948 	 * source IP address and destination IP address of inner IP
949 	 * header. Note: For non-tunneled packets, the packet headers
950 	 * are considered inner packet headers for the RSS hash
951 	 * computation purpose. * 2: The RSS hash was computed over
952 	 * source IP address, destination IP address, source port, and
953 	 * destination port of IP and TCP or UDP headers of outer tunnel
954 	 * headers. Note: For non-tunneled packets, this value is not
955 	 * applicable. * 3: The RSS hash was computed over source IP
956 	 * address and destination IP address of IP header of outer
957 	 * tunnel headers. Note: For non-tunneled packets, this value is
958 	 * not applicable. Note that 4-tuples values listed above are
959 	 * applicable for layer 4 protocols supported and enabled for
960 	 * RSS in the hardware, HWRM firmware, and drivers. For example,
961 	 * if RSS hash is supported and enabled for TCP traffic only,
962 	 * then the values of tuple_extract_op corresponding to 4-tuples
963 	 * are only valid for TCP traffic.
964 	 */
965 	uint8_t payload_offset;
966 	/*
967 	 * This value indicates the offset in bytes from the beginning
968 	 * of the packet where the inner payload starts. This value is
969 	 * valid for TCP, UDP, FCoE, and RoCE packets. A value of zero
970 	 * indicates that header is 256B into the packet.
971 	 */
972 	uint8_t unused_1;
973 	/* unused2 is 8 b */
974 	uint32_t rss_hash;
975 	/*
976 	 * This value is the RSS hash value calculated for the packet
977 	 * based on the mode bits and key value in the VNIC.
978 	 */
979 } __attribute__((packed));
980 
981 /* last 16 bytes of RX Packet Completion Record */
982 struct rx_pkt_cmpl_hi {
983 	uint32_t flags2;
984 	/*
985 	 * This indicates that the ip checksum was calculated for the
986 	 * inner packet and that the ip_cs_error field indicates if
987 	 * there was an error.
988 	 */
989 	#define RX_PKT_CMPL_FLAGS2_IP_CS_CALC	UINT32_C(0x1)
990 	/*
991 	 * This indicates that the TCP, UDP or ICMP checksum was
992 	 * calculated for the inner packet and that the l4_cs_error
993 	 * field indicates if there was an error.
994 	 */
995 	#define RX_PKT_CMPL_FLAGS2_L4_CS_CALC	UINT32_C(0x2)
996 	/*
997 	 * This indicates that the ip checksum was calculated for the
998 	 * tunnel header and that the t_ip_cs_error field indicates if
999 	 * there was an error.
1000 	 */
1001 	#define RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC	UINT32_C(0x4)
1002 	/*
1003 	 * This indicates that the UDP checksum was calculated for the
1004 	 * tunnel packet and that the t_l4_cs_error field indicates if
1005 	 * there was an error.
1006 	 */
1007 	#define RX_PKT_CMPL_FLAGS2_T_L4_CS_CALC	UINT32_C(0x8)
1008 	/* This value indicates what format the metadata field is. */
1009 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_MASK	UINT32_C(0xf0)
1010 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_SFT	4
1011 	/* No metadata informtaion. Value is zero. */
1012 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_NONE	(UINT32_C(0x0) << 4)
1013 	/*
1014 	 * The metadata field contains the VLAN tag and
1015 	 * TPID value. - metadata[11:0] contains the
1016 	 * vlan VID value. - metadata[12] contains the
1017 	 * vlan DE value. - metadata[15:13] contains the
1018 	 * vlan PRI value. - metadata[31:16] contains
1019 	 * the vlan TPID value.
1020 	 */
1021 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN	(UINT32_C(0x1) << 4)
1022 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_LAST \
1023 		RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN
1024 	/*
1025 	 * This field indicates the IP type for the inner-most IP
1026 	 * header. A value of '0' indicates IPv4. A value of '1'
1027 	 * indicates IPv6. This value is only valid if itype indicates a
1028 	 * packet with an IP header.
1029 	 */
1030 	#define RX_PKT_CMPL_FLAGS2_IP_TYPE	UINT32_C(0x100)
1031 	uint32_t metadata;
1032 	/*
1033 	 * This is data from the CFA block as indicated by the
1034 	 * meta_format field.
1035 	 */
1036 	/* When meta_format=1, this value is the VLAN VID. */
1037 	#define RX_PKT_CMPL_METADATA_VID_MASK	UINT32_C(0xfff)
1038 	#define RX_PKT_CMPL_METADATA_VID_SFT	0
1039 	/* When meta_format=1, this value is the VLAN DE. */
1040 	#define RX_PKT_CMPL_METADATA_DE	UINT32_C(0x1000)
1041 	/* When meta_format=1, this value is the VLAN PRI. */
1042 	#define RX_PKT_CMPL_METADATA_PRI_MASK	UINT32_C(0xe000)
1043 	#define RX_PKT_CMPL_METADATA_PRI_SFT	13
1044 	/* When meta_format=1, this value is the VLAN TPID. */
1045 	#define RX_PKT_CMPL_METADATA_TPID_MASK	UINT32_C(0xffff0000)
1046 	#define RX_PKT_CMPL_METADATA_TPID_SFT	16
1047 	uint16_t errors_v2;
1048 	/*
1049 	 * This value is written by the NIC such that it will be
1050 	 * different for each pass through the completion queue. The
1051 	 * even passes will write 1. The odd passes will write 0.
1052 	 */
1053 	#define RX_PKT_CMPL_V2	UINT32_C(0x1)
1054 	/*
1055 	 * This error indicates that there was some sort of problem with
1056 	 * the BDs for the packet that was found after part of the
1057 	 * packet was already placed. The packet should be treated as
1058 	 * invalid.
1059 	 */
1060 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_MASK	UINT32_C(0xe)
1061 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_SFT	1
1062 	/* No buffer error */
1063 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER	(UINT32_C(0x0) << 1)
1064 	/*
1065 	 * Did Not Fit: Packet did not fit into packet
1066 	 * buffer provided. For regular placement, this
1067 	 * means the packet did not fit in the buffer
1068 	 * provided. For HDS and jumbo placement, this
1069 	 * means that the packet could not be placed
1070 	 * into 7 physical buffers or less.
1071 	 */
1072 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_DID_NOT_FIT \
1073 		(UINT32_C(0x1) << 1)
1074 	/*
1075 	 * Not On Chip: All BDs needed for the packet
1076 	 * were not on-chip when the packet arrived.
1077 	 */
1078 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
1079 		(UINT32_C(0x2) << 1)
1080 	/* Bad Format: BDs were not formatted correctly. */
1081 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
1082 		(UINT32_C(0x3) << 1)
1083 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_LAST \
1084 		RX_PKT_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT
1085 	/* This indicates that there was an error in the IP header checksum. */
1086 	#define RX_PKT_CMPL_ERRORS_IP_CS_ERROR	UINT32_C(0x10)
1087 	/*
1088 	 * This indicates that there was an error in the TCP, UDP or
1089 	 * ICMP checksum.
1090 	 */
1091 	#define RX_PKT_CMPL_ERRORS_L4_CS_ERROR	UINT32_C(0x20)
1092 	/*
1093 	 * This indicates that there was an error in the tunnel IP
1094 	 * header checksum.
1095 	 */
1096 	#define RX_PKT_CMPL_ERRORS_T_IP_CS_ERROR	UINT32_C(0x40)
1097 	/*
1098 	 * This indicates that there was an error in the tunnel UDP
1099 	 * checksum.
1100 	 */
1101 	#define RX_PKT_CMPL_ERRORS_T_L4_CS_ERROR	UINT32_C(0x80)
1102 	/*
1103 	 * This indicates that there was a CRC error on either an FCoE
1104 	 * or RoCE packet. The itype indicates the packet type.
1105 	 */
1106 	#define RX_PKT_CMPL_ERRORS_CRC_ERROR	UINT32_C(0x100)
1107 	/*
1108 	 * This indicates that there was an error in the tunnel portion
1109 	 * of the packet when this field is non-zero.
1110 	 */
1111 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_MASK	UINT32_C(0xe00)
1112 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_SFT	9
1113 	/*
1114 	 * No additional error occurred on the tunnel
1115 	 * portion of the packet of the packet does not
1116 	 * have a tunnel.
1117 	 */
1118 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_NO_ERROR	(UINT32_C(0x0) << 9)
1119 	/*
1120 	 * Indicates that IP header version does not
1121 	 * match expectation from L2 Ethertype for IPv4
1122 	 * and IPv6 in the tunnel header.
1123 	 */
1124 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_VERSION \
1125 		(UINT32_C(0x1) << 9)
1126 	/*
1127 	 * Indicates that header length is out of range
1128 	 * in the tunnel header. Valid for IPv4.
1129 	 */
1130 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_HDR_LEN \
1131 		(UINT32_C(0x2) << 9)
1132 	/*
1133 	 * Indicates that the physical packet is shorter
1134 	 * than that claimed by the PPPoE header length
1135 	 * for a tunnel PPPoE packet.
1136 	 */
1137 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_TUNNEL_TOTAL_ERROR \
1138 		(UINT32_C(0x3) << 9)
1139 	/*
1140 	 * Indicates that physical packet is shorter
1141 	 * than that claimed by the tunnel l3 header
1142 	 * length. Valid for IPv4, or IPv6 tunnel packet
1143 	 * packets.
1144 	 */
1145 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_IP_TOTAL_ERROR \
1146 		(UINT32_C(0x4) << 9)
1147 	/*
1148 	 * Indicates that the physical packet is shorter
1149 	 * than that claimed by the tunnel UDP header
1150 	 * length for a tunnel UDP packet that is not
1151 	 * fragmented.
1152 	 */
1153 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_UDP_TOTAL_ERROR \
1154 		(UINT32_C(0x5) << 9)
1155 	/*
1156 	 * indicates that the IPv4 TTL or IPv6 hop limit
1157 	 * check have failed	(e.g. TTL = 0) in the
1158 	 * tunnel header. Valid for IPv4, and IPv6.
1159 	 */
1160 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL \
1161 		(UINT32_C(0x6) << 9)
1162 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_LAST \
1163 		RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL
1164 	/*
1165 	 * This indicates that there was an error in the inner portion
1166 	 * of the packet when this field is non-zero.
1167 	 */
1168 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_MASK	UINT32_C(0xf000)
1169 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_SFT	12
1170 	/*
1171 	 * No additional error occurred on the tunnel
1172 	 * portion of the packet of the packet does not
1173 	 * have a tunnel.
1174 	 */
1175 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_NO_ERROR	(UINT32_C(0x0) << 12)
1176 	/*
1177 	 * Indicates that IP header version does not
1178 	 * match expectation from L2 Ethertype for IPv4
1179 	 * and IPv6 or that option other than VFT was
1180 	 * parsed on FCoE packet.
1181 	 */
1182 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_VERSION \
1183 		(UINT32_C(0x1) << 12)
1184 	/*
1185 	 * indicates that header length is out of range.
1186 	 * Valid for IPv4 and RoCE
1187 	 */
1188 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_HDR_LEN \
1189 		(UINT32_C(0x2) << 12)
1190 	/*
1191 	 * indicates that the IPv4 TTL or IPv6 hop limit
1192 	 * check have failed	(e.g. TTL = 0). Valid for
1193 	 * IPv4, and IPv6
1194 	 */
1195 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_TTL	(UINT32_C(0x3) << 12)
1196 	/*
1197 	 * Indicates that physical packet is shorter
1198 	 * than that claimed by the l3 header length.
1199 	 * Valid for IPv4, IPv6 packet or RoCE packets.
1200 	 */
1201 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_IP_TOTAL_ERROR \
1202 		(UINT32_C(0x4) << 12)
1203 	/*
1204 	 * Indicates that the physical packet is shorter
1205 	 * than that claimed by the UDP header length
1206 	 * for a UDP packet that is not fragmented.
1207 	 */
1208 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_UDP_TOTAL_ERROR \
1209 		(UINT32_C(0x5) << 12)
1210 	/*
1211 	 * Indicates that TCP header length > IP
1212 	 * payload. Valid for TCP packets only.
1213 	 */
1214 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN \
1215 		(UINT32_C(0x6) << 12)
1216 	/* Indicates that TCP header length < 5. Valid for TCP. */
1217 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN_TOO_SMALL \
1218 		(UINT32_C(0x7) << 12)
1219 	/*
1220 	 * Indicates that TCP option headers result in a
1221 	 * TCP header size that does not match data
1222 	 * offset in TCP header. Valid for TCP.
1223 	 */
1224 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN \
1225 		(UINT32_C(0x8) << 12)
1226 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_LAST \
1227 		RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN
1228 	#define RX_PKT_CMPL_ERRORS_MASK	UINT32_C(0xfffe)
1229 	#define RX_PKT_CMPL_ERRORS_SFT	1
1230 	uint16_t cfa_code;
1231 	/*
1232 	 * This field identifies the CFA action rule that was used for
1233 	 * this packet.
1234 	 */
1235 	uint32_t reorder;
1236 	/*
1237 	 * This value holds the reordering sequence number for the
1238 	 * packet. If the reordering sequence is not valid, then this
1239 	 * value is zero. The reordering domain for the packet is in the
1240 	 * bottom 8 to 10b of the rss_hash value. The bottom 20b of this
1241 	 * value contain the ordering domain value for the packet.
1242 	 */
1243 	#define RX_PKT_CMPL_REORDER_MASK	UINT32_C(0xffffff)
1244 	#define RX_PKT_CMPL_REORDER_SFT	0
1245 } __attribute__((packed));
1246 
1247 /* RX L2 TPA Start Completion Record (32 bytes split to 2 16-byte struct) */
1248 struct rx_tpa_start_cmpl {
1249 	uint16_t flags_type;
1250 	/*
1251 	 * This field indicates the exact type of the completion. By
1252 	 * convention, the LSB identifies the length of the record in
1253 	 * 16B units. Even values indicate 16B records. Odd values
1254 	 * indicate 32B records.
1255 	 */
1256 	#define RX_TPA_START_CMPL_TYPE_MASK	UINT32_C(0x3f)
1257 	#define RX_TPA_START_CMPL_TYPE_SFT	0
1258 	/*
1259 	 * RX L2 TPA Start Completion: Completion at the
1260 	 * beginning of a TPA operation. Length = 32B
1261 	 */
1262 	#define RX_TPA_START_CMPL_TYPE_RX_TPA_START	UINT32_C(0x13)
1263 	/* This bit will always be '0' for TPA start completions. */
1264 	#define RX_TPA_START_CMPL_FLAGS_ERROR	UINT32_C(0x40)
1265 	/* This field indicates how the packet was placed in the buffer. */
1266 	#define RX_TPA_START_CMPL_FLAGS_PLACEMENT_MASK	UINT32_C(0x380)
1267 	#define RX_TPA_START_CMPL_FLAGS_PLACEMENT_SFT	7
1268 	/*
1269 	 * Jumbo: TPA Packet was placed using jumbo
1270 	 * algorithm. This means that the first buffer
1271 	 * will be filled with data before moving to
1272 	 * aggregation buffers. Each aggregation buffer
1273 	 * will be filled before moving to the next
1274 	 * aggregation buffer.
1275 	 */
1276 	#define RX_TPA_START_CMPL_FLAGS_PLACEMENT_JUMBO	(UINT32_C(0x1) << 7)
1277 	/*
1278 	 * Header/Data Separation: Packet was placed
1279 	 * using Header/Data separation algorithm. The
1280 	 * separation location is indicated by the itype
1281 	 * field.
1282 	 */
1283 	#define RX_TPA_START_CMPL_FLAGS_PLACEMENT_HDS	(UINT32_C(0x2) << 7)
1284 	/*
1285 	 * GRO/Jumbo: Packet will be placed using
1286 	 * GRO/Jumbo where the first packet is filled
1287 	 * with data. Subsequent packets will be placed
1288 	 * such that any one packet does not span two
1289 	 * aggregation buffers unless it starts at the
1290 	 * beginning of an aggregation buffer.
1291 	 */
1292 	#define RX_TPA_START_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
1293 		(UINT32_C(0x5) << 7)
1294 	/*
1295 	 * GRO/Header-Data Separation: Packet will be
1296 	 * placed using GRO/HDS where the header is in
1297 	 * the first packet. Payload of each packet will
1298 	 * be placed such that any one packet does not
1299 	 * span two aggregation buffers unless it starts
1300 	 * at the beginning of an aggregation buffer.
1301 	 */
1302 	#define RX_TPA_START_CMPL_FLAGS_PLACEMENT_GRO_HDS (UINT32_C(0x6) << 7)
1303 	#define RX_TPA_START_CMPL_FLAGS_PLACEMENT_LAST \
1304 		RX_TPA_START_CMPL_FLAGS_PLACEMENT_GRO_HDS
1305 	/* This bit is '1' if the RSS field in this completion is valid. */
1306 	#define RX_TPA_START_CMPL_FLAGS_RSS_VALID	UINT32_C(0x400)
1307 	/* unused is 1 b */
1308 	#define RX_TPA_START_CMPL_FLAGS_UNUSED	UINT32_C(0x800)
1309 	/*
1310 	 * This value indicates what the inner packet determined for the
1311 	 * packet was.
1312 	 */
1313 	#define RX_TPA_START_CMPL_FLAGS_ITYPE_MASK	UINT32_C(0xf000)
1314 	#define RX_TPA_START_CMPL_FLAGS_ITYPE_SFT	12
1315 	/* TCP Packet: Indicates that the packet was IP and TCP. */
1316 	#define RX_TPA_START_CMPL_FLAGS_ITYPE_TCP	(UINT32_C(0x2) << 12)
1317 	#define RX_TPA_START_CMPL_FLAGS_ITYPE_LAST \
1318 		RX_TPA_START_CMPL_FLAGS_ITYPE_TCP
1319 	#define RX_TPA_START_CMPL_FLAGS_MASK	UINT32_C(0xffc0)
1320 	#define RX_TPA_START_CMPL_FLAGS_SFT	6
1321 	uint16_t len;
1322 	/*
1323 	 * This value indicates the amount of packet data written to the
1324 	 * buffer the opaque field in this completion corresponds to.
1325 	 */
1326 	uint32_t opaque;
1327 	/*
1328 	 * This is a copy of the opaque field from the RX BD this
1329 	 * completion corresponds to.
1330 	 */
1331 	uint8_t v1;
1332 	/* unused1 is 7 b */
1333 	/*
1334 	 * This value is written by the NIC such that it will be
1335 	 * different for each pass through the completion queue. The
1336 	 * even passes will write 1. The odd passes will write 0.
1337 	 */
1338 	#define RX_TPA_START_CMPL_V1	UINT32_C(0x1)
1339 	/* unused1 is 7 b */
1340 	uint8_t rss_hash_type;
1341 	/*
1342 	 * This is the RSS hash type for the packet. The value is packed
1343 	 * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}
1344 	 * . The value of tuple_extrac_op provides the information about
1345 	 * what fields the hash was computed on. * 0: The RSS hash was
1346 	 * computed over source IP address, destination IP address,
1347 	 * source port, and destination port of inner IP and TCP or UDP
1348 	 * headers. Note: For non-tunneled packets, the packet headers
1349 	 * are considered inner packet headers for the RSS hash
1350 	 * computation purpose. * 1: The RSS hash was computed over
1351 	 * source IP address and destination IP address of inner IP
1352 	 * header. Note: For non-tunneled packets, the packet headers
1353 	 * are considered inner packet headers for the RSS hash
1354 	 * computation purpose. * 2: The RSS hash was computed over
1355 	 * source IP address, destination IP address, source port, and
1356 	 * destination port of IP and TCP or UDP headers of outer tunnel
1357 	 * headers. Note: For non-tunneled packets, this value is not
1358 	 * applicable. * 3: The RSS hash was computed over source IP
1359 	 * address and destination IP address of IP header of outer
1360 	 * tunnel headers. Note: For non-tunneled packets, this value is
1361 	 * not applicable. Note that 4-tuples values listed above are
1362 	 * applicable for layer 4 protocols supported and enabled for
1363 	 * RSS in the hardware, HWRM firmware, and drivers. For example,
1364 	 * if RSS hash is supported and enabled for TCP traffic only,
1365 	 * then the values of tuple_extract_op corresponding to 4-tuples
1366 	 * are only valid for TCP traffic.
1367 	 */
1368 	uint16_t agg_id;
1369 	/*
1370 	 * This is the aggregation ID that the completion is associated
1371 	 * with. Use this number to correlate the TPA start completion
1372 	 * with the TPA end completion.
1373 	 */
1374 	/* unused2 is 9 b */
1375 	/*
1376 	 * This is the aggregation ID that the completion is associated
1377 	 * with. Use this number to correlate the TPA start completion
1378 	 * with the TPA end completion.
1379 	 */
1380 	#define RX_TPA_START_CMPL_AGG_ID_MASK	UINT32_C(0xfe00)
1381 	#define RX_TPA_START_CMPL_AGG_ID_SFT	9
1382 	uint32_t rss_hash;
1383 	/*
1384 	 * This value is the RSS hash value calculated for the packet
1385 	 * based on the mode bits and key value in the VNIC.
1386 	 */
1387 } __attribute__((packed));
1388 
1389 /* last 16 bytes of RX L2 TPA Start Completion Record */
1390 struct rx_tpa_start_cmpl_hi {
1391 	uint32_t flags2;
1392 	/*
1393 	 * This indicates that the ip checksum was calculated for the
1394 	 * inner packet and that the sum passed for all segments
1395 	 * included in the aggregation.
1396 	 */
1397 	#define RX_TPA_START_CMPL_FLAGS2_IP_CS_CALC	UINT32_C(0x1)
1398 	/*
1399 	 * This indicates that the TCP, UDP or ICMP checksum was
1400 	 * calculated for the inner packet and that the sum passed for
1401 	 * all segments included in the aggregation.
1402 	 */
1403 	#define RX_TPA_START_CMPL_FLAGS2_L4_CS_CALC	UINT32_C(0x2)
1404 	/*
1405 	 * This indicates that the ip checksum was calculated for the
1406 	 * tunnel header and that the sum passed for all segments
1407 	 * included in the aggregation.
1408 	 */
1409 	#define RX_TPA_START_CMPL_FLAGS2_T_IP_CS_CALC	UINT32_C(0x4)
1410 	/*
1411 	 * This indicates that the UDP checksum was calculated for the
1412 	 * tunnel packet and that the sum passed for all segments
1413 	 * included in the aggregation.
1414 	 */
1415 	#define RX_TPA_START_CMPL_FLAGS2_T_L4_CS_CALC	UINT32_C(0x8)
1416 	/* This value indicates what format the metadata field is. */
1417 	#define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_MASK UINT32_C(0xf0)
1418 	#define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_SFT	4
1419 	/* No metadata informtaion. Value is zero. */
1420 	#define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_NONE (UINT32_C(0x0) << 4)
1421 	/*
1422 	 * The metadata field contains the VLAN tag and
1423 	 * TPID value. - metadata[11:0] contains the
1424 	 * vlan VID value. - metadata[12] contains the
1425 	 * vlan DE value. - metadata[15:13] contains the
1426 	 * vlan PRI value. - metadata[31:16] contains
1427 	 * the vlan TPID value.
1428 	 */
1429 	#define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_VLAN (UINT32_C(0x1) << 4)
1430 	#define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_LAST \
1431 		RX_TPA_START_CMPL_FLAGS2_META_FORMAT_VLAN
1432 	/*
1433 	 * This field indicates the IP type for the inner-most IP
1434 	 * header. A value of '0' indicates IPv4. A value of '1'
1435 	 * indicates IPv6.
1436 	 */
1437 	#define RX_TPA_START_CMPL_FLAGS2_IP_TYPE	UINT32_C(0x100)
1438 	uint32_t metadata;
1439 	/*
1440 	 * This is data from the CFA block as indicated by the
1441 	 * meta_format field.
1442 	 */
1443 	/* When meta_format=1, this value is the VLAN VID. */
1444 	#define RX_TPA_START_CMPL_METADATA_VID_MASK	UINT32_C(0xfff)
1445 	#define RX_TPA_START_CMPL_METADATA_VID_SFT	0
1446 	/* When meta_format=1, this value is the VLAN DE. */
1447 	#define RX_TPA_START_CMPL_METADATA_DE	UINT32_C(0x1000)
1448 	/* When meta_format=1, this value is the VLAN PRI. */
1449 	#define RX_TPA_START_CMPL_METADATA_PRI_MASK UINT32_C(0xe000)
1450 	#define RX_TPA_START_CMPL_METADATA_PRI_SFT	13
1451 	/* When meta_format=1, this value is the VLAN TPID. */
1452 	#define RX_TPA_START_CMPL_METADATA_TPID_MASK	UINT32_C(0xffff0000)
1453 	#define RX_TPA_START_CMPL_METADATA_TPID_SFT	16
1454 	uint16_t v2;
1455 	/* unused4 is 15 b */
1456 	/*
1457 	 * This value is written by the NIC such that it will be
1458 	 * different for each pass through the completion queue. The
1459 	 * even passes will write 1. The odd passes will write 0.
1460 	 */
1461 	#define RX_TPA_START_CMPL_V2	UINT32_C(0x1)
1462 	/* unused4 is 15 b */
1463 	uint16_t cfa_code;
1464 	/*
1465 	 * This field identifies the CFA action rule that was used for
1466 	 * this packet.
1467 	 */
1468 	uint32_t inner_l4_size_inner_l3_offset_inner_l2_offset_outer_l3_offset;
1469 	/*
1470 	 * This is the size in bytes of the inner most L4 header. This
1471 	 * can be subtracted from the payload_offset to determine the
1472 	 * start of the inner most L4 header.
1473 	 */
1474 	/*
1475 	 * This is the offset from the beginning of the packet in bytes
1476 	 * for the outer L3 header. If there is no outer L3 header, then
1477 	 * this value is zero.
1478 	 */
1479 	#define RX_TPA_START_CMPL_OUTER_L3_OFFSET_MASK	UINT32_C(0x1ff)
1480 	#define RX_TPA_START_CMPL_OUTER_L3_OFFSET_SFT	0
1481 	/*
1482 	 * This is the offset from the beginning of the packet in bytes
1483 	 * for the inner most L2 header.
1484 	 */
1485 	#define RX_TPA_START_CMPL_INNER_L2_OFFSET_MASK	UINT32_C(0x3fe00)
1486 	#define RX_TPA_START_CMPL_INNER_L2_OFFSET_SFT	9
1487 	/*
1488 	 * This is the offset from the beginning of the packet in bytes
1489 	 * for the inner most L3 header.
1490 	 */
1491 	#define RX_TPA_START_CMPL_INNER_L3_OFFSET_MASK	UINT32_C(0x7fc0000)
1492 	#define RX_TPA_START_CMPL_INNER_L3_OFFSET_SFT	18
1493 	/*
1494 	 * This is the size in bytes of the inner most L4 header. This
1495 	 * can be subtracted from the payload_offset to determine the
1496 	 * start of the inner most L4 header.
1497 	 */
1498 	#define RX_TPA_START_CMPL_INNER_L4_SIZE_MASK	UINT32_C(0xf8000000)
1499 	#define RX_TPA_START_CMPL_INNER_L4_SIZE_SFT	27
1500 } __attribute__((packed));
1501 
1502 /* RX TPA End Completion Record (32 bytes split to 2 16-byte struct) */
1503 struct rx_tpa_end_cmpl {
1504 	uint16_t flags_type;
1505 	/*
1506 	 * This field indicates the exact type of the completion. By
1507 	 * convention, the LSB identifies the length of the record in
1508 	 * 16B units. Even values indicate 16B records. Odd values
1509 	 * indicate 32B records.
1510 	 */
1511 	#define RX_TPA_END_CMPL_TYPE_MASK	UINT32_C(0x3f)
1512 	#define RX_TPA_END_CMPL_TYPE_SFT	0
1513 	/*
1514 	 * RX L2 TPA End Completion: Completion at the
1515 	 * end of a TPA operation. Length = 32B
1516 	 */
1517 	#define RX_TPA_END_CMPL_TYPE_RX_TPA_END	UINT32_C(0x15)
1518 	/*
1519 	 * When this bit is '1', it indicates a packet that has an error
1520 	 * of some type. Type of error is indicated in error_flags.
1521 	 */
1522 	#define RX_TPA_END_CMPL_FLAGS_ERROR	UINT32_C(0x40)
1523 	/* This field indicates how the packet was placed in the buffer. */
1524 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_MASK	UINT32_C(0x380)
1525 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_SFT	7
1526 	/*
1527 	 * Jumbo: TPA Packet was placed using jumbo
1528 	 * algorithm. This means that the first buffer
1529 	 * will be filled with data before moving to
1530 	 * aggregation buffers. Each aggregation buffer
1531 	 * will be filled before moving to the next
1532 	 * aggregation buffer.
1533 	 */
1534 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_JUMBO	(UINT32_C(0x1) << 7)
1535 	/*
1536 	 * Header/Data Separation: Packet was placed
1537 	 * using Header/Data separation algorithm. The
1538 	 * separation location is indicated by the itype
1539 	 * field.
1540 	 */
1541 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_HDS	(UINT32_C(0x2) << 7)
1542 	/*
1543 	 * GRO/Jumbo: Packet will be placed using
1544 	 * GRO/Jumbo where the first packet is filled
1545 	 * with data. Subsequent packets will be placed
1546 	 * such that any one packet does not span two
1547 	 * aggregation buffers unless it starts at the
1548 	 * beginning of an aggregation buffer.
1549 	 */
1550 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_GRO_JUMBO (UINT32_C(0x5) << 7)
1551 	/*
1552 	 * GRO/Header-Data Separation: Packet will be
1553 	 * placed using GRO/HDS where the header is in
1554 	 * the first packet. Payload of each packet will
1555 	 * be placed such that any one packet does not
1556 	 * span two aggregation buffers unless it starts
1557 	 * at the beginning of an aggregation buffer.
1558 	 */
1559 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_GRO_HDS	(UINT32_C(0x6) << 7)
1560 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_LAST \
1561 		RX_TPA_END_CMPL_FLAGS_PLACEMENT_GRO_HDS
1562 	/* unused is 2 b */
1563 	#define RX_TPA_END_CMPL_FLAGS_UNUSED_MASK	UINT32_C(0xc00)
1564 	#define RX_TPA_END_CMPL_FLAGS_UNUSED_SFT	10
1565 	/*
1566 	 * This value indicates what the inner packet determined for the
1567 	 * packet was. - 2 TCP Packet Indicates that the packet was IP
1568 	 * and TCP. This indicates that the ip_cs field is valid and
1569 	 * that the tcp_udp_cs field is valid and contains the TCP
1570 	 * checksum. This also indicates that the payload_offset field
1571 	 * is valid.
1572 	 */
1573 	#define RX_TPA_END_CMPL_FLAGS_ITYPE_MASK	UINT32_C(0xf000)
1574 	#define RX_TPA_END_CMPL_FLAGS_ITYPE_SFT	12
1575 	#define RX_TPA_END_CMPL_FLAGS_MASK	UINT32_C(0xffc0)
1576 	#define RX_TPA_END_CMPL_FLAGS_SFT	6
1577 	uint16_t len;
1578 	/*
1579 	 * This value is zero for TPA End completions. There is no data
1580 	 * in the buffer that corresponds to the opaque value in this
1581 	 * completion.
1582 	 */
1583 	uint32_t opaque;
1584 	/*
1585 	 * This is a copy of the opaque field from the RX BD this
1586 	 * completion corresponds to.
1587 	 */
1588 	uint8_t agg_bufs_v1;
1589 	/* unused1 is 1 b */
1590 	/*
1591 	 * This value is written by the NIC such that it will be
1592 	 * different for each pass through the completion queue. The
1593 	 * even passes will write 1. The odd passes will write 0.
1594 	 */
1595 	#define RX_TPA_END_CMPL_V1	UINT32_C(0x1)
1596 	/*
1597 	 * This value is the number of aggregation buffers that follow
1598 	 * this entry in the completion ring that are a part of this
1599 	 * aggregation packet. If the value is zero, then the packet is
1600 	 * completely contained in the buffer space provided in the
1601 	 * aggregation start completion.
1602 	 */
1603 	#define RX_TPA_END_CMPL_AGG_BUFS_MASK	UINT32_C(0x7e)
1604 	#define RX_TPA_END_CMPL_AGG_BUFS_SFT	1
1605 	/* unused1 is 1 b */
1606 	uint8_t tpa_segs;
1607 	/* This value is the number of segments in the TPA operation. */
1608 	uint8_t payload_offset;
1609 	/*
1610 	 * This value indicates the offset in bytes from the beginning
1611 	 * of the packet where the inner payload starts. This value is
1612 	 * valid for TCP, UDP, FCoE, and RoCE packets. A value of zero
1613 	 * indicates an offset of 256 bytes.
1614 	 */
1615 	uint8_t agg_id;
1616 	/*
1617 	 * This is the aggregation ID that the completion is associated
1618 	 * with. Use this number to correlate the TPA start completion
1619 	 * with the TPA end completion.
1620 	 */
1621 	/* unused2 is 1 b */
1622 	/*
1623 	 * This is the aggregation ID that the completion is associated
1624 	 * with. Use this number to correlate the TPA start completion
1625 	 * with the TPA end completion.
1626 	 */
1627 	#define RX_TPA_END_CMPL_AGG_ID_MASK	UINT32_C(0xfe)
1628 	#define RX_TPA_END_CMPL_AGG_ID_SFT	1
1629 	uint32_t tsdelta;
1630 	/*
1631 	 * For non-GRO packets, this value is the timestamp delta
1632 	 * between earliest and latest timestamp values for TPA packet.
1633 	 * If packets were not time stamped, then delta will be zero.
1634 	 * For GRO packets, this field is zero except for the following
1635 	 * sub-fields. - tsdelta[31] Timestamp present indication. When
1636 	 * '0', no Timestamp option is in the packet. When '1', then a
1637 	 * Timestamp option is present in the packet.
1638 	 */
1639 } __attribute__((packed));
1640 
1641 /* last 16 bytes of RX TPA End Completion Record */
1642 struct rx_tpa_end_cmpl_hi {
1643 	uint32_t tpa_dup_acks;
1644 	/* unused3 is 28 b */
1645 	/*
1646 	 * This value is the number of duplicate ACKs that have been
1647 	 * received as part of the TPA operation.
1648 	 */
1649 	#define RX_TPA_END_CMPL_TPA_DUP_ACKS_MASK	UINT32_C(0xf)
1650 	#define RX_TPA_END_CMPL_TPA_DUP_ACKS_SFT	0
1651 	/* unused3 is 28 b */
1652 	uint16_t tpa_seg_len;
1653 	/*
1654 	 * This value is the valid when TPA completion is active. It
1655 	 * indicates the length of the longest segment of the TPA
1656 	 * operation for LRO mode and the length of the first segment in
1657 	 * GRO mode. This value may be used by GRO software to re-
1658 	 * construct the original packet stream from the TPA packet.
1659 	 * This is the length of all but the last segment for GRO. In
1660 	 * LRO mode this value may be used to indicate MSS size to the
1661 	 * stack.
1662 	 */
1663 	uint16_t unused_3;
1664 	/* unused4 is 16 b */
1665 	uint16_t errors_v2;
1666 	/*
1667 	 * This value is written by the NIC such that it will be
1668 	 * different for each pass through the completion queue. The
1669 	 * even passes will write 1. The odd passes will write 0.
1670 	 */
1671 	#define RX_TPA_END_CMPL_V2	UINT32_C(0x1)
1672 	/*
1673 	 * This error indicates that there was some sort of problem with
1674 	 * the BDs for the packet that was found after part of the
1675 	 * packet was already placed. The packet should be treated as
1676 	 * invalid.
1677 	 */
1678 	#define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_MASK	UINT32_C(0xe)
1679 	#define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_SFT	1
1680 	/*
1681 	 * This error occurs when there is a fatal HW
1682 	 * problem in the chip only. It indicates that
1683 	 * there were not BDs on chip but that there was
1684 	 * adequate reservation. provided by the TPA
1685 	 * block.
1686 	 */
1687 	#define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
1688 		(UINT32_C(0x2) << 1)
1689 	/*
1690 	 * This error occurs when TPA block was not
1691 	 * configured to reserve adequate BDs for TPA
1692 	 * operations on this RX ring. All data for the
1693 	 * TPA operation was not placed. This error can
1694 	 * also be generated when the number of segments
1695 	 * is not programmed correctly in TPA and the 33
1696 	 * total aggregation buffers allowed for the TPA
1697 	 * operation has been exceeded.
1698 	 */
1699 	#define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_RSV_ERROR \
1700 		(UINT32_C(0x4) << 1)
1701 	#define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_LAST \
1702 		RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_RSV_ERROR
1703 	#define RX_TPA_END_CMPL_ERRORS_MASK	UINT32_C(0xfffe)
1704 	#define RX_TPA_END_CMPL_ERRORS_SFT	1
1705 	uint16_t unused_4;
1706 	/* unused5 is 16 b */
1707 	uint32_t start_opaque;
1708 	/*
1709 	 * This is the opaque value that was completed for the TPA start
1710 	 * completion that corresponds to this TPA end completion.
1711 	 */
1712 } __attribute__((packed));
1713 
1714 /* HWRM Forwarded Request	(16 bytes) */
1715 struct hwrm_fwd_req_cmpl {
1716 	uint16_t req_len_type;
1717 	/* Length of forwarded request in bytes. */
1718 	/*
1719 	 * This field indicates the exact type of the completion. By
1720 	 * convention, the LSB identifies the length of the record in
1721 	 * 16B units. Even values indicate 16B records. Odd values
1722 	 * indicate 32B records.
1723 	 */
1724 	#define HWRM_FWD_INPUT_CMPL_TYPE_MASK	UINT32_C(0x3f)
1725 	#define HWRM_FWD_INPUT_CMPL_TYPE_SFT	0
1726 	/* Forwarded HWRM Request */
1727 	#define HWRM_FWD_INPUT_CMPL_TYPE_HWRM_FWD_INPUT	UINT32_C(0x22)
1728 	/* Length of forwarded request in bytes. */
1729 	#define HWRM_FWD_REQ_CMPL_REQ_LEN_MASK	UINT32_C(0xffc0)
1730 	#define HWRM_FWD_REQ_CMPL_REQ_LEN_SFT	6
1731 	uint16_t source_id;
1732 	/*
1733 	 * Source ID of this request. Typically used in forwarding
1734 	 * requests and responses. 0x0 - 0xFFF8 - Used for function ids
1735 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF -
1736 	 * HWRM
1737 	 */
1738 	uint32_t unused_0;
1739 	/* unused1 is 32 b */
1740 	uint32_t req_buf_addr_v[2];
1741 	/* Address of forwarded request. */
1742 	/*
1743 	 * This value is written by the NIC such that it will be
1744 	 * different for each pass through the completion queue. The
1745 	 * even passes will write 1. The odd passes will write 0.
1746 	 */
1747 	#define HWRM_FWD_INPUT_CMPL_V	UINT32_C(0x1)
1748 	/* Address of forwarded request. */
1749 	#define HWRM_FWD_REQ_CMPL_REQ_BUF_ADDR_MASK	UINT32_C(0xfffffffe)
1750 	#define HWRM_FWD_REQ_CMPL_REQ_BUF_ADDR_SFT	1
1751 } __attribute__((packed));
1752 
1753 /* HWRM Asynchronous Event Completion Record	(16 bytes) */
1754 struct hwrm_async_event_cmpl {
1755 	uint16_t type;
1756 	/* unused1 is 10 b */
1757 	/*
1758 	 * This field indicates the exact type of the completion. By
1759 	 * convention, the LSB identifies the length of the record in
1760 	 * 16B units. Even values indicate 16B records. Odd values
1761 	 * indicate 32B records.
1762 	 */
1763 	#define HWRM_ASYNC_EVENT_CMPL_TYPE_MASK	UINT32_C(0x3f)
1764 	#define HWRM_ASYNC_EVENT_CMPL_TYPE_SFT	0
1765 	/* HWRM Asynchronous Event Information */
1766 	#define HWRM_ASYNC_EVENT_CMPL_TYPE_HWRM_ASYNC_EVENT	UINT32_C(0x2e)
1767 	/* unused1 is 10 b */
1768 	uint16_t event_id;
1769 	/* Identifiers of events. */
1770 	/* Link status changed */
1771 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE UINT32_C(0x0)
1772 	/* Link MTU changed */
1773 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_MTU_CHANGE	UINT32_C(0x1)
1774 	/* Link speed changed */
1775 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CHANGE UINT32_C(0x2)
1776 	/* DCB Configuration changed */
1777 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DCB_CONFIG_CHANGE UINT32_C(0x3)
1778 	/* Port connection not allowed */
1779 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_CONN_NOT_ALLOWED UINT32_C(0x4)
1780 	/* Link speed configuration was not allowed */
1781 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_NOT_ALLOWED \
1782 		UINT32_C(0x5)
1783 	/* Link speed configuration change */
1784 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_CHANGE UINT32_C(0x6)
1785 	/* Port PHY configuration change */
1786 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_PHY_CFG_CHANGE UINT32_C(0x7)
1787 	/* Function driver unloaded */
1788 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_DRVR_UNLOAD UINT32_C(0x10)
1789 	/* Function driver loaded */
1790 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_DRVR_LOAD	UINT32_C(0x11)
1791 	/* Function FLR related processing has completed */
1792 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_FLR_PROC_CMPLT UINT32_C(0x12)
1793 	/* PF driver unloaded */
1794 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_UNLOAD	UINT32_C(0x20)
1795 	/* PF driver loaded */
1796 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_LOAD	UINT32_C(0x21)
1797 	/* VF Function Level Reset	(FLR) */
1798 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_FLR	UINT32_C(0x30)
1799 	/* VF MAC Address Change */
1800 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_MAC_ADDR_CHANGE UINT32_C(0x31)
1801 	/* PF-VF communication channel status change. */
1802 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_VF_COMM_STATUS_CHANGE \
1803 		UINT32_C(0x32)
1804 	/* VF Configuration Change */
1805 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_CFG_CHANGE	UINT32_C(0x33)
1806 	/* LLFC/PFC Configuration Change */
1807 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LLFC_PFC_CHANGE UINT32_C(0x34)
1808 	/* HWRM Error */
1809 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_HWRM_ERROR	UINT32_C(0xff)
1810 	uint32_t event_data2;
1811 	/* Event specific data */
1812 	uint8_t opaque_v;
1813 	/* opaque is 7 b */
1814 	/*
1815 	 * This value is written by the NIC such that it will be
1816 	 * different for each pass through the completion queue. The
1817 	 * even passes will write 1. The odd passes will write 0.
1818 	 */
1819 	#define HWRM_ASYNC_EVENT_CMPL_V	UINT32_C(0x1)
1820 	/* opaque is 7 b */
1821 	#define HWRM_ASYNC_EVENT_CMPL_OPAQUE_MASK	UINT32_C(0xfe)
1822 	#define HWRM_ASYNC_EVENT_CMPL_OPAQUE_SFT	1
1823 	uint8_t timestamp_lo;
1824 	/* 8-lsb timestamp from POR	(100-msec resolution) */
1825 	uint16_t timestamp_hi;
1826 	/* 16-lsb timestamp from POR	(100-msec resolution) */
1827 	uint32_t event_data1;
1828 	/* Event specific data */
1829 } __attribute__((packed));
1830 
1831 /* hwrm_ver_get */
1832 /*
1833  * Description: This function is called by a driver to determine the HWRM
1834  * interface version supported by the HWRM firmware, the version of HWRM
1835  * firmware implementation, the name of HWRM firmware, the versions of other
1836  * embedded firmwares, and the names of other embedded firmwares, etc. Any
1837  * interface or firmware version with major = 0, minor = 0, and update = 0 shall
1838  * be considered an invalid version.
1839  */
1840 /* Input	(24 bytes) */
1841 struct hwrm_ver_get_input {
1842 	uint16_t req_type;
1843 	/*
1844 	 * This value indicates what type of request this is. The format
1845 	 * for the rest of the command is determined by this field.
1846 	 */
1847 	uint16_t cmpl_ring;
1848 	/*
1849 	 * This value indicates the what completion ring the request
1850 	 * will be optionally completed on. If the value is -1, then no
1851 	 * CR completion will be generated. Any other value must be a
1852 	 * valid CR ring_id value for this function.
1853 	 */
1854 	uint16_t seq_id;
1855 	/* This value indicates the command sequence number. */
1856 	uint16_t target_id;
1857 	/*
1858 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
1859 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
1860 	 * - HWRM
1861 	 */
1862 	uint64_t resp_addr;
1863 	/*
1864 	 * This is the host address where the response will be written
1865 	 * when the request is complete. This area must be 16B aligned
1866 	 * and must be cleared to zero before the request is made.
1867 	 */
1868 	uint8_t hwrm_intf_maj;
1869 	/*
1870 	 * This field represents the major version of HWRM interface
1871 	 * specification supported by the driver HWRM implementation.
1872 	 * The interface major version is intended to change only when
1873 	 * non backward compatible changes are made to the HWRM
1874 	 * interface specification.
1875 	 */
1876 	uint8_t hwrm_intf_min;
1877 	/*
1878 	 * This field represents the minor version of HWRM interface
1879 	 * specification supported by the driver HWRM implementation. A
1880 	 * change in interface minor version is used to reflect
1881 	 * significant backward compatible modification to HWRM
1882 	 * interface specification. This can be due to addition or
1883 	 * removal of functionality. HWRM interface specifications with
1884 	 * the same major version but different minor versions are
1885 	 * compatible.
1886 	 */
1887 	uint8_t hwrm_intf_upd;
1888 	/*
1889 	 * This field represents the update version of HWRM interface
1890 	 * specification supported by the driver HWRM implementation.
1891 	 * The interface update version is used to reflect minor changes
1892 	 * or bug fixes to a released HWRM interface specification.
1893 	 */
1894 	uint8_t unused_0[5];
1895 } __attribute__((packed));
1896 
1897 /* Output	(128 bytes) */
1898 struct hwrm_ver_get_output {
1899 	uint16_t error_code;
1900 	/*
1901 	 * Pass/Fail or error type Note: receiver to verify the in
1902 	 * parameters, and fail the call with an error when appropriate
1903 	 */
1904 	uint16_t req_type;
1905 	/* This field returns the type of original request. */
1906 	uint16_t seq_id;
1907 	/* This field provides original sequence number of the command. */
1908 	uint16_t resp_len;
1909 	/*
1910 	 * This field is the length of the response in bytes. The last
1911 	 * byte of the response is a valid flag that will read as '1'
1912 	 * when the command has been completely written to memory.
1913 	 */
1914 	uint8_t hwrm_intf_maj;
1915 	/*
1916 	 * This field represents the major version of HWRM interface
1917 	 * specification supported by the HWRM implementation. The
1918 	 * interface major version is intended to change only when non
1919 	 * backward compatible changes are made to the HWRM interface
1920 	 * specification. A HWRM implementation that is compliant with
1921 	 * this specification shall provide value of 1 in this field.
1922 	 */
1923 	uint8_t hwrm_intf_min;
1924 	/*
1925 	 * This field represents the minor version of HWRM interface
1926 	 * specification supported by the HWRM implementation. A change
1927 	 * in interface minor version is used to reflect significant
1928 	 * backward compatible modification to HWRM interface
1929 	 * specification. This can be due to addition or removal of
1930 	 * functionality. HWRM interface specifications with the same
1931 	 * major version but different minor versions are compatible. A
1932 	 * HWRM implementation that is compliant with this specification
1933 	 * shall provide value of 2 in this field.
1934 	 */
1935 	uint8_t hwrm_intf_upd;
1936 	/*
1937 	 * This field represents the update version of HWRM interface
1938 	 * specification supported by the HWRM implementation. The
1939 	 * interface update version is used to reflect minor changes or
1940 	 * bug fixes to a released HWRM interface specification. A HWRM
1941 	 * implementation that is compliant with this specification
1942 	 * shall provide value of 2 in this field.
1943 	 */
1944 	uint8_t hwrm_intf_rsvd;
1945 	uint8_t hwrm_fw_maj;
1946 	/*
1947 	 * This field represents the major version of HWRM firmware. A
1948 	 * change in firmware major version represents a major firmware
1949 	 * release.
1950 	 */
1951 	uint8_t hwrm_fw_min;
1952 	/*
1953 	 * This field represents the minor version of HWRM firmware. A
1954 	 * change in firmware minor version represents significant
1955 	 * firmware functionality changes.
1956 	 */
1957 	uint8_t hwrm_fw_bld;
1958 	/*
1959 	 * This field represents the build version of HWRM firmware. A
1960 	 * change in firmware build version represents bug fixes to a
1961 	 * released firmware.
1962 	 */
1963 	uint8_t hwrm_fw_rsvd;
1964 	/*
1965 	 * This field is a reserved field. This field can be used to
1966 	 * represent firmware branches or customer specific releases
1967 	 * tied to a specific	(major,minor,update) version of the HWRM
1968 	 * firmware.
1969 	 */
1970 	uint8_t mgmt_fw_maj;
1971 	/*
1972 	 * This field represents the major version of mgmt firmware. A
1973 	 * change in major version represents a major release.
1974 	 */
1975 	uint8_t mgmt_fw_min;
1976 	/*
1977 	 * This field represents the minor version of mgmt firmware. A
1978 	 * change in minor version represents significant functionality
1979 	 * changes.
1980 	 */
1981 	uint8_t mgmt_fw_bld;
1982 	/*
1983 	 * This field represents the build version of mgmt firmware. A
1984 	 * change in update version represents bug fixes.
1985 	 */
1986 	uint8_t mgmt_fw_rsvd;
1987 	/*
1988 	 * This field is a reserved field. This field can be used to
1989 	 * represent firmware branches or customer specific releases
1990 	 * tied to a specific	(major,minor,update) version
1991 	 */
1992 	uint8_t netctrl_fw_maj;
1993 	/*
1994 	 * This field represents the major version of network control
1995 	 * firmware. A change in major version represents a major
1996 	 * release.
1997 	 */
1998 	uint8_t netctrl_fw_min;
1999 	/*
2000 	 * This field represents the minor version of network control
2001 	 * firmware. A change in minor version represents significant
2002 	 * functionality changes.
2003 	 */
2004 	uint8_t netctrl_fw_bld;
2005 	/*
2006 	 * This field represents the build version of network control
2007 	 * firmware. A change in update version represents bug fixes.
2008 	 */
2009 	uint8_t netctrl_fw_rsvd;
2010 	/*
2011 	 * This field is a reserved field. This field can be used to
2012 	 * represent firmware branches or customer specific releases
2013 	 * tied to a specific	(major,minor,update) version
2014 	 */
2015 	uint32_t dev_caps_cfg;
2016 	/*
2017 	 * This field is used to indicate device's capabilities and
2018 	 * configurations.
2019 	 */
2020 	/*
2021 	 * If set to 1, then secure firmware update behavior is
2022 	 * supported. If set to 0, then secure firmware update behavior
2023 	 * is not supported.
2024 	 */
2025 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SECURE_FW_UPD_SUPPORTED  \
2026 		UINT32_C(0x1)
2027 	/*
2028 	 * If set to 1, then firmware based DCBX agent is supported. If
2029 	 * set to 0, then firmware based DCBX agent capability is not
2030 	 * supported on this device.
2031 	 */
2032 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_FW_DCBX_AGENT_SUPPORTED  \
2033 		UINT32_C(0x2)
2034 	/*
2035 	 * If set to 1, then HWRM short command format is supported. If
2036 	 * set to 0, then HWRM short command format is not supported.
2037 	 */
2038 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SHORT_CMD_SUPPORTED	 \
2039 		UINT32_C(0x4)
2040 	/*
2041 	 * If set to 1, then HWRM short command format is required. If
2042 	 * set to 0, then HWRM short command format is not required.
2043 	 */
2044 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SHORT_CMD_INPUTUIRED	\
2045 		UINT32_C(0x8)
2046 	uint8_t roce_fw_maj;
2047 	/*
2048 	 * This field represents the major version of RoCE firmware. A
2049 	 * change in major version represents a major release.
2050 	 */
2051 	uint8_t roce_fw_min;
2052 	/*
2053 	 * This field represents the minor version of RoCE firmware. A
2054 	 * change in minor version represents significant functionality
2055 	 * changes.
2056 	 */
2057 	uint8_t roce_fw_bld;
2058 	/*
2059 	 * This field represents the build version of RoCE firmware. A
2060 	 * change in update version represents bug fixes.
2061 	 */
2062 	uint8_t roce_fw_rsvd;
2063 	/*
2064 	 * This field is a reserved field. This field can be used to
2065 	 * represent firmware branches or customer specific releases
2066 	 * tied to a specific	(major,minor,update) version
2067 	 */
2068 	char hwrm_fw_name[16];
2069 	/*
2070 	 * This field represents the name of HWRM FW	(ASCII chars with
2071 	 * NULL at the end).
2072 	 */
2073 	char mgmt_fw_name[16];
2074 	/*
2075 	 * This field represents the name of mgmt FW	(ASCII chars with
2076 	 * NULL at the end).
2077 	 */
2078 	char netctrl_fw_name[16];
2079 	/*
2080 	 * This field represents the name of network control firmware
2081 	 *	(ASCII chars with NULL at the end).
2082 	 */
2083 	uint32_t reserved2[4];
2084 	/*
2085 	 * This field is reserved for future use. The responder should
2086 	 * set it to 0. The requester should ignore this field.
2087 	 */
2088 	char roce_fw_name[16];
2089 	/*
2090 	 * This field represents the name of RoCE FW	(ASCII chars with
2091 	 * NULL at the end).
2092 	 */
2093 	uint16_t chip_num;
2094 	/* This field returns the chip number. */
2095 	uint8_t chip_rev;
2096 	/* This field returns the revision of chip. */
2097 	uint8_t chip_metal;
2098 	/* This field returns the chip metal number. */
2099 	uint8_t chip_bond_id;
2100 	/* This field returns the bond id of the chip. */
2101 	uint8_t chip_platform_type;
2102 	/*
2103 	 * This value indicates the type of platform used for chip
2104 	 * implementation.
2105 	 */
2106 	/* ASIC */
2107 	#define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_ASIC	UINT32_C(0x0)
2108 	/* FPGA platform of the chip. */
2109 	#define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_FPGA	UINT32_C(0x1)
2110 	/* Palladium platform of the chip. */
2111 	#define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_PALLADIUM UINT32_C(0x2)
2112 	uint16_t max_req_win_len;
2113 	/*
2114 	 * This field returns the maximum value of request window that
2115 	 * is supported by the HWRM. The request window is mapped into
2116 	 * device address space using MMIO.
2117 	 */
2118 	uint16_t max_resp_len;
2119 	/* This field returns the maximum value of response buffer in bytes. */
2120 	uint16_t def_req_timeout;
2121 	/*
2122 	 * This field returns the default request timeout value in
2123 	 * milliseconds.
2124 	 */
2125 	uint8_t init_pending;
2126 	/*
2127 	 * This field will indicate if any subsystems is not fully
2128 	 * initialized.
2129 	 */
2130 	/*
2131 	 * If set to 1, device is not ready. If set to 0, device is
2132 	 * ready to accept all HWRM commands.
2133 	 */
2134 	#define HWRM_VER_GET_OUTPUT_INIT_PENDING_DEV_NOT_RDY UINT32_C(0x1)
2135 	uint8_t unused_0;
2136 	uint8_t unused_1;
2137 	uint8_t valid;
2138 	/*
2139 	 * This field is used in Output records to indicate that the
2140 	 * output is completely written to RAM. This field should be
2141 	 * read as '1' to indicate that the output has been completely
2142 	 * written. When writing a command completion or response to an
2143 	 * internal processor, the order of writes has to be such that
2144 	 * this field is written last.
2145 	 */
2146 } __attribute__((packed));
2147 
2148 /* hwrm_func_reset */
2149 /*
2150  * Description: This command resets a hardware function	(PCIe function) and
2151  * frees any resources used by the function. This command shall be initiated by
2152  * the driver after an FLR has occurred to prepare the function for re-use. This
2153  * command may also be initiated by a driver prior to doing it's own
2154  * configuration. This command puts the function into the reset state. In the
2155  * reset state, global and port related features of the chip are not available.
2156  */
2157 /*
2158  * Note: This command will reset a function that has already been disabled or
2159  * idled. The command returns all the resources owned by the function so a new
2160  * driver may allocate and configure resources normally.
2161  */
2162 /* Input	(24 bytes) */
2163 struct hwrm_func_reset_input {
2164 	uint16_t req_type;
2165 	/*
2166 	 * This value indicates what type of request this is. The format
2167 	 * for the rest of the command is determined by this field.
2168 	 */
2169 	uint16_t cmpl_ring;
2170 	/*
2171 	 * This value indicates the what completion ring the request
2172 	 * will be optionally completed on. If the value is -1, then no
2173 	 * CR completion will be generated. Any other value must be a
2174 	 * valid CR ring_id value for this function.
2175 	 */
2176 	uint16_t seq_id;
2177 	/* This value indicates the command sequence number. */
2178 	uint16_t target_id;
2179 	/*
2180 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
2181 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
2182 	 * - HWRM
2183 	 */
2184 	uint64_t resp_addr;
2185 	/*
2186 	 * This is the host address where the response will be written
2187 	 * when the request is complete. This area must be 16B aligned
2188 	 * and must be cleared to zero before the request is made.
2189 	 */
2190 	uint32_t enables;
2191 	/* This bit must be '1' for the vf_id_valid field to be configured. */
2192 	#define HWRM_FUNC_RESET_INPUT_ENABLES_VF_ID_VALID	UINT32_C(0x1)
2193 	uint16_t vf_id;
2194 	/*
2195 	 * The ID of the VF that this PF is trying to reset. Only the
2196 	 * parent PF shall be allowed to reset a child VF. A parent PF
2197 	 * driver shall use this field only when a specific child VF is
2198 	 * requested to be reset.
2199 	 */
2200 	uint8_t func_reset_level;
2201 	/* This value indicates the level of a function reset. */
2202 	/*
2203 	 * Reset the caller function and its children
2204 	 * VFs	(if any). If no children functions exist,
2205 	 * then reset the caller function only.
2206 	 */
2207 	#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETALL	UINT32_C(0x0)
2208 	/* Reset the caller function only */
2209 	#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETME	UINT32_C(0x1)
2210 	/*
2211 	 * Reset all children VFs of the caller function
2212 	 * driver if the caller is a PF driver. It is an
2213 	 * error to specify this level by a VF driver.
2214 	 * It is an error to specify this level by a PF
2215 	 * driver with no children VFs.
2216 	 */
2217 	#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETCHILDREN \
2218 		UINT32_C(0x2)
2219 	/*
2220 	 * Reset a specific VF of the caller function
2221 	 * driver if the caller is the parent PF driver.
2222 	 * It is an error to specify this level by a VF
2223 	 * driver. It is an error to specify this level
2224 	 * by a PF driver that is not the parent of the
2225 	 * VF that is being requested to reset.
2226 	 */
2227 	#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETVF	UINT32_C(0x3)
2228 	uint8_t unused_0;
2229 } __attribute__((packed));
2230 
2231 /* Output	(16 bytes) */
2232 struct hwrm_func_reset_output {
2233 	uint16_t error_code;
2234 	/*
2235 	 * Pass/Fail or error type Note: receiver to verify the in
2236 	 * parameters, and fail the call with an error when appropriate
2237 	 */
2238 	uint16_t req_type;
2239 	/* This field returns the type of original request. */
2240 	uint16_t seq_id;
2241 	/* This field provides original sequence number of the command. */
2242 	uint16_t resp_len;
2243 	/*
2244 	 * This field is the length of the response in bytes. The last
2245 	 * byte of the response is a valid flag that will read as '1'
2246 	 * when the command has been completely written to memory.
2247 	 */
2248 	uint32_t unused_0;
2249 	uint8_t unused_1;
2250 	uint8_t unused_2;
2251 	uint8_t unused_3;
2252 	uint8_t valid;
2253 	/*
2254 	 * This field is used in Output records to indicate that the
2255 	 * output is completely written to RAM. This field should be
2256 	 * read as '1' to indicate that the output has been completely
2257 	 * written. When writing a command completion or response to an
2258 	 * internal processor, the order of writes has to be such that
2259 	 * this field is written last.
2260 	 */
2261 } __attribute__((packed));
2262 
2263 /* hwrm_func_vf_cfg */
2264 /*
2265  * Description: This command allows configuration of a VF by its driver. If this
2266  * function is called by a PF driver, then the HWRM shall fail this command. If
2267  * guest VLAN and/or MAC address are provided in this command, then the HWRM
2268  * shall set up appropriate MAC/VLAN filters for the VF that is being
2269  * configured. A VF driver should set VF MTU/MRU using this command prior to
2270  * allocating RX VNICs or TX rings for the corresponding VF.
2271  */
2272 /* Input (32 bytes) */
2273 struct hwrm_func_vf_cfg_input {
2274 	uint16_t req_type;
2275 	/*
2276 	 * This value indicates what type of request this is. The format for the
2277 	 * rest of the command is determined by this field.
2278 	 */
2279 	uint16_t cmpl_ring;
2280 	/*
2281 	 * This value indicates the what completion ring the request will be
2282 	 * optionally completed on. If the value is -1, then no CR completion
2283 	 * will be generated. Any other value must be a valid CR ring_id value
2284 	 * for this function.
2285 	 */
2286 	uint16_t seq_id;
2287 	/* This value indicates the command sequence number. */
2288 	uint16_t target_id;
2289 	/*
2290 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function ids
2291 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF - HWRM
2292 	 */
2293 	uint64_t resp_addr;
2294 	/*
2295 	 * This is the host address where the response will be written when the
2296 	 * request is complete. This area must be 16B aligned and must be
2297 	 * cleared to zero before the request is made.
2298 	 */
2299 	uint32_t enables;
2300 	/* This bit must be '1' for the mtu field to be configured. */
2301 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_MTU                 UINT32_C(0x1)
2302 	/* This bit must be '1' for the guest_vlan field to be configured. */
2303 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_GUEST_VLAN          UINT32_C(0x2)
2304 	/*
2305 	 * This bit must be '1' for the async_event_cr field to be configured.
2306 	 */
2307 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_ASYNC_EVENT_CR      UINT32_C(0x4)
2308 	/* This bit must be '1' for the dflt_mac_addr field to be configured. */
2309 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_DFLT_MAC_ADDR       UINT32_C(0x8)
2310 	uint16_t mtu;
2311 	/*
2312 	 * The maximum transmission unit requested on the function. The HWRM
2313 	 * should make sure that the mtu of the function does not exceed the mtu
2314 	 * of the physical port that this function is associated with. In
2315 	 * addition to requesting mtu per function, it is possible to configure
2316 	 * mtu per transmit ring. By default, the mtu of each transmit ring
2317 	 * associated with a function is equal to the mtu of the function. The
2318 	 * HWRM should make sure that the mtu of each transmit ring that is
2319 	 * assigned to a function has a valid mtu.
2320 	 */
2321 	uint16_t guest_vlan;
2322 	/*
2323 	 * The guest VLAN for the function being configured. This field's format
2324 	 * is same as 802.1Q Tag's Tag Control Information (TCI) format that
2325 	 * includes both Priority Code Point (PCP) and VLAN Identifier (VID).
2326 	 */
2327 	uint16_t async_event_cr;
2328 	/*
2329 	 * ID of the target completion ring for receiving asynchronous event
2330 	 * completions. If this field is not valid, then the HWRM shall use the
2331 	 * default completion ring of the function that is being configured as
2332 	 * the target completion ring for providing any asynchronous event
2333 	 * completions for that function. If this field is valid, then the HWRM
2334 	 * shall use the completion ring identified by this ID as the target
2335 	 * completion ring for providing any asynchronous event completions for
2336 	 * the function that is being configured.
2337 	 */
2338 	uint8_t dflt_mac_addr[6];
2339 	/*
2340 	 * This value is the current MAC address requested by the VF driver to
2341 	 * be configured on this VF. A value of 00-00-00-00-00-00 indicates no
2342 	 * MAC address configuration is requested by the VF driver. The parent
2343 	 * PF driver may reject or overwrite this MAC address.
2344 	 */
2345 } __attribute__((packed));
2346 
2347 /* Output (16 bytes) */
2348 
2349 struct hwrm_func_vf_cfg_output {
2350 	uint16_t error_code;
2351 	/*
2352 	 * Pass/Fail or error type Note: receiver to verify the in parameters,
2353 	 * and fail the call with an error when appropriate
2354 	 */
2355 	uint16_t req_type;
2356 	/* This field returns the type of original request. */
2357 	uint16_t seq_id;
2358 	/* This field provides original sequence number of the command. */
2359 	uint16_t resp_len;
2360 	/*
2361 	 * This field is the length of the response in bytes. The last
2362 	 * byte of the response is a valid flag that will read as '1'
2363 	 * when the command has been completely written to memory.
2364 	 */
2365 	uint32_t unused_0;
2366 	uint8_t unused_1;
2367 	uint8_t unused_2;
2368 	uint8_t unused_3;
2369 	uint8_t valid;
2370 	/*
2371 	 * This field is used in Output records to indicate that the output is
2372 	 * completely written to RAM. This field should be read as '1' to
2373 	 * indicate that the output has been completely written. When writing a
2374 	 * command completion or response to an internal processor, the order of
2375 	 * writes has to be such that this field is written last.
2376 	 */
2377 } __attribute__((packed));
2378 
2379 /* hwrm_func_qcaps */
2380 /*
2381  * Description: This command returns capabilities of a function. The input FID
2382  * value is used to indicate what function is being queried. This allows a
2383  * physical function driver to query virtual functions that are children of the
2384  * physical function. The output FID value is needed to configure Rings and
2385  * MSI-X vectors so their DMA operations appear correctly on the PCI bus.
2386  */
2387 /* Input	(24 bytes) */
2388 struct hwrm_func_qcaps_input {
2389 	uint16_t req_type;
2390 	/*
2391 	 * This value indicates what type of request this is. The format
2392 	 * for the rest of the command is determined by this field.
2393 	 */
2394 	uint16_t cmpl_ring;
2395 	/*
2396 	 * This value indicates the what completion ring the request
2397 	 * will be optionally completed on. If the value is -1, then no
2398 	 * CR completion will be generated. Any other value must be a
2399 	 * valid CR ring_id value for this function.
2400 	 */
2401 	uint16_t seq_id;
2402 	/* This value indicates the command sequence number. */
2403 	uint16_t target_id;
2404 	/*
2405 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
2406 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
2407 	 * - HWRM
2408 	 */
2409 	uint64_t resp_addr;
2410 	/*
2411 	 * This is the host address where the response will be written
2412 	 * when the request is complete. This area must be 16B aligned
2413 	 * and must be cleared to zero before the request is made.
2414 	 */
2415 	uint16_t fid;
2416 	/*
2417 	 * Function ID of the function that is being queried. 0xFF...
2418 	 *	(All Fs) if the query is for the requesting function.
2419 	 */
2420 	uint16_t unused_0[3];
2421 } __attribute__((packed));
2422 
2423 /* Output	(80 bytes) */
2424 struct hwrm_func_qcaps_output {
2425 	uint16_t error_code;
2426 	/*
2427 	 * Pass/Fail or error type Note: receiver to verify the in
2428 	 * parameters, and fail the call with an error when appropriate
2429 	 */
2430 	uint16_t req_type;
2431 	/* This field returns the type of original request. */
2432 	uint16_t seq_id;
2433 	/* This field provides original sequence number of the command. */
2434 	uint16_t resp_len;
2435 	/*
2436 	 * This field is the length of the response in bytes. The last
2437 	 * byte of the response is a valid flag that will read as '1'
2438 	 * when the command has been completely written to memory.
2439 	 */
2440 	uint16_t fid;
2441 	/*
2442 	 * FID value. This value is used to identify operations on the
2443 	 * PCI bus as belonging to a particular PCI function.
2444 	 */
2445 	uint16_t port_id;
2446 	/*
2447 	 * Port ID of port that this function is associated with. Valid
2448 	 * only for the PF. 0xFF...	(All Fs) if this function is not
2449 	 * associated with any port. 0xFF...	(All Fs) if this function
2450 	 * is called from a VF.
2451 	 */
2452 	uint32_t flags;
2453 	/* If 1, then Push mode is supported on this function. */
2454 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_PUSH_MODE_SUPPORTED UINT32_C(0x1)
2455 	/*
2456 	 * If 1, then the global MSI-X auto-masking is enabled for the
2457 	 * device.
2458 	 */
2459 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_GLOBAL_MSIX_AUTOMASKING	 \
2460 		UINT32_C(0x2)
2461 	/*
2462 	 * If 1, then the Precision Time Protocol	(PTP) processing is
2463 	 * supported on this function. The HWRM should enable PTP on
2464 	 * only a single Physical Function	(PF) per port.
2465 	 */
2466 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_PTP_SUPPORTED	UINT32_C(0x4)
2467 	/*
2468 	 * If 1, then RDMA over Converged Ethernet	(RoCE) v1 is
2469 	 * supported on this function.
2470 	 */
2471 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ROCE_V1_SUPPORTED UINT32_C(0x8)
2472 	/*
2473 	 * If 1, then RDMA over Converged Ethernet	(RoCE) v2 is
2474 	 * supported on this function.
2475 	 */
2476 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ROCE_V2_SUPPORTED UINT32_C(0x10)
2477 	/*
2478 	 * If 1, then control and configuration of WoL magic packet are
2479 	 * supported on this function.
2480 	 */
2481 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_WOL_MAGICPKT_SUPPORTED	\
2482 		UINT32_C(0x20)
2483 	/*
2484 	 * If 1, then control and configuration of bitmap pattern packet
2485 	 * are supported on this function.
2486 	 */
2487 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_WOL_BMP_SUPPORTED UINT32_C(0x40)
2488 	/*
2489 	 * If set to 1, then the control and configuration of rate limit
2490 	 * of an allocated TX ring on the queried function is supported.
2491 	 */
2492 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_TX_RING_RL_SUPPORTED UINT32_C(0x80)
2493 	/*
2494 	 * If 1, then control and configuration of minimum and maximum
2495 	 * bandwidths are supported on the queried function.
2496 	 */
2497 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_TX_BW_CFG_SUPPORTED UINT32_C(0x100)
2498 	/*
2499 	 * If the query is for a VF, then this flag shall be ignored. If
2500 	 * this query is for a PF and this flag is set to 1, then the PF
2501 	 * has the capability to set the rate limits on the TX rings of
2502 	 * its children VFs. If this query is for a PF and this flag is
2503 	 * set to 0, then the PF does not have the capability to set the
2504 	 * rate limits on the TX rings of its children VFs.
2505 	 */
2506 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_VF_TX_RING_RL_SUPPORTED	 \
2507 		UINT32_C(0x200)
2508 	/*
2509 	 * If the query is for a VF, then this flag shall be ignored. If
2510 	 * this query is for a PF and this flag is set to 1, then the PF
2511 	 * has the capability to set the minimum and/or maximum
2512 	 * bandwidths for its children VFs. If this query is for a PF
2513 	 * and this flag is set to 0, then the PF does not have the
2514 	 * capability to set the minimum or maximum bandwidths for its
2515 	 * children VFs.
2516 	 */
2517 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_VF_BW_CFG_SUPPORTED UINT32_C(0x400)
2518 	/*
2519 	 * Standard TX Ring mode is used for the allocation of TX ring
2520 	 * and underlying scheduling resources that allow bandwidth
2521 	 * reservation and limit settings on the queried function. If
2522 	 * set to 1, then standard TX ring mode is supported on the
2523 	 * queried function. If set to 0, then standard TX ring mode is
2524 	 * not available on the queried function.
2525 	 */
2526 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_STD_TX_RING_MODE_SUPPORTED   \
2527 		UINT32_C(0x800)
2528 	uint8_t mac_address[6];
2529 	/*
2530 	 * This value is current MAC address configured for this
2531 	 * function. A value of 00-00-00-00-00-00 indicates no MAC
2532 	 * address is currently configured.
2533 	 */
2534 	uint16_t max_rsscos_ctx;
2535 	/*
2536 	 * The maximum number of RSS/COS contexts that can be allocated
2537 	 * to the function.
2538 	 */
2539 	uint16_t max_cmpl_rings;
2540 	/*
2541 	 * The maximum number of completion rings that can be allocated
2542 	 * to the function.
2543 	 */
2544 	uint16_t max_tx_rings;
2545 	/*
2546 	 * The maximum number of transmit rings that can be allocated to
2547 	 * the function.
2548 	 */
2549 	uint16_t max_rx_rings;
2550 	/*
2551 	 * The maximum number of receive rings that can be allocated to
2552 	 * the function.
2553 	 */
2554 	uint16_t max_l2_ctxs;
2555 	/*
2556 	 * The maximum number of L2 contexts that can be allocated to
2557 	 * the function.
2558 	 */
2559 	uint16_t max_vnics;
2560 	/*
2561 	 * The maximum number of VNICs that can be allocated to the
2562 	 * function.
2563 	 */
2564 	uint16_t first_vf_id;
2565 	/*
2566 	 * The identifier for the first VF enabled on a PF. This is
2567 	 * valid only on the PF with SR-IOV enabled. 0xFF...	(All Fs) if
2568 	 * this command is called on a PF with SR-IOV disabled or on a
2569 	 * VF.
2570 	 */
2571 	uint16_t max_vfs;
2572 	/*
2573 	 * The maximum number of VFs that can be allocated to the
2574 	 * function. This is valid only on the PF with SR-IOV enabled.
2575 	 * 0xFF...	(All Fs) if this command is called on a PF with SR-
2576 	 * IOV disabled or on a VF.
2577 	 */
2578 	uint16_t max_stat_ctx;
2579 	/*
2580 	 * The maximum number of statistic contexts that can be
2581 	 * allocated to the function.
2582 	 */
2583 	uint32_t max_encap_records;
2584 	/*
2585 	 * The maximum number of Encapsulation records that can be
2586 	 * offloaded by this function.
2587 	 */
2588 	uint32_t max_decap_records;
2589 	/*
2590 	 * The maximum number of decapsulation records that can be
2591 	 * offloaded by this function.
2592 	 */
2593 	uint32_t max_tx_em_flows;
2594 	/*
2595 	 * The maximum number of Exact Match	(EM) flows that can be
2596 	 * offloaded by this function on the TX side.
2597 	 */
2598 	uint32_t max_tx_wm_flows;
2599 	/*
2600 	 * The maximum number of Wildcard Match	(WM) flows that can be
2601 	 * offloaded by this function on the TX side.
2602 	 */
2603 	uint32_t max_rx_em_flows;
2604 	/*
2605 	 * The maximum number of Exact Match	(EM) flows that can be
2606 	 * offloaded by this function on the RX side.
2607 	 */
2608 	uint32_t max_rx_wm_flows;
2609 	/*
2610 	 * The maximum number of Wildcard Match	(WM) flows that can be
2611 	 * offloaded by this function on the RX side.
2612 	 */
2613 	uint32_t max_mcast_filters;
2614 	/*
2615 	 * The maximum number of multicast filters that can be supported
2616 	 * by this function on the RX side.
2617 	 */
2618 	uint32_t max_flow_id;
2619 	/*
2620 	 * The maximum value of flow_id that can be supported in
2621 	 * completion records.
2622 	 */
2623 	uint32_t max_hw_ring_grps;
2624 	/*
2625 	 * The maximum number of HW ring groups that can be supported on
2626 	 * this function.
2627 	 */
2628 	uint16_t max_sp_tx_rings;
2629 	/*
2630 	 * The maximum number of strict priority transmit rings that can
2631 	 * be allocated to the function. This number indicates the
2632 	 * maximum number of TX rings that can be assigned strict
2633 	 * priorities out of the maximum number of TX rings that can be
2634 	 * allocated	(max_tx_rings) to the function.
2635 	 */
2636 	uint8_t unused_0;
2637 	uint8_t valid;
2638 	/*
2639 	 * This field is used in Output records to indicate that the
2640 	 * output is completely written to RAM. This field should be
2641 	 * read as '1' to indicate that the output has been completely
2642 	 * written. When writing a command completion or response to an
2643 	 * internal processor, the order of writes has to be such that
2644 	 * this field is written last.
2645 	 */
2646 } __attribute__((packed));
2647 
2648 /* hwrm_func_qcfg */
2649 /*
2650  * Description: This command returns the current configuration of a function.
2651  * The input FID value is used to indicate what function is being queried. This
2652  * allows a physical function driver to query virtual functions that are
2653  * children of the physical function. The output FID value is needed to
2654  * configure Rings and MSI-X vectors so their DMA operations appear correctly on
2655  * the PCI bus. This command should be called by every driver after
2656  * 'hwrm_func_cfg' to get the actual number of resources allocated by the HWRM.
2657  * The values returned by hwrm_func_qcfg are the values the driver shall use.
2658  * These values may be different than what was originally requested in the
2659  * 'hwrm_func_cfg' command.
2660  */
2661 /* Input	(24 bytes) */
2662 struct hwrm_func_qcfg_input {
2663 	uint16_t req_type;
2664 	/*
2665 	 * This value indicates what type of request this is. The format
2666 	 * for the rest of the command is determined by this field.
2667 	 */
2668 	uint16_t cmpl_ring;
2669 	/*
2670 	 * This value indicates the what completion ring the request
2671 	 * will be optionally completed on. If the value is -1, then no
2672 	 * CR completion will be generated. Any other value must be a
2673 	 * valid CR ring_id value for this function.
2674 	 */
2675 	uint16_t seq_id;
2676 	/* This value indicates the command sequence number. */
2677 	uint16_t target_id;
2678 	/*
2679 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
2680 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
2681 	 * - HWRM
2682 	 */
2683 	uint64_t resp_addr;
2684 	/*
2685 	 * This is the host address where the response will be written
2686 	 * when the request is complete. This area must be 16B aligned
2687 	 * and must be cleared to zero before the request is made.
2688 	 */
2689 	uint16_t fid;
2690 	/*
2691 	 * Function ID of the function that is being queried. 0xFF...
2692 	 *	(All Fs) if the query is for the requesting function.
2693 	 */
2694 	uint16_t unused_0[3];
2695 } __attribute__((packed));
2696 
2697 /* Output	(72 bytes) */
2698 struct hwrm_func_qcfg_output {
2699 	uint16_t error_code;
2700 	/*
2701 	 * Pass/Fail or error type Note: receiver to verify the in
2702 	 * parameters, and fail the call with an error when appropriate
2703 	 */
2704 	uint16_t req_type;
2705 	/* This field returns the type of original request. */
2706 	uint16_t seq_id;
2707 	/* This field provides original sequence number of the command. */
2708 	uint16_t resp_len;
2709 	/*
2710 	 * This field is the length of the response in bytes. The last
2711 	 * byte of the response is a valid flag that will read as '1'
2712 	 * when the command has been completely written to memory.
2713 	 */
2714 	uint16_t fid;
2715 	/*
2716 	 * FID value. This value is used to identify operations on the
2717 	 * PCI bus as belonging to a particular PCI function.
2718 	 */
2719 	uint16_t port_id;
2720 	/*
2721 	 * Port ID of port that this function is associated with.
2722 	 * 0xFF...	(All Fs) if this function is not associated with any
2723 	 * port.
2724 	 */
2725 	uint16_t vlan;
2726 	/*
2727 	 * This value is the current VLAN setting for this function. The
2728 	 * value of 0 for this field indicates no priority tagging or
2729 	 * VLAN is used. This field's format is same as 802.1Q Tag's Tag
2730 	 * Control Information	(TCI) format that includes both Priority
2731 	 * Code Point	(PCP) and VLAN Identifier	(VID).
2732 	 */
2733 	uint16_t flags;
2734 	/*
2735 	 * If 1, then magic packet based Out-Of-Box WoL is enabled on
2736 	 * the port associated with this function.
2737 	 */
2738 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_OOB_WOL_MAGICPKT_ENABLED	 \
2739 		UINT32_C(0x1)
2740 	/*
2741 	 * If 1, then bitmap pattern based Out-Of-Box WoL packet is
2742 	 * enabled on the port associated with this function.
2743 	 */
2744 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_OOB_WOL_BMP_ENABLED	UINT32_C(0x2)
2745 	/*
2746 	 * If set to 1, then FW based DCBX agent is enabled and running
2747 	 * on the port associated with this function. If set to 0, then
2748 	 * DCBX agent is not running in the firmware.
2749 	 */
2750 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_FW_DCBX_AGENT_ENABLED \
2751 		UINT32_C(0x4)
2752 	/*
2753 	 * Standard TX Ring mode is used for the allocation of TX ring
2754 	 * and underlying scheduling resources that allow bandwidth
2755 	 * reservation and limit settings on the queried function. If
2756 	 * set to 1, then standard TX ring mode is enabled on the
2757 	 * queried function. If set to 0, then the standard TX ring mode
2758 	 * is disabled on the queried function. In this extended TX ring
2759 	 * resource mode, the minimum and maximum bandwidth settings are
2760 	 * not supported to allow the allocation of TX rings to span
2761 	 * multiple scheduler nodes.
2762 	 */
2763 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_STD_TX_RING_MODE_ENABLED	 \
2764 		UINT32_C(0x8)
2765 	/*
2766 	 * If set to 1 then FW based LLDP agent is enabled and running
2767 	 * on the port associated with this function. If set to 0 then
2768 	 * the LLDP agent is not running in the firmware.
2769 	 */
2770 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_FW_LLDP_AGENT_ENABLED UINT32_C(0x10)
2771 	/*
2772 	 * If set to 1, then multi-host mode is active for this
2773 	 * function. If set to 0, then multi-host mode is inactive for
2774 	 * this function or not applicable for this device.
2775 	 */
2776 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_MULTI_HOST		UINT32_C(0x20)
2777 	uint8_t mac_address[6];
2778 	/*
2779 	 * This value is current MAC address configured for this
2780 	 * function. A value of 00-00-00-00-00-00 indicates no MAC
2781 	 * address is currently configured.
2782 	 */
2783 	uint16_t pci_id;
2784 	/*
2785 	 * This value is current PCI ID of this function. If ARI is
2786 	 * enabled, then it is Bus Number	(8b):Function Number(8b).
2787 	 * Otherwise, it is Bus Number	(8b):Device Number	(4b):Function
2788 	 * Number(4b).
2789 	 */
2790 	uint16_t alloc_rsscos_ctx;
2791 	/*
2792 	 * The number of RSS/COS contexts currently allocated to the
2793 	 * function.
2794 	 */
2795 	uint16_t alloc_cmpl_rings;
2796 	/*
2797 	 * The number of completion rings currently allocated to the
2798 	 * function. This does not include the rings allocated to any
2799 	 * children functions if any.
2800 	 */
2801 	uint16_t alloc_tx_rings;
2802 	/*
2803 	 * The number of transmit rings currently allocated to the
2804 	 * function. This does not include the rings allocated to any
2805 	 * children functions if any.
2806 	 */
2807 	uint16_t alloc_rx_rings;
2808 	/*
2809 	 * The number of receive rings currently allocated to the
2810 	 * function. This does not include the rings allocated to any
2811 	 * children functions if any.
2812 	 */
2813 	uint16_t alloc_l2_ctx;
2814 	/* The allocated number of L2 contexts to the function. */
2815 	uint16_t alloc_vnics;
2816 	/* The allocated number of vnics to the function. */
2817 	uint16_t mtu;
2818 	/*
2819 	 * The maximum transmission unit of the function. For rings
2820 	 * allocated on this function, this default value is used if
2821 	 * ring MTU is not specified.
2822 	 */
2823 	uint16_t mru;
2824 	/*
2825 	 * The maximum receive unit of the function. For vnics allocated
2826 	 * on this function, this default value is used if vnic MRU is
2827 	 * not specified.
2828 	 */
2829 	uint16_t stat_ctx_id;
2830 	/* The statistics context assigned to a function. */
2831 	uint8_t port_partition_type;
2832 	/*
2833 	 * The HWRM shall return Unknown value for this field when this
2834 	 * command is used to query VF's configuration.
2835 	 */
2836 	/* Single physical function */
2837 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_SPF	UINT32_C(0x0)
2838 	/* Multiple physical functions */
2839 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_MPFS	UINT32_C(0x1)
2840 	/* Network Partitioning 1.0 */
2841 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_NPAR1_0 UINT32_C(0x2)
2842 	/* Network Partitioning 1.5 */
2843 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_NPAR1_5 UINT32_C(0x3)
2844 	/* Network Partitioning 2.0 */
2845 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_NPAR2_0 UINT32_C(0x4)
2846 	/* Unknown */
2847 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_UNKNOWN UINT32_C(0xff)
2848 	uint8_t port_pf_cnt;
2849 	/*
2850 	 * This field will indicate number of physical functions on this
2851 	 * port_partition. HWRM shall return unavail (i.e. value of 0)
2852 	 * for this field when this command is used to query VF's
2853 	 * configuration or from older firmware that doesn't support
2854 	 * this field.
2855 	 */
2856 	/* number of PFs is not available */
2857 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PF_CNT_UNAVAIL	UINT32_C(0x0)
2858 	uint16_t dflt_vnic_id;
2859 	/* The default VNIC ID assigned to a function that is being queried. */
2860 	uint16_t max_mtu_configured;
2861 	/*
2862 	 * This value specifies the MAX MTU that can be configured by
2863 	 * host drivers. This 'max_mtu_configure' can be HW max MTU or
2864 	 * OEM applications specified value. Host drivers can't
2865 	 * configure the MTU greater than this value. Host drivers
2866 	 * should read this value prior to configuring the MTU. FW will
2867 	 * fail the host request with MTU greater than
2868 	 * 'max_mtu_configured'.
2869 	 */
2870 	uint32_t min_bw;
2871 	/*
2872 	 * Minimum BW allocated for this function. The HWRM will
2873 	 * translate this value into byte counter and time interval used
2874 	 * for the scheduler inside the device. A value of 0 indicates
2875 	 * the minimum bandwidth is not configured.
2876 	 */
2877 	/* The bandwidth value. */
2878 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_MASK UINT32_C(0xfffffff)
2879 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_SFT	0
2880 	/* The granularity of the value	(bits or bytes). */
2881 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE	UINT32_C(0x10000000)
2882 	/* Value is in bits. */
2883 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_BITS	(UINT32_C(0x0) << 28)
2884 	/* Value is in bytes. */
2885 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_BYTES \
2886 		(UINT32_C(0x1) << 28)
2887 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_LAST \
2888 		FUNC_QCFG_OUTPUT_MIN_BW_SCALE_BYTES
2889 	/* bw_value_unit is 3 b */
2890 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_MASK	\
2891 		UINT32_C(0xe0000000)
2892 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_SFT	29
2893 	/* Value is in Mb or MB	(base 10). */
2894 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_MEGA \
2895 		(UINT32_C(0x0) << 29)
2896 	/* Value is in Kb or KB	(base 10). */
2897 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_KILO \
2898 		(UINT32_C(0x2) << 29)
2899 	/* Value is in bits or bytes. */
2900 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_BASE \
2901 		(UINT32_C(0x4) << 29)
2902 	/* Value is in Gb or GB	(base 10). */
2903 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_GIGA \
2904 		(UINT32_C(0x6) << 29)
2905 	/* Value is in 1/100th of a percentage of total bandwidth. */
2906 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
2907 		(UINT32_C(0x1) << 29)
2908 	/* Invalid unit */
2909 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_INVALID \
2910 		(UINT32_C(0x7) << 29)
2911 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_LAST \
2912 		FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_INVALID
2913 	uint32_t max_bw;
2914 	/*
2915 	 * Maximum BW allocated for this function. The HWRM will
2916 	 * translate this value into byte counter and time interval used
2917 	 * for the scheduler inside the device. A value of 0 indicates
2918 	 * that the maximum bandwidth is not configured.
2919 	 */
2920 	/* The bandwidth value. */
2921 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_MASK UINT32_C(0xfffffff)
2922 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_SFT	0
2923 	/* The granularity of the value	(bits or bytes). */
2924 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE	UINT32_C(0x10000000)
2925 	/* Value is in bits. */
2926 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_BITS	(UINT32_C(0x0) << 28)
2927 	/* Value is in bytes. */
2928 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_BYTES \
2929 		(UINT32_C(0x1) << 28)
2930 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_LAST \
2931 		FUNC_QCFG_OUTPUT_MAX_BW_SCALE_BYTES
2932 	/* bw_value_unit is 3 b */
2933 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_MASK	\
2934 		UINT32_C(0xe0000000)
2935 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_SFT	29
2936 	/* Value is in Mb or MB	(base 10). */
2937 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_MEGA \
2938 		(UINT32_C(0x0) << 29)
2939 	/* Value is in Kb or KB	(base 10). */
2940 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_KILO \
2941 		(UINT32_C(0x2) << 29)
2942 	/* Value is in bits or bytes. */
2943 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_BASE \
2944 		(UINT32_C(0x4) << 29)
2945 	/* Value is in Gb or GB	(base 10). */
2946 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_GIGA \
2947 		(UINT32_C(0x6) << 29)
2948 	/* Value is in 1/100th of a percentage of total bandwidth. */
2949 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
2950 		(UINT32_C(0x1) << 29)
2951 	/* Invalid unit */
2952 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_INVALID \
2953 		(UINT32_C(0x7) << 29)
2954 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_LAST \
2955 		FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_INVALID
2956 	uint8_t evb_mode;
2957 	/*
2958 	 * This value indicates the Edge virtual bridge mode for the
2959 	 * domain that this function belongs to.
2960 	 */
2961 	/* No Edge Virtual Bridging	(EVB) */
2962 	#define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_NO_EVB	UINT32_C(0x0)
2963 	/* Virtual Ethernet Bridge	(VEB) */
2964 	#define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_VEB	UINT32_C(0x1)
2965 	/* Virtual Ethernet Port Aggregator	(VEPA) */
2966 	#define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_VEPA	UINT32_C(0x2)
2967 	uint8_t unused_0;
2968 	uint16_t alloc_vfs;
2969 	/*
2970 	 * The number of VFs that are allocated to the function. This is
2971 	 * valid only on the PF with SR-IOV enabled. 0xFF...	(All Fs) if
2972 	 * this command is called on a PF with SR-IOV disabled or on a
2973 	 * VF.
2974 	 */
2975 	uint32_t alloc_mcast_filters;
2976 	/*
2977 	 * The number of allocated multicast filters for this function
2978 	 * on the RX side.
2979 	 */
2980 	uint32_t alloc_hw_ring_grps;
2981 	/* The number of allocated HW ring groups for this function. */
2982 	uint16_t alloc_sp_tx_rings;
2983 	/*
2984 	 * The number of strict priority transmit rings out of currently
2985 	 * allocated TX rings to the function	(alloc_tx_rings).
2986 	 */
2987 	uint8_t unused_1;
2988 	uint8_t valid;
2989 	/*
2990 	 * This field is used in Output records to indicate that the
2991 	 * output is completely written to RAM. This field should be
2992 	 * read as '1' to indicate that the output has been completely
2993 	 * written. When writing a command completion or response to an
2994 	 * internal processor, the order of writes has to be such that
2995 	 * this field is written last.
2996 	 */
2997 } __attribute__((packed));
2998 
2999 /* hwrm_func_vlan_qcfg */
3000 /*
3001  * Description: This command should be called by PF driver to get the current
3002  * C-TAG, S-TAG and correcponsing PCP and TPID values configured for the
3003  * function.
3004  */
3005 /* Input (24 bytes) */
3006 struct hwrm_func_vlan_qcfg_input {
3007 	uint16_t req_type;
3008 	/*
3009 	 * This value indicates what type of request this is. The format
3010 	 * for the rest of the command is determined by this field.
3011 	 */
3012 	uint16_t cmpl_ring;
3013 	/*
3014 	 * This value indicates the what completion ring the request
3015 	 * will be optionally completed on. If the value is -1, then no
3016 	 * CR completion will be generated. Any other value must be a
3017 	 * valid CR ring_id value for this function.
3018 	 */
3019 	uint16_t seq_id;
3020 	/* This value indicates the command sequence number. */
3021 	uint16_t target_id;
3022 	/*
3023 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
3024 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
3025 	 * - HWRM
3026 	 */
3027 	uint64_t resp_addr;
3028 	/*
3029 	 * This is the host address where the response will be written
3030 	 * when the request is complete. This area must be 16B aligned
3031 	 * and must be cleared to zero before the request is made.
3032 	 */
3033 	uint16_t fid;
3034 	/*
3035 	 * Function ID of the function that is being configured. If set
3036 	 * to 0xFF... (All Fs), then the configuration is for the
3037 	 * requesting function.
3038 	 */
3039 	uint16_t unused_0[3];
3040 };
3041 
3042 /* Output (40 bytes) */
3043 struct hwrm_func_vlan_qcfg_output {
3044 	uint16_t error_code;
3045 	/*
3046 	 * Pass/Fail or error type Note: receiver to verify the in
3047 	 * parameters, and fail the call with an error when appropriate
3048 	 */
3049 	uint16_t req_type;
3050 	/* This field returns the type of original request. */
3051 	uint16_t seq_id;
3052 	/* This field provides original sequence number of the command. */
3053 	uint16_t resp_len;
3054 	/*
3055 	 * This field is the length of the response in bytes. The last
3056 	 * byte of the response is a valid flag that will read as '1'
3057 	 * when the command has been completely written to memory.
3058 	 */
3059 	uint32_t unused_0;
3060 	uint8_t unused_1;
3061 	uint8_t unused_2;
3062 	uint8_t unused_3;
3063 	uint8_t valid;
3064 	/*
3065 	 * This field is used in Output records to indicate that the
3066 	 * output is completely written to RAM. This field should be
3067 	 * read as '1' to indicate that the output has been completely
3068 	 * written. When writing a command completion or response to an
3069 	 * internal processor, the order of writes has to be such that
3070 	 * this field is written last.
3071 	 */
3072 	uint16_t stag_vid;
3073 	/* S-TAG VLAN identifier configured for the function. */
3074 	uint8_t stag_pcp;
3075 	/* S-TAG PCP value configured for the function. */
3076 	uint8_t unused_4;
3077 	uint16_t stag_tpid;
3078 	/*
3079 	 * S-TAG TPID value configured for the function. This field is
3080 	 * specified in network byte order.
3081 	 */
3082 	uint16_t ctag_vid;
3083 	/* C-TAG VLAN identifier configured for the function. */
3084 	uint8_t ctag_pcp;
3085 	/* C-TAG PCP value configured for the function. */
3086 	uint8_t unused_5;
3087 	uint16_t ctag_tpid;
3088 	/*
3089 	 * C-TAG TPID value configured for the function. This field is
3090 	 * specified in network byte order.
3091 	 */
3092 	uint32_t rsvd2;
3093 	/* Future use. */
3094 	uint32_t rsvd3;
3095 	/* Future use. */
3096 	uint32_t unused_6;
3097 };
3098 
3099 /* hwrm_func_vlan_cfg */
3100 /*
3101  * Description: This command allows PF driver to configure C-TAG, S-TAG and
3102  * corresponding PCP and TPID values for a function.
3103  */
3104 /* Input (48 bytes) */
3105 struct hwrm_func_vlan_cfg_input {
3106 	uint16_t req_type;
3107 	/*
3108 	 * This value indicates what type of request this is. The format
3109 	 * for the rest of the command is determined by this field.
3110 	 */
3111 	uint16_t cmpl_ring;
3112 	/*
3113 	 * This value indicates the what completion ring the request
3114 	 * will be optionally completed on. If the value is -1, then no
3115 	 * CR completion will be generated. Any other value must be a
3116 	 * valid CR ring_id value for this function.
3117 	 */
3118 	uint16_t seq_id;
3119 	/* This value indicates the command sequence number. */
3120 	uint16_t target_id;
3121 	/*
3122 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
3123 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
3124 	 * - HWRM
3125 	 */
3126 	uint64_t resp_addr;
3127 	/*
3128 	 * This is the host address where the response will be written
3129 	 * when the request is complete. This area must be 16B aligned
3130 	 * and must be cleared to zero before the request is made.
3131 	 */
3132 	uint16_t fid;
3133 	/*
3134 	 * Function ID of the function that is being configured. If set
3135 	 * to 0xFF... (All Fs), then the configuration is for the
3136 	 * requesting function.
3137 	 */
3138 	uint8_t unused_0;
3139 	uint8_t unused_1;
3140 	uint32_t enables;
3141 	/* This bit must be '1' for the stag_vid field to be configured. */
3142 	#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_VID	UINT32_C(0x1)
3143 	/* This bit must be '1' for the ctag_vid field to be configured. */
3144 	#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_VID	UINT32_C(0x2)
3145 	/* This bit must be '1' for the stag_pcp field to be configured. */
3146 	#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_PCP	UINT32_C(0x4)
3147 	/* This bit must be '1' for the ctag_pcp field to be configured. */
3148 	#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_PCP	UINT32_C(0x8)
3149 	/* This bit must be '1' for the stag_tpid field to be configured. */
3150 	#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_TPID	UINT32_C(0x10)
3151 	/* This bit must be '1' for the ctag_tpid field to be configured. */
3152 	#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_TPID	UINT32_C(0x20)
3153 	uint16_t stag_vid;
3154 	/* S-TAG VLAN identifier configured for the function. */
3155 	uint8_t stag_pcp;
3156 	/* S-TAG PCP value configured for the function. */
3157 	uint8_t unused_2;
3158 	uint16_t stag_tpid;
3159 	/*
3160 	 * S-TAG TPID value configured for the function. This field is
3161 	 * specified in network byte order.
3162 	 */
3163 	uint16_t ctag_vid;
3164 	/* C-TAG VLAN identifier configured for the function. */
3165 	uint8_t ctag_pcp;
3166 	/* C-TAG PCP value configured for the function. */
3167 	uint8_t unused_3;
3168 	uint16_t ctag_tpid;
3169 	/*
3170 	 * C-TAG TPID value configured for the function. This field is
3171 	 * specified in network byte order.
3172 	 */
3173 	uint32_t rsvd1;
3174 	/* Future use. */
3175 	uint32_t rsvd2;
3176 	/* Future use. */
3177 	uint32_t unused_4;
3178 };
3179 
3180 /* Output (16 bytes) */
3181 struct hwrm_func_vlan_cfg_output {
3182 	uint16_t error_code;
3183 	/*
3184 	 * Pass/Fail or error type Note: receiver to verify the in
3185 	 * parameters, and fail the call with an error when appropriate
3186 	 */
3187 	uint16_t req_type;
3188 	/* This field returns the type of original request. */
3189 	uint16_t seq_id;
3190 	/* This field provides original sequence number of the command. */
3191 	uint16_t resp_len;
3192 	/*
3193 	 * This field is the length of the response in bytes. The last
3194 	 * byte of the response is a valid flag that will read as '1'
3195 	 * when the command has been completely written to memory.
3196 	 */
3197 	uint32_t unused_0;
3198 	uint8_t unused_1;
3199 	uint8_t unused_2;
3200 	uint8_t unused_3;
3201 	uint8_t valid;
3202 	/*
3203 	 * This field is used in Output records to indicate that the
3204 	 * output is completely written to RAM. This field should be
3205 	 * read as '1' to indicate that the output has been completely
3206 	 * written. When writing a command completion or response to an
3207 	 * internal processor, the order of writes has to be such that
3208 	 * this field is written last.
3209 	 */
3210 };
3211 
3212 /* hwrm_func_cfg */
3213 /*
3214  * Description: This command allows configuration of a PF by the corresponding
3215  * PF driver. This command also allows configuration of a child VF by its parent
3216  * PF driver. The input FID value is used to indicate what function is being
3217  * configured. This allows a PF driver to configure the PF owned by itself or a
3218  * virtual function that is a child of the PF. This command allows to reserve
3219  * resources for a VF by its parent PF. To reverse the process, the command
3220  * should be called with all enables flags cleared for resources. This will free
3221  * allocated resources for the VF and return them to the resource pool. If this
3222  * command is requested by a VF driver to configure or reserve resources, then
3223  * the HWRM shall fail this command. If default MAC address and/or VLAN are
3224  * provided in this command, then the HWRM shall set up appropriate MAC/VLAN
3225  * filters for the function that is being configured. If source properties
3226  * checks are enabled and default MAC address and/or IP address are provided in
3227  * this command, then the HWRM shall set appropriate source property checks
3228  * based on provided MAC and/or IP addresses. The parent PF driver should not
3229  * set MTU/MRU for a VF using this command. This is to allow MTU/MRU setting by
3230  * the VF driver. If the MTU or MRU for a VF is set by the PF driver, then the
3231  * HWRM should ignore it. A function's MTU/MRU should be set prior to allocating
3232  * RX VNICs or TX rings. A PF driver calls hwrm_func_cfg to allocate resources
3233  * for itself or its children VFs. All function drivers shall call hwrm_func_cfg
3234  * to reserve resources. A request to hwrm_func_cfg may not be fully granted;
3235  * that is, a request for resources may be larger than what can be supported by
3236  * the device and the HWRM will allocate the best set of resources available,
3237  * but that may be less than requested. If all the amounts requested could not
3238  * be fulfilled, the HWRM shall allocate what it could and return a status code
3239  * of success. A function driver should call hwrm_func_qcfg immediately after
3240  * hwrm_func_cfg to determine what resources were assigned to the configured
3241  * function. A call by a PF driver to hwrm_func_cfg to allocate resources for
3242  * itself shall only allocate resources for the PF driver to use, not for its
3243  * children VFs. Likewise, a call to hwrm_func_qcfg shall return the resources
3244  * available for the PF driver to use, not what is available to its children
3245  * VFs.
3246  */
3247 /* Input	(88 bytes) */
3248 struct hwrm_func_cfg_input {
3249 	uint16_t req_type;
3250 	/*
3251 	 * This value indicates what type of request this is. The format
3252 	 * for the rest of the command is determined by this field.
3253 	 */
3254 	uint16_t cmpl_ring;
3255 	/*
3256 	 * This value indicates the what completion ring the request
3257 	 * will be optionally completed on. If the value is -1, then no
3258 	 * CR completion will be generated. Any other value must be a
3259 	 * valid CR ring_id value for this function.
3260 	 */
3261 	uint16_t seq_id;
3262 	/* This value indicates the command sequence number. */
3263 	uint16_t target_id;
3264 	/*
3265 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
3266 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
3267 	 * - HWRM
3268 	 */
3269 	uint64_t resp_addr;
3270 	/*
3271 	 * This is the host address where the response will be written
3272 	 * when the request is complete. This area must be 16B aligned
3273 	 * and must be cleared to zero before the request is made.
3274 	 */
3275 	uint16_t fid;
3276 	/*
3277 	 * Function ID of the function that is being configured. If set
3278 	 * to 0xFF...	(All Fs), then the the configuration is for the
3279 	 * requesting function.
3280 	 */
3281 	uint8_t unused_0;
3282 	uint8_t unused_1;
3283 	uint32_t flags;
3284 	/*
3285 	 * When this bit is '1', the function is disabled with source
3286 	 * MAC address check. This is an anti-spoofing check. If this
3287 	 * flag is set, then the function shall be configured to
3288 	 * disallow transmission of frames with the source MAC address
3289 	 * that is configured for this function.
3290 	 */
3291 	#define HWRM_FUNC_CFG_INPUT_FLAGS_SRC_MAC_ADDR_CHECK_DISABLE	 \
3292 		UINT32_C(0x1)
3293 	/*
3294 	 * When this bit is '1', the function is enabled with source MAC
3295 	 * address check. This is an anti-spoofing check. If this flag
3296 	 * is set, then the function shall be configured to allow
3297 	 * transmission of frames with the source MAC address that is
3298 	 * configured for this function.
3299 	 */
3300 	#define HWRM_FUNC_CFG_INPUT_FLAGS_SRC_MAC_ADDR_CHECK_ENABLE	\
3301 		UINT32_C(0x2)
3302 	/* reserved */
3303 	#define HWRM_FUNC_CFG_INPUT_FLAGS_RSVD_MASK	UINT32_C(0x1fc)
3304 	#define HWRM_FUNC_CFG_INPUT_FLAGS_RSVD_SFT	2
3305 	/*
3306 	 * Standard TX Ring mode is used for the allocation of TX ring
3307 	 * and underlying scheduling resources that allow bandwidth
3308 	 * reservation and limit settings on the queried function. If
3309 	 * set to 1, then standard TX ring mode is requested to be
3310 	 * enabled on the function being configured.
3311 	 */
3312 	#define HWRM_FUNC_CFG_INPUT_FLAGS_STD_TX_RING_MODE_ENABLE	\
3313 		UINT32_C(0x200)
3314 	/*
3315 	 * Standard TX Ring mode is used for the allocation of TX ring
3316 	 * and underlying scheduling resources that allow bandwidth
3317 	 * reservation and limit settings on the queried function. If
3318 	 * set to 1, then the standard TX ring mode is requested to be
3319 	 * disabled on the function being configured. In this extended
3320 	 * TX ring resource mode, the minimum and maximum bandwidth
3321 	 * settings are not supported to allow the allocation of TX
3322 	 * rings to span multiple scheduler nodes.
3323 	 */
3324 	#define HWRM_FUNC_CFG_INPUT_FLAGS_STD_TX_RING_MODE_DISABLE	\
3325 		UINT32_C(0x400)
3326 	/*
3327 	 * If this bit is set, virtual mac address configured in this
3328 	 * command will be persistent over warm boot.
3329 	 */
3330 	#define HWRM_FUNC_CFG_INPUT_FLAGS_VIRT_MAC_PERSIST	UINT32_C(0x800)
3331 	/*
3332 	 * This bit only applies to the VF. If this bit is set, the
3333 	 * statistic context counters will not be cleared when the
3334 	 * statistic context is freed or a function reset is called on
3335 	 * VF. This bit will be cleared when the PF is unloaded or a
3336 	 * function reset is called on the PF.
3337 	 */
3338 	#define HWRM_FUNC_CFG_INPUT_FLAGS_NO_AUTOCLEAR_STATISTIC	\
3339 		UINT32_C(0x1000)
3340 	/*
3341 	 * This bit requests that the firmware test to see if all the
3342 	 * assets requested in this command (i.e. number of TX rings)
3343 	 * are available. The firmware will return an error if the
3344 	 * requested assets are not available. The firwmare will NOT
3345 	 * reserve the assets if they are available.
3346 	 */
3347 	#define HWRM_FUNC_CFG_INPUT_FLAGS_TX_ASSETS_TEST UINT32_C(0x2000)
3348 	uint32_t enables;
3349 	/* This bit must be '1' for the mtu field to be configured. */
3350 	#define HWRM_FUNC_CFG_INPUT_ENABLES_MTU	UINT32_C(0x1)
3351 	/* This bit must be '1' for the mru field to be configured. */
3352 	#define HWRM_FUNC_CFG_INPUT_ENABLES_MRU	UINT32_C(0x2)
3353 	/*
3354 	 * This bit must be '1' for the num_rsscos_ctxs field to be
3355 	 * configured.
3356 	 */
3357 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_RSSCOS_CTXS	UINT32_C(0x4)
3358 	/*
3359 	 * This bit must be '1' for the num_cmpl_rings field to be
3360 	 * configured.
3361 	 */
3362 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_CMPL_RINGS	UINT32_C(0x8)
3363 	/* This bit must be '1' for the num_tx_rings field to be configured. */
3364 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_TX_RINGS	UINT32_C(0x10)
3365 	/* This bit must be '1' for the num_rx_rings field to be configured. */
3366 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_RX_RINGS	UINT32_C(0x20)
3367 	/* This bit must be '1' for the num_l2_ctxs field to be configured. */
3368 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_L2_CTXS	UINT32_C(0x40)
3369 	/* This bit must be '1' for the num_vnics field to be configured. */
3370 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_VNICS	UINT32_C(0x80)
3371 	/*
3372 	 * This bit must be '1' for the num_stat_ctxs field to be
3373 	 * configured.
3374 	 */
3375 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_STAT_CTXS	UINT32_C(0x100)
3376 	/*
3377 	 * This bit must be '1' for the dflt_mac_addr field to be
3378 	 * configured.
3379 	 */
3380 	#define HWRM_FUNC_CFG_INPUT_ENABLES_DFLT_MAC_ADDR	UINT32_C(0x200)
3381 	/* This bit must be '1' for the dflt_vlan field to be configured. */
3382 	#define HWRM_FUNC_CFG_INPUT_ENABLES_DFLT_VLAN	UINT32_C(0x400)
3383 	/* This bit must be '1' for the dflt_ip_addr field to be configured. */
3384 	#define HWRM_FUNC_CFG_INPUT_ENABLES_DFLT_IP_ADDR	UINT32_C(0x800)
3385 	/* This bit must be '1' for the min_bw field to be configured. */
3386 	#define HWRM_FUNC_CFG_INPUT_ENABLES_MIN_BW	UINT32_C(0x1000)
3387 	/* This bit must be '1' for the max_bw field to be configured. */
3388 	#define HWRM_FUNC_CFG_INPUT_ENABLES_MAX_BW	UINT32_C(0x2000)
3389 	/*
3390 	 * This bit must be '1' for the async_event_cr field to be
3391 	 * configured.
3392 	 */
3393 	#define HWRM_FUNC_CFG_INPUT_ENABLES_ASYNC_EVENT_CR	UINT32_C(0x4000)
3394 	/*
3395 	 * This bit must be '1' for the vlan_antispoof_mode field to be
3396 	 * configured.
3397 	 */
3398 	#define HWRM_FUNC_CFG_INPUT_ENABLES_VLAN_ANTISPOOF_MODE	UINT32_C(0x8000)
3399 	/*
3400 	 * This bit must be '1' for the allowed_vlan_pris field to be
3401 	 * configured.
3402 	 */
3403 	#define HWRM_FUNC_CFG_INPUT_ENABLES_ALLOWED_VLAN_PRIS UINT32_C(0x10000)
3404 	/* This bit must be '1' for the evb_mode field to be configured. */
3405 	#define HWRM_FUNC_CFG_INPUT_ENABLES_EVB_MODE	UINT32_C(0x20000)
3406 	/*
3407 	 * This bit must be '1' for the num_mcast_filters field to be
3408 	 * configured.
3409 	 */
3410 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_MCAST_FILTERS UINT32_C(0x40000)
3411 	/*
3412 	 * This bit must be '1' for the num_hw_ring_grps field to be
3413 	 * configured.
3414 	 */
3415 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_HW_RING_GRPS UINT32_C(0x80000)
3416 	uint16_t mtu;
3417 	/*
3418 	 * The maximum transmission unit of the function. The HWRM
3419 	 * should make sure that the mtu of the function does not exceed
3420 	 * the mtu of the physical port that this function is associated
3421 	 * with. In addition to configuring mtu per function, it is
3422 	 * possible to configure mtu per transmit ring. By default, the
3423 	 * mtu of each transmit ring associated with a function is equal
3424 	 * to the mtu of the function. The HWRM should make sure that
3425 	 * the mtu of each transmit ring that is assigned to a function
3426 	 * has a valid mtu.
3427 	 */
3428 	uint16_t mru;
3429 	/*
3430 	 * The maximum receive unit of the function. The HWRM should
3431 	 * make sure that the mru of the function does not exceed the
3432 	 * mru of the physical port that this function is associated
3433 	 * with. In addition to configuring mru per function, it is
3434 	 * possible to configure mru per vnic. By default, the mru of
3435 	 * each vnic associated with a function is equal to the mru of
3436 	 * the function. The HWRM should make sure that the mru of each
3437 	 * vnic that is assigned to a function has a valid mru.
3438 	 */
3439 	uint16_t num_rsscos_ctxs;
3440 	/* The number of RSS/COS contexts requested for the function. */
3441 	uint16_t num_cmpl_rings;
3442 	/*
3443 	 * The number of completion rings requested for the function.
3444 	 * This does not include the rings allocated to any children
3445 	 * functions if any.
3446 	 */
3447 	uint16_t num_tx_rings;
3448 	/*
3449 	 * The number of transmit rings requested for the function. This
3450 	 * does not include the rings allocated to any children
3451 	 * functions if any.
3452 	 */
3453 	uint16_t num_rx_rings;
3454 	/*
3455 	 * The number of receive rings requested for the function. This
3456 	 * does not include the rings allocated to any children
3457 	 * functions if any.
3458 	 */
3459 	uint16_t num_l2_ctxs;
3460 	/* The requested number of L2 contexts for the function. */
3461 	uint16_t num_vnics;
3462 	/* The requested number of vnics for the function. */
3463 	uint16_t num_stat_ctxs;
3464 	/* The requested number of statistic contexts for the function. */
3465 	uint16_t num_hw_ring_grps;
3466 	/*
3467 	 * The number of HW ring groups that should be reserved for this
3468 	 * function.
3469 	 */
3470 	uint8_t dflt_mac_addr[6];
3471 	/* The default MAC address for the function being configured. */
3472 	uint16_t dflt_vlan;
3473 	/*
3474 	 * The default VLAN for the function being configured. This
3475 	 * field's format is same as 802.1Q Tag's Tag Control
3476 	 * Information	(TCI) format that includes both Priority Code
3477 	 * Point	(PCP) and VLAN Identifier	(VID).
3478 	 */
3479 	uint32_t dflt_ip_addr[4];
3480 	/*
3481 	 * The default IP address for the function being configured.
3482 	 * This address is only used in enabling source property check.
3483 	 */
3484 	uint32_t min_bw;
3485 	/*
3486 	 * Minimum BW allocated for this function. The HWRM will
3487 	 * translate this value into byte counter and time interval used
3488 	 * for the scheduler inside the device.
3489 	 */
3490 	/* The bandwidth value. */
3491 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_MASK UINT32_C(0xfffffff)
3492 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_SFT	0
3493 	/* The granularity of the value	(bits or bytes). */
3494 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE	UINT32_C(0x10000000)
3495 	/* Value is in bits. */
3496 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_BITS	(UINT32_C(0x0) << 28)
3497 	/* Value is in bytes. */
3498 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_BYTES	(UINT32_C(0x1) << 28)
3499 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_LAST \
3500 		FUNC_CFG_INPUT_MIN_BW_SCALE_BYTES
3501 	/* bw_value_unit is 3 b */
3502 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_MASK	 \
3503 		UINT32_C(0xe0000000)
3504 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_SFT	29
3505 	/* Value is in Mb or MB	(base 10). */
3506 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_MEGA \
3507 		(UINT32_C(0x0) << 29)
3508 	/* Value is in Kb or KB	(base 10). */
3509 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_KILO \
3510 		(UINT32_C(0x2) << 29)
3511 	/* Value is in bits or bytes. */
3512 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_BASE \
3513 		(UINT32_C(0x4) << 29)
3514 	/* Value is in Gb or GB	(base 10). */
3515 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_GIGA \
3516 		(UINT32_C(0x6) << 29)
3517 	/* Value is in 1/100th of a percentage of total bandwidth. */
3518 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
3519 		(UINT32_C(0x1) << 29)
3520 	/* Invalid unit */
3521 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_INVALID \
3522 		(UINT32_C(0x7) << 29)
3523 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_LAST \
3524 		FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_INVALID
3525 	uint32_t max_bw;
3526 	/*
3527 	 * Maximum BW allocated for this function. The HWRM will
3528 	 * translate this value into byte counter and time interval used
3529 	 * for the scheduler inside the device.
3530 	 */
3531 	/* The bandwidth value. */
3532 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_MASK \
3533 		UINT32_C(0xfffffff)
3534 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_SFT	0
3535 	/* The granularity of the value	(bits or bytes). */
3536 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE	UINT32_C(0x10000000)
3537 	/* Value is in bits. */
3538 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_BITS	(UINT32_C(0x0) << 28)
3539 	/* Value is in bytes. */
3540 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_BYTES	(UINT32_C(0x1) << 28)
3541 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_LAST \
3542 		FUNC_CFG_INPUT_MAX_BW_SCALE_BYTES
3543 	/* bw_value_unit is 3 b */
3544 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_MASK	 \
3545 		UINT32_C(0xe0000000)
3546 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_SFT	29
3547 	/* Value is in Mb or MB	(base 10). */
3548 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_MEGA	\
3549 		(UINT32_C(0x0) << 29)
3550 	/* Value is in Kb or KB	(base 10). */
3551 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_KILO	\
3552 		(UINT32_C(0x2) << 29)
3553 	/* Value is in bits or bytes. */
3554 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_BASE \
3555 		(UINT32_C(0x4) << 29)
3556 	/* Value is in Gb or GB	(base 10). */
3557 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_GIGA \
3558 		(UINT32_C(0x6) << 29)
3559 	/* Value is in 1/100th of a percentage of total bandwidth. */
3560 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
3561 		(UINT32_C(0x1) << 29)
3562 	/* Invalid unit */
3563 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID \
3564 		(UINT32_C(0x7) << 29)
3565 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_LAST \
3566 		FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID
3567 	uint16_t async_event_cr;
3568 	/*
3569 	 * ID of the target completion ring for receiving asynchronous
3570 	 * event completions. If this field is not valid, then the HWRM
3571 	 * shall use the default completion ring of the function that is
3572 	 * being configured as the target completion ring for providing
3573 	 * any asynchronous event completions for that function. If this
3574 	 * field is valid, then the HWRM shall use the completion ring
3575 	 * identified by this ID as the target completion ring for
3576 	 * providing any asynchronous event completions for the function
3577 	 * that is being configured.
3578 	 */
3579 	uint8_t vlan_antispoof_mode;
3580 	/* VLAN Anti-spoofing mode. */
3581 	/* No VLAN anti-spoofing checks are enabled */
3582 	#define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_NOCHECK	UINT32_C(0x0)
3583 	/* Validate VLAN against the configured VLAN(s) */
3584 	#define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_VALIDATE_VLAN \
3585 		UINT32_C(0x1)
3586 	/* Insert VLAN if it does not exist, otherwise discard */
3587 	#define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_INSERT_IF_VLANDNE \
3588 		UINT32_C(0x2)
3589 	/*
3590 	 * Insert VLAN if it does not exist, override
3591 	 * VLAN if it exists
3592 	 */
3593 	#define \
3594 	HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_INSERT_OR_OVERRIDE_VLAN \
3595 		UINT32_C(0x3)
3596 	uint8_t allowed_vlan_pris;
3597 	/*
3598 	 * This bit field defines VLAN PRIs that are allowed on this
3599 	 * function. If nth bit is set, then VLAN PRI n is allowed on
3600 	 * this function.
3601 	 */
3602 	uint8_t evb_mode;
3603 	/*
3604 	 * The HWRM shall allow a PF driver to change EVB mode for the
3605 	 * partition it belongs to. The HWRM shall not allow a VF driver
3606 	 * to change the EVB mode. The HWRM shall take into account the
3607 	 * switching of EVB mode from one to another and reconfigure
3608 	 * hardware resources as appropriately. The switching from VEB
3609 	 * to VEPA mode requires the disabling of the loopback traffic.
3610 	 * Additionally, source knock outs are handled differently in
3611 	 * VEB and VEPA modes.
3612 	 */
3613 	/* No Edge Virtual Bridging	(EVB) */
3614 	#define HWRM_FUNC_CFG_INPUT_EVB_MODE_NO_EVB	UINT32_C(0x0)
3615 	/* Virtual Ethernet Bridge	(VEB) */
3616 	#define HWRM_FUNC_CFG_INPUT_EVB_MODE_VEB	UINT32_C(0x1)
3617 	/* Virtual Ethernet Port Aggregator	(VEPA) */
3618 	#define HWRM_FUNC_CFG_INPUT_EVB_MODE_VEPA	UINT32_C(0x2)
3619 	uint8_t unused_2;
3620 	uint16_t num_mcast_filters;
3621 	/*
3622 	 * The number of multicast filters that should be reserved for
3623 	 * this function on the RX side.
3624 	 */
3625 } __attribute__((packed));
3626 
3627 /* Output	(16 bytes) */
3628 struct hwrm_func_cfg_output {
3629 	uint16_t error_code;
3630 	/*
3631 	 * Pass/Fail or error type Note: receiver to verify the in
3632 	 * parameters, and fail the call with an error when appropriate
3633 	 */
3634 	uint16_t req_type;
3635 	/* This field returns the type of original request. */
3636 	uint16_t seq_id;
3637 	/* This field provides original sequence number of the command. */
3638 	uint16_t resp_len;
3639 	/*
3640 	 * This field is the length of the response in bytes. The last
3641 	 * byte of the response is a valid flag that will read as '1'
3642 	 * when the command has been completely written to memory.
3643 	 */
3644 	uint32_t unused_0;
3645 	uint8_t unused_1;
3646 	uint8_t unused_2;
3647 	uint8_t unused_3;
3648 	uint8_t valid;
3649 	/*
3650 	 * This field is used in Output records to indicate that the
3651 	 * output is completely written to RAM. This field should be
3652 	 * read as '1' to indicate that the output has been completely
3653 	 * written. When writing a command completion or response to an
3654 	 * internal processor, the order of writes has to be such that
3655 	 * this field is written last.
3656 	 */
3657 } __attribute__((packed));
3658 
3659 /* hwrm_func_qstats */
3660 /*
3661  * Description: This command returns statistics of a function. The input FID
3662  * value is used to indicate what function is being queried. This allows a
3663  * physical function driver to query virtual functions that are children of the
3664  * physical function. The HWRM shall return any unsupported counter with a value
3665  * of 0xFFFFFFFF for 32-bit counters and 0xFFFFFFFFFFFFFFFF for 64-bit counters.
3666  */
3667 /* Input	(24 bytes) */
3668 struct hwrm_func_qstats_input {
3669 	uint16_t req_type;
3670 	/*
3671 	 * This value indicates what type of request this is. The format
3672 	 * for the rest of the command is determined by this field.
3673 	 */
3674 	uint16_t cmpl_ring;
3675 	/*
3676 	 * This value indicates the what completion ring the request
3677 	 * will be optionally completed on. If the value is -1, then no
3678 	 * CR completion will be generated. Any other value must be a
3679 	 * valid CR ring_id value for this function.
3680 	 */
3681 	uint16_t seq_id;
3682 	/* This value indicates the command sequence number. */
3683 	uint16_t target_id;
3684 	/*
3685 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
3686 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
3687 	 * - HWRM
3688 	 */
3689 	uint64_t resp_addr;
3690 	/*
3691 	 * This is the host address where the response will be written
3692 	 * when the request is complete. This area must be 16B aligned
3693 	 * and must be cleared to zero before the request is made.
3694 	 */
3695 	uint16_t fid;
3696 	/*
3697 	 * Function ID of the function that is being queried. 0xFF...
3698 	 *	(All Fs) if the query is for the requesting function.
3699 	 */
3700 	uint16_t unused_0[3];
3701 } __attribute__((packed));
3702 
3703 /* Output	(176 bytes) */
3704 struct hwrm_func_qstats_output {
3705 	uint16_t error_code;
3706 	/*
3707 	 * Pass/Fail or error type Note: receiver to verify the in
3708 	 * parameters, and fail the call with an error when appropriate
3709 	 */
3710 	uint16_t req_type;
3711 	/* This field returns the type of original request. */
3712 	uint16_t seq_id;
3713 	/* This field provides original sequence number of the command. */
3714 	uint16_t resp_len;
3715 	/*
3716 	 * This field is the length of the response in bytes. The last
3717 	 * byte of the response is a valid flag that will read as '1'
3718 	 * when the command has been completely written to memory.
3719 	 */
3720 	uint64_t tx_ucast_pkts;
3721 	/* Number of transmitted unicast packets on the function. */
3722 	uint64_t tx_mcast_pkts;
3723 	/* Number of transmitted multicast packets on the function. */
3724 	uint64_t tx_bcast_pkts;
3725 	/* Number of transmitted broadcast packets on the function. */
3726 	uint64_t tx_err_pkts;
3727 	/*
3728 	 * Number of transmitted packets that were discarded due to
3729 	 * internal NIC resource problems. For transmit, this can only
3730 	 * happen if TMP is configured to allow dropping in HOL blocking
3731 	 * conditions, which is not a normal configuration.
3732 	 */
3733 	uint64_t tx_drop_pkts;
3734 	/*
3735 	 * Number of dropped packets on transmit path on the function.
3736 	 * These are packets that have been marked for drop by the TE
3737 	 * CFA block or are packets that exceeded the transmit MTU limit
3738 	 * for the function.
3739 	 */
3740 	uint64_t tx_ucast_bytes;
3741 	/* Number of transmitted bytes for unicast traffic on the function. */
3742 	uint64_t tx_mcast_bytes;
3743 	/*
3744 	 * Number of transmitted bytes for multicast traffic on the
3745 	 * function.
3746 	 */
3747 	uint64_t tx_bcast_bytes;
3748 	/*
3749 	 * Number of transmitted bytes for broadcast traffic on the
3750 	 * function.
3751 	 */
3752 	uint64_t rx_ucast_pkts;
3753 	/* Number of received unicast packets on the function. */
3754 	uint64_t rx_mcast_pkts;
3755 	/* Number of received multicast packets on the function. */
3756 	uint64_t rx_bcast_pkts;
3757 	/* Number of received broadcast packets on the function. */
3758 	uint64_t rx_err_pkts;
3759 	/*
3760 	 * Number of received packets that were discarded on the
3761 	 * function due to resource limitations. This can happen for 3
3762 	 * reasons. # The BD used for the packet has a bad format. #
3763 	 * There were no BDs available in the ring for the packet. #
3764 	 * There were no BDs available on-chip for the packet.
3765 	 */
3766 	uint64_t rx_drop_pkts;
3767 	/*
3768 	 * Number of dropped packets on received path on the function.
3769 	 * These are packets that have been marked for drop by the RE
3770 	 * CFA.
3771 	 */
3772 	uint64_t rx_ucast_bytes;
3773 	/* Number of received bytes for unicast traffic on the function. */
3774 	uint64_t rx_mcast_bytes;
3775 	/* Number of received bytes for multicast traffic on the function. */
3776 	uint64_t rx_bcast_bytes;
3777 	/* Number of received bytes for broadcast traffic on the function. */
3778 	uint64_t rx_agg_pkts;
3779 	/* Number of aggregated unicast packets on the function. */
3780 	uint64_t rx_agg_bytes;
3781 	/* Number of aggregated unicast bytes on the function. */
3782 	uint64_t rx_agg_events;
3783 	/* Number of aggregation events on the function. */
3784 	uint64_t rx_agg_aborts;
3785 	/* Number of aborted aggregations on the function. */
3786 	uint32_t unused_0;
3787 	uint8_t unused_1;
3788 	uint8_t unused_2;
3789 	uint8_t unused_3;
3790 	uint8_t valid;
3791 	/*
3792 	 * This field is used in Output records to indicate that the
3793 	 * output is completely written to RAM. This field should be
3794 	 * read as '1' to indicate that the output has been completely
3795 	 * written. When writing a command completion or response to an
3796 	 * internal processor, the order of writes has to be such that
3797 	 * this field is written last.
3798 	 */
3799 } __attribute__((packed));
3800 
3801 /* hwrm_func_clr_stats */
3802 /*
3803  * Description: This command clears statistics of a function. The input FID
3804  * value is used to indicate what function's statistics is being cleared. This
3805  * allows a physical function driver to clear statistics of virtual functions
3806  * that are children of the physical function.
3807  */
3808 /* Input	(24 bytes) */
3809 struct hwrm_func_clr_stats_input {
3810 	uint16_t req_type;
3811 	/*
3812 	 * This value indicates what type of request this is. The format
3813 	 * for the rest of the command is determined by this field.
3814 	 */
3815 	uint16_t cmpl_ring;
3816 	/*
3817 	 * This value indicates the what completion ring the request
3818 	 * will be optionally completed on. If the value is -1, then no
3819 	 * CR completion will be generated. Any other value must be a
3820 	 * valid CR ring_id value for this function.
3821 	 */
3822 	uint16_t seq_id;
3823 	/* This value indicates the command sequence number. */
3824 	uint16_t target_id;
3825 	/*
3826 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
3827 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
3828 	 * - HWRM
3829 	 */
3830 	uint64_t resp_addr;
3831 	/*
3832 	 * This is the host address where the response will be written
3833 	 * when the request is complete. This area must be 16B aligned
3834 	 * and must be cleared to zero before the request is made.
3835 	 */
3836 	uint16_t fid;
3837 	/*
3838 	 * Function ID of the function. 0xFF...	(All Fs) if the query is
3839 	 * for the requesting function.
3840 	 */
3841 	uint16_t unused_0[3];
3842 } __attribute__((packed));
3843 
3844 /* Output	(16 bytes) */
3845 struct hwrm_func_clr_stats_output {
3846 	uint16_t error_code;
3847 	/*
3848 	 * Pass/Fail or error type Note: receiver to verify the in
3849 	 * parameters, and fail the call with an error when appropriate
3850 	 */
3851 	uint16_t req_type;
3852 	/* This field returns the type of original request. */
3853 	uint16_t seq_id;
3854 	/* This field provides original sequence number of the command. */
3855 	uint16_t resp_len;
3856 	/*
3857 	 * This field is the length of the response in bytes. The last
3858 	 * byte of the response is a valid flag that will read as '1'
3859 	 * when the command has been completely written to memory.
3860 	 */
3861 	uint32_t unused_0;
3862 	uint8_t unused_1;
3863 	uint8_t unused_2;
3864 	uint8_t unused_3;
3865 	uint8_t valid;
3866 	/*
3867 	 * This field is used in Output records to indicate that the
3868 	 * output is completely written to RAM. This field should be
3869 	 * read as '1' to indicate that the output has been completely
3870 	 * written. When writing a command completion or response to an
3871 	 * internal processor, the order of writes has to be such that
3872 	 * this field is written last.
3873 	 */
3874 } __attribute__((packed));
3875 
3876 /* hwrm_func_vf_vnic_ids_query */
3877 /* Description: This command is used to query vf vnic ids. */
3878 /* Input	(32 bytes) */
3879 struct hwrm_func_vf_vnic_ids_query_input {
3880 	uint16_t req_type;
3881 	/*
3882 	 * This value indicates what type of request this is. The format
3883 	 * for the rest of the command is determined by this field.
3884 	 */
3885 	uint16_t cmpl_ring;
3886 	/*
3887 	 * This value indicates the what completion ring the request
3888 	 * will be optionally completed on. If the value is -1, then no
3889 	 * CR completion will be generated. Any other value must be a
3890 	 * valid CR ring_id value for this function.
3891 	 */
3892 	uint16_t seq_id;
3893 	/* This value indicates the command sequence number. */
3894 	uint16_t target_id;
3895 	/*
3896 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
3897 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
3898 	 * - HWRM
3899 	 */
3900 	uint64_t resp_addr;
3901 	/*
3902 	 * This is the host address where the response will be written
3903 	 * when the request is complete. This area must be 16B aligned
3904 	 * and must be cleared to zero before the request is made.
3905 	 */
3906 	uint16_t vf_id;
3907 	/*
3908 	 * This value is used to identify a Virtual Function	(VF). The
3909 	 * scope of VF ID is local within a PF.
3910 	 */
3911 	uint8_t unused_0;
3912 	uint8_t unused_1;
3913 	uint32_t max_vnic_id_cnt;
3914 	/* Max number of vnic ids in vnic id table */
3915 	uint64_t vnic_id_tbl_addr;
3916 	/* This is the address for VF VNIC ID table */
3917 } __attribute__((packed));
3918 
3919 /* Output	(16 bytes) */
3920 struct hwrm_func_vf_vnic_ids_query_output {
3921 	uint16_t error_code;
3922 	/*
3923 	 * Pass/Fail or error type Note: receiver to verify the in
3924 	 * parameters, and fail the call with an error when appropriate
3925 	 */
3926 	uint16_t req_type;
3927 	/* This field returns the type of original request. */
3928 	uint16_t seq_id;
3929 	/* This field provides original sequence number of the command. */
3930 	uint16_t resp_len;
3931 	/*
3932 	 * This field is the length of the response in bytes. The last
3933 	 * byte of the response is a valid flag that will read as '1'
3934 	 * when the command has been completely written to memory.
3935 	 */
3936 	uint32_t vnic_id_cnt;
3937 	/*
3938 	 * Actual number of vnic ids Each VNIC ID is written as a 32-bit
3939 	 * number.
3940 	 */
3941 	uint8_t unused_0;
3942 	uint8_t unused_1;
3943 	uint8_t unused_2;
3944 	uint8_t valid;
3945 	/*
3946 	 * This field is used in Output records to indicate that the
3947 	 * output is completely written to RAM. This field should be
3948 	 * read as '1' to indicate that the output has been completely
3949 	 * written. When writing a command completion or response to an
3950 	 * internal processor, the order of writes has to be such that
3951 	 * this field is written last.
3952 	 */
3953 } __attribute__((packed));
3954 
3955 /* hwrm_func_drv_rgtr */
3956 /*
3957  * Description: This command is used by the function driver to register its
3958  * information with the HWRM. A function driver shall implement this command. A
3959  * function driver shall use this command during the driver initialization right
3960  * after the HWRM version discovery and default ring resources allocation.
3961  */
3962 /* Input	(80 bytes) */
3963 struct hwrm_func_drv_rgtr_input {
3964 	uint16_t req_type;
3965 	/*
3966 	 * This value indicates what type of request this is. The format
3967 	 * for the rest of the command is determined by this field.
3968 	 */
3969 	uint16_t cmpl_ring;
3970 	/*
3971 	 * This value indicates the what completion ring the request
3972 	 * will be optionally completed on. If the value is -1, then no
3973 	 * CR completion will be generated. Any other value must be a
3974 	 * valid CR ring_id value for this function.
3975 	 */
3976 	uint16_t seq_id;
3977 	/* This value indicates the command sequence number. */
3978 	uint16_t target_id;
3979 	/*
3980 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
3981 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
3982 	 * - HWRM
3983 	 */
3984 	uint64_t resp_addr;
3985 	/*
3986 	 * This is the host address where the response will be written
3987 	 * when the request is complete. This area must be 16B aligned
3988 	 * and must be cleared to zero before the request is made.
3989 	 */
3990 	uint32_t flags;
3991 	/*
3992 	 * When this bit is '1', the function driver is requesting all
3993 	 * requests from its children VF drivers to be forwarded to
3994 	 * itself. This flag can only be set by the PF driver. If a VF
3995 	 * driver sets this flag, it should be ignored by the HWRM.
3996 	 */
3997 	#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FWD_ALL_MODE	UINT32_C(0x1)
3998 	/*
3999 	 * When this bit is '1', the function is requesting none of the
4000 	 * requests from its children VF drivers to be forwarded to
4001 	 * itself. This flag can only be set by the PF driver. If a VF
4002 	 * driver sets this flag, it should be ignored by the HWRM.
4003 	 */
4004 	#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FWD_NONE_MODE	UINT32_C(0x2)
4005 	uint32_t enables;
4006 	/* This bit must be '1' for the os_type field to be configured. */
4007 	#define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_OS_TYPE	UINT32_C(0x1)
4008 	/* This bit must be '1' for the ver field to be configured. */
4009 	#define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_VER	UINT32_C(0x2)
4010 	/* This bit must be '1' for the timestamp field to be configured. */
4011 	#define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_TIMESTAMP	UINT32_C(0x4)
4012 	/* This bit must be '1' for the vf_req_fwd field to be configured. */
4013 	#define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_VF_INPUT_FWD	UINT32_C(0x8)
4014 	/*
4015 	 * This bit must be '1' for the async_event_fwd field to be
4016 	 * configured.
4017 	 */
4018 	#define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_ASYNC_EVENT_FWD UINT32_C(0x10)
4019 	uint16_t os_type;
4020 	/*
4021 	 * This value indicates the type of OS. The values are based on
4022 	 * CIM_OperatingSystem.mof file as published by the DMTF.
4023 	 */
4024 	/* Unknown */
4025 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_UNKNOWN	UINT32_C(0x0)
4026 	/* Other OS not listed below. */
4027 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_OTHER	UINT32_C(0x1)
4028 	/* MSDOS OS. */
4029 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_MSDOS	UINT32_C(0xe)
4030 	/* Windows OS. */
4031 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_WINDOWS	UINT32_C(0x12)
4032 	/* Solaris OS. */
4033 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_SOLARIS	UINT32_C(0x1d)
4034 	/* Linux OS. */
4035 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_LINUX	UINT32_C(0x24)
4036 	/* FreeBSD OS. */
4037 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_FREEBSD	UINT32_C(0x2a)
4038 	/* VMware ESXi OS. */
4039 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_ESXI	UINT32_C(0x68)
4040 	/* Microsoft Windows 8 64-bit OS. */
4041 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_WIN864	UINT32_C(0x73)
4042 	/* Microsoft Windows Server 2012 R2 OS. */
4043 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_WIN2012R2	UINT32_C(0x74)
4044 	uint8_t ver_maj;
4045 	/* This is the major version of the driver. */
4046 	uint8_t ver_min;
4047 	/* This is the minor version of the driver. */
4048 	uint8_t ver_upd;
4049 	/* This is the update version of the driver. */
4050 	uint8_t unused_0;
4051 	uint16_t unused_1;
4052 	uint32_t timestamp;
4053 	/*
4054 	 * This is a 32-bit timestamp provided by the driver for keep
4055 	 * alive. The timestamp is in multiples of 1ms.
4056 	 */
4057 	uint32_t unused_2;
4058 	uint32_t vf_req_fwd[8];
4059 	/*
4060 	 * This is a 256-bit bit mask provided by the PF driver for
4061 	 * letting the HWRM know what commands issued by the VF driver
4062 	 * to the HWRM should be forwarded to the PF driver. Nth bit
4063 	 * refers to the Nth req_type. Setting Nth bit to 1 indicates
4064 	 * that requests from the VF driver with req_type equal to N
4065 	 * shall be forwarded to the parent PF driver. This field is not
4066 	 * valid for the VF driver.
4067 	 */
4068 	uint32_t async_event_fwd[8];
4069 	/*
4070 	 * This is a 256-bit bit mask provided by the function driver
4071 	 *	(PF or VF driver) to indicate the list of asynchronous event
4072 	 * completions to be forwarded. Nth bit refers to the Nth
4073 	 * event_id. Setting Nth bit to 1 by the function driver shall
4074 	 * result in the HWRM forwarding asynchronous event completion
4075 	 * with event_id equal to N. If all bits are set to 0	(value of
4076 	 * 0), then the HWRM shall not forward any asynchronous event
4077 	 * completion to this function driver.
4078 	 */
4079 } __attribute__((packed));
4080 
4081 /* Output	(16 bytes) */
4082 struct hwrm_func_drv_rgtr_output {
4083 	uint16_t error_code;
4084 	/*
4085 	 * Pass/Fail or error type Note: receiver to verify the in
4086 	 * parameters, and fail the call with an error when appropriate
4087 	 */
4088 	uint16_t req_type;
4089 	/* This field returns the type of original request. */
4090 	uint16_t seq_id;
4091 	/* This field provides original sequence number of the command. */
4092 	uint16_t resp_len;
4093 	/*
4094 	 * This field is the length of the response in bytes. The last
4095 	 * byte of the response is a valid flag that will read as '1'
4096 	 * when the command has been completely written to memory.
4097 	 */
4098 	uint32_t unused_0;
4099 	uint8_t unused_1;
4100 	uint8_t unused_2;
4101 	uint8_t unused_3;
4102 	uint8_t valid;
4103 	/*
4104 	 * This field is used in Output records to indicate that the
4105 	 * output is completely written to RAM. This field should be
4106 	 * read as '1' to indicate that the output has been completely
4107 	 * written. When writing a command completion or response to an
4108 	 * internal processor, the order of writes has to be such that
4109 	 * this field is written last.
4110 	 */
4111 } __attribute__((packed));
4112 
4113 /* hwrm_func_drv_unrgtr */
4114 /*
4115  * Description: This command is used by the function driver to un register with
4116  * the HWRM. A function driver shall implement this command. A function driver
4117  * shall use this command during the driver unloading.
4118  */
4119 /* Input	(24 bytes) */
4120 struct hwrm_func_drv_unrgtr_input {
4121 	uint16_t req_type;
4122 	/*
4123 	 * This value indicates what type of request this is. The format
4124 	 * for the rest of the command is determined by this field.
4125 	 */
4126 	uint16_t cmpl_ring;
4127 	/*
4128 	 * This value indicates the what completion ring the request
4129 	 * will be optionally completed on. If the value is -1, then no
4130 	 * CR completion will be generated. Any other value must be a
4131 	 * valid CR ring_id value for this function.
4132 	 */
4133 	uint16_t seq_id;
4134 	/* This value indicates the command sequence number. */
4135 	uint16_t target_id;
4136 	/*
4137 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
4138 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
4139 	 * - HWRM
4140 	 */
4141 	uint64_t resp_addr;
4142 	/*
4143 	 * This is the host address where the response will be written
4144 	 * when the request is complete. This area must be 16B aligned
4145 	 * and must be cleared to zero before the request is made.
4146 	 */
4147 	uint32_t flags;
4148 	/*
4149 	 * When this bit is '1', the function driver is notifying the
4150 	 * HWRM to prepare for the shutdown.
4151 	 */
4152 	#define HWRM_FUNC_DRV_UNRGTR_INPUT_FLAGS_PREPARE_FOR_SHUTDOWN	\
4153 		UINT32_C(0x1)
4154 	uint32_t unused_0;
4155 } __attribute__((packed));
4156 
4157 /* Output	(16 bytes) */
4158 struct hwrm_func_drv_unrgtr_output {
4159 	uint16_t error_code;
4160 	/*
4161 	 * Pass/Fail or error type Note: receiver to verify the in
4162 	 * parameters, and fail the call with an error when appropriate
4163 	 */
4164 	uint16_t req_type;
4165 	/* This field returns the type of original request. */
4166 	uint16_t seq_id;
4167 	/* This field provides original sequence number of the command. */
4168 	uint16_t resp_len;
4169 	/*
4170 	 * This field is the length of the response in bytes. The last
4171 	 * byte of the response is a valid flag that will read as '1'
4172 	 * when the command has been completely written to memory.
4173 	 */
4174 	uint32_t unused_0;
4175 	uint8_t unused_1;
4176 	uint8_t unused_2;
4177 	uint8_t unused_3;
4178 	uint8_t valid;
4179 	/*
4180 	 * This field is used in Output records to indicate that the
4181 	 * output is completely written to RAM. This field should be
4182 	 * read as '1' to indicate that the output has been completely
4183 	 * written. When writing a command completion or response to an
4184 	 * internal processor, the order of writes has to be such that
4185 	 * this field is written last.
4186 	 */
4187 } __attribute__((packed));
4188 
4189 /* hwrm_func_buf_rgtr */
4190 /*
4191  * Description: This command is used by the PF driver to register buffers used
4192  * in the PF-VF communication with the HWRM. The PF driver uses this command to
4193  * register buffers for each PF-VF channel. A parent PF may issue this command
4194  * per child VF. If VF ID is not valid, then this command is used to register
4195  * buffers for all children VFs of the PF.
4196  */
4197 /* Input	(128 bytes) */
4198 struct hwrm_func_buf_rgtr_input {
4199 	uint16_t req_type;
4200 	/*
4201 	 * This value indicates what type of request this is. The format
4202 	 * for the rest of the command is determined by this field.
4203 	 */
4204 	uint16_t cmpl_ring;
4205 	/*
4206 	 * This value indicates the what completion ring the request
4207 	 * will be optionally completed on. If the value is -1, then no
4208 	 * CR completion will be generated. Any other value must be a
4209 	 * valid CR ring_id value for this function.
4210 	 */
4211 	uint16_t seq_id;
4212 	/* This value indicates the command sequence number. */
4213 	uint16_t target_id;
4214 	/*
4215 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
4216 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
4217 	 * - HWRM
4218 	 */
4219 	uint64_t resp_addr;
4220 	/*
4221 	 * This is the host address where the response will be written
4222 	 * when the request is complete. This area must be 16B aligned
4223 	 * and must be cleared to zero before the request is made.
4224 	 */
4225 	uint32_t enables;
4226 	/* This bit must be '1' for the vf_id field to be configured. */
4227 	#define HWRM_FUNC_BUF_RGTR_INPUT_ENABLES_VF_ID	UINT32_C(0x1)
4228 	/* This bit must be '1' for the err_buf_addr field to be configured. */
4229 	#define HWRM_FUNC_BUF_RGTR_INPUT_ENABLES_ERR_BUF_ADDR	UINT32_C(0x2)
4230 	uint16_t vf_id;
4231 	/*
4232 	 * This value is used to identify a Virtual Function	(VF). The
4233 	 * scope of VF ID is local within a PF.
4234 	 */
4235 	uint16_t req_buf_num_pages;
4236 	/*
4237 	 * This field represents the number of pages used for request
4238 	 * buffer(s).
4239 	 */
4240 	uint16_t req_buf_page_size;
4241 	/* This field represents the page size used for request buffer(s). */
4242 	/* 16 bytes */
4243 	#define HWRM_FUNC_BUF_RGTR_INPUT_INPUT_BUF_PAGE_SIZE_16B UINT32_C(0x4)
4244 	/* 4 Kbytes */
4245 	#define HWRM_FUNC_BUF_RGTR_INPUT_INPUT_BUF_PAGE_SIZE_4K	UINT32_C(0xc)
4246 	/* 8 Kbytes */
4247 	#define HWRM_FUNC_BUF_RGTR_INPUT_INPUT_BUF_PAGE_SIZE_8K	UINT32_C(0xd)
4248 	/* 64 Kbytes */
4249 	#define HWRM_FUNC_BUF_RGTR_INPUT_INPUT_BUF_PAGE_SIZE_64K UINT32_C(0x10)
4250 	/* 2 Mbytes */
4251 	#define HWRM_FUNC_BUF_RGTR_INPUT_INPUT_BUF_PAGE_SIZE_2M	UINT32_C(0x15)
4252 	/* 4 Mbytes */
4253 	#define HWRM_FUNC_BUF_RGTR_INPUT_INPUT_BUF_PAGE_SIZE_4M	UINT32_C(0x16)
4254 	/* 1 Gbytes */
4255 	#define HWRM_FUNC_BUF_RGTR_INPUT_INPUT_BUF_PAGE_SIZE_1G	UINT32_C(0x1e)
4256 	uint16_t req_buf_len;
4257 	/* The length of the request buffer per VF in bytes. */
4258 	uint16_t resp_buf_len;
4259 	/* The length of the response buffer in bytes. */
4260 	uint8_t unused_0;
4261 	uint8_t unused_1;
4262 	uint64_t req_buf_page_addr[10];
4263 	/* This field represents the page address of req buffer. */
4264 	uint64_t error_buf_addr;
4265 	/*
4266 	 * This field is used to receive the error reporting from the
4267 	 * chipset. Only applicable for PFs.
4268 	 */
4269 	uint64_t resp_buf_addr;
4270 	/* This field is used to receive the response forwarded by the HWRM. */
4271 } __attribute__((packed));
4272 
4273 /* Output	(16 bytes) */
4274 struct hwrm_func_buf_rgtr_output {
4275 	uint16_t error_code;
4276 	/*
4277 	 * Pass/Fail or error type Note: receiver to verify the in
4278 	 * parameters, and fail the call with an error when appropriate
4279 	 */
4280 	uint16_t req_type;
4281 	/* This field returns the type of original request. */
4282 	uint16_t seq_id;
4283 	/* This field provides original sequence number of the command. */
4284 	uint16_t resp_len;
4285 	/*
4286 	 * This field is the length of the response in bytes. The last
4287 	 * byte of the response is a valid flag that will read as '1'
4288 	 * when the command has been completely written to memory.
4289 	 */
4290 	uint32_t unused_0;
4291 	uint8_t unused_1;
4292 	uint8_t unused_2;
4293 	uint8_t unused_3;
4294 	uint8_t valid;
4295 	/*
4296 	 * This field is used in Output records to indicate that the
4297 	 * output is completely written to RAM. This field should be
4298 	 * read as '1' to indicate that the output has been completely
4299 	 * written. When writing a command completion or response to an
4300 	 * internal processor, the order of writes has to be such that
4301 	 * this field is written last.
4302 	 */
4303 } __attribute__((packed));
4304 
4305 /* hwrm_func_buf_unrgtr */
4306 /*
4307  * Description: This command is used by the PF driver to unregister buffers used
4308  * in the PF-VF communication with the HWRM. The PF driver uses this command to
4309  * unregister buffers for PF-VF communication. A parent PF may issue this
4310  * command to unregister buffers for communication between the PF and a specific
4311  * VF. If the VF ID is not valid, then this command is used to unregister
4312  * buffers used for communications with all children VFs of the PF.
4313  */
4314 /* Input	(24 bytes) */
4315 struct hwrm_func_buf_unrgtr_input {
4316 	uint16_t req_type;
4317 	/*
4318 	 * This value indicates what type of request this is. The format
4319 	 * for the rest of the command is determined by this field.
4320 	 */
4321 	uint16_t cmpl_ring;
4322 	/*
4323 	 * This value indicates the what completion ring the request
4324 	 * will be optionally completed on. If the value is -1, then no
4325 	 * CR completion will be generated. Any other value must be a
4326 	 * valid CR ring_id value for this function.
4327 	 */
4328 	uint16_t seq_id;
4329 	/* This value indicates the command sequence number. */
4330 	uint16_t target_id;
4331 	/*
4332 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
4333 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
4334 	 * - HWRM
4335 	 */
4336 	uint64_t resp_addr;
4337 	/*
4338 	 * This is the host address where the response will be written
4339 	 * when the request is complete. This area must be 16B aligned
4340 	 * and must be cleared to zero before the request is made.
4341 	 */
4342 	uint32_t enables;
4343 	/* This bit must be '1' for the vf_id field to be configured. */
4344 	#define HWRM_FUNC_BUF_UNRGTR_INPUT_ENABLES_VF_ID	UINT32_C(0x1)
4345 	uint16_t vf_id;
4346 	/*
4347 	 * This value is used to identify a Virtual Function	(VF). The
4348 	 * scope of VF ID is local within a PF.
4349 	 */
4350 	uint16_t unused_0;
4351 } __attribute__((packed));
4352 
4353 /* Output	(16 bytes) */
4354 struct hwrm_func_buf_unrgtr_output {
4355 	uint16_t error_code;
4356 	/*
4357 	 * Pass/Fail or error type Note: receiver to verify the in
4358 	 * parameters, and fail the call with an error when appropriate
4359 	 */
4360 	uint16_t req_type;
4361 	/* This field returns the type of original request. */
4362 	uint16_t seq_id;
4363 	/* This field provides original sequence number of the command. */
4364 	uint16_t resp_len;
4365 	/*
4366 	 * This field is the length of the response in bytes. The last
4367 	 * byte of the response is a valid flag that will read as '1'
4368 	 * when the command has been completely written to memory.
4369 	 */
4370 	uint32_t unused_0;
4371 	uint8_t unused_1;
4372 	uint8_t unused_2;
4373 	uint8_t unused_3;
4374 	uint8_t valid;
4375 	/*
4376 	 * This field is used in Output records to indicate that the
4377 	 * output is completely written to RAM. This field should be
4378 	 * read as '1' to indicate that the output has been completely
4379 	 * written. When writing a command completion or response to an
4380 	 * internal processor, the order of writes has to be such that
4381 	 * this field is written last.
4382 	 */
4383 } __attribute__((packed));
4384 
4385 /* hwrm_port_phy_cfg */
4386 /*
4387  * Description: This command configures the PHY device for the port. It allows
4388  * setting of the most generic settings for the PHY. The HWRM shall complete
4389  * this command as soon as PHY settings are configured. They may not be applied
4390  * when the command response is provided. A VF driver shall not be allowed to
4391  * configure PHY using this command. In a network partition mode, a PF driver
4392  * shall not be allowed to configure PHY using this command.
4393  */
4394 /* Input	(56 bytes) */
4395 struct hwrm_port_phy_cfg_input {
4396 	uint16_t req_type;
4397 	/*
4398 	 * This value indicates what type of request this is. The format
4399 	 * for the rest of the command is determined by this field.
4400 	 */
4401 	uint16_t cmpl_ring;
4402 	/*
4403 	 * This value indicates the what completion ring the request
4404 	 * will be optionally completed on. If the value is -1, then no
4405 	 * CR completion will be generated. Any other value must be a
4406 	 * valid CR ring_id value for this function.
4407 	 */
4408 	uint16_t seq_id;
4409 	/* This value indicates the command sequence number. */
4410 	uint16_t target_id;
4411 	/*
4412 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
4413 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
4414 	 * - HWRM
4415 	 */
4416 	uint64_t resp_addr;
4417 	/*
4418 	 * This is the host address where the response will be written
4419 	 * when the request is complete. This area must be 16B aligned
4420 	 * and must be cleared to zero before the request is made.
4421 	 */
4422 	uint32_t flags;
4423 	/*
4424 	 * When this bit is set to '1', the PHY for the port shall be
4425 	 * reset. # If this bit is set to 1, then the HWRM shall reset
4426 	 * the PHY after applying PHY configuration changes specified in
4427 	 * this command. # In order to guarantee that PHY configuration
4428 	 * changes specified in this command take effect, the HWRM
4429 	 * client should set this flag to 1. # If this bit is not set to
4430 	 * 1, then the HWRM may reset the PHY depending on the current
4431 	 * PHY configuration and settings specified in this command.
4432 	 */
4433 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_RESET_PHY	UINT32_C(0x1)
4434 	/* deprecated bit. Do not use!!! */
4435 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_DEPRECATED	UINT32_C(0x2)
4436 	/*
4437 	 * When this bit is set to '1', the link shall be forced to the
4438 	 * force_link_speed value. When this bit is set to '1', the HWRM
4439 	 * client should not enable any of the auto negotiation related
4440 	 * fields represented by auto_XXX fields in this command. When
4441 	 * this bit is set to '1' and the HWRM client has enabled a
4442 	 * auto_XXX field in this command, then the HWRM shall ignore
4443 	 * the enabled auto_XXX field. When this bit is set to zero, the
4444 	 * link shall be allowed to autoneg.
4445 	 */
4446 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FORCE	UINT32_C(0x4)
4447 	/*
4448 	 * When this bit is set to '1', the auto-negotiation process
4449 	 * shall be restarted on the link.
4450 	 */
4451 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_RESTART_AUTONEG	UINT32_C(0x8)
4452 	/*
4453 	 * When this bit is set to '1', Energy Efficient Ethernet	(EEE)
4454 	 * is requested to be enabled on this link. If EEE is not
4455 	 * supported on this port, then this flag shall be ignored by
4456 	 * the HWRM.
4457 	 */
4458 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_ENABLE	UINT32_C(0x10)
4459 	/*
4460 	 * When this bit is set to '1', Energy Efficient Ethernet	(EEE)
4461 	 * is requested to be disabled on this link. If EEE is not
4462 	 * supported on this port, then this flag shall be ignored by
4463 	 * the HWRM.
4464 	 */
4465 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_DISABLE	UINT32_C(0x20)
4466 	/*
4467 	 * When this bit is set to '1' and EEE is enabled on this link,
4468 	 * then TX LPI is requested to be enabled on the link. If EEE is
4469 	 * not supported on this port, then this flag shall be ignored
4470 	 * by the HWRM. If EEE is disabled on this port, then this flag
4471 	 * shall be ignored by the HWRM.
4472 	 */
4473 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_TX_LPI_ENABLE	UINT32_C(0x40)
4474 	/*
4475 	 * When this bit is set to '1' and EEE is enabled on this link,
4476 	 * then TX LPI is requested to be disabled on the link. If EEE
4477 	 * is not supported on this port, then this flag shall be
4478 	 * ignored by the HWRM. If EEE is disabled on this port, then
4479 	 * this flag shall be ignored by the HWRM.
4480 	 */
4481 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_TX_LPI_DISABLE UINT32_C(0x80)
4482 	/*
4483 	 * When set to 1, then the HWRM shall enable FEC
4484 	 * autonegotitation on this port if supported. When set to 0,
4485 	 * then this flag shall be ignored. If FEC autonegotiation is
4486 	 * not supported, then the HWRM shall ignore this flag.
4487 	 */
4488 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_AUTONEG_ENABLE UINT32_C(0x100)
4489 	/*
4490 	 * When set to 1, then the HWRM shall disable FEC
4491 	 * autonegotiation on this port if supported. When set to 0,
4492 	 * then this flag shall be ignored. If FEC autonegotiation is
4493 	 * not supported, then the HWRM shall ignore this flag.
4494 	 */
4495 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_AUTONEG_DISABLE	\
4496 		UINT32_C(0x200)
4497 	/*
4498 	 * When set to 1, then the HWRM shall enable FEC CLAUSE 74	(Fire
4499 	 * Code) on this port if supported. When set to 0, then this
4500 	 * flag shall be ignored. If FEC CLAUSE 74 is not supported,
4501 	 * then the HWRM shall ignore this flag.
4502 	 */
4503 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE74_ENABLE	\
4504 		UINT32_C(0x400)
4505 	/*
4506 	 * When set to 1, then the HWRM shall disable FEC CLAUSE 74
4507 	 *	(Fire Code) on this port if supported. When set to 0, then
4508 	 * this flag shall be ignored. If FEC CLAUSE 74 is not
4509 	 * supported, then the HWRM shall ignore this flag.
4510 	 */
4511 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE74_DISABLE	\
4512 		UINT32_C(0x800)
4513 	/*
4514 	 * When set to 1, then the HWRM shall enable FEC CLAUSE 91	(Reed
4515 	 * Solomon) on this port if supported. When set to 0, then this
4516 	 * flag shall be ignored. If FEC CLAUSE 91 is not supported,
4517 	 * then the HWRM shall ignore this flag.
4518 	 */
4519 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE91_ENABLE	\
4520 		UINT32_C(0x1000)
4521 	/*
4522 	 * When set to 1, then the HWRM shall disable FEC CLAUSE 91
4523 	 *	(Reed Solomon) on this port if supported. When set to 0, then
4524 	 * this flag shall be ignored. If FEC CLAUSE 91 is not
4525 	 * supported, then the HWRM shall ignore this flag.
4526 	 */
4527 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE91_DISABLE	\
4528 		UINT32_C(0x2000)
4529 	/*
4530 	 * When this bit is set to '1', the link shall be forced to be
4531 	 * taken down. # When this bit is set to '1", all other command
4532 	 * input settings related to the link speed shall be ignored.
4533 	 * Once the link state is forced down, it can be explicitly
4534 	 * cleared from that state by setting this flag to '0'. # If
4535 	 * this flag is set to '0', then the link shall be cleared from
4536 	 * forced down state if the link is in forced down state. There
4537 	 * may be conditions	(e.g. out-of-band or sideband configuration
4538 	 * changes for the link) outside the scope of the HWRM
4539 	 * implementation that may clear forced down link state.
4540 	 */
4541 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FORCE_LINK_DWN UINT32_C(0x4000)
4542 	uint32_t enables;
4543 	/* This bit must be '1' for the auto_mode field to be configured. */
4544 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_MODE	UINT32_C(0x1)
4545 	/* This bit must be '1' for the auto_duplex field to be configured. */
4546 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_DUPLEX	UINT32_C(0x2)
4547 	/* This bit must be '1' for the auto_pause field to be configured. */
4548 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_PAUSE	UINT32_C(0x4)
4549 	/*
4550 	 * This bit must be '1' for the auto_link_speed field to be
4551 	 * configured.
4552 	 */
4553 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_LINK_SPEED	UINT32_C(0x8)
4554 	/*
4555 	 * This bit must be '1' for the auto_link_speed_mask field to be
4556 	 * configured.
4557 	 */
4558 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_LINK_SPEED_MASK	 \
4559 		UINT32_C(0x10)
4560 	/* This bit must be '1' for the wirespeed field to be configured. */
4561 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_WIOUTPUTEED	UINT32_C(0x20)
4562 	/* This bit must be '1' for the lpbk field to be configured. */
4563 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_LPBK	UINT32_C(0x40)
4564 	/* This bit must be '1' for the preemphasis field to be configured. */
4565 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_PREEMPHASIS	UINT32_C(0x80)
4566 	/* This bit must be '1' for the force_pause field to be configured. */
4567 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_FORCE_PAUSE	UINT32_C(0x100)
4568 	/*
4569 	 * This bit must be '1' for the eee_link_speed_mask field to be
4570 	 * configured.
4571 	 */
4572 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_EEE_LINK_SPEED_MASK	\
4573 		UINT32_C(0x200)
4574 	/* This bit must be '1' for the tx_lpi_timer field to be configured. */
4575 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_TX_LPI_TIMER	UINT32_C(0x400)
4576 	uint16_t port_id;
4577 	/* Port ID of port that is to be configured. */
4578 	uint16_t force_link_speed;
4579 	/*
4580 	 * This is the speed that will be used if the force bit is '1'.
4581 	 * If unsupported speed is selected, an error will be generated.
4582 	 */
4583 	/* 100Mb link speed */
4584 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_100MB	UINT32_C(0x1)
4585 	/* 1Gb link speed */
4586 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_1GB	UINT32_C(0xa)
4587 	/* 2Gb link speed */
4588 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_2GB	UINT32_C(0x14)
4589 	/* 2.5Gb link speed */
4590 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_2_5GB	UINT32_C(0x19)
4591 	/* 10Gb link speed */
4592 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_10GB	UINT32_C(0x64)
4593 	/* 20Mb link speed */
4594 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_20GB	UINT32_C(0xc8)
4595 	/* 25Gb link speed */
4596 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_25GB	UINT32_C(0xfa)
4597 	/* 40Gb link speed */
4598 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_40GB	UINT32_C(0x190)
4599 	/* 50Gb link speed */
4600 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_50GB	UINT32_C(0x1f4)
4601 	/* 100Gb link speed */
4602 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_100GB	UINT32_C(0x3e8)
4603 	/* 10Mb link speed */
4604 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_10MB	UINT32_C(0xffff)
4605 	uint8_t auto_mode;
4606 	/*
4607 	 * This value is used to identify what autoneg mode is used when
4608 	 * the link speed is not being forced.
4609 	 */
4610 	/*
4611 	 * Disable autoneg or autoneg disabled. No
4612 	 * speeds are selected.
4613 	 */
4614 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_NONE	UINT32_C(0x0)
4615 	/* Select all possible speeds for autoneg mode. */
4616 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_ALL_SPEEDS	UINT32_C(0x1)
4617 	/*
4618 	 * Select only the auto_link_speed speed for
4619 	 * autoneg mode. This mode has been DEPRECATED.
4620 	 * An HWRM client should not use this mode.
4621 	 */
4622 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_ONE_SPEED	UINT32_C(0x2)
4623 	/*
4624 	 * Select the auto_link_speed or any speed below
4625 	 * that speed for autoneg. This mode has been
4626 	 * DEPRECATED. An HWRM client should not use
4627 	 * this mode.
4628 	 */
4629 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_ONE_OR_BELOW	UINT32_C(0x3)
4630 	/*
4631 	 * Select the speeds based on the corresponding
4632 	 * link speed mask value that is provided.
4633 	 */
4634 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_SPEED_MASK	UINT32_C(0x4)
4635 	uint8_t auto_duplex;
4636 	/*
4637 	 * This is the duplex setting that will be used if the
4638 	 * autoneg_mode is "one_speed" or "one_or_below".
4639 	 */
4640 	/* Half Duplex will be requested. */
4641 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_HALF	UINT32_C(0x0)
4642 	/* Full duplex will be requested. */
4643 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_FULL	UINT32_C(0x1)
4644 	/* Both Half and Full dupex will be requested. */
4645 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_BOTH	UINT32_C(0x2)
4646 	uint8_t auto_pause;
4647 	/*
4648 	 * This value is used to configure the pause that will be used
4649 	 * for autonegotiation. Add text on the usage of auto_pause and
4650 	 * force_pause.
4651 	 */
4652 	/*
4653 	 * When this bit is '1', Generation of tx pause messages has
4654 	 * been requested. Disabled otherwise.
4655 	 */
4656 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_PAUSE_TX	UINT32_C(0x1)
4657 	/*
4658 	 * When this bit is '1', Reception of rx pause messages has been
4659 	 * requested. Disabled otherwise.
4660 	 */
4661 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_PAUSE_RX	UINT32_C(0x2)
4662 	/*
4663 	 * When set to 1, the advertisement of pause is enabled. # When
4664 	 * the auto_mode is not set to none and this flag is set to 1,
4665 	 * then the auto_pause bits on this port are being advertised
4666 	 * and autoneg pause results are being interpreted. # When the
4667 	 * auto_mode is not set to none and this flag is set to 0, the
4668 	 * pause is forced as indicated in force_pause, and also
4669 	 * advertised as auto_pause bits, but the autoneg results are
4670 	 * not interpreted since the pause configuration is being
4671 	 * forced. # When the auto_mode is set to none and this flag is
4672 	 * set to 1, auto_pause bits should be ignored and should be set
4673 	 * to 0.
4674 	 */
4675 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_PAUSE_AUTONEG_PAUSE UINT32_C(0x4)
4676 	uint8_t unused_0;
4677 	uint16_t auto_link_speed;
4678 	/*
4679 	 * This is the speed that will be used if the autoneg_mode is
4680 	 * "one_speed" or "one_or_below". If an unsupported speed is
4681 	 * selected, an error will be generated.
4682 	 */
4683 	/* 100Mb link speed */
4684 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_100MB	UINT32_C(0x1)
4685 	/* 1Gb link speed */
4686 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_1GB	UINT32_C(0xa)
4687 	/* 2Gb link speed */
4688 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_2GB	UINT32_C(0x14)
4689 	/* 2.5Gb link speed */
4690 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_2_5GB	UINT32_C(0x19)
4691 	/* 10Gb link speed */
4692 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_10GB	UINT32_C(0x64)
4693 	/* 20Mb link speed */
4694 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_20GB	UINT32_C(0xc8)
4695 	/* 25Gb link speed */
4696 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_25GB	UINT32_C(0xfa)
4697 	/* 40Gb link speed */
4698 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_40GB	UINT32_C(0x190)
4699 	/* 50Gb link speed */
4700 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_50GB	UINT32_C(0x1f4)
4701 	/* 100Gb link speed */
4702 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_100GB	UINT32_C(0x3e8)
4703 	/* 10Mb link speed */
4704 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_10MB	UINT32_C(0xffff)
4705 	uint16_t auto_link_speed_mask;
4706 	/*
4707 	 * This is a mask of link speeds that will be used if
4708 	 * autoneg_mode is "mask". If unsupported speed is enabled an
4709 	 * error will be generated.
4710 	 */
4711 	/* 100Mb link speed	(Half-duplex) */
4712 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_100MBHD	 \
4713 		UINT32_C(0x1)
4714 	/* 100Mb link speed	(Full-duplex) */
4715 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_100MB \
4716 		UINT32_C(0x2)
4717 	/* 1Gb link speed	(Half-duplex) */
4718 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_1GBHD \
4719 		UINT32_C(0x4)
4720 	/* 1Gb link speed	(Full-duplex) */
4721 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_1GB	\
4722 		UINT32_C(0x8)
4723 	/* 2Gb link speed */
4724 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_2GB	\
4725 		UINT32_C(0x10)
4726 	/* 2.5Gb link speed */
4727 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_2_5GB	\
4728 		UINT32_C(0x20)
4729 	/* 10Gb link speed */
4730 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_10GB UINT32_C(0x40)
4731 	/* 20Gb link speed */
4732 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_20GB UINT32_C(0x80)
4733 	/* 25Gb link speed */
4734 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_25GB	\
4735 		UINT32_C(0x100)
4736 	/* 40Gb link speed */
4737 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_40GB	\
4738 		UINT32_C(0x200)
4739 	/* 50Gb link speed */
4740 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_50GB	\
4741 		UINT32_C(0x400)
4742 	/* 100Gb link speed */
4743 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_100GB	\
4744 		UINT32_C(0x800)
4745 	/* 10Mb link speed	(Half-duplex) */
4746 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_10MBHD	\
4747 		UINT32_C(0x1000)
4748 	/* 10Mb link speed	(Full-duplex) */
4749 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_10MB	\
4750 		UINT32_C(0x2000)
4751 	uint8_t wirespeed;
4752 	/* This value controls the wirespeed feature. */
4753 	/* Wirespeed feature is disabled. */
4754 	#define HWRM_PORT_PHY_CFG_INPUT_WIOUTPUTEED_OFF	UINT32_C(0x0)
4755 	/* Wirespeed feature is enabled. */
4756 	#define HWRM_PORT_PHY_CFG_INPUT_WIOUTPUTEED_ON	UINT32_C(0x1)
4757 	uint8_t lpbk;
4758 	/* This value controls the loopback setting for the PHY. */
4759 	/* No loopback is selected. Normal operation. */
4760 	#define HWRM_PORT_PHY_CFG_INPUT_LPBK_NONE	UINT32_C(0x0)
4761 	/*
4762 	 * The HW will be configured with local loopback
4763 	 * such that host data is sent back to the host
4764 	 * without modification.
4765 	 */
4766 	#define HWRM_PORT_PHY_CFG_INPUT_LPBK_LOCAL	UINT32_C(0x1)
4767 	/*
4768 	 * The HW will be configured with remote
4769 	 * loopback such that port logic will send
4770 	 * packets back out the transmitter that are
4771 	 * received.
4772 	 */
4773 	#define HWRM_PORT_PHY_CFG_INPUT_LPBK_REMOTE	UINT32_C(0x2)
4774 	uint8_t force_pause;
4775 	/*
4776 	 * This value is used to configure the pause that will be used
4777 	 * for force mode.
4778 	 */
4779 	/*
4780 	 * When this bit is '1', Generation of tx pause messages is
4781 	 * supported. Disabled otherwise.
4782 	 */
4783 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAUSE_TX	UINT32_C(0x1)
4784 	/*
4785 	 * When this bit is '1', Reception of rx pause messages is
4786 	 * supported. Disabled otherwise.
4787 	 */
4788 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAUSE_RX	UINT32_C(0x2)
4789 	uint8_t unused_1;
4790 	uint32_t preemphasis;
4791 	/*
4792 	 * This value controls the pre-emphasis to be used for the link.
4793 	 * Driver should not set this value	(use enable.preemphasis = 0)
4794 	 * unless driver is sure of setting. Normally HWRM FW will
4795 	 * determine proper pre-emphasis.
4796 	 */
4797 	uint16_t eee_link_speed_mask;
4798 	/*
4799 	 * Setting for link speed mask that is used to advertise speeds
4800 	 * during autonegotiation when EEE is enabled. This field is
4801 	 * valid only when EEE is enabled. The speeds specified in this
4802 	 * field shall be a subset of speeds specified in
4803 	 * auto_link_speed_mask. If EEE is enabled,then at least one
4804 	 * speed shall be provided in this mask.
4805 	 */
4806 	/* Reserved */
4807 	#define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD1 UINT32_C(0x1)
4808 	/* 100Mb link speed	(Full-duplex) */
4809 	#define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_100MB UINT32_C(0x2)
4810 	/* Reserved */
4811 	#define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD2 UINT32_C(0x4)
4812 	/* 1Gb link speed	(Full-duplex) */
4813 	#define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_1GB	UINT32_C(0x8)
4814 	/* Reserved */
4815 	#define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD3 UINT32_C(0x10)
4816 	/* Reserved */
4817 	#define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD4 UINT32_C(0x20)
4818 	/* 10Gb link speed */
4819 	#define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_10GB UINT32_C(0x40)
4820 	uint8_t unused_2;
4821 	uint8_t unused_3;
4822 	uint32_t tx_lpi_timer;
4823 	uint32_t unused_4;
4824 	/*
4825 	 * Reuested setting of TX LPI timer in microseconds. This field
4826 	 * is valid only when EEE is enabled and TX LPI is enabled.
4827 	 */
4828 	#define HWRM_PORT_PHY_CFG_INPUT_TX_LPI_TIMER_MASK UINT32_C(0xffffff)
4829 	#define HWRM_PORT_PHY_CFG_INPUT_TX_LPI_TIMER_SFT	0
4830 } __attribute__((packed));
4831 
4832 /* Output	(16 bytes) */
4833 struct hwrm_port_phy_cfg_output {
4834 	uint16_t error_code;
4835 	/*
4836 	 * Pass/Fail or error type Note: receiver to verify the in
4837 	 * parameters, and fail the call with an error when appropriate
4838 	 */
4839 	uint16_t req_type;
4840 	/* This field returns the type of original request. */
4841 	uint16_t seq_id;
4842 	/* This field provides original sequence number of the command. */
4843 	uint16_t resp_len;
4844 	/*
4845 	 * This field is the length of the response in bytes. The last
4846 	 * byte of the response is a valid flag that will read as '1'
4847 	 * when the command has been completely written to memory.
4848 	 */
4849 	uint32_t unused_0;
4850 	uint8_t unused_1;
4851 	uint8_t unused_2;
4852 	uint8_t unused_3;
4853 	uint8_t valid;
4854 	/*
4855 	 * This field is used in Output records to indicate that the
4856 	 * output is completely written to RAM. This field should be
4857 	 * read as '1' to indicate that the output has been completely
4858 	 * written. When writing a command completion or response to an
4859 	 * internal processor, the order of writes has to be such that
4860 	 * this field is written last.
4861 	 */
4862 } __attribute__((packed));
4863 
4864 /* hwrm_port_phy_qcfg */
4865 /* Description: This command queries the PHY configuration for the port. */
4866 /* Input	(24 bytes) */
4867 struct hwrm_port_phy_qcfg_input {
4868 	uint16_t req_type;
4869 	/*
4870 	 * This value indicates what type of request this is. The format
4871 	 * for the rest of the command is determined by this field.
4872 	 */
4873 	uint16_t cmpl_ring;
4874 	/*
4875 	 * This value indicates the what completion ring the request
4876 	 * will be optionally completed on. If the value is -1, then no
4877 	 * CR completion will be generated. Any other value must be a
4878 	 * valid CR ring_id value for this function.
4879 	 */
4880 	uint16_t seq_id;
4881 	/* This value indicates the command sequence number. */
4882 	uint16_t target_id;
4883 	/*
4884 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
4885 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
4886 	 * - HWRM
4887 	 */
4888 	uint64_t resp_addr;
4889 	/*
4890 	 * This is the host address where the response will be written
4891 	 * when the request is complete. This area must be 16B aligned
4892 	 * and must be cleared to zero before the request is made.
4893 	 */
4894 	uint16_t port_id;
4895 	/* Port ID of port that is to be queried. */
4896 	uint16_t unused_0[3];
4897 } __attribute__((packed));
4898 
4899 /* Output	(96 bytes) */
4900 struct hwrm_port_phy_qcfg_output {
4901 	uint16_t error_code;
4902 	/*
4903 	 * Pass/Fail or error type Note: receiver to verify the in
4904 	 * parameters, and fail the call with an error when appropriate
4905 	 */
4906 	uint16_t req_type;
4907 	/* This field returns the type of original request. */
4908 	uint16_t seq_id;
4909 	/* This field provides original sequence number of the command. */
4910 	uint16_t resp_len;
4911 	/*
4912 	 * This field is the length of the response in bytes. The last
4913 	 * byte of the response is a valid flag that will read as '1'
4914 	 * when the command has been completely written to memory.
4915 	 */
4916 	uint8_t link;
4917 	/* This value indicates the current link status. */
4918 	/* There is no link or cable detected. */
4919 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_NO_LINK	UINT32_C(0x0)
4920 	/* There is no link, but a cable has been detected. */
4921 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SIGNAL	UINT32_C(0x1)
4922 	/* There is a link. */
4923 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_LINK	UINT32_C(0x2)
4924 	uint8_t unused_0;
4925 	uint16_t link_speed;
4926 	/* This value indicates the current link speed of the connection. */
4927 	/* 100Mb link speed */
4928 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_100MB	UINT32_C(0x1)
4929 	/* 1Gb link speed */
4930 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_1GB	UINT32_C(0xa)
4931 	/* 2Gb link speed */
4932 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_2GB	UINT32_C(0x14)
4933 	/* 2.5Gb link speed */
4934 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_2_5GB	UINT32_C(0x19)
4935 	/* 10Gb link speed */
4936 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_10GB	UINT32_C(0x64)
4937 	/* 20Mb link speed */
4938 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_20GB	UINT32_C(0xc8)
4939 	/* 25Gb link speed */
4940 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_25GB	UINT32_C(0xfa)
4941 	/* 40Gb link speed */
4942 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_40GB	UINT32_C(0x190)
4943 	/* 50Gb link speed */
4944 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_50GB	UINT32_C(0x1f4)
4945 	/* 100Gb link speed */
4946 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_100GB	UINT32_C(0x3e8)
4947 	/* 10Mb link speed */
4948 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_10MB	UINT32_C(0xffff)
4949 	uint8_t duplex_cfg;
4950 	/* This value is indicates the duplex of the current connection. */
4951 	/* Half Duplex connection. */
4952 	#define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_CFG_HALF UINT32_C(0x0)
4953 	/* Full duplex connection. */
4954 	#define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_CFG_FULL UINT32_C(0x1)
4955 	uint8_t pause;
4956 	/*
4957 	 * This value is used to indicate the current pause
4958 	 * configuration. When autoneg is enabled, this value represents
4959 	 * the autoneg results of pause configuration.
4960 	 */
4961 	/*
4962 	 * When this bit is '1', Generation of tx pause messages is
4963 	 * supported. Disabled otherwise.
4964 	 */
4965 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PAUSE_TX	UINT32_C(0x1)
4966 	/*
4967 	 * When this bit is '1', Reception of rx pause messages is
4968 	 * supported. Disabled otherwise.
4969 	 */
4970 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PAUSE_RX	UINT32_C(0x2)
4971 	uint16_t support_speeds;
4972 	/*
4973 	 * The supported speeds for the port. This is a bit mask. For
4974 	 * each speed that is supported, the corrresponding bit will be
4975 	 * set to '1'.
4976 	 */
4977 	/* 100Mb link speed	(Half-duplex) */
4978 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_100MBHD UINT32_C(0x1)
4979 	/* 100Mb link speed	(Full-duplex) */
4980 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_100MB UINT32_C(0x2)
4981 	/* 1Gb link speed	(Half-duplex) */
4982 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_1GBHD UINT32_C(0x4)
4983 	/* 1Gb link speed	(Full-duplex) */
4984 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_1GB	UINT32_C(0x8)
4985 	/* 2Gb link speed */
4986 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_2GB	UINT32_C(0x10)
4987 	/* 2.5Gb link speed */
4988 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_2_5GB UINT32_C(0x20)
4989 	/* 10Gb link speed */
4990 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_10GB UINT32_C(0x40)
4991 	/* 20Gb link speed */
4992 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_20GB UINT32_C(0x80)
4993 	/* 25Gb link speed */
4994 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_25GB UINT32_C(0x100)
4995 	/* 40Gb link speed */
4996 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_40GB UINT32_C(0x200)
4997 	/* 50Gb link speed */
4998 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_50GB UINT32_C(0x400)
4999 	/* 100Gb link speed */
5000 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_100GB UINT32_C(0x800)
5001 	/* 10Mb link speed	(Half-duplex) */
5002 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_10MBHD	UINT32_C(0x1000)
5003 	/* 10Mb link speed	(Full-duplex) */
5004 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_10MB UINT32_C(0x2000)
5005 	uint16_t force_link_speed;
5006 	/*
5007 	 * Current setting of forced link speed. When the link speed is
5008 	 * not being forced, this value shall be set to 0.
5009 	 */
5010 	/* 100Mb link speed */
5011 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_100MB UINT32_C(0x1)
5012 	/* 1Gb link speed */
5013 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_1GB	UINT32_C(0xa)
5014 	/* 2Gb link speed */
5015 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_2GB	UINT32_C(0x14)
5016 	/* 2.5Gb link speed */
5017 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_2_5GB UINT32_C(0x19)
5018 	/* 10Gb link speed */
5019 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_10GB	UINT32_C(0x64)
5020 	/* 20Mb link speed */
5021 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_20GB	UINT32_C(0xc8)
5022 	/* 25Gb link speed */
5023 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_25GB	UINT32_C(0xfa)
5024 	/* 40Gb link speed */
5025 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_40GB UINT32_C(0x190)
5026 	/* 50Gb link speed */
5027 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_50GB UINT32_C(0x1f4)
5028 	/* 100Gb link speed */
5029 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_100GB UINT32_C(0x3e8)
5030 	/* 10Mb link speed */
5031 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_10MB UINT32_C(0xffff)
5032 	uint8_t auto_mode;
5033 	/* Current setting of auto negotiation mode. */
5034 	/*
5035 	 * Disable autoneg or autoneg disabled. No
5036 	 * speeds are selected.
5037 	 */
5038 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_NONE	UINT32_C(0x0)
5039 	/* Select all possible speeds for autoneg mode. */
5040 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_ALL_SPEEDS	UINT32_C(0x1)
5041 	/*
5042 	 * Select only the auto_link_speed speed for
5043 	 * autoneg mode. This mode has been DEPRECATED.
5044 	 * An HWRM client should not use this mode.
5045 	 */
5046 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_ONE_SPEED	UINT32_C(0x2)
5047 	/*
5048 	 * Select the auto_link_speed or any speed below
5049 	 * that speed for autoneg. This mode has been
5050 	 * DEPRECATED. An HWRM client should not use
5051 	 * this mode.
5052 	 */
5053 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_ONE_OR_BELOW UINT32_C(0x3)
5054 	/*
5055 	 * Select the speeds based on the corresponding
5056 	 * link speed mask value that is provided.
5057 	 */
5058 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_SPEED_MASK	UINT32_C(0x4)
5059 	uint8_t auto_pause;
5060 	/*
5061 	 * Current setting of pause autonegotiation. Move autoneg_pause
5062 	 * flag here.
5063 	 */
5064 	/*
5065 	 * When this bit is '1', Generation of tx pause messages has
5066 	 * been requested. Disabled otherwise.
5067 	 */
5068 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAUSE_TX	UINT32_C(0x1)
5069 	/*
5070 	 * When this bit is '1', Reception of rx pause messages has been
5071 	 * requested. Disabled otherwise.
5072 	 */
5073 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAUSE_RX	UINT32_C(0x2)
5074 	/*
5075 	 * When set to 1, the advertisement of pause is enabled. # When
5076 	 * the auto_mode is not set to none and this flag is set to 1,
5077 	 * then the auto_pause bits on this port are being advertised
5078 	 * and autoneg pause results are being interpreted. # When the
5079 	 * auto_mode is not set to none and this flag is set to 0, the
5080 	 * pause is forced as indicated in force_pause, and also
5081 	 * advertised as auto_pause bits, but the autoneg results are
5082 	 * not interpreted since the pause configuration is being
5083 	 * forced. # When the auto_mode is set to none and this flag is
5084 	 * set to 1, auto_pause bits should be ignored and should be set
5085 	 * to 0.
5086 	 */
5087 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAUSE_AUTONEG_PAUSE UINT32_C(0x4)
5088 	uint16_t auto_link_speed;
5089 	/*
5090 	 * Current setting for auto_link_speed. This field is only valid
5091 	 * when auto_mode is set to "one_speed" or "one_or_below".
5092 	 */
5093 	/* 100Mb link speed */
5094 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_100MB	UINT32_C(0x1)
5095 	/* 1Gb link speed */
5096 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_1GB	UINT32_C(0xa)
5097 	/* 2Gb link speed */
5098 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_2GB	UINT32_C(0x14)
5099 	/* 2.5Gb link speed */
5100 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_2_5GB	UINT32_C(0x19)
5101 	/* 10Gb link speed */
5102 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_10GB	UINT32_C(0x64)
5103 	/* 20Mb link speed */
5104 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_20GB	UINT32_C(0xc8)
5105 	/* 25Gb link speed */
5106 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_25GB	UINT32_C(0xfa)
5107 	/* 40Gb link speed */
5108 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_40GB	UINT32_C(0x190)
5109 	/* 50Gb link speed */
5110 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_50GB	UINT32_C(0x1f4)
5111 	/* 100Gb link speed */
5112 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_100GB UINT32_C(0x3e8)
5113 	/* 10Mb link speed */
5114 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_10MB UINT32_C(0xffff)
5115 	uint16_t auto_link_speed_mask;
5116 	/*
5117 	 * Current setting for auto_link_speed_mask that is used to
5118 	 * advertise speeds during autonegotiation. This field is only
5119 	 * valid when auto_mode is set to "mask". The speeds specified
5120 	 * in this field shall be a subset of supported speeds on this
5121 	 * port.
5122 	 */
5123 	/* 100Mb link speed	(Half-duplex) */
5124 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_100MBHD	\
5125 		UINT32_C(0x1)
5126 	/* 100Mb link speed	(Full-duplex) */
5127 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_100MB	 \
5128 		UINT32_C(0x2)
5129 	/* 1Gb link speed	(Half-duplex) */
5130 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_1GBHD	 \
5131 		UINT32_C(0x4)
5132 	/* 1Gb link speed	(Full-duplex) */
5133 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_1GB UINT32_C(0x8)
5134 	/* 2Gb link speed */
5135 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_2GB	\
5136 		UINT32_C(0x10)
5137 	/* 2.5Gb link speed */
5138 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_2_5GB	 \
5139 		UINT32_C(0x20)
5140 	/* 10Gb link speed */
5141 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_10GB	\
5142 		UINT32_C(0x40)
5143 	/* 20Gb link speed */
5144 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_20GB	\
5145 		UINT32_C(0x80)
5146 	/* 25Gb link speed */
5147 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_25GB	\
5148 		UINT32_C(0x100)
5149 	/* 40Gb link speed */
5150 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_40GB	\
5151 		UINT32_C(0x200)
5152 	/* 50Gb link speed */
5153 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_50GB	\
5154 		UINT32_C(0x400)
5155 	/* 100Gb link speed */
5156 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_100GB	 \
5157 		UINT32_C(0x800)
5158 	/* 10Mb link speed	(Half-duplex) */
5159 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_10MBHD	\
5160 		UINT32_C(0x1000)
5161 	/* 10Mb link speed	(Full-duplex) */
5162 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_10MB	\
5163 		UINT32_C(0x2000)
5164 	uint8_t wirespeed;
5165 	/* Current setting for wirespeed. */
5166 	/* Wirespeed feature is disabled. */
5167 	#define HWRM_PORT_PHY_QCFG_OUTPUT_WIOUTPUTEED_OFF	UINT32_C(0x0)
5168 	/* Wirespeed feature is enabled. */
5169 	#define HWRM_PORT_PHY_QCFG_OUTPUT_WIOUTPUTEED_ON	UINT32_C(0x1)
5170 	uint8_t lpbk;
5171 	/* Current setting for loopback. */
5172 	/* No loopback is selected. Normal operation. */
5173 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_NONE	UINT32_C(0x0)
5174 	/*
5175 	 * The HW will be configured with local loopback
5176 	 * such that host data is sent back to the host
5177 	 * without modification.
5178 	 */
5179 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_LOCAL	UINT32_C(0x1)
5180 	/*
5181 	 * The HW will be configured with remote
5182 	 * loopback such that port logic will send
5183 	 * packets back out the transmitter that are
5184 	 * received.
5185 	 */
5186 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_REMOTE	UINT32_C(0x2)
5187 	uint8_t force_pause;
5188 	/*
5189 	 * Current setting of forced pause. When the pause configuration
5190 	 * is not being forced, then this value shall be set to 0.
5191 	 */
5192 	/*
5193 	 * When this bit is '1', Generation of tx pause messages is
5194 	 * supported. Disabled otherwise.
5195 	 */
5196 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAUSE_TX	UINT32_C(0x1)
5197 	/*
5198 	 * When this bit is '1', Reception of rx pause messages is
5199 	 * supported. Disabled otherwise.
5200 	 */
5201 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAUSE_RX	UINT32_C(0x2)
5202 	uint8_t module_status;
5203 	/*
5204 	 * This value indicates the current status of the optics module
5205 	 * on this port.
5206 	 */
5207 	/* Module is inserted and accepted */
5208 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NONE	UINT32_C(0x0)
5209 	/* Module is rejected and transmit side Laser is disabled. */
5210 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_DISABLETX UINT32_C(0x1)
5211 	/* Module mismatch warning. */
5212 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_WARNINGMSG UINT32_C(0x2)
5213 	/* Module is rejected and powered down. */
5214 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_PWRDOWN	UINT32_C(0x3)
5215 	/* Module is not inserted. */
5216 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NOTINSERTED \
5217 		UINT32_C(0x4)
5218 	/* Module status is not applicable. */
5219 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NOTAPPLICABLE \
5220 		UINT32_C(0xff)
5221 	uint32_t preemphasis;
5222 	/* Current setting for preemphasis. */
5223 	uint8_t phy_maj;
5224 	/* This field represents the major version of the PHY. */
5225 	uint8_t phy_min;
5226 	/* This field represents the minor version of the PHY. */
5227 	uint8_t phy_bld;
5228 	/* This field represents the build version of the PHY. */
5229 	uint8_t phy_type;
5230 	/* This value represents a PHY type. */
5231 	/* Unknown */
5232 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_UNKNOWN	UINT32_C(0x0)
5233 	/* BASE-CR */
5234 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASECR	UINT32_C(0x1)
5235 	/* BASE-KR4	(Deprecated) */
5236 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR4	UINT32_C(0x2)
5237 	/* BASE-LR */
5238 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASELR	UINT32_C(0x3)
5239 	/* BASE-SR */
5240 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASESR	UINT32_C(0x4)
5241 	/* BASE-KR2	(Deprecated) */
5242 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR2	UINT32_C(0x5)
5243 	/* BASE-KX */
5244 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKX	UINT32_C(0x6)
5245 	/* BASE-KR */
5246 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR	UINT32_C(0x7)
5247 	/* BASE-T */
5248 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASET	UINT32_C(0x8)
5249 	/* EEE capable BASE-T */
5250 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASETE	UINT32_C(0x9)
5251 	/* SGMII connected external PHY */
5252 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_SGMIIEXTPHY	UINT32_C(0xa)
5253 	/* 25G_BASECR_CA_L */
5254 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASECR_CA_L UINT32_C(0xb)
5255 	/* 25G_BASECR_CA_S */
5256 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASECR_CA_S UINT32_C(0xc)
5257 	/* 25G_BASECR_CA_N */
5258 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASECR_CA_N UINT32_C(0xd)
5259 	/* 25G_BASESR */
5260 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASESR	UINT32_C(0xe)
5261 	/* 100G_BASECR4 */
5262 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASECR4	UINT32_C(0xf)
5263 	/* 100G_BASESR4 */
5264 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASESR4	UINT32_C(0x10)
5265 	/* 100G_BASELR4 */
5266 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASELR4	UINT32_C(0x11)
5267 	/* 100G_BASEER4 */
5268 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASEER4	UINT32_C(0x12)
5269 	/* 100G_BASESR10 */
5270 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASESR10 UINT32_C(0x13)
5271 	/* 40G_BASECR4 */
5272 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASECR4	UINT32_C(0x14)
5273 	/* 40G_BASESR4 */
5274 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASESR4	UINT32_C(0x15)
5275 	/* 40G_BASELR4 */
5276 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASELR4	UINT32_C(0x16)
5277 	/* 40G_BASEER4 */
5278 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASEER4	UINT32_C(0x17)
5279 	/* 40G_ACTIVE_CABLE */
5280 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_ACTIVE_CABLE \
5281 		UINT32_C(0x18)
5282 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_1G_BASET UINT32_C(0x19)
5283 	/* 1G_baseSX */
5284 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_1G_BASESX UINT32_C(0x1a)
5285 	/* 1G_baseCX */
5286 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_1G_BASECX UINT32_C(0x1b)
5287 	uint8_t media_type;
5288 	/* This value represents a media type. */
5289 	/* Unknown */
5290 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_UNKNOWN	UINT32_C(0x0)
5291 	/* Twisted Pair */
5292 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_TP	UINT32_C(0x1)
5293 	/* Direct Attached Copper */
5294 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_DAC	UINT32_C(0x2)
5295 	/* Fiber */
5296 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_FIBRE	UINT32_C(0x3)
5297 	uint8_t xcvr_pkg_type;
5298 	/* This value represents a transceiver type. */
5299 	/* PHY and MAC are in the same package */
5300 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_PKG_TYPE_XCVR_INTERNAL \
5301 		UINT32_C(0x1)
5302 	/* PHY and MAC are in different packages */
5303 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_PKG_TYPE_XCVR_EXTERNAL \
5304 		UINT32_C(0x2)
5305 	uint8_t eee_config_phy_addr;
5306 	/*
5307 	 * This field represents flags related to EEE configuration.
5308 	 * These EEE configuration flags are valid only when the
5309 	 * auto_mode is not set to none	(in other words autonegotiation
5310 	 * is enabled).
5311 	 */
5312 	/* This field represents PHY address. */
5313 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_ADDR_MASK	UINT32_C(0x1f)
5314 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_ADDR_SFT	0
5315 	/*
5316 	 * When set to 1, Energy Efficient Ethernet	(EEE) mode is
5317 	 * enabled. Speeds for autoneg with EEE mode enabled are based
5318 	 * on eee_link_speed_mask.
5319 	 */
5320 	#define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_EEE_ENABLED UINT32_C(0x20)
5321 	/*
5322 	 * This flag is valid only when eee_enabled is set to 1. # If
5323 	 * eee_enabled is set to 0, then EEE mode is disabled and this
5324 	 * flag shall be ignored. # If eee_enabled is set to 1 and this
5325 	 * flag is set to 1, then Energy Efficient Ethernet	(EEE) mode
5326 	 * is enabled and in use. # If eee_enabled is set to 1 and this
5327 	 * flag is set to 0, then Energy Efficient Ethernet	(EEE) mode
5328 	 * is enabled but is currently not in use.
5329 	 */
5330 	#define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_EEE_ACTIVE	UINT32_C(0x40)
5331 	/*
5332 	 * This flag is valid only when eee_enabled is set to 1. # If
5333 	 * eee_enabled is set to 0, then EEE mode is disabled and this
5334 	 * flag shall be ignored. # If eee_enabled is set to 1 and this
5335 	 * flag is set to 1, then Energy Efficient Ethernet	(EEE) mode
5336 	 * is enabled and TX LPI is enabled. # If eee_enabled is set to
5337 	 * 1 and this flag is set to 0, then Energy Efficient Ethernet
5338 	 *	(EEE) mode is enabled but TX LPI is disabled.
5339 	 */
5340 	#define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_EEE_TX_LPI	UINT32_C(0x80)
5341 	/*
5342 	 * This field represents flags related to EEE configuration.
5343 	 * These EEE configuration flags are valid only when the
5344 	 * auto_mode is not set to none	(in other words autonegotiation
5345 	 * is enabled).
5346 	 */
5347 	#define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_MASK	UINT32_C(0xe0)
5348 	#define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_SFT	5
5349 	uint8_t parallel_detect;
5350 	/* Reserved field, set to 0 */
5351 	/*
5352 	 * When set to 1, the parallel detection is used to determine
5353 	 * the speed of the link partner. Parallel detection is used
5354 	 * when a autonegotiation capable device is connected to a link
5355 	 * parter that is not capable of autonegotiation.
5356 	 */
5357 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PARALLEL_DETECT	UINT32_C(0x1)
5358 	/* Reserved field, set to 0 */
5359 	#define HWRM_PORT_PHY_QCFG_OUTPUT_RESERVED_MASK	UINT32_C(0xfe)
5360 	#define HWRM_PORT_PHY_QCFG_OUTPUT_RESERVED_SFT	1
5361 	uint16_t link_partner_adv_speeds;
5362 	/*
5363 	 * The advertised speeds for the port by the link partner. Each
5364 	 * advertised speed will be set to '1'.
5365 	 */
5366 	/* 100Mb link speed	(Half-duplex) */
5367 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_100MBHD \
5368 		UINT32_C(0x1)
5369 	/* 100Mb link speed	(Full-duplex) */
5370 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_100MB   \
5371 		UINT32_C(0x2)
5372 	/* 1Gb link speed	(Half-duplex) */
5373 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_1GBHD   \
5374 		UINT32_C(0x4)
5375 	/* 1Gb link speed	(Full-duplex) */
5376 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_1GB	\
5377 		UINT32_C(0x8)
5378 	/* 2Gb link speed */
5379 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_2GB	\
5380 		UINT32_C(0x10)
5381 	/* 2.5Gb link speed */
5382 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_2_5GB   \
5383 		UINT32_C(0x20)
5384 	/* 10Gb link speed */
5385 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_10GB	\
5386 		UINT32_C(0x40)
5387 	/* 20Gb link speed */
5388 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_20GB	\
5389 		UINT32_C(0x80)
5390 	/* 25Gb link speed */
5391 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_25GB	\
5392 		UINT32_C(0x100)
5393 	/* 40Gb link speed */
5394 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_40GB	\
5395 		UINT32_C(0x200)
5396 	/* 50Gb link speed */
5397 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_50GB	\
5398 		UINT32_C(0x400)
5399 	/* 100Gb link speed */
5400 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_100GB   \
5401 		UINT32_C(0x800)
5402 	/* 10Mb link speed	(Half-duplex) */
5403 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_10MBHD  \
5404 		UINT32_C(0x1000)
5405 	/* 10Mb link speed	(Full-duplex) */
5406 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_10MB	\
5407 		UINT32_C(0x2000)
5408 	uint8_t link_partner_adv_auto_mode;
5409 	/*
5410 	 * The advertised autoneg for the port by the link partner. This
5411 	 * field is deprecated and should be set to 0.
5412 	 */
5413 	/*
5414 	 * Disable autoneg or autoneg disabled. No
5415 	 * speeds are selected.
5416 	 */
5417 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_NONE \
5418 		UINT32_C(0x0)
5419 	/* Select all possible speeds for autoneg mode. */
5420 	#define \
5421 	HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_ALL_SPEEDS \
5422 		UINT32_C(0x1)
5423 	/*
5424 	 * Select only the auto_link_speed speed for
5425 	 * autoneg mode. This mode has been DEPRECATED.
5426 	 * An HWRM client should not use this mode.
5427 	 */
5428 	#define \
5429 	HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_ONE_SPEED \
5430 		UINT32_C(0x2)
5431 	/*
5432 	 * Select the auto_link_speed or any speed below
5433 	 * that speed for autoneg. This mode has been
5434 	 * DEPRECATED. An HWRM client should not use
5435 	 * this mode.
5436 	 */
5437 	#define \
5438 	HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_ONE_OR_BELOW \
5439 		UINT32_C(0x3)
5440 	/*
5441 	 * Select the speeds based on the corresponding
5442 	 * link speed mask value that is provided.
5443 	 */
5444 	#define \
5445 	HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_SPEED_MASK \
5446 		UINT32_C(0x4)
5447 	uint8_t link_partner_adv_pause;
5448 	/* The advertised pause settings on the port by the link partner. */
5449 	/*
5450 	 * When this bit is '1', Generation of tx pause messages is
5451 	 * supported. Disabled otherwise.
5452 	 */
5453 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_PAUSE_TX	\
5454 		UINT32_C(0x1)
5455 	/*
5456 	 * When this bit is '1', Reception of rx pause messages is
5457 	 * supported. Disabled otherwise.
5458 	 */
5459 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_PAUSE_RX	\
5460 		UINT32_C(0x2)
5461 	uint16_t adv_eee_link_speed_mask;
5462 	/*
5463 	 * Current setting for link speed mask that is used to advertise
5464 	 * speeds during autonegotiation when EEE is enabled. This field
5465 	 * is valid only when eee_enabled flags is set to 1. The speeds
5466 	 * specified in this field shall be a subset of speeds specified
5467 	 * in auto_link_speed_mask.
5468 	 */
5469 	/* Reserved */
5470 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD1   \
5471 		UINT32_C(0x1)
5472 	/* 100Mb link speed	(Full-duplex) */
5473 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_100MB   \
5474 		UINT32_C(0x2)
5475 	/* Reserved */
5476 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD2   \
5477 		UINT32_C(0x4)
5478 	/* 1Gb link speed	(Full-duplex) */
5479 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_1GB	\
5480 		UINT32_C(0x8)
5481 	/* Reserved */
5482 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD3   \
5483 		UINT32_C(0x10)
5484 	/* Reserved */
5485 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD4   \
5486 		UINT32_C(0x20)
5487 	/* 10Gb link speed */
5488 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_10GB	\
5489 		UINT32_C(0x40)
5490 	uint16_t link_partner_adv_eee_link_speed_mask;
5491 	/*
5492 	 * Current setting for link speed mask that is advertised by the
5493 	 * link partner when EEE is enabled. This field is valid only
5494 	 * when eee_enabled flags is set to 1.
5495 	 */
5496 	/* Reserved */
5497 	#define \
5498 	HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD1 \
5499 		UINT32_C(0x1)
5500 	/* 100Mb link speed	(Full-duplex) */
5501 	#define \
5502 	HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_100MB \
5503 		UINT32_C(0x2)
5504 	/* Reserved */
5505 	#define \
5506 	HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD2 \
5507 		UINT32_C(0x4)
5508 	/* 1Gb link speed	(Full-duplex) */
5509 	#define \
5510 	HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_1GB \
5511 		UINT32_C(0x8)
5512 	/* Reserved */
5513 	#define \
5514 	HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD3 \
5515 		UINT32_C(0x10)
5516 	/* Reserved */
5517 	#define \
5518 	HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD4 \
5519 		UINT32_C(0x20)
5520 	/* 10Gb link speed */
5521 	#define \
5522 	HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_10GB \
5523 		UINT32_C(0x40)
5524 	uint32_t xcvr_identifier_type_tx_lpi_timer;
5525 	/* This value represents transceiver identifier type. */
5526 	/*
5527 	 * Current setting of TX LPI timer in microseconds. This field
5528 	 * is valid only when_eee_enabled flag is set to 1 and
5529 	 * tx_lpi_enabled is set to 1.
5530 	 */
5531 	#define HWRM_PORT_PHY_QCFG_OUTPUT_TX_LPI_TIMER_MASK UINT32_C(0xffffff)
5532 	#define HWRM_PORT_PHY_QCFG_OUTPUT_TX_LPI_TIMER_SFT	0
5533 	/* This value represents transceiver identifier type. */
5534 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_MASK	\
5535 		UINT32_C(0xff000000)
5536 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_SFT	24
5537 	/* Unknown */
5538 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_UNKNOWN \
5539 		(UINT32_C(0x0) << 24)
5540 	/* SFP/SFP+/SFP28 */
5541 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_SFP \
5542 		(UINT32_C(0x3) << 24)
5543 	/* QSFP */
5544 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFP \
5545 		(UINT32_C(0xc) << 24)
5546 	/* QSFP+ */
5547 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFPPLUS \
5548 		(UINT32_C(0xd) << 24)
5549 	/* QSFP28 */
5550 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFP28 \
5551 		(UINT32_C(0x11) << 24)
5552 	uint16_t fec_cfg;
5553 	/*
5554 	 * This value represents the current configuration of Forward
5555 	 * Error Correction	(FEC) on the port.
5556 	 */
5557 	/*
5558 	 * When set to 1, then FEC is not supported on this port. If
5559 	 * this flag is set to 1, then all other FEC configuration flags
5560 	 * shall be ignored. When set to 0, then FEC is supported as
5561 	 * indicated by other configuration flags. If no cable is
5562 	 * attached and the HWRM does not yet know the FEC capability,
5563 	 * then the HWRM shall set this flag to 1 when reporting FEC
5564 	 * capability.
5565 	 */
5566 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_NONE_SUPPORTED	 \
5567 		UINT32_C(0x1)
5568 	/*
5569 	 * When set to 1, then FEC autonegotiation is supported on this
5570 	 * port. When set to 0, then FEC autonegotiation is not
5571 	 * supported on this port.
5572 	 */
5573 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_AUTONEG_SUPPORTED   \
5574 		UINT32_C(0x2)
5575 	/*
5576 	 * When set to 1, then FEC autonegotiation is enabled on this
5577 	 * port. When set to 0, then FEC autonegotiation is disabled if
5578 	 * supported. This flag should be ignored if FEC autonegotiation
5579 	 * is not supported on this port.
5580 	 */
5581 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_AUTONEG_ENABLED	\
5582 		UINT32_C(0x4)
5583 	/*
5584 	 * When set to 1, then FEC CLAUSE 74	(Fire Code) is supported on
5585 	 * this port. When set to 0, then FEC CLAUSE 74	(Fire Code) is
5586 	 * not supported on this port.
5587 	 */
5588 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE74_SUPPORTED  \
5589 		UINT32_C(0x8)
5590 	/*
5591 	 * When set to 1, then FEC CLAUSE 74	(Fire Code) is enabled on
5592 	 * this port. When set to 0, then FEC CLAUSE 74	(Fire Code) is
5593 	 * disabled if supported. This flag should be ignored if FEC
5594 	 * CLAUSE 74 is not supported on this port.
5595 	 */
5596 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE74_ENABLED	\
5597 		UINT32_C(0x10)
5598 	/*
5599 	 * When set to 1, then FEC CLAUSE 91	(Reed Solomon) is supported
5600 	 * on this port. When set to 0, then FEC CLAUSE 91	(Reed
5601 	 * Solomon) is not supported on this port.
5602 	 */
5603 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE91_SUPPORTED  \
5604 		UINT32_C(0x20)
5605 	/*
5606 	 * When set to 1, then FEC CLAUSE 91	(Reed Solomon) is enabled
5607 	 * on this port. When set to 0, then FEC CLAUSE 91	(Reed
5608 	 * Solomon) is disabled if supported. This flag should be
5609 	 * ignored if FEC CLAUSE 91 is not supported on this port.
5610 	 */
5611 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE91_ENABLED	\
5612 		UINT32_C(0x40)
5613 	uint8_t duplex_state;
5614 	/*
5615 	 * This value is indicates the duplex of the current connection
5616 	 * state.
5617 	 */
5618 	/* Half Duplex connection. */
5619 	#define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_STATE_HALF UINT32_C(0x0)
5620 	/* Full duplex connection. */
5621 	#define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_STATE_FULL UINT32_C(0x1)
5622 	uint8_t unused_1;
5623 	char phy_vendor_name[16];
5624 	/*
5625 	 * Up to 16 bytes of null padded ASCII string representing PHY
5626 	 * vendor. If the string is set to null, then the vendor name is
5627 	 * not available.
5628 	 */
5629 	char phy_vendor_partnumber[16];
5630 	/*
5631 	 * Up to 16 bytes of null padded ASCII string that identifies
5632 	 * vendor specific part number of the PHY. If the string is set
5633 	 * to null, then the vendor specific part number is not
5634 	 * available.
5635 	 */
5636 	uint32_t unused_2;
5637 	uint8_t unused_3;
5638 	uint8_t unused_4;
5639 	uint8_t unused_5;
5640 	uint8_t valid;
5641 	/*
5642 	 * This field is used in Output records to indicate that the
5643 	 * output is completely written to RAM. This field should be
5644 	 * read as '1' to indicate that the output has been completely
5645 	 * written. When writing a command completion or response to an
5646 	 * internal processor, the order of writes has to be such that
5647 	 * this field is written last.
5648 	 */
5649 } __attribute__((packed));
5650 
5651 /* hwrm_port_qstats */
5652 /* Description: This function returns per port Ethernet statistics. */
5653 /* Input	(40 bytes) */
5654 struct hwrm_port_qstats_input {
5655 	uint16_t req_type;
5656 	/*
5657 	 * This value indicates what type of request this is. The format
5658 	 * for the rest of the command is determined by this field.
5659 	 */
5660 	uint16_t cmpl_ring;
5661 	/*
5662 	 * This value indicates the what completion ring the request
5663 	 * will be optionally completed on. If the value is -1, then no
5664 	 * CR completion will be generated. Any other value must be a
5665 	 * valid CR ring_id value for this function.
5666 	 */
5667 	uint16_t seq_id;
5668 	/* This value indicates the command sequence number. */
5669 	uint16_t target_id;
5670 	/*
5671 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
5672 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
5673 	 * - HWRM
5674 	 */
5675 	uint64_t resp_addr;
5676 	/*
5677 	 * This is the host address where the response will be written
5678 	 * when the request is complete. This area must be 16B aligned
5679 	 * and must be cleared to zero before the request is made.
5680 	 */
5681 	uint16_t port_id;
5682 	/* Port ID of port that is being queried. */
5683 	uint8_t unused_0;
5684 	uint8_t unused_1;
5685 	uint8_t unused_2[3];
5686 	uint8_t unused_3;
5687 	uint64_t tx_stat_host_addr;
5688 	/* This is the host address where Tx port statistics will be stored */
5689 	uint64_t rx_stat_host_addr;
5690 	/* This is the host address where Rx port statistics will be stored */
5691 } __attribute__((packed));
5692 
5693 /* Output	(16 bytes) */
5694 struct hwrm_port_qstats_output {
5695 	uint16_t error_code;
5696 	/*
5697 	 * Pass/Fail or error type Note: receiver to verify the in
5698 	 * parameters, and fail the call with an error when appropriate
5699 	 */
5700 	uint16_t req_type;
5701 	/* This field returns the type of original request. */
5702 	uint16_t seq_id;
5703 	/* This field provides original sequence number of the command. */
5704 	uint16_t resp_len;
5705 	/*
5706 	 * This field is the length of the response in bytes. The last
5707 	 * byte of the response is a valid flag that will read as '1'
5708 	 * when the command has been completely written to memory.
5709 	 */
5710 	uint16_t tx_stat_size;
5711 	/* The size of TX port statistics block in bytes. */
5712 	uint16_t rx_stat_size;
5713 	/* The size of RX port statistics block in bytes. */
5714 	uint8_t unused_0;
5715 	uint8_t unused_1;
5716 	uint8_t unused_2;
5717 	uint8_t valid;
5718 	/*
5719 	 * This field is used in Output records to indicate that the
5720 	 * output is completely written to RAM. This field should be
5721 	 * read as '1' to indicate that the output has been completely
5722 	 * written. When writing a command completion or response to an
5723 	 * internal processor, the order of writes has to be such that
5724 	 * this field is written last.
5725 	 */
5726 } __attribute__((packed));
5727 
5728 /* hwrm_port_clr_stats */
5729 /*
5730  * Description: This function clears per port statistics. The HWRM shall not
5731  * allow a VF driver to clear port statistics. The HWRM shall not allow a PF
5732  * driver to clear port statistics in a partitioning mode. The HWRM may allow a
5733  * PF driver to clear port statistics in the non-partitioning mode.
5734  */
5735 /* Input	(24 bytes) */
5736 struct hwrm_port_clr_stats_input {
5737 	uint16_t req_type;
5738 	/*
5739 	 * This value indicates what type of request this is. The format
5740 	 * for the rest of the command is determined by this field.
5741 	 */
5742 	uint16_t cmpl_ring;
5743 	/*
5744 	 * This value indicates the what completion ring the request
5745 	 * will be optionally completed on. If the value is -1, then no
5746 	 * CR completion will be generated. Any other value must be a
5747 	 * valid CR ring_id value for this function.
5748 	 */
5749 	uint16_t seq_id;
5750 	/* This value indicates the command sequence number. */
5751 	uint16_t target_id;
5752 	/*
5753 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
5754 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
5755 	 * - HWRM
5756 	 */
5757 	uint64_t resp_addr;
5758 	/*
5759 	 * This is the host address where the response will be written
5760 	 * when the request is complete. This area must be 16B aligned
5761 	 * and must be cleared to zero before the request is made.
5762 	 */
5763 	uint16_t port_id;
5764 	/* Port ID of port that is being queried. */
5765 	uint16_t unused_0[3];
5766 } __attribute__((packed));
5767 
5768 /* Output	(16 bytes) */
5769 struct hwrm_port_clr_stats_output {
5770 	uint16_t error_code;
5771 	/*
5772 	 * Pass/Fail or error type Note: receiver to verify the in
5773 	 * parameters, and fail the call with an error when appropriate
5774 	 */
5775 	uint16_t req_type;
5776 	/* This field returns the type of original request. */
5777 	uint16_t seq_id;
5778 	/* This field provides original sequence number of the command. */
5779 	uint16_t resp_len;
5780 	/*
5781 	 * This field is the length of the response in bytes. The last
5782 	 * byte of the response is a valid flag that will read as '1'
5783 	 * when the command has been completely written to memory.
5784 	 */
5785 	uint32_t unused_0;
5786 	uint8_t unused_1;
5787 	uint8_t unused_2;
5788 	uint8_t unused_3;
5789 	uint8_t valid;
5790 	/*
5791 	 * This field is used in Output records to indicate that the
5792 	 * output is completely written to RAM. This field should be
5793 	 * read as '1' to indicate that the output has been completely
5794 	 * written. When writing a command completion or response to an
5795 	 * internal processor, the order of writes has to be such that
5796 	 * this field is written last.
5797 	 */
5798 } __attribute__((packed));
5799 
5800 /* hwrm_port_led_cfg */
5801 /*
5802  * Description: This function is used to configure LEDs on a given port. Each
5803  * port has individual set of LEDs associated with it. These LEDs are used for
5804  * speed/link configuration as well as activity indicator configuration. Up to
5805  * three LEDs can be configured, one for activity and two for speeds.
5806  */
5807 /* Input	(64 bytes) */
5808 struct hwrm_port_led_cfg_input {
5809 	uint16_t req_type;
5810 	/*
5811 	 * This value indicates what type of request this is. The format
5812 	 * for the rest of the command is determined by this field.
5813 	 */
5814 	uint16_t cmpl_ring;
5815 	/*
5816 	 * This value indicates the what completion ring the request
5817 	 * will be optionally completed on. If the value is -1, then no
5818 	 * CR completion will be generated. Any other value must be a
5819 	 * valid CR ring_id value for this function.
5820 	 */
5821 	uint16_t seq_id;
5822 	/* This value indicates the command sequence number. */
5823 	uint16_t target_id;
5824 	/*
5825 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
5826 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
5827 	 * - HWRM
5828 	 */
5829 	uint64_t resp_addr;
5830 	/*
5831 	 * This is the host address where the response will be written
5832 	 * when the request is complete. This area must be 16B aligned
5833 	 * and must be cleared to zero before the request is made.
5834 	 */
5835 	uint32_t enables;
5836 	/* This bit must be '1' for the led0_id field to be configured. */
5837 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_ID	UINT32_C(0x1)
5838 	/* This bit must be '1' for the led0_state field to be configured. */
5839 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_STATE	UINT32_C(0x2)
5840 	/* This bit must be '1' for the led0_color field to be configured. */
5841 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_COLOR	UINT32_C(0x4)
5842 	/*
5843 	 * This bit must be '1' for the led0_blink_on field to be
5844 	 * configured.
5845 	 */
5846 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_BLINK_ON	UINT32_C(0x8)
5847 	/*
5848 	 * This bit must be '1' for the led0_blink_off field to be
5849 	 * configured.
5850 	 */
5851 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_BLINK_OFF UINT32_C(0x10)
5852 	/*
5853 	 * This bit must be '1' for the led0_group_id field to be
5854 	 * configured.
5855 	 */
5856 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_GROUP_ID UINT32_C(0x20)
5857 	/* This bit must be '1' for the led1_id field to be configured. */
5858 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_ID	UINT32_C(0x40)
5859 	/* This bit must be '1' for the led1_state field to be configured. */
5860 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_STATE	UINT32_C(0x80)
5861 	/* This bit must be '1' for the led1_color field to be configured. */
5862 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_COLOR	UINT32_C(0x100)
5863 	/*
5864 	 * This bit must be '1' for the led1_blink_on field to be
5865 	 * configured.
5866 	 */
5867 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_BLINK_ON UINT32_C(0x200)
5868 	/*
5869 	 * This bit must be '1' for the led1_blink_off field to be
5870 	 * configured.
5871 	 */
5872 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_BLINK_OFF UINT32_C(0x400)
5873 	/*
5874 	 * This bit must be '1' for the led1_group_id field to be
5875 	 * configured.
5876 	 */
5877 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_GROUP_ID UINT32_C(0x800)
5878 	/* This bit must be '1' for the led2_id field to be configured. */
5879 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_ID	UINT32_C(0x1000)
5880 	/* This bit must be '1' for the led2_state field to be configured. */
5881 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_STATE	UINT32_C(0x2000)
5882 	/* This bit must be '1' for the led2_color field to be configured. */
5883 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_COLOR	UINT32_C(0x4000)
5884 	/*
5885 	 * This bit must be '1' for the led2_blink_on field to be
5886 	 * configured.
5887 	 */
5888 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_BLINK_ON UINT32_C(0x8000)
5889 	/*
5890 	 * This bit must be '1' for the led2_blink_off field to be
5891 	 * configured.
5892 	 */
5893 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_BLINK_OFF UINT32_C(0x10000)
5894 	/*
5895 	 * This bit must be '1' for the led2_group_id field to be
5896 	 * configured.
5897 	 */
5898 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_GROUP_ID UINT32_C(0x20000)
5899 	/* This bit must be '1' for the led3_id field to be configured. */
5900 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_ID	UINT32_C(0x40000)
5901 	/* This bit must be '1' for the led3_state field to be configured. */
5902 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_STATE  UINT32_C(0x80000)
5903 	/* This bit must be '1' for the led3_color field to be configured. */
5904 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_COLOR  UINT32_C(0x100000)
5905 	/*
5906 	 * This bit must be '1' for the led3_blink_on field to be
5907 	 * configured.
5908 	 */
5909 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_BLINK_ON UINT32_C(0x200000)
5910 	/*
5911 	 * This bit must be '1' for the led3_blink_off field to be
5912 	 * configured.
5913 	 */
5914 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_BLINK_OFF	\
5915 		UINT32_C(0x400000)
5916 	/*
5917 	 * This bit must be '1' for the led3_group_id field to be
5918 	 * configured.
5919 	 */
5920 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_GROUP_ID UINT32_C(0x800000)
5921 	uint16_t port_id;
5922 	/* Port ID of port whose LEDs are configured. */
5923 	uint8_t num_leds;
5924 	/*
5925 	 * The number of LEDs that are being configured. Up to 4 LEDs
5926 	 * can be configured with this command.
5927 	 */
5928 	uint8_t rsvd;
5929 	/* Reserved field. */
5930 	uint8_t led0_id;
5931 	/* An identifier for the LED #0. */
5932 	uint8_t led0_state;
5933 	/* The requested state of the LED #0. */
5934 	/* Default state of the LED */
5935 	#define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_DEFAULT	UINT32_C(0x0)
5936 	/* Off */
5937 	#define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_OFF	UINT32_C(0x1)
5938 	/* On */
5939 	#define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_ON	UINT32_C(0x2)
5940 	/* Blink */
5941 	#define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_BLINK	UINT32_C(0x3)
5942 	/* Blink Alternately */
5943 	#define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_BLINKALT	UINT32_C(0x4)
5944 	uint8_t led0_color;
5945 	/* The requested color of LED #0. */
5946 	/* Default */
5947 	#define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_DEFAULT	UINT32_C(0x0)
5948 	/* Amber */
5949 	#define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_AMBER	UINT32_C(0x1)
5950 	/* Green */
5951 	#define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_GREEN	UINT32_C(0x2)
5952 	/* Green or Amber */
5953 	#define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_GREENAMBER	UINT32_C(0x3)
5954 	uint8_t unused_0;
5955 	uint16_t led0_blink_on;
5956 	/*
5957 	 * If the LED #0 state is "blink" or "blinkalt", then this field
5958 	 * represents the requested time in milliseconds to keep LED on
5959 	 * between cycles.
5960 	 */
5961 	uint16_t led0_blink_off;
5962 	/*
5963 	 * If the LED #0 state is "blink" or "blinkalt", then this field
5964 	 * represents the requested time in milliseconds to keep LED off
5965 	 * between cycles.
5966 	 */
5967 	uint8_t led0_group_id;
5968 	/*
5969 	 * An identifier for the group of LEDs that LED #0 belongs to.
5970 	 * If set to 0, then the LED #0 shall not be grouped and shall
5971 	 * be treated as an individual resource. For all other non-zero
5972 	 * values of this field, LED #0 shall be grouped together with
5973 	 * the LEDs with the same group ID value.
5974 	 */
5975 	uint8_t rsvd0;
5976 	/* Reserved field. */
5977 	uint8_t led1_id;
5978 	/* An identifier for the LED #1. */
5979 	uint8_t led1_state;
5980 	/* The requested state of the LED #1. */
5981 	/* Default state of the LED */
5982 	#define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_DEFAULT	UINT32_C(0x0)
5983 	/* Off */
5984 	#define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_OFF	UINT32_C(0x1)
5985 	/* On */
5986 	#define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_ON	UINT32_C(0x2)
5987 	/* Blink */
5988 	#define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_BLINK	UINT32_C(0x3)
5989 	/* Blink Alternately */
5990 	#define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_BLINKALT	UINT32_C(0x4)
5991 	uint8_t led1_color;
5992 	/* The requested color of LED #1. */
5993 	/* Default */
5994 	#define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_DEFAULT	UINT32_C(0x0)
5995 	/* Amber */
5996 	#define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_AMBER	UINT32_C(0x1)
5997 	/* Green */
5998 	#define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_GREEN	UINT32_C(0x2)
5999 	/* Green or Amber */
6000 	#define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_GREENAMBER	UINT32_C(0x3)
6001 	uint8_t unused_1;
6002 	uint16_t led1_blink_on;
6003 	/*
6004 	 * If the LED #1 state is "blink" or "blinkalt", then this field
6005 	 * represents the requested time in milliseconds to keep LED on
6006 	 * between cycles.
6007 	 */
6008 	uint16_t led1_blink_off;
6009 	/*
6010 	 * If the LED #1 state is "blink" or "blinkalt", then this field
6011 	 * represents the requested time in milliseconds to keep LED off
6012 	 * between cycles.
6013 	 */
6014 	uint8_t led1_group_id;
6015 	/*
6016 	 * An identifier for the group of LEDs that LED #1 belongs to.
6017 	 * If set to 0, then the LED #1 shall not be grouped and shall
6018 	 * be treated as an individual resource. For all other non-zero
6019 	 * values of this field, LED #1 shall be grouped together with
6020 	 * the LEDs with the same group ID value.
6021 	 */
6022 	uint8_t rsvd1;
6023 	/* Reserved field. */
6024 	uint8_t led2_id;
6025 	/* An identifier for the LED #2. */
6026 	uint8_t led2_state;
6027 	/* The requested state of the LED #2. */
6028 	/* Default state of the LED */
6029 	#define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_DEFAULT	UINT32_C(0x0)
6030 	/* Off */
6031 	#define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_OFF	UINT32_C(0x1)
6032 	/* On */
6033 	#define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_ON	UINT32_C(0x2)
6034 	/* Blink */
6035 	#define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_BLINK	UINT32_C(0x3)
6036 	/* Blink Alternately */
6037 	#define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_BLINKALT	UINT32_C(0x4)
6038 	uint8_t led2_color;
6039 	/* The requested color of LED #2. */
6040 	/* Default */
6041 	#define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_DEFAULT	UINT32_C(0x0)
6042 	/* Amber */
6043 	#define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_AMBER	UINT32_C(0x1)
6044 	/* Green */
6045 	#define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_GREEN	UINT32_C(0x2)
6046 	/* Green or Amber */
6047 	#define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_GREENAMBER	UINT32_C(0x3)
6048 	uint8_t unused_2;
6049 	uint16_t led2_blink_on;
6050 	/*
6051 	 * If the LED #2 state is "blink" or "blinkalt", then this field
6052 	 * represents the requested time in milliseconds to keep LED on
6053 	 * between cycles.
6054 	 */
6055 	uint16_t led2_blink_off;
6056 	/*
6057 	 * If the LED #2 state is "blink" or "blinkalt", then this field
6058 	 * represents the requested time in milliseconds to keep LED off
6059 	 * between cycles.
6060 	 */
6061 	uint8_t led2_group_id;
6062 	/*
6063 	 * An identifier for the group of LEDs that LED #2 belongs to.
6064 	 * If set to 0, then the LED #2 shall not be grouped and shall
6065 	 * be treated as an individual resource. For all other non-zero
6066 	 * values of this field, LED #2 shall be grouped together with
6067 	 * the LEDs with the same group ID value.
6068 	 */
6069 	uint8_t rsvd2;
6070 	/* Reserved field. */
6071 	uint8_t led3_id;
6072 	/* An identifier for the LED #3. */
6073 	uint8_t led3_state;
6074 	/* The requested state of the LED #3. */
6075 	/* Default state of the LED */
6076 	#define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_DEFAULT	UINT32_C(0x0)
6077 	/* Off */
6078 	#define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_OFF	UINT32_C(0x1)
6079 	/* On */
6080 	#define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_ON	UINT32_C(0x2)
6081 	/* Blink */
6082 	#define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_BLINK	UINT32_C(0x3)
6083 	/* Blink Alternately */
6084 	#define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_BLINKALT	UINT32_C(0x4)
6085 	uint8_t led3_color;
6086 	/* The requested color of LED #3. */
6087 	/* Default */
6088 	#define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_DEFAULT	UINT32_C(0x0)
6089 	/* Amber */
6090 	#define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_AMBER	UINT32_C(0x1)
6091 	/* Green */
6092 	#define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_GREEN	UINT32_C(0x2)
6093 	/* Green or Amber */
6094 	#define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_GREENAMBER	UINT32_C(0x3)
6095 	uint8_t unused_3;
6096 	uint16_t led3_blink_on;
6097 	/*
6098 	 * If the LED #3 state is "blink" or "blinkalt", then this field
6099 	 * represents the requested time in milliseconds to keep LED on
6100 	 * between cycles.
6101 	 */
6102 	uint16_t led3_blink_off;
6103 	/*
6104 	 * If the LED #3 state is "blink" or "blinkalt", then this field
6105 	 * represents the requested time in milliseconds to keep LED off
6106 	 * between cycles.
6107 	 */
6108 	uint8_t led3_group_id;
6109 	/*
6110 	 * An identifier for the group of LEDs that LED #3 belongs to.
6111 	 * If set to 0, then the LED #3 shall not be grouped and shall
6112 	 * be treated as an individual resource. For all other non-zero
6113 	 * values of this field, LED #3 shall be grouped together with
6114 	 * the LEDs with the same group ID value.
6115 	 */
6116 	uint8_t rsvd3;
6117 	/* Reserved field. */
6118 } __attribute__((packed));
6119 
6120 /* Output	(16 bytes) */
6121 struct hwrm_port_led_cfg_output {
6122 	uint16_t error_code;
6123 	/*
6124 	 * Pass/Fail or error type Note: receiver to verify the in
6125 	 * parameters, and fail the call with an error when appropriate
6126 	 */
6127 	uint16_t req_type;
6128 	/* This field returns the type of original request. */
6129 	uint16_t seq_id;
6130 	/* This field provides original sequence number of the command. */
6131 	uint16_t resp_len;
6132 	/*
6133 	 * This field is the length of the response in bytes. The last
6134 	 * byte of the response is a valid flag that will read as '1'
6135 	 * when the command has been completely written to memory.
6136 	 */
6137 	uint32_t unused_0;
6138 	uint8_t unused_1;
6139 	uint8_t unused_2;
6140 	uint8_t unused_3;
6141 	uint8_t valid;
6142 	/*
6143 	 * This field is used in Output records to indicate that the
6144 	 * output is completely written to RAM. This field should be
6145 	 * read as '1' to indicate that the output has been completely
6146 	 * written. When writing a command completion or response to an
6147 	 * internal processor, the order of writes has to be such that
6148 	 * this field is written last.
6149 	 */
6150 } __attribute__((packed));
6151 
6152 /* hwrm_port_led_qcfg */
6153 /*
6154  * Description: This function is used to query configuration of LEDs on a given
6155  * port. Each port has individual set of LEDs associated with it. These LEDs are
6156  * used for speed/link configuration as well as activity indicator
6157  * configuration. Up to three LEDs can be configured, one for activity and two
6158  * for speeds.
6159  */
6160 /* Input	(24 bytes) */
6161 struct hwrm_port_led_qcfg_input {
6162 	uint16_t req_type;
6163 	/*
6164 	 * This value indicates what type of request this is. The format
6165 	 * for the rest of the command is determined by this field.
6166 	 */
6167 	uint16_t cmpl_ring;
6168 	/*
6169 	 * This value indicates the what completion ring the request
6170 	 * will be optionally completed on. If the value is -1, then no
6171 	 * CR completion will be generated. Any other value must be a
6172 	 * valid CR ring_id value for this function.
6173 	 */
6174 	uint16_t seq_id;
6175 	/* This value indicates the command sequence number. */
6176 	uint16_t target_id;
6177 	/*
6178 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
6179 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
6180 	 * - HWRM
6181 	 */
6182 	uint64_t resp_addr;
6183 	/*
6184 	 * This is the host address where the response will be written
6185 	 * when the request is complete. This area must be 16B aligned
6186 	 * and must be cleared to zero before the request is made.
6187 	 */
6188 	uint16_t port_id;
6189 	/* Port ID of port whose LED configuration is being queried. */
6190 	uint16_t unused_0[3];
6191 } __attribute__((packed));
6192 
6193 /* Output	(56 bytes) */
6194 struct hwrm_port_led_qcfg_output {
6195 	uint16_t error_code;
6196 	/*
6197 	 * Pass/Fail or error type Note: receiver to verify the in
6198 	 * parameters, and fail the call with an error when appropriate
6199 	 */
6200 	uint16_t req_type;
6201 	/* This field returns the type of original request. */
6202 	uint16_t seq_id;
6203 	/* This field provides original sequence number of the command. */
6204 	uint16_t resp_len;
6205 	/*
6206 	 * This field is the length of the response in bytes. The last
6207 	 * byte of the response is a valid flag that will read as '1'
6208 	 * when the command has been completely written to memory.
6209 	 */
6210 	uint8_t num_leds;
6211 	/*
6212 	 * The number of LEDs that are configured on this port. Up to 4
6213 	 * LEDs can be returned in the response.
6214 	 */
6215 	uint8_t led0_id;
6216 	/* An identifier for the LED #0. */
6217 	uint8_t led0_type;
6218 	/* The type of LED #0. */
6219 	/* Speed LED */
6220 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_SPEED	UINT32_C(0x0)
6221 	/* Activity LED */
6222 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_ACTIVITY	UINT32_C(0x1)
6223 	/* Invalid */
6224 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_INVALID	UINT32_C(0xff)
6225 	uint8_t led0_state;
6226 	/* The current state of the LED #0. */
6227 	/* Default state of the LED */
6228 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_DEFAULT	UINT32_C(0x0)
6229 	/* Off */
6230 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_OFF	UINT32_C(0x1)
6231 	/* On */
6232 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_ON	UINT32_C(0x2)
6233 	/* Blink */
6234 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_BLINK	UINT32_C(0x3)
6235 	/* Blink Alternately */
6236 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_BLINKALT	UINT32_C(0x4)
6237 	uint8_t led0_color;
6238 	/* The color of LED #0. */
6239 	/* Default */
6240 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_DEFAULT	UINT32_C(0x0)
6241 	/* Amber */
6242 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_AMBER	UINT32_C(0x1)
6243 	/* Green */
6244 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_GREEN	UINT32_C(0x2)
6245 	/* Green or Amber */
6246 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_GREENAMBER	UINT32_C(0x3)
6247 	uint8_t unused_0;
6248 	uint16_t led0_blink_on;
6249 	/*
6250 	 * If the LED #0 state is "blink" or "blinkalt", then this field
6251 	 * represents the requested time in milliseconds to keep LED on
6252 	 * between cycles.
6253 	 */
6254 	uint16_t led0_blink_off;
6255 	/*
6256 	 * If the LED #0 state is "blink" or "blinkalt", then this field
6257 	 * represents the requested time in milliseconds to keep LED off
6258 	 * between cycles.
6259 	 */
6260 	uint8_t led0_group_id;
6261 	/*
6262 	 * An identifier for the group of LEDs that LED #0 belongs to.
6263 	 * If set to 0, then the LED #0 is not grouped. For all other
6264 	 * non-zero values of this field, LED #0 is grouped together
6265 	 * with the LEDs with the same group ID value.
6266 	 */
6267 	uint8_t led1_id;
6268 	/* An identifier for the LED #1. */
6269 	uint8_t led1_type;
6270 	/* The type of LED #1. */
6271 	/* Speed LED */
6272 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_SPEED	UINT32_C(0x0)
6273 	/* Activity LED */
6274 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_ACTIVITY	UINT32_C(0x1)
6275 	/* Invalid */
6276 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_INVALID	UINT32_C(0xff)
6277 	uint8_t led1_state;
6278 	/* The current state of the LED #1. */
6279 	/* Default state of the LED */
6280 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_DEFAULT	UINT32_C(0x0)
6281 	/* Off */
6282 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_OFF	UINT32_C(0x1)
6283 	/* On */
6284 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_ON	UINT32_C(0x2)
6285 	/* Blink */
6286 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_BLINK	UINT32_C(0x3)
6287 	/* Blink Alternately */
6288 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_BLINKALT	UINT32_C(0x4)
6289 	uint8_t led1_color;
6290 	/* The color of LED #1. */
6291 	/* Default */
6292 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_DEFAULT	UINT32_C(0x0)
6293 	/* Amber */
6294 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_AMBER	UINT32_C(0x1)
6295 	/* Green */
6296 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_GREEN	UINT32_C(0x2)
6297 	/* Green or Amber */
6298 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_GREENAMBER	UINT32_C(0x3)
6299 	uint8_t unused_1;
6300 	uint16_t led1_blink_on;
6301 	/*
6302 	 * If the LED #1 state is "blink" or "blinkalt", then this field
6303 	 * represents the requested time in milliseconds to keep LED on
6304 	 * between cycles.
6305 	 */
6306 	uint16_t led1_blink_off;
6307 	/*
6308 	 * If the LED #1 state is "blink" or "blinkalt", then this field
6309 	 * represents the requested time in milliseconds to keep LED off
6310 	 * between cycles.
6311 	 */
6312 	uint8_t led1_group_id;
6313 	/*
6314 	 * An identifier for the group of LEDs that LED #1 belongs to.
6315 	 * If set to 0, then the LED #1 is not grouped. For all other
6316 	 * non-zero values of this field, LED #1 is grouped together
6317 	 * with the LEDs with the same group ID value.
6318 	 */
6319 	uint8_t led2_id;
6320 	/* An identifier for the LED #2. */
6321 	uint8_t led2_type;
6322 	/* The type of LED #2. */
6323 	/* Speed LED */
6324 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_SPEED	UINT32_C(0x0)
6325 	/* Activity LED */
6326 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_ACTIVITY	UINT32_C(0x1)
6327 	/* Invalid */
6328 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_INVALID	UINT32_C(0xff)
6329 	uint8_t led2_state;
6330 	/* The current state of the LED #2. */
6331 	/* Default state of the LED */
6332 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_DEFAULT	UINT32_C(0x0)
6333 	/* Off */
6334 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_OFF	UINT32_C(0x1)
6335 	/* On */
6336 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_ON	UINT32_C(0x2)
6337 	/* Blink */
6338 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_BLINK	UINT32_C(0x3)
6339 	/* Blink Alternately */
6340 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_BLINKALT	UINT32_C(0x4)
6341 	uint8_t led2_color;
6342 	/* The color of LED #2. */
6343 	/* Default */
6344 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_DEFAULT	UINT32_C(0x0)
6345 	/* Amber */
6346 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_AMBER	UINT32_C(0x1)
6347 	/* Green */
6348 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_GREEN	UINT32_C(0x2)
6349 	/* Green or Amber */
6350 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_GREENAMBER	UINT32_C(0x3)
6351 	uint8_t unused_2;
6352 	uint16_t led2_blink_on;
6353 	/*
6354 	 * If the LED #2 state is "blink" or "blinkalt", then this field
6355 	 * represents the requested time in milliseconds to keep LED on
6356 	 * between cycles.
6357 	 */
6358 	uint16_t led2_blink_off;
6359 	/*
6360 	 * If the LED #2 state is "blink" or "blinkalt", then this field
6361 	 * represents the requested time in milliseconds to keep LED off
6362 	 * between cycles.
6363 	 */
6364 	uint8_t led2_group_id;
6365 	/*
6366 	 * An identifier for the group of LEDs that LED #2 belongs to.
6367 	 * If set to 0, then the LED #2 is not grouped. For all other
6368 	 * non-zero values of this field, LED #2 is grouped together
6369 	 * with the LEDs with the same group ID value.
6370 	 */
6371 	uint8_t led3_id;
6372 	/* An identifier for the LED #3. */
6373 	uint8_t led3_type;
6374 	/* The type of LED #3. */
6375 	/* Speed LED */
6376 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_SPEED	UINT32_C(0x0)
6377 	/* Activity LED */
6378 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_ACTIVITY	UINT32_C(0x1)
6379 	/* Invalid */
6380 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_INVALID	UINT32_C(0xff)
6381 	uint8_t led3_state;
6382 	/* The current state of the LED #3. */
6383 	/* Default state of the LED */
6384 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_DEFAULT	UINT32_C(0x0)
6385 	/* Off */
6386 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_OFF	UINT32_C(0x1)
6387 	/* On */
6388 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_ON	UINT32_C(0x2)
6389 	/* Blink */
6390 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_BLINK	UINT32_C(0x3)
6391 	/* Blink Alternately */
6392 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_BLINKALT	UINT32_C(0x4)
6393 	uint8_t led3_color;
6394 	/* The color of LED #3. */
6395 	/* Default */
6396 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_DEFAULT	UINT32_C(0x0)
6397 	/* Amber */
6398 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_AMBER	UINT32_C(0x1)
6399 	/* Green */
6400 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_GREEN	UINT32_C(0x2)
6401 	/* Green or Amber */
6402 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_GREENAMBER	UINT32_C(0x3)
6403 	uint8_t unused_3;
6404 	uint16_t led3_blink_on;
6405 	/*
6406 	 * If the LED #3 state is "blink" or "blinkalt", then this field
6407 	 * represents the requested time in milliseconds to keep LED on
6408 	 * between cycles.
6409 	 */
6410 	uint16_t led3_blink_off;
6411 	/*
6412 	 * If the LED #3 state is "blink" or "blinkalt", then this field
6413 	 * represents the requested time in milliseconds to keep LED off
6414 	 * between cycles.
6415 	 */
6416 	uint8_t led3_group_id;
6417 	/*
6418 	 * An identifier for the group of LEDs that LED #3 belongs to.
6419 	 * If set to 0, then the LED #3 is not grouped. For all other
6420 	 * non-zero values of this field, LED #3 is grouped together
6421 	 * with the LEDs with the same group ID value.
6422 	 */
6423 	uint8_t unused_4;
6424 	uint16_t unused_5;
6425 	uint8_t unused_6;
6426 	uint8_t unused_7;
6427 	uint8_t unused_8;
6428 	uint8_t valid;
6429 	/*
6430 	 * This field is used in Output records to indicate that the
6431 	 * output is completely written to RAM. This field should be
6432 	 * read as '1' to indicate that the output has been completely
6433 	 * written. When writing a command completion or response to an
6434 	 * internal processor, the order of writes has to be such that
6435 	 * this field is written last.
6436 	 */
6437 } __attribute__((packed));
6438 
6439 /* hwrm_port_led_qcaps */
6440 /*
6441  * Description: This function is used to query capabilities of LEDs on a given
6442  * port. Each port has individual set of LEDs associated with it. These LEDs are
6443  * used for speed/link configuration as well as activity indicator
6444  * configuration.
6445  */
6446 /* Input	(24 bytes) */
6447 struct hwrm_port_led_qcaps_input {
6448 	uint16_t req_type;
6449 	/*
6450 	 * This value indicates what type of request this is. The format
6451 	 * for the rest of the command is determined by this field.
6452 	 */
6453 	uint16_t cmpl_ring;
6454 	/*
6455 	 * This value indicates the what completion ring the request
6456 	 * will be optionally completed on. If the value is -1, then no
6457 	 * CR completion will be generated. Any other value must be a
6458 	 * valid CR ring_id value for this function.
6459 	 */
6460 	uint16_t seq_id;
6461 	/* This value indicates the command sequence number. */
6462 	uint16_t target_id;
6463 	/*
6464 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
6465 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
6466 	 * - HWRM
6467 	 */
6468 	uint64_t resp_addr;
6469 	/*
6470 	 * This is the host address where the response will be written
6471 	 * when the request is complete. This area must be 16B aligned
6472 	 * and must be cleared to zero before the request is made.
6473 	 */
6474 	uint16_t port_id;
6475 	/* Port ID of port whose LED configuration is being queried. */
6476 	uint16_t unused_0[3];
6477 } __attribute__((packed));
6478 
6479 /* Output	(48 bytes) */
6480 struct hwrm_port_led_qcaps_output {
6481 	uint16_t error_code;
6482 	/*
6483 	 * Pass/Fail or error type Note: receiver to verify the in
6484 	 * parameters, and fail the call with an error when appropriate
6485 	 */
6486 	uint16_t req_type;
6487 	/* This field returns the type of original request. */
6488 	uint16_t seq_id;
6489 	/* This field provides original sequence number of the command. */
6490 	uint16_t resp_len;
6491 	/*
6492 	 * This field is the length of the response in bytes. The last
6493 	 * byte of the response is a valid flag that will read as '1'
6494 	 * when the command has been completely written to memory.
6495 	 */
6496 	uint8_t num_leds;
6497 	/*
6498 	 * The number of LEDs that are configured on this port. Up to 4
6499 	 * LEDs can be returned in the response.
6500 	 */
6501 	uint8_t unused_0[3];
6502 	/* Reserved for future use. */
6503 	uint8_t led0_id;
6504 	/* An identifier for the LED #0. */
6505 	uint8_t led0_type;
6506 	/* The type of LED #0. */
6507 	/* Speed LED */
6508 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_SPEED	UINT32_C(0x0)
6509 	/* Activity LED */
6510 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_ACTIVITY	UINT32_C(0x1)
6511 	/* Invalid */
6512 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_INVALID	UINT32_C(0xff)
6513 	uint8_t led0_group_id;
6514 	/*
6515 	 * An identifier for the group of LEDs that LED #0 belongs to.
6516 	 * If set to 0, then the LED #0 cannot be grouped. For all other
6517 	 * non-zero values of this field, LED #0 is grouped together
6518 	 * with the LEDs with the same group ID value.
6519 	 */
6520 	uint8_t unused_1;
6521 	uint16_t led0_state_caps;
6522 	/* The states supported by LED #0. */
6523 	/*
6524 	 * If set to 1, this LED is enabled. If set to 0, this LED is
6525 	 * disabled.
6526 	 */
6527 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_ENABLED UINT32_C(0x1)
6528 	/*
6529 	 * If set to 1, off state is supported on this LED. If set to 0,
6530 	 * off state is not supported on this LED.
6531 	 */
6532 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_OFF_SUPPORTED  \
6533 		UINT32_C(0x2)
6534 	/*
6535 	 * If set to 1, on state is supported on this LED. If set to 0,
6536 	 * on state is not supported on this LED.
6537 	 */
6538 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_ON_SUPPORTED   \
6539 		UINT32_C(0x4)
6540 	/*
6541 	 * If set to 1, blink state is supported on this LED. If set to
6542 	 * 0, blink state is not supported on this LED.
6543 	 */
6544 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_BLINK_SUPPORTED \
6545 		UINT32_C(0x8)
6546 	/*
6547 	 * If set to 1, blink_alt state is supported on this LED. If set
6548 	 * to 0, blink_alt state is not supported on this LED.
6549 	 */
6550 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_BLINK_ALT_SUPPORTED \
6551 		UINT32_C(0x10)
6552 	uint16_t led0_color_caps;
6553 	/* The colors supported by LED #0. */
6554 	/* reserved */
6555 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_COLOR_CAPS_RSVD	UINT32_C(0x1)
6556 	/*
6557 	 * If set to 1, Amber color is supported on this LED. If set to
6558 	 * 0, Amber color is not supported on this LED.
6559 	 */
6560 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_COLOR_CAPS_AMBER_SUPPORTED \
6561 		UINT32_C(0x2)
6562 	/*
6563 	 * If set to 1, Green color is supported on this LED. If set to
6564 	 * 0, Green color is not supported on this LED.
6565 	 */
6566 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_COLOR_CAPS_GREEN_SUPPORTED \
6567 		UINT32_C(0x4)
6568 	uint8_t led1_id;
6569 	/* An identifier for the LED #1. */
6570 	uint8_t led1_type;
6571 	/* The type of LED #1. */
6572 	/* Speed LED */
6573 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_SPEED	UINT32_C(0x0)
6574 	/* Activity LED */
6575 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_ACTIVITY	UINT32_C(0x1)
6576 	/* Invalid */
6577 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_INVALID	UINT32_C(0xff)
6578 	uint8_t led1_group_id;
6579 	/*
6580 	 * An identifier for the group of LEDs that LED #1 belongs to.
6581 	 * If set to 0, then the LED #0 cannot be grouped. For all other
6582 	 * non-zero values of this field, LED #0 is grouped together
6583 	 * with the LEDs with the same group ID value.
6584 	 */
6585 	uint8_t unused_2;
6586 	uint16_t led1_state_caps;
6587 	/* The states supported by LED #1. */
6588 	/*
6589 	 * If set to 1, this LED is enabled. If set to 0, this LED is
6590 	 * disabled.
6591 	 */
6592 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_ENABLED UINT32_C(0x1)
6593 	/*
6594 	 * If set to 1, off state is supported on this LED. If set to 0,
6595 	 * off state is not supported on this LED.
6596 	 */
6597 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_OFF_SUPPORTED  \
6598 		UINT32_C(0x2)
6599 	/*
6600 	 * If set to 1, on state is supported on this LED. If set to 0,
6601 	 * on state is not supported on this LED.
6602 	 */
6603 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_ON_SUPPORTED   \
6604 		UINT32_C(0x4)
6605 	/*
6606 	 * If set to 1, blink state is supported on this LED. If set to
6607 	 * 0, blink state is not supported on this LED.
6608 	 */
6609 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_BLINK_SUPPORTED \
6610 		UINT32_C(0x8)
6611 	/*
6612 	 * If set to 1, blink_alt state is supported on this LED. If set
6613 	 * to 0, blink_alt state is not supported on this LED.
6614 	 */
6615 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_BLINK_ALT_SUPPORTED \
6616 		UINT32_C(0x10)
6617 	uint16_t led1_color_caps;
6618 	/* The colors supported by LED #1. */
6619 	/* reserved */
6620 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_COLOR_CAPS_RSVD	UINT32_C(0x1)
6621 	/*
6622 	 * If set to 1, Amber color is supported on this LED. If set to
6623 	 * 0, Amber color is not supported on this LED.
6624 	 */
6625 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_COLOR_CAPS_AMBER_SUPPORTED \
6626 		UINT32_C(0x2)
6627 	/*
6628 	 * If set to 1, Green color is supported on this LED. If set to
6629 	 * 0, Green color is not supported on this LED.
6630 	 */
6631 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_COLOR_CAPS_GREEN_SUPPORTED \
6632 		UINT32_C(0x4)
6633 	uint8_t led2_id;
6634 	/* An identifier for the LED #2. */
6635 	uint8_t led2_type;
6636 	/* The type of LED #2. */
6637 	/* Speed LED */
6638 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_SPEED	UINT32_C(0x0)
6639 	/* Activity LED */
6640 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_ACTIVITY	UINT32_C(0x1)
6641 	/* Invalid */
6642 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_INVALID	UINT32_C(0xff)
6643 	uint8_t led2_group_id;
6644 	/*
6645 	 * An identifier for the group of LEDs that LED #0 belongs to.
6646 	 * If set to 0, then the LED #0 cannot be grouped. For all other
6647 	 * non-zero values of this field, LED #0 is grouped together
6648 	 * with the LEDs with the same group ID value.
6649 	 */
6650 	uint8_t unused_3;
6651 	uint16_t led2_state_caps;
6652 	/* The states supported by LED #2. */
6653 	/*
6654 	 * If set to 1, this LED is enabled. If set to 0, this LED is
6655 	 * disabled.
6656 	 */
6657 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_ENABLED UINT32_C(0x1)
6658 	/*
6659 	 * If set to 1, off state is supported on this LED. If set to 0,
6660 	 * off state is not supported on this LED.
6661 	 */
6662 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_OFF_SUPPORTED  \
6663 		UINT32_C(0x2)
6664 	/*
6665 	 * If set to 1, on state is supported on this LED. If set to 0,
6666 	 * on state is not supported on this LED.
6667 	 */
6668 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_ON_SUPPORTED   \
6669 		UINT32_C(0x4)
6670 	/*
6671 	 * If set to 1, blink state is supported on this LED. If set to
6672 	 * 0, blink state is not supported on this LED.
6673 	 */
6674 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_BLINK_SUPPORTED \
6675 		UINT32_C(0x8)
6676 	/*
6677 	 * If set to 1, blink_alt state is supported on this LED. If set
6678 	 * to 0, blink_alt state is not supported on this LED.
6679 	 */
6680 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_BLINK_ALT_SUPPORTED \
6681 		UINT32_C(0x10)
6682 	uint16_t led2_color_caps;
6683 	/* The colors supported by LED #2. */
6684 	/* reserved */
6685 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_COLOR_CAPS_RSVD	UINT32_C(0x1)
6686 	/*
6687 	 * If set to 1, Amber color is supported on this LED. If set to
6688 	 * 0, Amber color is not supported on this LED.
6689 	 */
6690 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_COLOR_CAPS_AMBER_SUPPORTED \
6691 		UINT32_C(0x2)
6692 	/*
6693 	 * If set to 1, Green color is supported on this LED. If set to
6694 	 * 0, Green color is not supported on this LED.
6695 	 */
6696 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_COLOR_CAPS_GREEN_SUPPORTED \
6697 		UINT32_C(0x4)
6698 	uint8_t led3_id;
6699 	/* An identifier for the LED #3. */
6700 	uint8_t led3_type;
6701 	/* The type of LED #3. */
6702 	/* Speed LED */
6703 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_SPEED	UINT32_C(0x0)
6704 	/* Activity LED */
6705 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_ACTIVITY	UINT32_C(0x1)
6706 	/* Invalid */
6707 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_INVALID	UINT32_C(0xff)
6708 	uint8_t led3_group_id;
6709 	/*
6710 	 * An identifier for the group of LEDs that LED #3 belongs to.
6711 	 * If set to 0, then the LED #0 cannot be grouped. For all other
6712 	 * non-zero values of this field, LED #0 is grouped together
6713 	 * with the LEDs with the same group ID value.
6714 	 */
6715 	uint8_t unused_4;
6716 	uint16_t led3_state_caps;
6717 	/* The states supported by LED #3. */
6718 	/*
6719 	 * If set to 1, this LED is enabled. If set to 0, this LED is
6720 	 * disabled.
6721 	 */
6722 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_ENABLED UINT32_C(0x1)
6723 	/*
6724 	 * If set to 1, off state is supported on this LED. If set to 0,
6725 	 * off state is not supported on this LED.
6726 	 */
6727 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_OFF_SUPPORTED  \
6728 		UINT32_C(0x2)
6729 	/*
6730 	 * If set to 1, on state is supported on this LED. If set to 0,
6731 	 * on state is not supported on this LED.
6732 	 */
6733 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_ON_SUPPORTED   \
6734 		UINT32_C(0x4)
6735 	/*
6736 	 * If set to 1, blink state is supported on this LED. If set to
6737 	 * 0, blink state is not supported on this LED.
6738 	 */
6739 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_BLINK_SUPPORTED \
6740 		UINT32_C(0x8)
6741 	/*
6742 	 * If set to 1, blink_alt state is supported on this LED. If set
6743 	 * to 0, blink_alt state is not supported on this LED.
6744 	 */
6745 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_BLINK_ALT_SUPPORTED \
6746 		UINT32_C(0x10)
6747 	uint16_t led3_color_caps;
6748 	/* The colors supported by LED #3. */
6749 	/* reserved */
6750 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_COLOR_CAPS_RSVD	UINT32_C(0x1)
6751 	/*
6752 	 * If set to 1, Amber color is supported on this LED. If set to
6753 	 * 0, Amber color is not supported on this LED.
6754 	 */
6755 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_COLOR_CAPS_AMBER_SUPPORTED \
6756 		UINT32_C(0x2)
6757 	/*
6758 	 * If set to 1, Green color is supported on this LED. If set to
6759 	 * 0, Green color is not supported on this LED.
6760 	 */
6761 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_COLOR_CAPS_GREEN_SUPPORTED \
6762 		UINT32_C(0x4)
6763 	uint8_t unused_5;
6764 	uint8_t unused_6;
6765 	uint8_t unused_7;
6766 	uint8_t valid;
6767 	/*
6768 	 * This field is used in Output records to indicate that the
6769 	 * output is completely written to RAM. This field should be
6770 	 * read as '1' to indicate that the output has been completely
6771 	 * written. When writing a command completion or response to an
6772 	 * internal processor, the order of writes has to be such that
6773 	 * this field is written last.
6774 	 */
6775 } __attribute__((packed));
6776 
6777 /* hwrm_queue_qportcfg */
6778 /*
6779  * Description: This function is called by a driver to query queue configuration
6780  * of a port. # The HWRM shall at least advertise one queue with lossy service
6781  * profile. # The driver shall use this command to query queue ids before
6782  * configuring or using any queues. # If a service profile is not set for a
6783  * queue, then the driver shall not use that queue without configuring a service
6784  * profile for it. # If the driver is not allowed to configure service profiles,
6785  * then the driver shall only use queues for which service profiles are pre-
6786  * configured.
6787  */
6788 /* Input	(24 bytes) */
6789 struct hwrm_queue_qportcfg_input {
6790 	uint16_t req_type;
6791 	/*
6792 	 * This value indicates what type of request this is. The format
6793 	 * for the rest of the command is determined by this field.
6794 	 */
6795 	uint16_t cmpl_ring;
6796 	/*
6797 	 * This value indicates the what completion ring the request
6798 	 * will be optionally completed on. If the value is -1, then no
6799 	 * CR completion will be generated. Any other value must be a
6800 	 * valid CR ring_id value for this function.
6801 	 */
6802 	uint16_t seq_id;
6803 	/* This value indicates the command sequence number. */
6804 	uint16_t target_id;
6805 	/*
6806 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
6807 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
6808 	 * - HWRM
6809 	 */
6810 	uint64_t resp_addr;
6811 	/*
6812 	 * This is the host address where the response will be written
6813 	 * when the request is complete. This area must be 16B aligned
6814 	 * and must be cleared to zero before the request is made.
6815 	 */
6816 	uint32_t flags;
6817 	/*
6818 	 * Enumeration denoting the RX, TX type of the resource. This
6819 	 * enumeration is used for resources that are similar for both
6820 	 * TX and RX paths of the chip.
6821 	 */
6822 	#define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH	UINT32_C(0x1)
6823 	/* tx path */
6824 	#define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_TX	UINT32_C(0x0)
6825 	/* rx path */
6826 	#define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_RX	UINT32_C(0x1)
6827 	#define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_LAST \
6828 		QUEUE_QPORTCFG_INPUT_FLAGS_PATH_RX
6829 	uint16_t port_id;
6830 	/*
6831 	 * Port ID of port for which the queue configuration is being
6832 	 * queried. This field is only required when sent by IPC.
6833 	 */
6834 	uint16_t unused_0;
6835 } __attribute__((packed));
6836 
6837 /* Output	(32 bytes) */
6838 struct hwrm_queue_qportcfg_output {
6839 	uint16_t error_code;
6840 	/*
6841 	 * Pass/Fail or error type Note: receiver to verify the in
6842 	 * parameters, and fail the call with an error when appropriate
6843 	 */
6844 	uint16_t req_type;
6845 	/* This field returns the type of original request. */
6846 	uint16_t seq_id;
6847 	/* This field provides original sequence number of the command. */
6848 	uint16_t resp_len;
6849 	/*
6850 	 * This field is the length of the response in bytes. The last
6851 	 * byte of the response is a valid flag that will read as '1'
6852 	 * when the command has been completely written to memory.
6853 	 */
6854 	uint8_t max_configurable_queues;
6855 	/*
6856 	 * The maximum number of queues that can be configured on this
6857 	 * port. Valid values range from 1 through 8.
6858 	 */
6859 	uint8_t max_configurable_lossless_queues;
6860 	/*
6861 	 * The maximum number of lossless queues that can be configured
6862 	 * on this port. Valid values range from 0 through 8.
6863 	 */
6864 	uint8_t queue_cfg_allowed;
6865 	/*
6866 	 * Bitmask indicating which queues can be configured by the
6867 	 * hwrm_queue_cfg command. Each bit represents a specific queue
6868 	 * where bit 0 represents queue 0 and bit 7 represents queue 7.
6869 	 * # A value of 0 indicates that the queue is not configurable
6870 	 * by the hwrm_queue_cfg command. # A value of 1 indicates that
6871 	 * the queue is configurable. # A hwrm_queue_cfg command shall
6872 	 * return error when trying to configure a queue not
6873 	 * configurable.
6874 	 */
6875 	uint8_t queue_cfg_info;
6876 	/* Information about queue configuration. */
6877 	/*
6878 	 * If this flag is set to '1', then the queues are configured
6879 	 * asymmetrically on TX and RX sides. If this flag is set to
6880 	 * '0', then the queues are configured symmetrically on TX and
6881 	 * RX sides. For symmetric configuration, the queue
6882 	 * configuration including queue ids and service profiles on the
6883 	 * TX side is the same as the corresponding queue configuration
6884 	 * on the RX side.
6885 	 */
6886 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_CFG_INFO_ASYM_CFG UINT32_C(0x1)
6887 	uint8_t queue_pfcenable_cfg_allowed;
6888 	/*
6889 	 * Bitmask indicating which queues can be configured by the
6890 	 * hwrm_queue_pfcenable_cfg command. Each bit represents a
6891 	 * specific priority where bit 0 represents priority 0 and bit 7
6892 	 * represents priority 7. # A value of 0 indicates that the
6893 	 * priority is not configurable by the hwrm_queue_pfcenable_cfg
6894 	 * command. # A value of 1 indicates that the priority is
6895 	 * configurable. # A hwrm_queue_pfcenable_cfg command shall
6896 	 * return error when trying to configure a priority that is not
6897 	 * configurable.
6898 	 */
6899 	uint8_t queue_pri2cos_cfg_allowed;
6900 	/*
6901 	 * Bitmask indicating which queues can be configured by the
6902 	 * hwrm_queue_pri2cos_cfg command. Each bit represents a
6903 	 * specific queue where bit 0 represents queue 0 and bit 7
6904 	 * represents queue 7. # A value of 0 indicates that the queue
6905 	 * is not configurable by the hwrm_queue_pri2cos_cfg command. #
6906 	 * A value of 1 indicates that the queue is configurable. # A
6907 	 * hwrm_queue_pri2cos_cfg command shall return error when trying
6908 	 * to configure a queue that is not configurable.
6909 	 */
6910 	uint8_t queue_cos2bw_cfg_allowed;
6911 	/*
6912 	 * Bitmask indicating which queues can be configured by the
6913 	 * hwrm_queue_pri2cos_cfg command. Each bit represents a
6914 	 * specific queue where bit 0 represents queue 0 and bit 7
6915 	 * represents queue 7. # A value of 0 indicates that the queue
6916 	 * is not configurable by the hwrm_queue_pri2cos_cfg command. #
6917 	 * A value of 1 indicates that the queue is configurable. # A
6918 	 * hwrm_queue_pri2cos_cfg command shall return error when trying
6919 	 * to configure a queue not configurable.
6920 	 */
6921 	uint8_t queue_id0;
6922 	/*
6923 	 * ID of CoS Queue 0. FF - Invalid id # This ID can be used on
6924 	 * any subsequent call to an hwrm command that takes a queue id.
6925 	 * # IDs must always be queried by this command before any use
6926 	 * by the driver or software. # Any driver or software should
6927 	 * not make any assumptions about queue IDs. # A value of 0xff
6928 	 * indicates that the queue is not available. # Available queues
6929 	 * may not be in sequential order.
6930 	 */
6931 	uint8_t queue_id0_service_profile;
6932 	/* This value is applicable to CoS queues only. */
6933 	/* Lossy	(best-effort) */
6934 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSY \
6935 		UINT32_C(0x0)
6936 	/* Lossless */
6937 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSLESS \
6938 		UINT32_C(0x1)
6939 	/*
6940 	 * Set to 0xFF...	(All Fs) if there is no
6941 	 * service profile specified
6942 	 */
6943 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_UNKNOWN \
6944 		UINT32_C(0xff)
6945 	uint8_t queue_id1;
6946 	/*
6947 	 * ID of CoS Queue 1. FF - Invalid id # This ID can be used on
6948 	 * any subsequent call to an hwrm command that takes a queue id.
6949 	 * # IDs must always be queried by this command before any use
6950 	 * by the driver or software. # Any driver or software should
6951 	 * not make any assumptions about queue IDs. # A value of 0xff
6952 	 * indicates that the queue is not available. # Available queues
6953 	 * may not be in sequential order.
6954 	 */
6955 	uint8_t queue_id1_service_profile;
6956 	/* This value is applicable to CoS queues only. */
6957 	/* Lossy	(best-effort) */
6958 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSY \
6959 		UINT32_C(0x0)
6960 	/* Lossless */
6961 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSLESS \
6962 		UINT32_C(0x1)
6963 	/*
6964 	 * Set to 0xFF...	(All Fs) if there is no
6965 	 * service profile specified
6966 	 */
6967 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_UNKNOWN \
6968 		UINT32_C(0xff)
6969 	uint8_t queue_id2;
6970 	/*
6971 	 * ID of CoS Queue 2. FF - Invalid id # This ID can be used on
6972 	 * any subsequent call to an hwrm command that takes a queue id.
6973 	 * # IDs must always be queried by this command before any use
6974 	 * by the driver or software. # Any driver or software should
6975 	 * not make any assumptions about queue IDs. # A value of 0xff
6976 	 * indicates that the queue is not available. # Available queues
6977 	 * may not be in sequential order.
6978 	 */
6979 	uint8_t queue_id2_service_profile;
6980 	/* This value is applicable to CoS queues only. */
6981 	/* Lossy	(best-effort) */
6982 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSY \
6983 		UINT32_C(0x0)
6984 	/* Lossless */
6985 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSLESS \
6986 		UINT32_C(0x1)
6987 	/*
6988 	 * Set to 0xFF...	(All Fs) if there is no
6989 	 * service profile specified
6990 	 */
6991 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_UNKNOWN \
6992 		UINT32_C(0xff)
6993 	uint8_t queue_id3;
6994 	/*
6995 	 * ID of CoS Queue 3. FF - Invalid id # This ID can be used on
6996 	 * any subsequent call to an hwrm command that takes a queue id.
6997 	 * # IDs must always be queried by this command before any use
6998 	 * by the driver or software. # Any driver or software should
6999 	 * not make any assumptions about queue IDs. # A value of 0xff
7000 	 * indicates that the queue is not available. # Available queues
7001 	 * may not be in sequential order.
7002 	 */
7003 	uint8_t queue_id3_service_profile;
7004 	/* This value is applicable to CoS queues only. */
7005 	/* Lossy	(best-effort) */
7006 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSY \
7007 		UINT32_C(0x0)
7008 	/* Lossless */
7009 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSLESS \
7010 		UINT32_C(0x1)
7011 	/*
7012 	 * Set to 0xFF...	(All Fs) if there is no
7013 	 * service profile specified
7014 	 */
7015 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_UNKNOWN \
7016 		UINT32_C(0xff)
7017 	uint8_t queue_id4;
7018 	/*
7019 	 * ID of CoS Queue 4. FF - Invalid id # This ID can be used on
7020 	 * any subsequent call to an hwrm command that takes a queue id.
7021 	 * # IDs must always be queried by this command before any use
7022 	 * by the driver or software. # Any driver or software should
7023 	 * not make any assumptions about queue IDs. # A value of 0xff
7024 	 * indicates that the queue is not available. # Available queues
7025 	 * may not be in sequential order.
7026 	 */
7027 	uint8_t queue_id4_service_profile;
7028 	/* This value is applicable to CoS queues only. */
7029 	/* Lossy	(best-effort) */
7030 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSY \
7031 		UINT32_C(0x0)
7032 	/* Lossless */
7033 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSLESS \
7034 		UINT32_C(0x1)
7035 	/*
7036 	 * Set to 0xFF...	(All Fs) if there is no
7037 	 * service profile specified
7038 	 */
7039 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_UNKNOWN \
7040 		UINT32_C(0xff)
7041 	uint8_t queue_id5;
7042 	/*
7043 	 * ID of CoS Queue 5. FF - Invalid id # This ID can be used on
7044 	 * any subsequent call to an hwrm command that takes a queue id.
7045 	 * # IDs must always be queried by this command before any use
7046 	 * by the driver or software. # Any driver or software should
7047 	 * not make any assumptions about queue IDs. # A value of 0xff
7048 	 * indicates that the queue is not available. # Available queues
7049 	 * may not be in sequential order.
7050 	 */
7051 	uint8_t queue_id5_service_profile;
7052 	/* This value is applicable to CoS queues only. */
7053 	/* Lossy	(best-effort) */
7054 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSY \
7055 		UINT32_C(0x0)
7056 	/* Lossless */
7057 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSLESS \
7058 		UINT32_C(0x1)
7059 	/*
7060 	 * Set to 0xFF...	(All Fs) if there is no
7061 	 * service profile specified
7062 	 */
7063 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_UNKNOWN \
7064 		UINT32_C(0xff)
7065 	uint8_t queue_id6;
7066 	/*
7067 	 * ID of CoS Queue 6. FF - Invalid id # This ID can be used on
7068 	 * any subsequent call to an hwrm command that takes a queue id.
7069 	 * # IDs must always be queried by this command before any use
7070 	 * by the driver or software. # Any driver or software should
7071 	 * not make any assumptions about queue IDs. # A value of 0xff
7072 	 * indicates that the queue is not available. # Available queues
7073 	 * may not be in sequential order.
7074 	 */
7075 	uint8_t queue_id6_service_profile;
7076 	/* This value is applicable to CoS queues only. */
7077 	/* Lossy	(best-effort) */
7078 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSY \
7079 		UINT32_C(0x0)
7080 	/* Lossless */
7081 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSLESS \
7082 		UINT32_C(0x1)
7083 	/*
7084 	 * Set to 0xFF...	(All Fs) if there is no
7085 	 * service profile specified
7086 	 */
7087 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_UNKNOWN \
7088 		UINT32_C(0xff)
7089 	uint8_t queue_id7;
7090 	/*
7091 	 * ID of CoS Queue 7. FF - Invalid id # This ID can be used on
7092 	 * any subsequent call to an hwrm command that takes a queue id.
7093 	 * # IDs must always be queried by this command before any use
7094 	 * by the driver or software. # Any driver or software should
7095 	 * not make any assumptions about queue IDs. # A value of 0xff
7096 	 * indicates that the queue is not available. # Available queues
7097 	 * may not be in sequential order.
7098 	 */
7099 	uint8_t queue_id7_service_profile;
7100 	/* This value is applicable to CoS queues only. */
7101 	/* Lossy	(best-effort) */
7102 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSY \
7103 		UINT32_C(0x0)
7104 	/* Lossless */
7105 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSLESS \
7106 		UINT32_C(0x1)
7107 	/*
7108 	 * Set to 0xFF...	(All Fs) if there is no
7109 	 * service profile specified
7110 	 */
7111 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_UNKNOWN \
7112 		UINT32_C(0xff)
7113 	uint8_t valid;
7114 	/*
7115 	 * This field is used in Output records to indicate that the
7116 	 * output is completely written to RAM. This field should be
7117 	 * read as '1' to indicate that the output has been completely
7118 	 * written. When writing a command completion or response to an
7119 	 * internal processor, the order of writes has to be such that
7120 	 * this field is written last.
7121 	 */
7122 } __attribute__((packed));
7123 
7124 /* hwrm_vnic_alloc */
7125 /*
7126  * Description: This VNIC is a resource in the RX side of the chip that is used
7127  * to represent a virtual host "interface". # At the time of VNIC allocation or
7128  * configuration, the function can specify whether it wants the requested VNIC
7129  * to be the default VNIC for the function or not. # If a function requests
7130  * allocation of a VNIC for the first time and a VNIC is successfully allocated
7131  * by the HWRM, then the HWRM shall make the allocated VNIC as the default VNIC
7132  * for that function. # The default VNIC shall be used for the default action
7133  * for a partition or function. # For each VNIC allocated on a function, a
7134  * mapping on the RX side to map the allocated VNIC to source virtual interface
7135  * shall be performed by the HWRM. This should be hidden to the function driver
7136  * requesting the VNIC allocation. This enables broadcast/multicast replication
7137  * with source knockout. # If multicast replication with source knockout is
7138  * enabled, then the internal VNIC to SVIF mapping data structures shall be
7139  * programmed at the time of VNIC allocation.
7140  */
7141 /* Input	(24 bytes) */
7142 struct hwrm_vnic_alloc_input {
7143 	uint16_t req_type;
7144 	/*
7145 	 * This value indicates what type of request this is. The format
7146 	 * for the rest of the command is determined by this field.
7147 	 */
7148 	uint16_t cmpl_ring;
7149 	/*
7150 	 * This value indicates the what completion ring the request
7151 	 * will be optionally completed on. If the value is -1, then no
7152 	 * CR completion will be generated. Any other value must be a
7153 	 * valid CR ring_id value for this function.
7154 	 */
7155 	uint16_t seq_id;
7156 	/* This value indicates the command sequence number. */
7157 	uint16_t target_id;
7158 	/*
7159 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
7160 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
7161 	 * - HWRM
7162 	 */
7163 	uint64_t resp_addr;
7164 	/*
7165 	 * This is the host address where the response will be written
7166 	 * when the request is complete. This area must be 16B aligned
7167 	 * and must be cleared to zero before the request is made.
7168 	 */
7169 	uint32_t flags;
7170 	/*
7171 	 * When this bit is '1', this VNIC is requested to be the
7172 	 * default VNIC for this function.
7173 	 */
7174 	#define HWRM_VNIC_ALLOC_INPUT_FLAGS_DEFAULT	UINT32_C(0x1)
7175 	uint32_t unused_0;
7176 } __attribute__((packed));
7177 
7178 /* Output	(16 bytes) */
7179 struct hwrm_vnic_alloc_output {
7180 	uint16_t error_code;
7181 	/*
7182 	 * Pass/Fail or error type Note: receiver to verify the in
7183 	 * parameters, and fail the call with an error when appropriate
7184 	 */
7185 	uint16_t req_type;
7186 	/* This field returns the type of original request. */
7187 	uint16_t seq_id;
7188 	/* This field provides original sequence number of the command. */
7189 	uint16_t resp_len;
7190 	/*
7191 	 * This field is the length of the response in bytes. The last
7192 	 * byte of the response is a valid flag that will read as '1'
7193 	 * when the command has been completely written to memory.
7194 	 */
7195 	uint32_t vnic_id;
7196 	/* Logical vnic ID */
7197 	uint8_t unused_0;
7198 	uint8_t unused_1;
7199 	uint8_t unused_2;
7200 	uint8_t valid;
7201 	/*
7202 	 * This field is used in Output records to indicate that the
7203 	 * output is completely written to RAM. This field should be
7204 	 * read as '1' to indicate that the output has been completely
7205 	 * written. When writing a command completion or response to an
7206 	 * internal processor, the order of writes has to be such that
7207 	 * this field is written last.
7208 	 */
7209 } __attribute__((packed));
7210 
7211 /* hwrm_vnic_free */
7212 /*
7213  * Description: Free a VNIC resource. Idle any resources associated with the
7214  * VNIC as well as the VNIC. Reset and release all resources associated with the
7215  * VNIC.
7216  */
7217 /* Input	(24 bytes) */
7218 struct hwrm_vnic_free_input {
7219 	uint16_t req_type;
7220 	/*
7221 	 * This value indicates what type of request this is. The format
7222 	 * for the rest of the command is determined by this field.
7223 	 */
7224 	uint16_t cmpl_ring;
7225 	/*
7226 	 * This value indicates the what completion ring the request
7227 	 * will be optionally completed on. If the value is -1, then no
7228 	 * CR completion will be generated. Any other value must be a
7229 	 * valid CR ring_id value for this function.
7230 	 */
7231 	uint16_t seq_id;
7232 	/* This value indicates the command sequence number. */
7233 	uint16_t target_id;
7234 	/*
7235 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
7236 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
7237 	 * - HWRM
7238 	 */
7239 	uint64_t resp_addr;
7240 	/*
7241 	 * This is the host address where the response will be written
7242 	 * when the request is complete. This area must be 16B aligned
7243 	 * and must be cleared to zero before the request is made.
7244 	 */
7245 	uint32_t vnic_id;
7246 	/* Logical vnic ID */
7247 	uint32_t unused_0;
7248 } __attribute__((packed));
7249 
7250 /* Output	(16 bytes) */
7251 struct hwrm_vnic_free_output {
7252 	uint16_t error_code;
7253 	/*
7254 	 * Pass/Fail or error type Note: receiver to verify the in
7255 	 * parameters, and fail the call with an error when appropriate
7256 	 */
7257 	uint16_t req_type;
7258 	/* This field returns the type of original request. */
7259 	uint16_t seq_id;
7260 	/* This field provides original sequence number of the command. */
7261 	uint16_t resp_len;
7262 	/*
7263 	 * This field is the length of the response in bytes. The last
7264 	 * byte of the response is a valid flag that will read as '1'
7265 	 * when the command has been completely written to memory.
7266 	 */
7267 	uint32_t unused_0;
7268 	uint8_t unused_1;
7269 	uint8_t unused_2;
7270 	uint8_t unused_3;
7271 	uint8_t valid;
7272 	/*
7273 	 * This field is used in Output records to indicate that the
7274 	 * output is completely written to RAM. This field should be
7275 	 * read as '1' to indicate that the output has been completely
7276 	 * written. When writing a command completion or response to an
7277 	 * internal processor, the order of writes has to be such that
7278 	 * this field is written last.
7279 	 */
7280 } __attribute__((packed));
7281 
7282 /* hwrm_vnic_cfg */
7283 /* Description: Configure the RX VNIC structure. */
7284 /* Input	(40 bytes) */
7285 struct hwrm_vnic_cfg_input {
7286 	uint16_t req_type;
7287 	/*
7288 	 * This value indicates what type of request this is. The format
7289 	 * for the rest of the command is determined by this field.
7290 	 */
7291 	uint16_t cmpl_ring;
7292 	/*
7293 	 * This value indicates the what completion ring the request
7294 	 * will be optionally completed on. If the value is -1, then no
7295 	 * CR completion will be generated. Any other value must be a
7296 	 * valid CR ring_id value for this function.
7297 	 */
7298 	uint16_t seq_id;
7299 	/* This value indicates the command sequence number. */
7300 	uint16_t target_id;
7301 	/*
7302 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
7303 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
7304 	 * - HWRM
7305 	 */
7306 	uint64_t resp_addr;
7307 	/*
7308 	 * This is the host address where the response will be written
7309 	 * when the request is complete. This area must be 16B aligned
7310 	 * and must be cleared to zero before the request is made.
7311 	 */
7312 	uint32_t flags;
7313 	/*
7314 	 * When this bit is '1', the VNIC is requested to be the default
7315 	 * VNIC for the function.
7316 	 */
7317 	#define HWRM_VNIC_CFG_INPUT_FLAGS_DEFAULT	UINT32_C(0x1)
7318 	/*
7319 	 * When this bit is '1', the VNIC is being configured to strip
7320 	 * VLAN in the RX path. If set to '0', then VLAN stripping is
7321 	 * disabled on this VNIC.
7322 	 */
7323 	#define HWRM_VNIC_CFG_INPUT_FLAGS_VLAN_STRIP_MODE	UINT32_C(0x2)
7324 	/*
7325 	 * When this bit is '1', the VNIC is being configured to buffer
7326 	 * receive packets in the hardware until the host posts new
7327 	 * receive buffers. If set to '0', then bd_stall is being
7328 	 * configured to be disabled on this VNIC.
7329 	 */
7330 	#define HWRM_VNIC_CFG_INPUT_FLAGS_BD_STALL_MODE	UINT32_C(0x4)
7331 	/*
7332 	 * When this bit is '1', the VNIC is being configured to receive
7333 	 * both RoCE and non-RoCE traffic. If set to '0', then this VNIC
7334 	 * is not configured to be operating in dual VNIC mode.
7335 	 */
7336 	#define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_DUAL_VNIC_MODE	UINT32_C(0x8)
7337 	/*
7338 	 * When this flag is set to '1', the VNIC is requested to be
7339 	 * configured to receive only RoCE traffic. If this flag is set
7340 	 * to '0', then this flag shall be ignored by the HWRM. If
7341 	 * roce_dual_vnic_mode flag is set to '1', then the HWRM client
7342 	 * shall not set this flag to '1'.
7343 	 */
7344 	#define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_ONLY_VNIC_MODE UINT32_C(0x10)
7345 	/*
7346 	 * When a VNIC uses one destination ring group for certain
7347 	 * application	(e.g. Receive Flow Steering) where exact match is
7348 	 * used to direct packets to a VNIC with one destination ring
7349 	 * group only, there is no need to configure RSS indirection
7350 	 * table for that VNIC as only one destination ring group is
7351 	 * used. This flag is used to enable a mode where RSS is enabled
7352 	 * in the VNIC using a RSS context for computing RSS hash but
7353 	 * the RSS indirection table is not configured using
7354 	 * hwrm_vnic_rss_cfg. If this mode is enabled, then the driver
7355 	 * should not program RSS indirection table for the RSS context
7356 	 * that is used for computing RSS hash only.
7357 	 */
7358 	#define HWRM_VNIC_CFG_INPUT_FLAGS_RSS_DFLT_CR_MODE	UINT32_C(0x20)
7359 	/*
7360 	 * When this bit is '1', the VNIC is being configured to receive
7361 	 * both RoCE and non-RoCE traffic, but forward only the RoCE
7362 	 * traffic further. Also, RoCE traffic can be mirrored to L2
7363 	 * driver.
7364 	 */
7365 	#define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_MODE \
7366 	UINT32_C(0x40)
7367 	uint32_t enables;
7368 	/*
7369 	 * This bit must be '1' for the dflt_ring_grp field to be
7370 	 * configured.
7371 	 */
7372 	#define HWRM_VNIC_CFG_INPUT_ENABLES_DFLT_RING_GRP	UINT32_C(0x1)
7373 	/* This bit must be '1' for the rss_rule field to be configured. */
7374 	#define HWRM_VNIC_CFG_INPUT_ENABLES_RSS_RULE	UINT32_C(0x2)
7375 	/* This bit must be '1' for the cos_rule field to be configured. */
7376 	#define HWRM_VNIC_CFG_INPUT_ENABLES_COS_RULE	UINT32_C(0x4)
7377 	/* This bit must be '1' for the lb_rule field to be configured. */
7378 	#define HWRM_VNIC_CFG_INPUT_ENABLES_LB_RULE	UINT32_C(0x8)
7379 	/* This bit must be '1' for the mru field to be configured. */
7380 	#define HWRM_VNIC_CFG_INPUT_ENABLES_MRU	UINT32_C(0x10)
7381 	uint16_t vnic_id;
7382 	/* Logical vnic ID */
7383 	uint16_t dflt_ring_grp;
7384 	/*
7385 	 * Default Completion ring for the VNIC. This ring will be
7386 	 * chosen if packet does not match any RSS rules and if there is
7387 	 * no COS rule.
7388 	 */
7389 	uint16_t rss_rule;
7390 	/*
7391 	 * RSS ID for RSS rule/table structure. 0xFF...	(All Fs) if
7392 	 * there is no RSS rule.
7393 	 */
7394 	uint16_t cos_rule;
7395 	/*
7396 	 * RSS ID for COS rule/table structure. 0xFF...	(All Fs) if
7397 	 * there is no COS rule.
7398 	 */
7399 	uint16_t lb_rule;
7400 	/*
7401 	 * RSS ID for load balancing rule/table structure. 0xFF...	(All
7402 	 * Fs) if there is no LB rule.
7403 	 */
7404 	uint16_t mru;
7405 	/*
7406 	 * The maximum receive unit of the vnic. Each vnic is associated
7407 	 * with a function. The vnic mru value overwrites the mru
7408 	 * setting of the associated function. The HWRM shall make sure
7409 	 * that vnic mru does not exceed the mru of the port the
7410 	 * function is associated with.
7411 	 */
7412 	uint32_t unused_0;
7413 } __attribute__((packed));
7414 
7415 /* Output	(16 bytes) */
7416 struct hwrm_vnic_cfg_output {
7417 	uint16_t error_code;
7418 	/*
7419 	 * Pass/Fail or error type Note: receiver to verify the in
7420 	 * parameters, and fail the call with an error when appropriate
7421 	 */
7422 	uint16_t req_type;
7423 	/* This field returns the type of original request. */
7424 	uint16_t seq_id;
7425 	/* This field provides original sequence number of the command. */
7426 	uint16_t resp_len;
7427 	/*
7428 	 * This field is the length of the response in bytes. The last
7429 	 * byte of the response is a valid flag that will read as '1'
7430 	 * when the command has been completely written to memory.
7431 	 */
7432 	uint32_t unused_0;
7433 	uint8_t unused_1;
7434 	uint8_t unused_2;
7435 	uint8_t unused_3;
7436 	uint8_t valid;
7437 	/*
7438 	 * This field is used in Output records to indicate that the
7439 	 * output is completely written to RAM. This field should be
7440 	 * read as '1' to indicate that the output has been completely
7441 	 * written. When writing a command completion or response to an
7442 	 * internal processor, the order of writes has to be such that
7443 	 * this field is written last.
7444 	 */
7445 } __attribute__((packed));
7446 
7447 /* hwrm_vnic_qcfg */
7448 /*
7449  * Description: Query the RX VNIC structure. This function can be used by a PF
7450  * driver to query its own VNIC resource or VNIC resource of its child VF. This
7451  * function can also be used by a VF driver to query its own VNIC resource.
7452  */
7453 /* Input	(32 bytes) */
7454 struct hwrm_vnic_qcfg_input {
7455 	uint16_t req_type;
7456 	/*
7457 	 * This value indicates what type of request this is. The format
7458 	 * for the rest of the command is determined by this field.
7459 	 */
7460 	uint16_t cmpl_ring;
7461 	/*
7462 	 * This value indicates the what completion ring the request
7463 	 * will be optionally completed on. If the value is -1, then no
7464 	 * CR completion will be generated. Any other value must be a
7465 	 * valid CR ring_id value for this function.
7466 	 */
7467 	uint16_t seq_id;
7468 	/* This value indicates the command sequence number. */
7469 	uint16_t target_id;
7470 	/*
7471 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
7472 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
7473 	 * - HWRM
7474 	 */
7475 	uint64_t resp_addr;
7476 	/*
7477 	 * This is the host address where the response will be written
7478 	 * when the request is complete. This area must be 16B aligned
7479 	 * and must be cleared to zero before the request is made.
7480 	 */
7481 	uint32_t enables;
7482 	/* This bit must be '1' for the vf_id_valid field to be configured. */
7483 	#define HWRM_VNIC_QCFG_INPUT_ENABLES_VF_ID_VALID	UINT32_C(0x1)
7484 	uint32_t vnic_id;
7485 	/* Logical vnic ID */
7486 	uint16_t vf_id;
7487 	/* ID of Virtual Function whose VNIC resource is being queried. */
7488 	uint16_t unused_0[3];
7489 } __attribute__((packed));
7490 
7491 /* Output	(32 bytes) */
7492 struct hwrm_vnic_qcfg_output {
7493 	uint16_t error_code;
7494 	/*
7495 	 * Pass/Fail or error type Note: receiver to verify the in
7496 	 * parameters, and fail the call with an error when appropriate
7497 	 */
7498 	uint16_t req_type;
7499 	/* This field returns the type of original request. */
7500 	uint16_t seq_id;
7501 	/* This field provides original sequence number of the command. */
7502 	uint16_t resp_len;
7503 	/*
7504 	 * This field is the length of the response in bytes. The last
7505 	 * byte of the response is a valid flag that will read as '1'
7506 	 * when the command has been completely written to memory.
7507 	 */
7508 	uint16_t dflt_ring_grp;
7509 	/* Default Completion ring for the VNIC. */
7510 	uint16_t rss_rule;
7511 	/*
7512 	 * RSS ID for RSS rule/table structure. 0xFF...	(All Fs) if
7513 	 * there is no RSS rule.
7514 	 */
7515 	uint16_t cos_rule;
7516 	/*
7517 	 * RSS ID for COS rule/table structure. 0xFF...	(All Fs) if
7518 	 * there is no COS rule.
7519 	 */
7520 	uint16_t lb_rule;
7521 	/*
7522 	 * RSS ID for load balancing rule/table structure. 0xFF...	(All
7523 	 * Fs) if there is no LB rule.
7524 	 */
7525 	uint16_t mru;
7526 	/* The maximum receive unit of the vnic. */
7527 	uint8_t unused_0;
7528 	uint8_t unused_1;
7529 	uint32_t flags;
7530 	/*
7531 	 * When this bit is '1', the VNIC is the default VNIC for the
7532 	 * function.
7533 	 */
7534 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_DEFAULT	UINT32_C(0x1)
7535 	/*
7536 	 * When this bit is '1', the VNIC is configured to strip VLAN in
7537 	 * the RX path. If set to '0', then VLAN stripping is disabled
7538 	 * on this VNIC.
7539 	 */
7540 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_VLAN_STRIP_MODE	UINT32_C(0x2)
7541 	/*
7542 	 * When this bit is '1', the VNIC is configured to buffer
7543 	 * receive packets in the hardware until the host posts new
7544 	 * receive buffers. If set to '0', then bd_stall is disabled on
7545 	 * this VNIC.
7546 	 */
7547 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_BD_STALL_MODE	UINT32_C(0x4)
7548 	/*
7549 	 * When this bit is '1', the VNIC is configured to receive both
7550 	 * RoCE and non-RoCE traffic. If set to '0', then this VNIC is
7551 	 * not configured to operate in dual VNIC mode.
7552 	 */
7553 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_DUAL_VNIC_MODE	UINT32_C(0x8)
7554 	/*
7555 	 * When this flag is set to '1', the VNIC is configured to
7556 	 * receive only RoCE traffic. When this flag is set to '0', the
7557 	 * VNIC is not configured to receive only RoCE traffic. If
7558 	 * roce_dual_vnic_mode flag and this flag both are set to '1',
7559 	 * then it is an invalid configuration of the VNIC. The HWRM
7560 	 * should not allow that type of mis-configuration by HWRM
7561 	 * clients.
7562 	 */
7563 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_ONLY_VNIC_MODE	UINT32_C(0x10)
7564 	/*
7565 	 * When a VNIC uses one destination ring group for certain
7566 	 * application	(e.g. Receive Flow Steering) where exact match is
7567 	 * used to direct packets to a VNIC with one destination ring
7568 	 * group only, there is no need to configure RSS indirection
7569 	 * table for that VNIC as only one destination ring group is
7570 	 * used. When this bit is set to '1', then the VNIC is enabled
7571 	 * in a mode where RSS is enabled in the VNIC using a RSS
7572 	 * context for computing RSS hash but the RSS indirection table
7573 	 * is not configured.
7574 	 */
7575 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_RSS_DFLT_CR_MODE	UINT32_C(0x20)
7576 	/*
7577 	 * When this bit is '1', the VNIC is configured to receive both
7578 	 * RoCE and non-RoCE traffic, but forward only RoCE traffic
7579 	 * further. Also RoCE traffic can be mirrored to L2 driver.
7580 	 */
7581 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_MODE \
7582 	UINT32_C(0x40)
7583 	uint32_t unused_2;
7584 	uint8_t unused_3;
7585 	uint8_t unused_4;
7586 	uint8_t unused_5;
7587 	uint8_t valid;
7588 	/*
7589 	 * This field is used in Output records to indicate that the
7590 	 * output is completely written to RAM. This field should be
7591 	 * read as '1' to indicate that the output has been completely
7592 	 * written. When writing a command completion or response to an
7593 	 * internal processor, the order of writes has to be such that
7594 	 * this field is written last.
7595 	 */
7596 } __attribute__((packed));
7597 
7598 
7599 /* hwrm_vnic_tpa_cfg */
7600 /* Description: This function is used to enable/configure TPA on the VNIC. */
7601 /* Input	(40 bytes) */
7602 struct hwrm_vnic_tpa_cfg_input {
7603 	uint16_t req_type;
7604 	/*
7605 	 * This value indicates what type of request this is. The format
7606 	 * for the rest of the command is determined by this field.
7607 	 */
7608 	uint16_t cmpl_ring;
7609 	/*
7610 	 * This value indicates the what completion ring the request
7611 	 * will be optionally completed on. If the value is -1, then no
7612 	 * CR completion will be generated. Any other value must be a
7613 	 * valid CR ring_id value for this function.
7614 	 */
7615 	uint16_t seq_id;
7616 	/* This value indicates the command sequence number. */
7617 	uint16_t target_id;
7618 	/*
7619 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
7620 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
7621 	 * - HWRM
7622 	 */
7623 	uint64_t resp_addr;
7624 	/*
7625 	 * This is the host address where the response will be written
7626 	 * when the request is complete. This area must be 16B aligned
7627 	 * and must be cleared to zero before the request is made.
7628 	 */
7629 	uint32_t flags;
7630 	/*
7631 	 * When this bit is '1', the VNIC shall be configured to perform
7632 	 * transparent packet aggregation	(TPA) of non-tunneled TCP
7633 	 * packets.
7634 	 */
7635 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_TPA	UINT32_C(0x1)
7636 	/*
7637 	 * When this bit is '1', the VNIC shall be configured to perform
7638 	 * transparent packet aggregation	(TPA) of tunneled TCP packets.
7639 	 */
7640 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_ENCAP_TPA	UINT32_C(0x2)
7641 	/*
7642 	 * When this bit is '1', the VNIC shall be configured to perform
7643 	 * transparent packet aggregation	(TPA) according to Windows
7644 	 * Receive Segment Coalescing	(RSC) rules.
7645 	 */
7646 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_RSC_WND_UPDATE	UINT32_C(0x4)
7647 	/*
7648 	 * When this bit is '1', the VNIC shall be configured to perform
7649 	 * transparent packet aggregation	(TPA) according to Linux
7650 	 * Generic Receive Offload	(GRO) rules.
7651 	 */
7652 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO	UINT32_C(0x8)
7653 	/*
7654 	 * When this bit is '1', the VNIC shall be configured to perform
7655 	 * transparent packet aggregation	(TPA) for TCP packets with IP
7656 	 * ECN set to non-zero.
7657 	 */
7658 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_WITH_ECN	UINT32_C(0x10)
7659 	/*
7660 	 * When this bit is '1', the VNIC shall be configured to perform
7661 	 * transparent packet aggregation	(TPA) for GRE tunneled TCP
7662 	 * packets only if all packets have the same GRE sequence.
7663 	 */
7664 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_WITH_SAME_GRE_SEQ	\
7665 		UINT32_C(0x20)
7666 	/*
7667 	 * When this bit is '1' and the GRO mode is enabled, the VNIC
7668 	 * shall be configured to perform transparent packet aggregation
7669 	 *	(TPA) for TCP/IPv4 packets with consecutively increasing
7670 	 * IPIDs. In other words, the last packet that is being
7671 	 * aggregated to an already existing aggregation context shall
7672 	 * have IPID 1 more than the IPID of the last packet that was
7673 	 * aggregated in that aggregation context.
7674 	 */
7675 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO_IPID_CHECK	UINT32_C(0x40)
7676 	/*
7677 	 * When this bit is '1' and the GRO mode is enabled, the VNIC
7678 	 * shall be configured to perform transparent packet aggregation
7679 	 *	(TPA) for TCP packets with the same TTL	(IPv4) or Hop limit
7680 	 *	(IPv6) value.
7681 	 */
7682 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO_TTL_CHECK	UINT32_C(0x80)
7683 	uint32_t enables;
7684 	/* This bit must be '1' for the max_agg_segs field to be configured. */
7685 	#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGG_SEGS	UINT32_C(0x1)
7686 	/* This bit must be '1' for the max_aggs field to be configured. */
7687 	#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGGS	UINT32_C(0x2)
7688 	/*
7689 	 * This bit must be '1' for the max_agg_timer field to be
7690 	 * configured.
7691 	 */
7692 	#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGG_TIMER	UINT32_C(0x4)
7693 	/* This bit must be '1' for the min_agg_len field to be configured. */
7694 	#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MIN_AGG_LEN	UINT32_C(0x8)
7695 	uint16_t vnic_id;
7696 	/* Logical vnic ID */
7697 	uint16_t max_agg_segs;
7698 	/*
7699 	 * This is the maximum number of TCP segments that can be
7700 	 * aggregated	(unit is Log2). Max value is 31.
7701 	 */
7702 	/* 1 segment */
7703 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_1	UINT32_C(0x0)
7704 	/* 2 segments */
7705 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_2	UINT32_C(0x1)
7706 	/* 4 segments */
7707 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_4	UINT32_C(0x2)
7708 	/* 8 segments */
7709 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_8	UINT32_C(0x3)
7710 	/* Any segment size larger than this is not valid */
7711 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_MAX	UINT32_C(0x1f)
7712 	uint16_t max_aggs;
7713 	/*
7714 	 * This is the maximum number of aggregations this VNIC is
7715 	 * allowed	(unit is Log2). Max value is 7
7716 	 */
7717 	/* 1 aggregation */
7718 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_1	UINT32_C(0x0)
7719 	/* 2 aggregations */
7720 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_2	UINT32_C(0x1)
7721 	/* 4 aggregations */
7722 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_4	UINT32_C(0x2)
7723 	/* 8 aggregations */
7724 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_8	UINT32_C(0x3)
7725 	/* 16 aggregations */
7726 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_16	UINT32_C(0x4)
7727 	/* Any aggregation size larger than this is not valid */
7728 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_MAX	UINT32_C(0x7)
7729 	uint8_t unused_0;
7730 	uint8_t unused_1;
7731 	uint32_t max_agg_timer;
7732 	/*
7733 	 * This is the maximum amount of time allowed for an aggregation
7734 	 * context to complete after it was initiated.
7735 	 */
7736 	uint32_t min_agg_len;
7737 	/*
7738 	 * This is the minimum amount of payload length required to
7739 	 * start an aggregation context.
7740 	 */
7741 } __attribute__((packed));
7742 
7743 /* Output	(16 bytes) */
7744 struct hwrm_vnic_tpa_cfg_output {
7745 	uint16_t error_code;
7746 	/*
7747 	 * Pass/Fail or error type Note: receiver to verify the in
7748 	 * parameters, and fail the call with an error when appropriate
7749 	 */
7750 	uint16_t req_type;
7751 	/* This field returns the type of original request. */
7752 	uint16_t seq_id;
7753 	/* This field provides original sequence number of the command. */
7754 	uint16_t resp_len;
7755 	/*
7756 	 * This field is the length of the response in bytes. The last
7757 	 * byte of the response is a valid flag that will read as '1'
7758 	 * when the command has been completely written to memory.
7759 	 */
7760 	uint32_t unused_0;
7761 	uint8_t unused_1;
7762 	uint8_t unused_2;
7763 	uint8_t unused_3;
7764 	uint8_t valid;
7765 	/*
7766 	 * This field is used in Output records to indicate that the
7767 	 * output is completely written to RAM. This field should be
7768 	 * read as '1' to indicate that the output has been completely
7769 	 * written. When writing a command completion or response to an
7770 	 * internal processor, the order of writes has to be such that
7771 	 * this field is written last.
7772 	 */
7773 } __attribute__((packed));
7774 
7775 /* hwrm_vnic_rss_cfg */
7776 /* Description: This function is used to enable RSS configuration. */
7777 /* Input	(48 bytes) */
7778 struct hwrm_vnic_rss_cfg_input {
7779 	uint16_t req_type;
7780 	/*
7781 	 * This value indicates what type of request this is. The format
7782 	 * for the rest of the command is determined by this field.
7783 	 */
7784 	uint16_t cmpl_ring;
7785 	/*
7786 	 * This value indicates the what completion ring the request
7787 	 * will be optionally completed on. If the value is -1, then no
7788 	 * CR completion will be generated. Any other value must be a
7789 	 * valid CR ring_id value for this function.
7790 	 */
7791 	uint16_t seq_id;
7792 	/* This value indicates the command sequence number. */
7793 	uint16_t target_id;
7794 	/*
7795 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
7796 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
7797 	 * - HWRM
7798 	 */
7799 	uint64_t resp_addr;
7800 	/*
7801 	 * This is the host address where the response will be written
7802 	 * when the request is complete. This area must be 16B aligned
7803 	 * and must be cleared to zero before the request is made.
7804 	 */
7805 	uint32_t hash_type;
7806 	/*
7807 	 * When this bit is '1', the RSS hash shall be computed over
7808 	 * source and destination IPv4 addresses of IPv4 packets.
7809 	 */
7810 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_IPV4	UINT32_C(0x1)
7811 	/*
7812 	 * When this bit is '1', the RSS hash shall be computed over
7813 	 * source/destination IPv4 addresses and source/destination
7814 	 * ports of TCP/IPv4 packets.
7815 	 */
7816 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_TCP_IPV4	UINT32_C(0x2)
7817 	/*
7818 	 * When this bit is '1', the RSS hash shall be computed over
7819 	 * source/destination IPv4 addresses and source/destination
7820 	 * ports of UDP/IPv4 packets.
7821 	 */
7822 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV4	UINT32_C(0x4)
7823 	/*
7824 	 * When this bit is '1', the RSS hash shall be computed over
7825 	 * source and destination IPv4 addresses of IPv6 packets.
7826 	 */
7827 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_IPV6	UINT32_C(0x8)
7828 	/*
7829 	 * When this bit is '1', the RSS hash shall be computed over
7830 	 * source/destination IPv6 addresses and source/destination
7831 	 * ports of TCP/IPv6 packets.
7832 	 */
7833 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_TCP_IPV6	UINT32_C(0x10)
7834 	/*
7835 	 * When this bit is '1', the RSS hash shall be computed over
7836 	 * source/destination IPv6 addresses and source/destination
7837 	 * ports of UDP/IPv6 packets.
7838 	 */
7839 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV6	UINT32_C(0x20)
7840 	uint32_t unused_0;
7841 	uint64_t ring_grp_tbl_addr;
7842 	/* This is the address for rss ring group table */
7843 	uint64_t hash_key_tbl_addr;
7844 	/* This is the address for rss hash key table */
7845 	uint16_t rss_ctx_idx;
7846 	/* Index to the rss indirection table. */
7847 	uint16_t unused_1[3];
7848 } __attribute__((packed));
7849 
7850 /* Output	(16 bytes) */
7851 struct hwrm_vnic_rss_cfg_output {
7852 	uint16_t error_code;
7853 	/*
7854 	 * Pass/Fail or error type Note: receiver to verify the in
7855 	 * parameters, and fail the call with an error when appropriate
7856 	 */
7857 	uint16_t req_type;
7858 	/* This field returns the type of original request. */
7859 	uint16_t seq_id;
7860 	/* This field provides original sequence number of the command. */
7861 	uint16_t resp_len;
7862 	/*
7863 	 * This field is the length of the response in bytes. The last
7864 	 * byte of the response is a valid flag that will read as '1'
7865 	 * when the command has been completely written to memory.
7866 	 */
7867 	uint32_t unused_0;
7868 	uint8_t unused_1;
7869 	uint8_t unused_2;
7870 	uint8_t unused_3;
7871 	uint8_t valid;
7872 	/*
7873 	 * This field is used in Output records to indicate that the
7874 	 * output is completely written to RAM. This field should be
7875 	 * read as '1' to indicate that the output has been completely
7876 	 * written. When writing a command completion or response to an
7877 	 * internal processor, the order of writes has to be such that
7878 	 * this field is written last.
7879 	 */
7880 } __attribute__((packed));
7881 
7882 /* hwrm_vnic_plcmodes_cfg */
7883 /*
7884  * Description: This function can be used to set placement mode configuration of
7885  * the VNIC.
7886  */
7887 /* Input (40 bytes) */
7888 struct hwrm_vnic_plcmodes_cfg_input {
7889 	uint16_t req_type;
7890 	/*
7891 	 * This value indicates what type of request this is. The format for the
7892 	 * rest of the command is determined by this field.
7893 	 */
7894 	uint16_t cmpl_ring;
7895 	/*
7896 	 * This value indicates the what completion ring the request will be
7897 	 * optionally completed on. If the value is -1, then no CR completion
7898 	 * will be generated. Any other value must be a valid CR ring_id value
7899 	 * for this function.
7900 	 */
7901 	uint16_t seq_id;
7902 	/* This value indicates the command sequence number. */
7903 	uint16_t target_id;
7904 	/*
7905 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function ids
7906 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF - HWRM
7907 	 */
7908 	uint64_t resp_addr;
7909 	/*
7910 	 * This is the host address where the response will be written when the
7911 	 * request is complete. This area must be 16B aligned and must be
7912 	 * cleared to zero before the request is made.
7913 	 */
7914 	uint32_t flags;
7915 	/*
7916 	 * When this bit is '1', the VNIC shall be configured to use regular
7917 	 * placement algorithm. By default, the regular placement algorithm
7918 	 * shall be enabled on the VNIC.
7919 	 */
7920 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_REGULAR_PLACEMENT \
7921 		UINT32_C(0x1)
7922 	/*
7923 	 * When this bit is '1', the VNIC shall be configured use the jumbo
7924 	 * placement algorithm.
7925 	 */
7926 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_JUMBO_PLACEMENT \
7927 		UINT32_C(0x2)
7928 	/*
7929 	 * When this bit is '1', the VNIC shall be configured to enable Header-
7930 	 * Data split for IPv4 packets according to the following rules: # If
7931 	 * the packet is identified as TCP/IPv4, then the packet is split at the
7932 	 * beginning of the TCP payload. # If the packet is identified as
7933 	 * UDP/IPv4, then the packet is split at the beginning of UDP payload. #
7934 	 * If the packet is identified as non-TCP and non-UDP IPv4 packet, then
7935 	 * the packet is split at the beginning of the upper layer protocol
7936 	 * header carried in the IPv4 packet.
7937 	 */
7938 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_IPV4        UINT32_C(0x4)
7939 	/*
7940 	 * When this bit is '1', the VNIC shall be configured to enable Header-
7941 	 * Data split for IPv6 packets according to the following rules: # If
7942 	 * the packet is identified as TCP/IPv6, then the packet is split at the
7943 	 * beginning of the TCP payload. # If the packet is identified as
7944 	 * UDP/IPv6, then the packet is split at the beginning of UDP payload. #
7945 	 * If the packet is identified as non-TCP and non-UDP IPv6 packet, then
7946 	 * the packet is split at the beginning of the upper layer protocol
7947 	 * header carried in the IPv6 packet.
7948 	 */
7949 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_IPV6        UINT32_C(0x8)
7950 	/*
7951 	 * When this bit is '1', the VNIC shall be configured to enable Header-
7952 	 * Data split for FCoE packets at the beginning of FC payload.
7953 	 */
7954 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_FCOE       UINT32_C(0x10)
7955 	/*
7956 	 * When this bit is '1', the VNIC shall be configured to enable Header-
7957 	 * Data split for RoCE packets at the beginning of RoCE payload (after
7958 	 * BTH/GRH headers).
7959 	 */
7960 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_ROCE       UINT32_C(0x20)
7961 	uint32_t enables;
7962 	/*
7963 	 * This bit must be '1' for the jumbo_thresh_valid field to be
7964 	 * configured.
7965 	 */
7966 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_JUMBO_THRESH_VALID \
7967 		UINT32_C(0x1)
7968 	/*
7969 	 * This bit must be '1' for the hds_offset_valid field to be configured.
7970 	 */
7971 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_HDS_OFFSET_VALID \
7972 		UINT32_C(0x2)
7973 	/*
7974 	 * This bit must be '1' for the hds_threshold_valid field to be
7975 	 * configured.
7976 	 */
7977 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_HDS_THRESHOLD_VALID \
7978 		UINT32_C(0x4)
7979 	uint32_t vnic_id;
7980 	/* Logical vnic ID */
7981 	uint16_t jumbo_thresh;
7982 	/*
7983 	 * When jumbo placement algorithm is enabled, this value is used to
7984 	 * determine the threshold for jumbo placement. Packets with length
7985 	 * larger than this value will be placed according to the jumbo
7986 	 * placement algorithm.
7987 	 */
7988 	uint16_t hds_offset;
7989 	/*
7990 	 * This value is used to determine the offset into packet buffer where
7991 	 * the split data (payload) will be placed according to one of of HDS
7992 	 * placement algorithm. The lengths of packet buffers provided for split
7993 	 * data shall be larger than this value.
7994 	 */
7995 	uint16_t hds_threshold;
7996 	/*
7997 	 * When one of the HDS placement algorithm is enabled, this value is
7998 	 * used to determine the threshold for HDS placement. Packets with
7999 	 * length larger than this value will be placed according to the HDS
8000 	 * placement algorithm. This value shall be in multiple of 4 bytes.
8001 	 */
8002 	uint16_t unused_0[3];
8003 } __attribute__((packed));
8004 
8005 /* Output (16 bytes) */
8006 struct hwrm_vnic_plcmodes_cfg_output {
8007 	uint16_t error_code;
8008 	/*
8009 	 * Pass/Fail or error type Note: receiver to verify the in parameters,
8010 	 * and fail the call with an error when appropriate
8011 	 */
8012 	uint16_t req_type;
8013 	/* This field returns the type of original request. */
8014 	uint16_t seq_id;
8015 	/* This field provides original sequence number of the command. */
8016 	uint16_t resp_len;
8017 	/*
8018 	 * This field is the length of the response in bytes. The last byte of
8019 	 * the response is a valid flag that will read as '1' when the command
8020 	 * has been completely written to memory.
8021 	 */
8022 	uint32_t unused_0;
8023 	uint8_t unused_1;
8024 	uint8_t unused_2;
8025 	uint8_t unused_3;
8026 	uint8_t valid;
8027 	/*
8028 	 * This field is used in Output records to indicate that the output is
8029 	 * completely written to RAM. This field should be read as '1' to
8030 	 * indicate that the output has been completely written. When writing a
8031 	 * command completion or response to an internal processor, the order of
8032 	 * writes has to be such that this field is written last.
8033 	 */
8034 } __attribute__((packed));
8035 
8036 /* hwrm_vnic_plcmodes_qcfg */
8037 /*
8038  * Description: This function can be used to query placement mode configuration
8039  * of the VNIC.
8040  */
8041 /* Input (24 bytes) */
8042 struct hwrm_vnic_plcmodes_qcfg_input {
8043 	uint16_t req_type;
8044 	/*
8045 	 * This value indicates what type of request this is. The format for the
8046 	 * rest of the command is determined by this field.
8047 	 */
8048 	uint16_t cmpl_ring;
8049 	/*
8050 	 * This value indicates the what completion ring the request will be
8051 	 * optionally completed on. If the value is -1, then no CR completion
8052 	 * will be generated. Any other value must be a valid CR ring_id value
8053 	 * for this function.
8054 	 */
8055 	uint16_t seq_id;
8056 	/* This value indicates the command sequence number. */
8057 	uint16_t target_id;
8058 	/*
8059 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function ids
8060 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF - HWRM
8061 	 */
8062 	uint64_t resp_addr;
8063 	/*
8064 	 * This is the host address where the response will be written when the
8065 	 * request is complete. This area must be 16B aligned and must be
8066 	 * cleared to zero before the request is made.
8067 	 */
8068 	uint32_t vnic_id;
8069 	/* Logical vnic ID */
8070 	uint32_t unused_0;
8071 } __attribute__((packed));
8072 
8073 /* Output (24 bytes) */
8074 struct hwrm_vnic_plcmodes_qcfg_output {
8075 	uint16_t error_code;
8076 	/*
8077 	 * Pass/Fail or error type Note: receiver to verify the in parameters,
8078 	 * and fail the call with an error when appropriate
8079 	 */
8080 	uint16_t req_type;
8081 	/* This field returns the type of original request. */
8082 	uint16_t seq_id;
8083 	/* This field provides original sequence number of the command. */
8084 	uint16_t resp_len;
8085 	/*
8086 	 * This field is the length of the response in bytes. The last byte of
8087 	 * the response is a valid flag that will read as '1' when the command
8088 	 * has been completely written to memory.
8089 	 */
8090 	uint32_t flags;
8091 	/*
8092 	 * When this bit is '1', the VNIC is configured to use regular placement
8093 	 * algorithm.
8094 	 */
8095 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_REGULAR_PLACEMENT \
8096 		UINT32_C(0x1)
8097 	/*
8098 	 * When this bit is '1', the VNIC is configured to use the jumbo
8099 	 * placement algorithm.
8100 	 */
8101 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_JUMBO_PLACEMENT \
8102 		UINT32_C(0x2)
8103 	/*
8104 	 * When this bit is '1', the VNIC is configured to enable Header-Data
8105 	 * split for IPv4 packets.
8106 	 */
8107 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_IPV4      UINT32_C(0x4)
8108 	/*
8109 	 * When this bit is '1', the VNIC is configured to enable Header-Data
8110 	 * split for IPv6 packets.
8111 	 */
8112 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_IPV6      UINT32_C(0x8)
8113 	/*
8114 	 * When this bit is '1', the VNIC is configured to enable Header-Data
8115 	 * split for FCoE packets.
8116 	 */
8117 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_FCOE     UINT32_C(0x10)
8118 	/*
8119 	 * When this bit is '1', the VNIC is configured to enable Header-Data
8120 	 * split for RoCE packets.
8121 	 */
8122 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_ROCE     UINT32_C(0x20)
8123 	/*
8124 	 * When this bit is '1', the VNIC is configured to be the default VNIC
8125 	 * of the requesting function.
8126 	 */
8127 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_DFLT_VNIC    UINT32_C(0x40)
8128 	uint16_t jumbo_thresh;
8129 	/*
8130 	 * When jumbo placement algorithm is enabled, this value is used to
8131 	 * determine the threshold for jumbo placement. Packets with length
8132 	 * larger than this value will be placed according to the jumbo
8133 	 * placement algorithm.
8134 	 */
8135 	uint16_t hds_offset;
8136 	/*
8137 	 * This value is used to determine the offset into packet buffer where
8138 	 * the split data (payload) will be placed according to one of of HDS
8139 	 * placement algorithm. The lengths of packet buffers provided for split
8140 	 * data shall be larger than this value.
8141 	 */
8142 	uint16_t hds_threshold;
8143 	/*
8144 	 * When one of the HDS placement algorithm is enabled, this value is
8145 	 * used to determine the threshold for HDS placement. Packets with
8146 	 * length larger than this value will be placed according to the HDS
8147 	 * placement algorithm. This value shall be in multiple of 4 bytes.
8148 	 */
8149 	uint8_t unused_0;
8150 	uint8_t unused_1;
8151 	uint8_t unused_2;
8152 	uint8_t unused_3;
8153 	uint8_t unused_4;
8154 	uint8_t valid;
8155 	/*
8156 	 * This field is used in Output records to indicate that the output is
8157 	 * completely written to RAM. This field should be read as '1' to
8158 	 * indicate that the output has been completely written. When writing a
8159 	 * command completion or response to an internal processor, the order of
8160 	 * writes has to be such that this field is written last.
8161 	 */
8162 } __attribute__((packed));
8163 
8164 /* hwrm_vnic_rss_cos_lb_ctx_alloc */
8165 /* Description: This function is used to allocate COS/Load Balance context. */
8166 /* Input	(16 bytes) */
8167 struct hwrm_vnic_rss_cos_lb_ctx_alloc_input {
8168 	uint16_t req_type;
8169 	/*
8170 	 * This value indicates what type of request this is. The format
8171 	 * for the rest of the command is determined by this field.
8172 	 */
8173 	uint16_t cmpl_ring;
8174 	/*
8175 	 * This value indicates the what completion ring the request
8176 	 * will be optionally completed on. If the value is -1, then no
8177 	 * CR completion will be generated. Any other value must be a
8178 	 * valid CR ring_id value for this function.
8179 	 */
8180 	uint16_t seq_id;
8181 	/* This value indicates the command sequence number. */
8182 	uint16_t target_id;
8183 	/*
8184 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
8185 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
8186 	 * - HWRM
8187 	 */
8188 	uint64_t resp_addr;
8189 	/*
8190 	 * This is the host address where the response will be written
8191 	 * when the request is complete. This area must be 16B aligned
8192 	 * and must be cleared to zero before the request is made.
8193 	 */
8194 } __attribute__((packed));
8195 
8196 /* Output	(16 bytes) */
8197 struct hwrm_vnic_rss_cos_lb_ctx_alloc_output {
8198 	uint16_t error_code;
8199 	/*
8200 	 * Pass/Fail or error type Note: receiver to verify the in
8201 	 * parameters, and fail the call with an error when appropriate
8202 	 */
8203 	uint16_t req_type;
8204 	/* This field returns the type of original request. */
8205 	uint16_t seq_id;
8206 	/* This field provides original sequence number of the command. */
8207 	uint16_t resp_len;
8208 	/*
8209 	 * This field is the length of the response in bytes. The last
8210 	 * byte of the response is a valid flag that will read as '1'
8211 	 * when the command has been completely written to memory.
8212 	 */
8213 	uint16_t rss_cos_lb_ctx_id;
8214 	/* rss_cos_lb_ctx_id is 16 b */
8215 	uint8_t unused_0;
8216 	uint8_t unused_1;
8217 	uint8_t unused_2;
8218 	uint8_t unused_3;
8219 	uint8_t unused_4;
8220 	uint8_t valid;
8221 	/*
8222 	 * This field is used in Output records to indicate that the
8223 	 * output is completely written to RAM. This field should be
8224 	 * read as '1' to indicate that the output has been completely
8225 	 * written. When writing a command completion or response to an
8226 	 * internal processor, the order of writes has to be such that
8227 	 * this field is written last.
8228 	 */
8229 } __attribute__((packed));
8230 
8231 /* hwrm_vnic_rss_cos_lb_ctx_free */
8232 /* Description: This function can be used to free COS/Load Balance context. */
8233 /* Input	(24 bytes) */
8234 struct hwrm_vnic_rss_cos_lb_ctx_free_input {
8235 	uint16_t req_type;
8236 	/*
8237 	 * This value indicates what type of request this is. The format
8238 	 * for the rest of the command is determined by this field.
8239 	 */
8240 	uint16_t cmpl_ring;
8241 	/*
8242 	 * This value indicates the what completion ring the request
8243 	 * will be optionally completed on. If the value is -1, then no
8244 	 * CR completion will be generated. Any other value must be a
8245 	 * valid CR ring_id value for this function.
8246 	 */
8247 	uint16_t seq_id;
8248 	/* This value indicates the command sequence number. */
8249 	uint16_t target_id;
8250 	/*
8251 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
8252 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
8253 	 * - HWRM
8254 	 */
8255 	uint64_t resp_addr;
8256 	/*
8257 	 * This is the host address where the response will be written
8258 	 * when the request is complete. This area must be 16B aligned
8259 	 * and must be cleared to zero before the request is made.
8260 	 */
8261 	uint16_t rss_cos_lb_ctx_id;
8262 	/* rss_cos_lb_ctx_id is 16 b */
8263 	uint16_t unused_0[3];
8264 } __attribute__((packed));
8265 
8266 /* Output	(16 bytes) */
8267 struct hwrm_vnic_rss_cos_lb_ctx_free_output {
8268 	uint16_t error_code;
8269 	/*
8270 	 * Pass/Fail or error type Note: receiver to verify the in
8271 	 * parameters, and fail the call with an error when appropriate
8272 	 */
8273 	uint16_t req_type;
8274 	/* This field returns the type of original request. */
8275 	uint16_t seq_id;
8276 	/* This field provides original sequence number of the command. */
8277 	uint16_t resp_len;
8278 	/*
8279 	 * This field is the length of the response in bytes. The last
8280 	 * byte of the response is a valid flag that will read as '1'
8281 	 * when the command has been completely written to memory.
8282 	 */
8283 	uint32_t unused_0;
8284 	uint8_t unused_1;
8285 	uint8_t unused_2;
8286 	uint8_t unused_3;
8287 	uint8_t valid;
8288 	/*
8289 	 * This field is used in Output records to indicate that the
8290 	 * output is completely written to RAM. This field should be
8291 	 * read as '1' to indicate that the output has been completely
8292 	 * written. When writing a command completion or response to an
8293 	 * internal processor, the order of writes has to be such that
8294 	 * this field is written last.
8295 	 */
8296 } __attribute__((packed));
8297 
8298 /* hwrm_ring_alloc */
8299 /*
8300  * Description: This command allocates and does basic preparation for a ring.
8301  */
8302 /* Input	(80 bytes) */
8303 struct hwrm_ring_alloc_input {
8304 	uint16_t req_type;
8305 	/*
8306 	 * This value indicates what type of request this is. The format
8307 	 * for the rest of the command is determined by this field.
8308 	 */
8309 	uint16_t cmpl_ring;
8310 	/*
8311 	 * This value indicates the what completion ring the request
8312 	 * will be optionally completed on. If the value is -1, then no
8313 	 * CR completion will be generated. Any other value must be a
8314 	 * valid CR ring_id value for this function.
8315 	 */
8316 	uint16_t seq_id;
8317 	/* This value indicates the command sequence number. */
8318 	uint16_t target_id;
8319 	/*
8320 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
8321 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
8322 	 * - HWRM
8323 	 */
8324 	uint64_t resp_addr;
8325 	/*
8326 	 * This is the host address where the response will be written
8327 	 * when the request is complete. This area must be 16B aligned
8328 	 * and must be cleared to zero before the request is made.
8329 	 */
8330 	uint32_t enables;
8331 	/* This bit must be '1' for the Reserved1 field to be configured. */
8332 	#define HWRM_RING_ALLOC_INPUT_ENABLES_RESERVED1	UINT32_C(0x1)
8333 	/* This bit must be '1' for the ring_arb_cfg field to be configured. */
8334 	#define HWRM_RING_ALLOC_INPUT_ENABLES_RING_ARB_CFG	UINT32_C(0x2)
8335 	/* This bit must be '1' for the Reserved3 field to be configured. */
8336 	#define HWRM_RING_ALLOC_INPUT_ENABLES_RESERVED3	UINT32_C(0x4)
8337 	/*
8338 	 * This bit must be '1' for the stat_ctx_id_valid field to be
8339 	 * configured.
8340 	 */
8341 	#define HWRM_RING_ALLOC_INPUT_ENABLES_STAT_CTX_ID_VALID	UINT32_C(0x8)
8342 	/* This bit must be '1' for the Reserved4 field to be configured. */
8343 	#define HWRM_RING_ALLOC_INPUT_ENABLES_RESERVED4	UINT32_C(0x10)
8344 	/* This bit must be '1' for the max_bw_valid field to be configured. */
8345 	#define HWRM_RING_ALLOC_INPUT_ENABLES_MAX_BW_VALID	UINT32_C(0x20)
8346 	uint8_t ring_type;
8347 	/* Ring Type. */
8348 	/* L2 Completion Ring	(CR) */
8349 	#define HWRM_RING_ALLOC_INPUT_RING_TYPE_L2_CMPL	UINT32_C(0x0)
8350 	/* TX Ring	(TR) */
8351 	#define HWRM_RING_ALLOC_INPUT_RING_TYPE_TX	UINT32_C(0x1)
8352 	/* RX Ring	(RR) */
8353 	#define HWRM_RING_ALLOC_INPUT_RING_TYPE_RX	UINT32_C(0x2)
8354 	/* RoCE Notification Completion Ring	(ROCE_CR) */
8355 	#define HWRM_RING_ALLOC_INPUT_RING_TYPE_ROCE_CMPL	UINT32_C(0x3)
8356 	uint8_t unused_0;
8357 	uint16_t unused_1;
8358 	uint64_t page_tbl_addr;
8359 	/* This value is a pointer to the page table for the Ring. */
8360 	uint32_t fbo;
8361 	/* First Byte Offset of the first entry in the first page. */
8362 	uint8_t page_size;
8363 	/*
8364 	 * Actual page size in 2^page_size. The supported range is
8365 	 * increments in powers of 2 from 16 bytes to 1GB. - 4 = 16 B
8366 	 * Page size is 16 B. - 12 = 4 KB Page size is 4 KB. - 13 = 8 KB
8367 	 * Page size is 8 KB. - 16 = 64 KB Page size is 64 KB. - 21 = 2
8368 	 * MB Page size is 2 MB. - 22 = 4 MB Page size is 4 MB. - 30 = 1
8369 	 * GB Page size is 1 GB.
8370 	 */
8371 	uint8_t page_tbl_depth;
8372 	/*
8373 	 * This value indicates the depth of page table. For this
8374 	 * version of the specification, value other than 0 or 1 shall
8375 	 * be considered as an invalid value. When the page_tbl_depth =
8376 	 * 0, then it is treated as a special case with the following.
8377 	 * 1. FBO and page size fields are not valid. 2. page_tbl_addr
8378 	 * is the physical address of the first element of the ring.
8379 	 */
8380 	uint8_t unused_2;
8381 	uint8_t unused_3;
8382 	uint32_t length;
8383 	/*
8384 	 * Number of 16B units in the ring. Minimum size for a ring is
8385 	 * 16 16B entries.
8386 	 */
8387 	uint16_t logical_id;
8388 	/*
8389 	 * Logical ring number for the ring to be allocated. This value
8390 	 * determines the position in the doorbell area where the update
8391 	 * to the ring will be made. For completion rings, this value is
8392 	 * also the MSI-X vector number for the function the completion
8393 	 * ring is associated with.
8394 	 */
8395 	uint16_t cmpl_ring_id;
8396 	/*
8397 	 * This field is used only when ring_type is a TX ring. This
8398 	 * value indicates what completion ring the TX ring is
8399 	 * associated with.
8400 	 */
8401 	uint16_t queue_id;
8402 	/*
8403 	 * This field is used only when ring_type is a TX ring. This
8404 	 * value indicates what CoS queue the TX ring is associated
8405 	 * with.
8406 	 */
8407 	uint8_t unused_4;
8408 	uint8_t unused_5;
8409 	uint32_t reserved1;
8410 	/* This field is reserved for the future use. It shall be set to 0. */
8411 	uint16_t ring_arb_cfg;
8412 	/*
8413 	 * This field is used only when ring_type is a TX ring. This
8414 	 * field is used to configure arbitration related parameters for
8415 	 * a TX ring.
8416 	 */
8417 	/* Arbitration policy used for the ring. */
8418 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_MASK UINT32_C(0xf)
8419 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_SFT	0
8420 	/*
8421 	 * Use strict priority for the TX ring. Priority
8422 	 * value is specified in arb_policy_param
8423 	 */
8424 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_SP \
8425 		(UINT32_C(0x1) << 0)
8426 	/*
8427 	 * Use weighted fair queue arbitration for the
8428 	 * TX ring. Weight is specified in
8429 	 * arb_policy_param
8430 	 */
8431 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_WFQ \
8432 		(UINT32_C(0x2) << 0)
8433 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_LAST \
8434 		RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_WFQ
8435 	/* Reserved field. */
8436 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_RSVD_MASK	UINT32_C(0xf0)
8437 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_RSVD_SFT	4
8438 	/*
8439 	 * Arbitration policy specific parameter. # For strict priority
8440 	 * arbitration policy, this field represents a priority value.
8441 	 * If set to 0, then the priority is not specified and the HWRM
8442 	 * is allowed to select any priority for this TX ring. # For
8443 	 * weighted fair queue arbitration policy, this field represents
8444 	 * a weight value. If set to 0, then the weight is not specified
8445 	 * and the HWRM is allowed to select any weight for this TX
8446 	 * ring.
8447 	 */
8448 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_PARAM_MASK  \
8449 		UINT32_C(0xff00)
8450 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_PARAM_SFT	8
8451 	uint8_t unused_6;
8452 	uint8_t unused_7;
8453 	uint32_t reserved3;
8454 	/* This field is reserved for the future use. It shall be set to 0. */
8455 	uint32_t stat_ctx_id;
8456 	/*
8457 	 * This field is used only when ring_type is a TX ring. This
8458 	 * input indicates what statistics context this ring should be
8459 	 * associated with.
8460 	 */
8461 	uint32_t reserved4;
8462 	/* This field is reserved for the future use. It shall be set to 0. */
8463 	uint32_t max_bw;
8464 	/*
8465 	 * This field is used only when ring_type is a TX ring to
8466 	 * specify maximum BW allocated to the TX ring. The HWRM will
8467 	 * translate this value into byte counter and time interval used
8468 	 * for this ring inside the device.
8469 	 */
8470 	/* The bandwidth value. */
8471 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_MASK UINT32_C(0xfffffff)
8472 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_SFT	0
8473 	/* The granularity of the value	(bits or bytes). */
8474 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE	UINT32_C(0x10000000)
8475 	/* Value is in bits. */
8476 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BITS	(UINT32_C(0x0) << 28)
8477 	/* Value is in bytes. */
8478 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BYTES (UINT32_C(0x1) << 28)
8479 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_LAST \
8480 		RING_ALLOC_INPUT_MAX_BW_SCALE_BYTES
8481 	/* bw_value_unit is 3 b */
8482 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_MASK	\
8483 		UINT32_C(0xe0000000)
8484 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_SFT	29
8485 	/* Value is in Mb or MB	(base 10). */
8486 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_MEGA	\
8487 		(UINT32_C(0x0) << 29)
8488 	/* Value is in Kb or KB	(base 10). */
8489 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_KILO	\
8490 		(UINT32_C(0x2) << 29)
8491 	/* Value is in bits or bytes. */
8492 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_BASE	\
8493 		(UINT32_C(0x4) << 29)
8494 	/* Value is in Gb or GB	(base 10). */
8495 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_GIGA	\
8496 		(UINT32_C(0x6) << 29)
8497 	/* Value is in 1/100th of a percentage of total bandwidth. */
8498 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
8499 		(UINT32_C(0x1) << 29)
8500 	/* Invalid unit */
8501 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID \
8502 		(UINT32_C(0x7) << 29)
8503 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_LAST \
8504 		RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID
8505 	uint8_t int_mode;
8506 	/*
8507 	 * This field is used only when ring_type is a Completion ring.
8508 	 * This value indicates what interrupt mode should be used on
8509 	 * this completion ring. Note: In the legacy interrupt mode, no
8510 	 * more than 16 completion rings are allowed.
8511 	 */
8512 	/* Legacy INTA */
8513 	#define HWRM_RING_ALLOC_INPUT_INT_MODE_LEGACY	UINT32_C(0x0)
8514 	/* Reserved */
8515 	#define HWRM_RING_ALLOC_INPUT_INT_MODE_RSVD	UINT32_C(0x1)
8516 	/* MSI-X */
8517 	#define HWRM_RING_ALLOC_INPUT_INT_MODE_MSIX	UINT32_C(0x2)
8518 	/* No Interrupt - Polled mode */
8519 	#define HWRM_RING_ALLOC_INPUT_INT_MODE_POLL	UINT32_C(0x3)
8520 	uint8_t unused_8[3];
8521 } __attribute__((packed));
8522 
8523 /* Output	(16 bytes) */
8524 struct hwrm_ring_alloc_output {
8525 	uint16_t error_code;
8526 	/*
8527 	 * Pass/Fail or error type Note: receiver to verify the in
8528 	 * parameters, and fail the call with an error when appropriate
8529 	 */
8530 	uint16_t req_type;
8531 	/* This field returns the type of original request. */
8532 	uint16_t seq_id;
8533 	/* This field provides original sequence number of the command. */
8534 	uint16_t resp_len;
8535 	/*
8536 	 * This field is the length of the response in bytes. The last
8537 	 * byte of the response is a valid flag that will read as '1'
8538 	 * when the command has been completely written to memory.
8539 	 */
8540 	uint16_t ring_id;
8541 	/*
8542 	 * Physical number of ring allocated. This value shall be unique
8543 	 * for a ring type.
8544 	 */
8545 	uint16_t logical_ring_id;
8546 	/* Logical number of ring allocated. */
8547 	uint8_t unused_0;
8548 	uint8_t unused_1;
8549 	uint8_t unused_2;
8550 	uint8_t valid;
8551 	/*
8552 	 * This field is used in Output records to indicate that the
8553 	 * output is completely written to RAM. This field should be
8554 	 * read as '1' to indicate that the output has been completely
8555 	 * written. When writing a command completion or response to an
8556 	 * internal processor, the order of writes has to be such that
8557 	 * this field is written last.
8558 	 */
8559 } __attribute__((packed));
8560 
8561 /* hwrm_ring_free */
8562 /*
8563  * Description: This command is used to free a ring and associated resources.
8564  * With QoS and DCBx agents, it is possible the traffic classes will be moved
8565  * from one CoS queue to another. When this occurs, the driver shall call
8566  * 'hwrm_ring_free' to free the allocated rings and then call 'hwrm_ring_alloc'
8567  * to re-allocate each ring and assign it to a new CoS queue. hwrm_ring_free
8568  * shall be called on a ring only after it has been idle for 500ms or more and
8569  * no frames have been posted to the ring during this time. All frames queued
8570  * for transmission shall be completed and at least 500ms time elapsed from the
8571  * last completion before calling this command.
8572  */
8573 /* Input	(24 bytes) */
8574 struct hwrm_ring_free_input {
8575 	uint16_t req_type;
8576 	/*
8577 	 * This value indicates what type of request this is. The format
8578 	 * for the rest of the command is determined by this field.
8579 	 */
8580 	uint16_t cmpl_ring;
8581 	/*
8582 	 * This value indicates the what completion ring the request
8583 	 * will be optionally completed on. If the value is -1, then no
8584 	 * CR completion will be generated. Any other value must be a
8585 	 * valid CR ring_id value for this function.
8586 	 */
8587 	uint16_t seq_id;
8588 	/* This value indicates the command sequence number. */
8589 	uint16_t target_id;
8590 	/*
8591 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
8592 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
8593 	 * - HWRM
8594 	 */
8595 	uint64_t resp_addr;
8596 	/*
8597 	 * This is the host address where the response will be written
8598 	 * when the request is complete. This area must be 16B aligned
8599 	 * and must be cleared to zero before the request is made.
8600 	 */
8601 	uint8_t ring_type;
8602 	/* Ring Type. */
8603 	/* L2 Completion Ring	(CR) */
8604 	#define HWRM_RING_FREE_INPUT_RING_TYPE_L2_CMPL	UINT32_C(0x0)
8605 	/* TX Ring	(TR) */
8606 	#define HWRM_RING_FREE_INPUT_RING_TYPE_TX	UINT32_C(0x1)
8607 	/* RX Ring	(RR) */
8608 	#define HWRM_RING_FREE_INPUT_RING_TYPE_RX	UINT32_C(0x2)
8609 	/* RoCE Notification Completion Ring	(ROCE_CR) */
8610 	#define HWRM_RING_FREE_INPUT_RING_TYPE_ROCE_CMPL	UINT32_C(0x3)
8611 	uint8_t unused_0;
8612 	uint16_t ring_id;
8613 	/* Physical number of ring allocated. */
8614 	uint32_t unused_1;
8615 } __attribute__((packed));
8616 
8617 /* Output	(16 bytes) */
8618 struct hwrm_ring_free_output {
8619 	uint16_t error_code;
8620 	/*
8621 	 * Pass/Fail or error type Note: receiver to verify the in
8622 	 * parameters, and fail the call with an error when appropriate
8623 	 */
8624 	uint16_t req_type;
8625 	/* This field returns the type of original request. */
8626 	uint16_t seq_id;
8627 	/* This field provides original sequence number of the command. */
8628 	uint16_t resp_len;
8629 	/*
8630 	 * This field is the length of the response in bytes. The last
8631 	 * byte of the response is a valid flag that will read as '1'
8632 	 * when the command has been completely written to memory.
8633 	 */
8634 	uint32_t unused_0;
8635 	uint8_t unused_1;
8636 	uint8_t unused_2;
8637 	uint8_t unused_3;
8638 	uint8_t valid;
8639 	/*
8640 	 * This field is used in Output records to indicate that the
8641 	 * output is completely written to RAM. This field should be
8642 	 * read as '1' to indicate that the output has been completely
8643 	 * written. When writing a command completion or response to an
8644 	 * internal processor, the order of writes has to be such that
8645 	 * this field is written last.
8646 	 */
8647 } __attribute__((packed));
8648 
8649 /* hwrm_ring_grp_alloc */
8650 /*
8651  * Description: This API allocates and does basic preparation for a ring group.
8652  */
8653 /* Input	(24 bytes) */
8654 struct hwrm_ring_grp_alloc_input {
8655 	uint16_t req_type;
8656 	/*
8657 	 * This value indicates what type of request this is. The format
8658 	 * for the rest of the command is determined by this field.
8659 	 */
8660 	uint16_t cmpl_ring;
8661 	/*
8662 	 * This value indicates the what completion ring the request
8663 	 * will be optionally completed on. If the value is -1, then no
8664 	 * CR completion will be generated. Any other value must be a
8665 	 * valid CR ring_id value for this function.
8666 	 */
8667 	uint16_t seq_id;
8668 	/* This value indicates the command sequence number. */
8669 	uint16_t target_id;
8670 	/*
8671 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
8672 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
8673 	 * - HWRM
8674 	 */
8675 	uint64_t resp_addr;
8676 	/*
8677 	 * This is the host address where the response will be written
8678 	 * when the request is complete. This area must be 16B aligned
8679 	 * and must be cleared to zero before the request is made.
8680 	 */
8681 	uint16_t cr;
8682 	/* This value identifies the CR associated with the ring group. */
8683 	uint16_t rr;
8684 	/* This value identifies the main RR associated with the ring group. */
8685 	uint16_t ar;
8686 	/*
8687 	 * This value identifies the aggregation RR associated with the
8688 	 * ring group. If this value is 0xFF...	(All Fs), then no
8689 	 * Aggregation ring will be set.
8690 	 */
8691 	uint16_t sc;
8692 	/*
8693 	 * This value identifies the statistics context associated with
8694 	 * the ring group.
8695 	 */
8696 } __attribute__((packed));
8697 
8698 /* Output	(16 bytes) */
8699 struct hwrm_ring_grp_alloc_output {
8700 	uint16_t error_code;
8701 	/*
8702 	 * Pass/Fail or error type Note: receiver to verify the in
8703 	 * parameters, and fail the call with an error when appropriate
8704 	 */
8705 	uint16_t req_type;
8706 	/* This field returns the type of original request. */
8707 	uint16_t seq_id;
8708 	/* This field provides original sequence number of the command. */
8709 	uint16_t resp_len;
8710 	/*
8711 	 * This field is the length of the response in bytes. The last
8712 	 * byte of the response is a valid flag that will read as '1'
8713 	 * when the command has been completely written to memory.
8714 	 */
8715 	uint32_t ring_group_id;
8716 	/*
8717 	 * This is the ring group ID value. Use this value to program
8718 	 * the default ring group for the VNIC or as table entries in an
8719 	 * RSS/COS context.
8720 	 */
8721 	uint8_t unused_0;
8722 	uint8_t unused_1;
8723 	uint8_t unused_2;
8724 	uint8_t valid;
8725 	/*
8726 	 * This field is used in Output records to indicate that the
8727 	 * output is completely written to RAM. This field should be
8728 	 * read as '1' to indicate that the output has been completely
8729 	 * written. When writing a command completion or response to an
8730 	 * internal processor, the order of writes has to be such that
8731 	 * this field is written last.
8732 	 */
8733 } __attribute__((packed));
8734 
8735 /* hwrm_ring_grp_free */
8736 /*
8737  * Description: This API frees a ring group and associated resources. # If a
8738  * ring in the ring group is reset or free, then the associated rings in the
8739  * ring group shall also be reset/free using hwrm_ring_free. # A function driver
8740  * shall always use hwrm_ring_grp_free after freeing all rings in a group. # As
8741  * a part of executing this command, the HWRM shall reset all associated ring
8742  * group resources.
8743  */
8744 /* Input	(24 bytes) */
8745 struct hwrm_ring_grp_free_input {
8746 	uint16_t req_type;
8747 	/*
8748 	 * This value indicates what type of request this is. The format
8749 	 * for the rest of the command is determined by this field.
8750 	 */
8751 	uint16_t cmpl_ring;
8752 	/*
8753 	 * This value indicates the what completion ring the request
8754 	 * will be optionally completed on. If the value is -1, then no
8755 	 * CR completion will be generated. Any other value must be a
8756 	 * valid CR ring_id value for this function.
8757 	 */
8758 	uint16_t seq_id;
8759 	/* This value indicates the command sequence number. */
8760 	uint16_t target_id;
8761 	/*
8762 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
8763 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
8764 	 * - HWRM
8765 	 */
8766 	uint64_t resp_addr;
8767 	/*
8768 	 * This is the host address where the response will be written
8769 	 * when the request is complete. This area must be 16B aligned
8770 	 * and must be cleared to zero before the request is made.
8771 	 */
8772 	uint32_t ring_group_id;
8773 	/* This is the ring group ID value. */
8774 	uint32_t unused_0;
8775 } __attribute__((packed));
8776 
8777 /* Output	(16 bytes) */
8778 struct hwrm_ring_grp_free_output {
8779 	uint16_t error_code;
8780 	/*
8781 	 * Pass/Fail or error type Note: receiver to verify the in
8782 	 * parameters, and fail the call with an error when appropriate
8783 	 */
8784 	uint16_t req_type;
8785 	/* This field returns the type of original request. */
8786 	uint16_t seq_id;
8787 	/* This field provides original sequence number of the command. */
8788 	uint16_t resp_len;
8789 	/*
8790 	 * This field is the length of the response in bytes. The last
8791 	 * byte of the response is a valid flag that will read as '1'
8792 	 * when the command has been completely written to memory.
8793 	 */
8794 	uint32_t unused_0;
8795 	uint8_t unused_1;
8796 	uint8_t unused_2;
8797 	uint8_t unused_3;
8798 	uint8_t valid;
8799 	/*
8800 	 * This field is used in Output records to indicate that the
8801 	 * output is completely written to RAM. This field should be
8802 	 * read as '1' to indicate that the output has been completely
8803 	 * written. When writing a command completion or response to an
8804 	 * internal processor, the order of writes has to be such that
8805 	 * this field is written last.
8806 	 */
8807 } __attribute__((packed));
8808 
8809 /* hwrm_cfa_l2_filter_alloc */
8810 /*
8811  * Description: An L2 filter is a filter resource that is used to identify a
8812  * vnic or ring for a packet based on layer 2 fields. Layer 2 fields for
8813  * encapsulated packets include both outer L2 header and/or inner l2 header of
8814  * encapsulated packet. The L2 filter resource covers the following OS specific
8815  * L2 filters. Linux/FreeBSD (per function): # Broadcast enable/disable # List
8816  * of individual multicast filters # All multicast enable/disable filter #
8817  * Unicast filters # Promiscuous mode VMware: # Broadcast enable/disable (per
8818  * physical function) # All multicast enable/disable	(per function) # Unicast
8819  * filters per ring or vnic # Promiscuous mode per PF Windows: # Broadcast
8820  * enable/disable (per physical function) # List of individual multicast filters
8821  * (Driver needs to advertise the maximum number of filters supported) # All
8822  * multicast enable/disable per physical function # Unicast filters per vnic #
8823  * Promiscuous mode per PF Implementation notes on the use of VNIC in this
8824  * command: # By default, these filters belong to default vnic for the function.
8825  * # Once these filters are set up, only destination VNIC can be modified. # If
8826  * the destination VNIC is not specified in this command, then the HWRM shall
8827  * only create an l2 context id. HWRM Implementation notes for multicast
8828  * filters: # The hwrm_filter_alloc command can be used to set up multicast
8829  * filters (perfect match or partial match). Each individual function driver can
8830  * set up multicast filters independently. # The HWRM needs to keep track of
8831  * multicast filters set up by function drivers and maintain multicast group
8832  * replication records to enable a subset of functions to receive traffic for a
8833  * specific multicast address. # When a specific multicast filter cannot be set,
8834  * the HWRM shall return an error. In this error case, the driver should fall
8835  * back to using one general filter	(rather than specific) for all multicast
8836  * traffic. # When the SR-IOV is enabled, the HWRM needs to additionally track
8837  * source knockout per multicast group record. Examples of setting unicast
8838  * filters: For a unicast MAC based filter, one can use a combination of the
8839  * fields and masks provided in this command to set up the filter. Below are
8840  * some examples: # MAC + no VLAN filter: This filter is used to identify
8841  * traffic that does not contain any VLAN tags and matches destination	(or
8842  * source) MAC address. This filter can be set up by setting only l2_addr field
8843  * to be a valid field. All other fields are not valid. The following value is
8844  * set for l2_addr. l2_addr = MAC # MAC + Any VLAN filter: This filter is used
8845  * to identify traffic that carries single VLAN tag and matches	(destination or
8846  * source) MAC address. This filter can be set up by setting only l2_addr and
8847  * l2_ovlan_mask fields to be valid fields. All other fields are not valid. The
8848  * following values are set for those two valid fields. l2_addr = MAC,
8849  * l2_ovlan_mask = 0xFFFF # MAC + no VLAN or VLAN ID=0: This filter is used to
8850  * identify untagged traffic that does not contain any VLAN tags or a VLAN tag
8851  * with VLAN ID = 0 and matches destination (or source) MAC address. This filter
8852  * can be set up by setting only l2_addr and l2_ovlan fields to be valid fields.
8853  * All other fields are not valid. The following value are set for l2_addr and
8854  * l2_ovlan. l2_addr = MAC, l2_ovlan = 0x0 # MAC + no VLAN or any VLAN: This
8855  * filter is used to identify traffic that contains zero or 1 VLAN tag and
8856  * matches destination	(or source) MAC address. This filter can be set up by
8857  * setting only l2_addr, l2_ovlan, and l2_mask fields to be valid fields. All
8858  * other fields are not valid. The following value are set for l2_addr,
8859  * l2_ovlan, and l2_mask fields. l2_addr = MAC, l2_ovlan = 0x0, l2_ovlan_mask =
8860  * 0xFFFF # MAC + VLAN ID filter: This filter can be set up by setting only
8861  * l2_addr, l2_ovlan, and l2_ovlan_mask fields to be valid fields. All other
8862  * fields are not valid. The following values are set for those three valid
8863  * fields. l2_addr = MAC, l2_ovlan = VLAN ID, l2_ovlan_mask = 0xF000
8864  */
8865 /* Input	(96 bytes) */
8866 struct hwrm_cfa_l2_filter_alloc_input {
8867 	uint16_t req_type;
8868 	/*
8869 	 * This value indicates what type of request this is. The format
8870 	 * for the rest of the command is determined by this field.
8871 	 */
8872 	uint16_t cmpl_ring;
8873 	/*
8874 	 * This value indicates the what completion ring the request
8875 	 * will be optionally completed on. If the value is -1, then no
8876 	 * CR completion will be generated. Any other value must be a
8877 	 * valid CR ring_id value for this function.
8878 	 */
8879 	uint16_t seq_id;
8880 	/* This value indicates the command sequence number. */
8881 	uint16_t target_id;
8882 	/*
8883 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
8884 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
8885 	 * - HWRM
8886 	 */
8887 	uint64_t resp_addr;
8888 	/*
8889 	 * This is the host address where the response will be written
8890 	 * when the request is complete. This area must be 16B aligned
8891 	 * and must be cleared to zero before the request is made.
8892 	 */
8893 	uint32_t flags;
8894 	/*
8895 	 * Enumeration denoting the RX, TX type of the resource. This
8896 	 * enumeration is used for resources that are similar for both
8897 	 * TX and RX paths of the chip.
8898 	 */
8899 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH	UINT32_C(0x1)
8900 	/* tx path */
8901 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_TX	\
8902 		(UINT32_C(0x0) << 0)
8903 	/* rx path */
8904 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX	\
8905 		(UINT32_C(0x1) << 0)
8906 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_LAST \
8907 		CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX
8908 	/*
8909 	 * Setting of this flag indicates the applicability to the
8910 	 * loopback path.
8911 	 */
8912 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK	UINT32_C(0x2)
8913 	/*
8914 	 * Setting of this flag indicates drop action. If this flag is
8915 	 * not set, then it should be considered accept action.
8916 	 */
8917 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_DROP	UINT32_C(0x4)
8918 	/*
8919 	 * If this flag is set, all t_l2_* fields are invalid and they
8920 	 * should not be specified. If this flag is set, then l2_*
8921 	 * fields refer to fields of outermost L2 header.
8922 	 */
8923 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_OUTERMOST UINT32_C(0x8)
8924 	uint32_t enables;
8925 	/* This bit must be '1' for the l2_addr field to be configured. */
8926 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR UINT32_C(0x1)
8927 	/* This bit must be '1' for the l2_addr_mask field to be configured. */
8928 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR_MASK	\
8929 		UINT32_C(0x2)
8930 	/* This bit must be '1' for the l2_ovlan field to be configured. */
8931 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_OVLAN	UINT32_C(0x4)
8932 	/*
8933 	 * This bit must be '1' for the l2_ovlan_mask field to be
8934 	 * configured.
8935 	 */
8936 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_OVLAN_MASK	 \
8937 		UINT32_C(0x8)
8938 	/* This bit must be '1' for the l2_ivlan field to be configured. */
8939 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN	UINT32_C(0x10)
8940 	/*
8941 	 * This bit must be '1' for the l2_ivlan_mask field to be
8942 	 * configured.
8943 	 */
8944 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN_MASK	 \
8945 		UINT32_C(0x20)
8946 	/* This bit must be '1' for the t_l2_addr field to be configured. */
8947 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_ADDR UINT32_C(0x40)
8948 	/*
8949 	 * This bit must be '1' for the t_l2_addr_mask field to be
8950 	 * configured.
8951 	 */
8952 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_ADDR_MASK	\
8953 		UINT32_C(0x80)
8954 	/* This bit must be '1' for the t_l2_ovlan field to be configured. */
8955 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_OVLAN	\
8956 		UINT32_C(0x100)
8957 	/*
8958 	 * This bit must be '1' for the t_l2_ovlan_mask field to be
8959 	 * configured.
8960 	 */
8961 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_OVLAN_MASK	\
8962 		UINT32_C(0x200)
8963 	/* This bit must be '1' for the t_l2_ivlan field to be configured. */
8964 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_IVLAN	\
8965 		UINT32_C(0x400)
8966 	/*
8967 	 * This bit must be '1' for the t_l2_ivlan_mask field to be
8968 	 * configured.
8969 	 */
8970 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_IVLAN_MASK	\
8971 		UINT32_C(0x800)
8972 	/* This bit must be '1' for the src_type field to be configured. */
8973 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_SRC_TYPE	UINT32_C(0x1000)
8974 	/* This bit must be '1' for the src_id field to be configured. */
8975 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_SRC_ID UINT32_C(0x2000)
8976 	/* This bit must be '1' for the tunnel_type field to be configured. */
8977 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE	\
8978 		UINT32_C(0x4000)
8979 	/* This bit must be '1' for the dst_id field to be configured. */
8980 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_DST_ID UINT32_C(0x8000)
8981 	/*
8982 	 * This bit must be '1' for the mirror_vnic_id field to be
8983 	 * configured.
8984 	 */
8985 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID	\
8986 		UINT32_C(0x10000)
8987 	uint8_t l2_addr[6];
8988 	/*
8989 	 * This value sets the match value for the L2 MAC address.
8990 	 * Destination MAC address for RX path. Source MAC address for
8991 	 * TX path.
8992 	 */
8993 	uint8_t unused_0;
8994 	uint8_t unused_1;
8995 	uint8_t l2_addr_mask[6];
8996 	/*
8997 	 * This value sets the mask value for the L2 address. A value of
8998 	 * 0 will mask the corresponding bit from compare.
8999 	 */
9000 	uint16_t l2_ovlan;
9001 	/* This value sets VLAN ID value for outer VLAN. */
9002 	uint16_t l2_ovlan_mask;
9003 	/*
9004 	 * This value sets the mask value for the ovlan id. A value of 0
9005 	 * will mask the corresponding bit from compare.
9006 	 */
9007 	uint16_t l2_ivlan;
9008 	/* This value sets VLAN ID value for inner VLAN. */
9009 	uint16_t l2_ivlan_mask;
9010 	/*
9011 	 * This value sets the mask value for the ivlan id. A value of 0
9012 	 * will mask the corresponding bit from compare.
9013 	 */
9014 	uint8_t unused_2;
9015 	uint8_t unused_3;
9016 	uint8_t t_l2_addr[6];
9017 	/*
9018 	 * This value sets the match value for the tunnel L2 MAC
9019 	 * address. Destination MAC address for RX path. Source MAC
9020 	 * address for TX path.
9021 	 */
9022 	uint8_t unused_4;
9023 	uint8_t unused_5;
9024 	uint8_t t_l2_addr_mask[6];
9025 	/*
9026 	 * This value sets the mask value for the tunnel L2 address. A
9027 	 * value of 0 will mask the corresponding bit from compare.
9028 	 */
9029 	uint16_t t_l2_ovlan;
9030 	/* This value sets VLAN ID value for tunnel outer VLAN. */
9031 	uint16_t t_l2_ovlan_mask;
9032 	/*
9033 	 * This value sets the mask value for the tunnel ovlan id. A
9034 	 * value of 0 will mask the corresponding bit from compare.
9035 	 */
9036 	uint16_t t_l2_ivlan;
9037 	/* This value sets VLAN ID value for tunnel inner VLAN. */
9038 	uint16_t t_l2_ivlan_mask;
9039 	/*
9040 	 * This value sets the mask value for the tunnel ivlan id. A
9041 	 * value of 0 will mask the corresponding bit from compare.
9042 	 */
9043 	uint8_t src_type;
9044 	/* This value identifies the type of source of the packet. */
9045 	/* Network port */
9046 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_NPORT	UINT32_C(0x0)
9047 	/* Physical function */
9048 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_PF	UINT32_C(0x1)
9049 	/* Virtual function */
9050 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_VF	UINT32_C(0x2)
9051 	/* Virtual NIC of a function */
9052 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_VNIC	UINT32_C(0x3)
9053 	/* Embedded processor for CFA management */
9054 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_KONG	UINT32_C(0x4)
9055 	/* Embedded processor for OOB management */
9056 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_APE	UINT32_C(0x5)
9057 	/* Embedded processor for RoCE */
9058 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_BONO	UINT32_C(0x6)
9059 	/* Embedded processor for network proxy functions */
9060 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_TANG	UINT32_C(0x7)
9061 	uint8_t unused_6;
9062 	uint32_t src_id;
9063 	/*
9064 	 * This value is the id of the source. For a network port, it
9065 	 * represents port_id. For a physical function, it represents
9066 	 * fid. For a virtual function, it represents vf_id. For a vnic,
9067 	 * it represents vnic_id. For embedded processors, this id is
9068 	 * not valid. Notes: 1. The function ID is implied if it src_id
9069 	 * is not provided for a src_type that is either
9070 	 */
9071 	uint8_t tunnel_type;
9072 	/* Tunnel Type. */
9073 	/* Non-tunnel */
9074 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
9075 		UINT32_C(0x0)
9076 	/* Virtual eXtensible Local Area Network	(VXLAN) */
9077 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
9078 		UINT32_C(0x1)
9079 	/*
9080 	 * Network Virtualization Generic Routing
9081 	 * Encapsulation	(NVGRE)
9082 	 */
9083 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
9084 		UINT32_C(0x2)
9085 	/*
9086 	 * Generic Routing Encapsulation	(GRE) inside
9087 	 * Ethernet payload
9088 	 */
9089 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE UINT32_C(0x3)
9090 	/* IP in IP */
9091 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP	UINT32_C(0x4)
9092 	/* Generic Network Virtualization Encapsulation	(Geneve) */
9093 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE UINT32_C(0x5)
9094 	/* Multi-Protocol Lable Switching	(MPLS) */
9095 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS	UINT32_C(0x6)
9096 	/* Stateless Transport Tunnel	(STT) */
9097 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT	UINT32_C(0x7)
9098 	/*
9099 	 * Generic Routing Encapsulation	(GRE) inside IP
9100 	 * datagram payload
9101 	 */
9102 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE UINT32_C(0x8)
9103 	/*
9104 	 * IPV4 over virtual eXtensible Local Area
9105 	 * Network (IPV4oVXLAN)
9106 	 */
9107 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
9108 		UINT32_C(0x9)
9109 	/* Any tunneled traffic */
9110 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
9111 		UINT32_C(0xff)
9112 	uint8_t unused_7;
9113 	uint16_t dst_id;
9114 	/*
9115 	 * If set, this value shall represent the Logical VNIC ID of the
9116 	 * destination VNIC for the RX path and network port id of the
9117 	 * destination port for the TX path.
9118 	 */
9119 	uint16_t mirror_vnic_id;
9120 	/* Logical VNIC ID of the VNIC where traffic is mirrored. */
9121 	uint8_t pri_hint;
9122 	/*
9123 	 * This hint is provided to help in placing the filter in the
9124 	 * filter table.
9125 	 */
9126 	/* No preference */
9127 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_NO_PREFER \
9128 		UINT32_C(0x0)
9129 	/* Above the given filter */
9130 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_ABOVE_FILTER \
9131 		UINT32_C(0x1)
9132 	/* Below the given filter */
9133 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_BELOW_FILTER \
9134 		UINT32_C(0x2)
9135 	/* As high as possible */
9136 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MAX	UINT32_C(0x3)
9137 	/* As low as possible */
9138 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MIN	UINT32_C(0x4)
9139 	uint8_t unused_8;
9140 	uint32_t unused_9;
9141 	uint64_t l2_filter_id_hint;
9142 	/*
9143 	 * This is the ID of the filter that goes along with the
9144 	 * pri_hint. This field is valid only for the following values.
9145 	 * 1 - Above the given filter 2 - Below the given filter
9146 	 */
9147 } __attribute__((packed));
9148 
9149 /* Output	(24 bytes) */
9150 struct hwrm_cfa_l2_filter_alloc_output {
9151 	uint16_t error_code;
9152 	/*
9153 	 * Pass/Fail or error type Note: receiver to verify the in
9154 	 * parameters, and fail the call with an error when appropriate
9155 	 */
9156 	uint16_t req_type;
9157 	/* This field returns the type of original request. */
9158 	uint16_t seq_id;
9159 	/* This field provides original sequence number of the command. */
9160 	uint16_t resp_len;
9161 	/*
9162 	 * This field is the length of the response in bytes. The last
9163 	 * byte of the response is a valid flag that will read as '1'
9164 	 * when the command has been completely written to memory.
9165 	 */
9166 	uint64_t l2_filter_id;
9167 	/*
9168 	 * This value identifies a set of CFA data structures used for
9169 	 * an L2 context.
9170 	 */
9171 	uint32_t flow_id;
9172 	/*
9173 	 * This is the ID of the flow associated with this filter. This
9174 	 * value shall be used to match and associate the flow
9175 	 * identifier returned in completion records. A value of
9176 	 * 0xFFFFFFFF shall indicate no flow id.
9177 	 */
9178 	uint8_t unused_0;
9179 	uint8_t unused_1;
9180 	uint8_t unused_2;
9181 	uint8_t valid;
9182 	/*
9183 	 * This field is used in Output records to indicate that the
9184 	 * output is completely written to RAM. This field should be
9185 	 * read as '1' to indicate that the output has been completely
9186 	 * written. When writing a command completion or response to an
9187 	 * internal processor, the order of writes has to be such that
9188 	 * this field is written last.
9189 	 */
9190 } __attribute__((packed));
9191 
9192 /* hwrm_cfa_l2_filter_free */
9193 /*
9194  * Description: Free a L2 filter. The HWRM shall free all associated filter
9195  * resources with the L2 filter.
9196  */
9197 /* Input	(24 bytes) */
9198 struct hwrm_cfa_l2_filter_free_input {
9199 	uint16_t req_type;
9200 	/*
9201 	 * This value indicates what type of request this is. The format
9202 	 * for the rest of the command is determined by this field.
9203 	 */
9204 	uint16_t cmpl_ring;
9205 	/*
9206 	 * This value indicates the what completion ring the request
9207 	 * will be optionally completed on. If the value is -1, then no
9208 	 * CR completion will be generated. Any other value must be a
9209 	 * valid CR ring_id value for this function.
9210 	 */
9211 	uint16_t seq_id;
9212 	/* This value indicates the command sequence number. */
9213 	uint16_t target_id;
9214 	/*
9215 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
9216 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
9217 	 * - HWRM
9218 	 */
9219 	uint64_t resp_addr;
9220 	/*
9221 	 * This is the host address where the response will be written
9222 	 * when the request is complete. This area must be 16B aligned
9223 	 * and must be cleared to zero before the request is made.
9224 	 */
9225 	uint64_t l2_filter_id;
9226 	/*
9227 	 * This value identifies a set of CFA data structures used for
9228 	 * an L2 context.
9229 	 */
9230 } __attribute__((packed));
9231 
9232 /* Output	(16 bytes) */
9233 struct hwrm_cfa_l2_filter_free_output {
9234 	uint16_t error_code;
9235 	/*
9236 	 * Pass/Fail or error type Note: receiver to verify the in
9237 	 * parameters, and fail the call with an error when appropriate
9238 	 */
9239 	uint16_t req_type;
9240 	/* This field returns the type of original request. */
9241 	uint16_t seq_id;
9242 	/* This field provides original sequence number of the command. */
9243 	uint16_t resp_len;
9244 	/*
9245 	 * This field is the length of the response in bytes. The last
9246 	 * byte of the response is a valid flag that will read as '1'
9247 	 * when the command has been completely written to memory.
9248 	 */
9249 	uint32_t unused_0;
9250 	uint8_t unused_1;
9251 	uint8_t unused_2;
9252 	uint8_t unused_3;
9253 	uint8_t valid;
9254 	/*
9255 	 * This field is used in Output records to indicate that the
9256 	 * output is completely written to RAM. This field should be
9257 	 * read as '1' to indicate that the output has been completely
9258 	 * written. When writing a command completion or response to an
9259 	 * internal processor, the order of writes has to be such that
9260 	 * this field is written last.
9261 	 */
9262 } __attribute__((packed));
9263 
9264 /* hwrm_cfa_l2_filter_cfg */
9265 /* Description: Change the configuration of an existing L2 filter */
9266 /* Input	(40 bytes) */
9267 struct hwrm_cfa_l2_filter_cfg_input {
9268 	uint16_t req_type;
9269 	/*
9270 	 * This value indicates what type of request this is. The format
9271 	 * for the rest of the command is determined by this field.
9272 	 */
9273 	uint16_t cmpl_ring;
9274 	/*
9275 	 * This value indicates the what completion ring the request
9276 	 * will be optionally completed on. If the value is -1, then no
9277 	 * CR completion will be generated. Any other value must be a
9278 	 * valid CR ring_id value for this function.
9279 	 */
9280 	uint16_t seq_id;
9281 	/* This value indicates the command sequence number. */
9282 	uint16_t target_id;
9283 	/*
9284 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
9285 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
9286 	 * - HWRM
9287 	 */
9288 	uint64_t resp_addr;
9289 	/*
9290 	 * This is the host address where the response will be written
9291 	 * when the request is complete. This area must be 16B aligned
9292 	 * and must be cleared to zero before the request is made.
9293 	 */
9294 	uint32_t flags;
9295 	/*
9296 	 * Enumeration denoting the RX, TX type of the resource. This
9297 	 * enumeration is used for resources that are similar for both
9298 	 * TX and RX paths of the chip.
9299 	 */
9300 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH	UINT32_C(0x1)
9301 	/* tx path */
9302 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_TX \
9303 		(UINT32_C(0x0) << 0)
9304 	/* rx path */
9305 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_RX \
9306 		(UINT32_C(0x1) << 0)
9307 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_LAST \
9308 		CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_RX
9309 	/*
9310 	 * Setting of this flag indicates drop action. If this flag is
9311 	 * not set, then it should be considered accept action.
9312 	 */
9313 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_DROP	UINT32_C(0x2)
9314 	uint32_t enables;
9315 	/* This bit must be '1' for the dst_id field to be configured. */
9316 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_ENABLES_DST_ID	UINT32_C(0x1)
9317 	/*
9318 	 * This bit must be '1' for the new_mirror_vnic_id field to be
9319 	 * configured.
9320 	 */
9321 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID   \
9322 		UINT32_C(0x2)
9323 	uint64_t l2_filter_id;
9324 	/*
9325 	 * This value identifies a set of CFA data structures used for
9326 	 * an L2 context.
9327 	 */
9328 	uint32_t dst_id;
9329 	/*
9330 	 * If set, this value shall represent the Logical VNIC ID of the
9331 	 * destination VNIC for the RX path and network port id of the
9332 	 * destination port for the TX path.
9333 	 */
9334 	uint32_t new_mirror_vnic_id;
9335 	/* New Logical VNIC ID of the VNIC where traffic is mirrored. */
9336 } __attribute__((packed));
9337 
9338 /* Output	(16 bytes) */
9339 struct hwrm_cfa_l2_filter_cfg_output {
9340 	uint16_t error_code;
9341 	/*
9342 	 * Pass/Fail or error type Note: receiver to verify the in
9343 	 * parameters, and fail the call with an error when appropriate
9344 	 */
9345 	uint16_t req_type;
9346 	/* This field returns the type of original request. */
9347 	uint16_t seq_id;
9348 	/* This field provides original sequence number of the command. */
9349 	uint16_t resp_len;
9350 	/*
9351 	 * This field is the length of the response in bytes. The last
9352 	 * byte of the response is a valid flag that will read as '1'
9353 	 * when the command has been completely written to memory.
9354 	 */
9355 	uint32_t unused_0;
9356 	uint8_t unused_1;
9357 	uint8_t unused_2;
9358 	uint8_t unused_3;
9359 	uint8_t valid;
9360 	/*
9361 	 * This field is used in Output records to indicate that the
9362 	 * output is completely written to RAM. This field should be
9363 	 * read as '1' to indicate that the output has been completely
9364 	 * written. When writing a command completion or response to an
9365 	 * internal processor, the order of writes has to be such that
9366 	 * this field is written last.
9367 	 */
9368 } __attribute__((packed));
9369 
9370 /* hwrm_cfa_l2_set_rx_mask */
9371 /* Description: This command will set rx mask of the function. */
9372 /* Input	(56 bytes) */
9373 struct hwrm_cfa_l2_set_rx_mask_input {
9374 	uint16_t req_type;
9375 	/*
9376 	 * This value indicates what type of request this is. The format
9377 	 * for the rest of the command is determined by this field.
9378 	 */
9379 	uint16_t cmpl_ring;
9380 	/*
9381 	 * This value indicates the what completion ring the request
9382 	 * will be optionally completed on. If the value is -1, then no
9383 	 * CR completion will be generated. Any other value must be a
9384 	 * valid CR ring_id value for this function.
9385 	 */
9386 	uint16_t seq_id;
9387 	/* This value indicates the command sequence number. */
9388 	uint16_t target_id;
9389 	/*
9390 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
9391 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
9392 	 * - HWRM
9393 	 */
9394 	uint64_t resp_addr;
9395 	/*
9396 	 * This is the host address where the response will be written
9397 	 * when the request is complete. This area must be 16B aligned
9398 	 * and must be cleared to zero before the request is made.
9399 	 */
9400 	uint32_t vnic_id;
9401 	/* VNIC ID */
9402 	uint32_t mask;
9403 	/* Reserved for future use. */
9404 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_RESERVED	UINT32_C(0x1)
9405 	/*
9406 	 * When this bit is '1', the function is requested to accept
9407 	 * multi-cast packets specified by the multicast addr table.
9408 	 */
9409 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_MCAST	UINT32_C(0x2)
9410 	/*
9411 	 * When this bit is '1', the function is requested to accept all
9412 	 * multi-cast packets.
9413 	 */
9414 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ALL_MCAST	UINT32_C(0x4)
9415 	/*
9416 	 * When this bit is '1', the function is requested to accept
9417 	 * broadcast packets.
9418 	 */
9419 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_BCAST	UINT32_C(0x8)
9420 	/*
9421 	 * When this bit is '1', the function is requested to be put in
9422 	 * the promiscuous mode. The HWRM should accept any function to
9423 	 * set up promiscuous mode. The HWRM shall follow the semantics
9424 	 * below for the promiscuous mode support. # When partitioning
9425 	 * is not enabled on a port	(i.e. single PF on the port), then
9426 	 * the PF shall be allowed to be in the promiscuous mode. When
9427 	 * the PF is in the promiscuous mode, then it shall receive all
9428 	 * host bound traffic on that port. # When partitioning is
9429 	 * enabled on a port	(i.e. multiple PFs per port) and a PF on
9430 	 * that port is in the promiscuous mode, then the PF receives
9431 	 * all traffic within that partition as identified by a unique
9432 	 * identifier for the PF	(e.g. S-Tag). If a unique outer VLAN
9433 	 * for the PF is specified, then the setting of promiscuous mode
9434 	 * on that PF shall result in the PF receiving all host bound
9435 	 * traffic with matching outer VLAN. # A VF shall can be set in
9436 	 * the promiscuous mode. In the promiscuous mode, the VF does
9437 	 * not receive any traffic unless a unique outer VLAN for the VF
9438 	 * is specified. If a unique outer VLAN for the VF is specified,
9439 	 * then the setting of promiscuous mode on that VF shall result
9440 	 * in the VF receiving all host bound traffic with the matching
9441 	 * outer VLAN. # The HWRM shall allow the setting of promiscuous
9442 	 * mode on a function independently from the promiscuous mode
9443 	 * settings on other functions.
9444 	 */
9445 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_PROMISCUOUS UINT32_C(0x10)
9446 	/*
9447 	 * If this flag is set, the corresponding RX filters shall be
9448 	 * set up to cover multicast/broadcast filters for the outermost
9449 	 * Layer 2 destination MAC address field.
9450 	 */
9451 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_OUTERMOST	UINT32_C(0x20)
9452 	/*
9453 	 * If this flag is set, the corresponding RX filters shall be
9454 	 * set up to cover multicast/broadcast filters for the VLAN-
9455 	 * tagged packets that match the TPID and VID fields of VLAN
9456 	 * tags in the VLAN tag table specified in this command.
9457 	 */
9458 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_VLANONLY	UINT32_C(0x40)
9459 	/*
9460 	 * If this flag is set, the corresponding RX filters shall be
9461 	 * set up to cover multicast/broadcast filters for non-VLAN
9462 	 * tagged packets and VLAN-tagged packets that match the TPID
9463 	 * and VID fields of VLAN tags in the VLAN tag table specified
9464 	 * in this command.
9465 	 */
9466 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_VLAN_NONVLAN	UINT32_C(0x80)
9467 	/*
9468 	 * If this flag is set, the corresponding RX filters shall be
9469 	 * set up to cover multicast/broadcast filters for non-VLAN
9470 	 * tagged packets and VLAN-tagged packets matching any VLAN tag.
9471 	 * If this flag is set, then the HWRM shall ignore VLAN tags
9472 	 * specified in vlan_tag_tbl. If none of vlanonly, vlan_nonvlan,
9473 	 * and anyvlan_nonvlan flags is set, then the HWRM shall ignore
9474 	 * VLAN tags specified in vlan_tag_tbl. The HWRM client shall
9475 	 * set at most one flag out of vlanonly, vlan_nonvlan, and
9476 	 * anyvlan_nonvlan.
9477 	 */
9478 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ANYVLAN_NONVLAN	\
9479 		UINT32_C(0x100)
9480 	uint64_t mc_tbl_addr;
9481 	/* This is the address for mcast address tbl. */
9482 	uint32_t num_mc_entries;
9483 	/*
9484 	 * This value indicates how many entries in mc_tbl are valid.
9485 	 * Each entry is 6 bytes.
9486 	 */
9487 	uint32_t unused_0;
9488 	uint64_t vlan_tag_tbl_addr;
9489 	/*
9490 	 * This is the address for VLAN tag table. Each VLAN entry in
9491 	 * the table is 4 bytes of a VLAN tag including TPID, PCP, DEI,
9492 	 * and VID fields in network byte order.
9493 	 */
9494 	uint32_t num_vlan_tags;
9495 	/*
9496 	 * This value indicates how many entries in vlan_tag_tbl are
9497 	 * valid. Each entry is 4 bytes.
9498 	 */
9499 	uint32_t unused_1;
9500 } __attribute__((packed));
9501 
9502 /* Output	(16 bytes) */
9503 struct hwrm_cfa_l2_set_rx_mask_output {
9504 	uint16_t error_code;
9505 	/*
9506 	 * Pass/Fail or error type Note: receiver to verify the in
9507 	 * parameters, and fail the call with an error when appropriate
9508 	 */
9509 	uint16_t req_type;
9510 	/* This field returns the type of original request. */
9511 	uint16_t seq_id;
9512 	/* This field provides original sequence number of the command. */
9513 	uint16_t resp_len;
9514 	/*
9515 	 * This field is the length of the response in bytes. The last
9516 	 * byte of the response is a valid flag that will read as '1'
9517 	 * when the command has been completely written to memory.
9518 	 */
9519 	uint32_t unused_0;
9520 	uint8_t unused_1;
9521 	uint8_t unused_2;
9522 	uint8_t unused_3;
9523 	uint8_t valid;
9524 	/*
9525 	 * This field is used in Output records to indicate that the
9526 	 * output is completely written to RAM. This field should be
9527 	 * read as '1' to indicate that the output has been completely
9528 	 * written. When writing a command completion or response to an
9529 	 * internal processor, the order of writes has to be such that
9530 	 * this field is written last.
9531 	 */
9532 } __attribute__((packed));
9533 
9534 /* Command specific Error Codes (8 bytes) */
9535 struct hwrm_cfa_l2_set_rx_mask_cmd_err {
9536 	uint8_t code;
9537 	/*
9538 	 * command specific error codes that goes to the cmd_err field
9539 	 * in Common HWRM Error Response.
9540 	 */
9541 	/* Unknown error */
9542 	#define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_UNKNOWN UINT32_C(0x0)
9543 	/*
9544 	 * Unable to complete operation due to conflict
9545 	 * with Ntuple Filter
9546 	 */
9547 	#define \
9548 	HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_NTUPLE_FILTER_CONFLICT_ERR \
9549 	UINT32_C(0x1)
9550 	uint8_t unused_0[7];
9551 } __attribute__((packed));
9552 
9553 /* hwrm_cfa_vlan_antispoof_cfg */
9554 /* Description: Configures vlan anti-spoof filters for VF. */
9555 /* Input (32 bytes) */
9556 struct hwrm_cfa_vlan_antispoof_cfg_input {
9557 	uint16_t req_type;
9558 	/*
9559 	 * This value indicates what type of request this is. The format for the
9560 	 * rest of the command is determined by this field.
9561 	 */
9562 	uint16_t cmpl_ring;
9563 	/*
9564 	 * This value indicates the what completion ring the request will be
9565 	 * optionally completed on. If the value is -1, then no CR completion
9566 	 * will be generated. Any other value must be a valid CR ring_id value
9567 	 * for this function.
9568 	 */
9569 	uint16_t seq_id;
9570 	/* This value indicates the command sequence number. */
9571 	uint16_t target_id;
9572 	/*
9573 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function ids
9574 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF - HWRM
9575 	 */
9576 	uint64_t resp_addr;
9577 	/*
9578 	 * This is the host address where the response will be written when the
9579 	 * request is complete. This area must be 16B aligned and must be
9580 	 * cleared to zero before the request is made.
9581 	 */
9582 	uint16_t fid;
9583 	/*
9584 	 * Function ID of the function that is being configured. Only valid for
9585 	 * a VF FID configured by the PF.
9586 	 */
9587 	uint8_t unused_0;
9588 	uint8_t unused_1;
9589 	uint32_t num_vlan_entries;
9590 	/* Number of VLAN entries in the vlan_tag_mask_tbl. */
9591 	uint64_t vlan_tag_mask_tbl_addr;
9592 	/*
9593 	 * The vlan_tag_mask_tbl_addr is the DMA address of the VLAN antispoof
9594 	 * table. Each table entry contains the 16-bit TPID (0x8100 or 0x88a8
9595 	 * only), 16-bit VLAN ID, and a 16-bit mask, all in network order to
9596 	 * match hwrm_cfa_l2_set_rx_mask. For an individual VLAN entry, the mask
9597 	 * value should be 0xfff for the 12-bit VLAN ID.
9598 	 */
9599 };
9600 
9601 /* Output (16 bytes) */
9602 struct hwrm_cfa_vlan_antispoof_cfg_output {
9603 	uint16_t error_code;
9604 	/*
9605 	 * Pass/Fail or error type Note: receiver to verify the in parameters,
9606 	 * and fail the call with an error when appropriate
9607 	 */
9608 	uint16_t req_type;
9609 	/* This field returns the type of original request. */
9610 	uint16_t seq_id;
9611 	/* This field provides original sequence number of the command. */
9612 	uint16_t resp_len;
9613 	/*
9614 	 * This field is the length of the response in bytes. The last byte of
9615 	 * the response is a valid flag that will read as '1' when the command
9616 	 * has been completely written to memory.
9617 	 */
9618 	uint32_t unused_0;
9619 	uint8_t unused_1;
9620 	uint8_t unused_2;
9621 	uint8_t unused_3;
9622 	uint8_t valid;
9623 	/*
9624 	 * This field is used in Output records to indicate that the output is
9625 	 * completely written to RAM. This field should be read as '1' to
9626 	 * indicate that the output has been completely written. When writing a
9627 	 * command completion or response to an internal processor, the order of
9628 	 * writes has to be such that this field is written last.
9629 	 */
9630 };
9631 
9632 /* hwrm_cfa_ntuple_filter_alloc */
9633 /*
9634  * Description: This is a ntuple filter that uses fields from L4/L3 header and
9635  * optionally fields from L2. The ntuple filters apply to receive traffic only.
9636  * All L2/L3/L4 header fields are specified in network byte order. These filters
9637  * can be used for Receive Flow Steering (RFS). # For ethertype value, only
9638  * 0x0800 (IPv4) and 0x86dd (IPv6) shall be supported for ntuple filters. # If a
9639  * field specified in this command is not enabled as a valid field, then that
9640  * field shall not be used in matching packet header fields against this filter.
9641  */
9642 /* Input	(128 bytes) */
9643 struct hwrm_cfa_ntuple_filter_alloc_input {
9644 	uint16_t req_type;
9645 	/*
9646 	 * This value indicates what type of request this is. The format
9647 	 * for the rest of the command is determined by this field.
9648 	 */
9649 	uint16_t cmpl_ring;
9650 	/*
9651 	 * This value indicates the what completion ring the request
9652 	 * will be optionally completed on. If the value is -1, then no
9653 	 * CR completion will be generated. Any other value must be a
9654 	 * valid CR ring_id value for this function.
9655 	 */
9656 	uint16_t seq_id;
9657 	/* This value indicates the command sequence number. */
9658 	uint16_t target_id;
9659 	/*
9660 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
9661 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
9662 	 * - HWRM
9663 	 */
9664 	uint64_t resp_addr;
9665 	/*
9666 	 * This is the host address where the response will be written
9667 	 * when the request is complete. This area must be 16B aligned
9668 	 * and must be cleared to zero before the request is made.
9669 	 */
9670 	uint32_t flags;
9671 	/*
9672 	 * Setting of this flag indicates the applicability to the
9673 	 * loopback path.
9674 	 */
9675 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK	\
9676 		UINT32_C(0x1)
9677 	/*
9678 	 * Setting of this flag indicates drop action. If this flag is
9679 	 * not set, then it should be considered accept action.
9680 	 */
9681 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DROP	UINT32_C(0x2)
9682 	/*
9683 	 * Setting of this flag indicates that a meter is expected to be
9684 	 * attached to this flow. This hint can be used when choosing
9685 	 * the action record format required for the flow.
9686 	 */
9687 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_METER UINT32_C(0x4)
9688 	uint32_t enables;
9689 	/* This bit must be '1' for the l2_filter_id field to be configured. */
9690 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_L2_FILTER_ID   \
9691 		UINT32_C(0x1)
9692 	/* This bit must be '1' for the ethertype field to be configured. */
9693 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_ETHERTYPE	 \
9694 		UINT32_C(0x2)
9695 	/* This bit must be '1' for the tunnel_type field to be configured. */
9696 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE	\
9697 		UINT32_C(0x4)
9698 	/* This bit must be '1' for the src_macaddr field to be configured. */
9699 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_MACADDR	\
9700 		UINT32_C(0x8)
9701 	/* This bit must be '1' for the ipaddr_type field to be configured. */
9702 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_IPADDR_TYPE	\
9703 		UINT32_C(0x10)
9704 	/* This bit must be '1' for the src_ipaddr field to be configured. */
9705 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR	\
9706 		UINT32_C(0x20)
9707 	/*
9708 	 * This bit must be '1' for the src_ipaddr_mask field to be
9709 	 * configured.
9710 	 */
9711 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR_MASK \
9712 		UINT32_C(0x40)
9713 	/* This bit must be '1' for the dst_ipaddr field to be configured. */
9714 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR	\
9715 		UINT32_C(0x80)
9716 	/*
9717 	 * This bit must be '1' for the dst_ipaddr_mask field to be
9718 	 * configured.
9719 	 */
9720 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR_MASK \
9721 		UINT32_C(0x100)
9722 	/* This bit must be '1' for the ip_protocol field to be configured. */
9723 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_IP_PROTOCOL	\
9724 		UINT32_C(0x200)
9725 	/* This bit must be '1' for the src_port field to be configured. */
9726 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT	\
9727 		UINT32_C(0x400)
9728 	/*
9729 	 * This bit must be '1' for the src_port_mask field to be
9730 	 * configured.
9731 	 */
9732 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT_MASK  \
9733 		UINT32_C(0x800)
9734 	/* This bit must be '1' for the dst_port field to be configured. */
9735 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_PORT	\
9736 		UINT32_C(0x1000)
9737 	/*
9738 	 * This bit must be '1' for the dst_port_mask field to be
9739 	 * configured.
9740 	 */
9741 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_PORT_MASK  \
9742 		UINT32_C(0x2000)
9743 	/* This bit must be '1' for the pri_hint field to be configured. */
9744 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_PRI_HINT	\
9745 		UINT32_C(0x4000)
9746 	/*
9747 	 * This bit must be '1' for the ntuple_filter_id field to be
9748 	 * configured.
9749 	 */
9750 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_NTUPLE_FILTER_ID \
9751 		UINT32_C(0x8000)
9752 	/* This bit must be '1' for the dst_id field to be configured. */
9753 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_ID	\
9754 		UINT32_C(0x10000)
9755 	/*
9756 	 * This bit must be '1' for the mirror_vnic_id field to be
9757 	 * configured.
9758 	 */
9759 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
9760 		UINT32_C(0x20000)
9761 	/* This bit must be '1' for the dst_macaddr field to be configured. */
9762 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_MACADDR	\
9763 		UINT32_C(0x40000)
9764 	uint64_t l2_filter_id;
9765 	/*
9766 	 * This value identifies a set of CFA data structures used for
9767 	 * an L2 context.
9768 	 */
9769 	uint8_t src_macaddr[6];
9770 	/*
9771 	 * This value indicates the source MAC address in the Ethernet
9772 	 * header.
9773 	 */
9774 	uint16_t ethertype;
9775 	/* This value indicates the ethertype in the Ethernet header. */
9776 	uint8_t ip_addr_type;
9777 	/*
9778 	 * This value indicates the type of IP address. 4 - IPv4 6 -
9779 	 * IPv6 All others are invalid.
9780 	 */
9781 	/* invalid */
9782 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN \
9783 		UINT32_C(0x0)
9784 	/* IPv4 */
9785 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV4 \
9786 		UINT32_C(0x4)
9787 	/* IPv6 */
9788 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6 \
9789 		UINT32_C(0x6)
9790 	uint8_t ip_protocol;
9791 	/*
9792 	 * The value of protocol filed in IP header. Applies to UDP and
9793 	 * TCP traffic. 6 - TCP 17 - UDP
9794 	 */
9795 	/* invalid */
9796 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN \
9797 		UINT32_C(0x0)
9798 	/* TCP */
9799 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_TCP \
9800 		UINT32_C(0x6)
9801 	/* UDP */
9802 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP \
9803 		UINT32_C(0x11)
9804 	uint16_t dst_id;
9805 	/*
9806 	 * If set, this value shall represent the Logical VNIC ID of the
9807 	 * destination VNIC for the RX path and network port id of the
9808 	 * destination port for the TX path.
9809 	 */
9810 	uint16_t mirror_vnic_id;
9811 	/* Logical VNIC ID of the VNIC where traffic is mirrored. */
9812 	uint8_t tunnel_type;
9813 	/*
9814 	 * This value indicates the tunnel type for this filter. If this
9815 	 * field is not specified, then the filter shall apply to both
9816 	 * non-tunneled and tunneled packets. If this field conflicts
9817 	 * with the tunnel_type specified in the l2_filter_id, then the
9818 	 * HWRM shall return an error for this command.
9819 	 */
9820 	/* Non-tunnel */
9821 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
9822 		UINT32_C(0x0)
9823 	/* Virtual eXtensible Local Area Network	(VXLAN) */
9824 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
9825 		UINT32_C(0x1)
9826 	/*
9827 	 * Network Virtualization Generic Routing
9828 	 * Encapsulation	(NVGRE)
9829 	 */
9830 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
9831 		UINT32_C(0x2)
9832 	/*
9833 	 * Generic Routing Encapsulation	(GRE) inside
9834 	 * Ethernet payload
9835 	 */
9836 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
9837 		UINT32_C(0x3)
9838 	/* IP in IP */
9839 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
9840 		UINT32_C(0x4)
9841 	/* Generic Network Virtualization Encapsulation	(Geneve) */
9842 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
9843 		UINT32_C(0x5)
9844 	/* Multi-Protocol Lable Switching	(MPLS) */
9845 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
9846 		UINT32_C(0x6)
9847 	/* Stateless Transport Tunnel	(STT) */
9848 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT UINT32_C(0x7)
9849 	/*
9850 	 * Generic Routing Encapsulation	(GRE) inside IP
9851 	 * datagram payload
9852 	 */
9853 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
9854 		UINT32_C(0x8)
9855 	/* Any tunneled traffic */
9856 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
9857 		UINT32_C(0xff)
9858 	uint8_t pri_hint;
9859 	/*
9860 	 * This hint is provided to help in placing the filter in the
9861 	 * filter table.
9862 	 */
9863 	/* No preference */
9864 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_NO_PREFER \
9865 		UINT32_C(0x0)
9866 	/* Above the given filter */
9867 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_ABOVE UINT32_C(0x1)
9868 	/* Below the given filter */
9869 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_BELOW UINT32_C(0x2)
9870 	/* As high as possible */
9871 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_HIGHEST \
9872 		UINT32_C(0x3)
9873 	/* As low as possible */
9874 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LOWEST UINT32_C(0x4)
9875 	uint32_t src_ipaddr[4];
9876 	/*
9877 	 * The value of source IP address to be used in filtering. For
9878 	 * IPv4, first four bytes represent the IP address.
9879 	 */
9880 	uint32_t src_ipaddr_mask[4];
9881 	/*
9882 	 * The value of source IP address mask to be used in filtering.
9883 	 * For IPv4, first four bytes represent the IP address mask.
9884 	 */
9885 	uint32_t dst_ipaddr[4];
9886 	/*
9887 	 * The value of destination IP address to be used in filtering.
9888 	 * For IPv4, first four bytes represent the IP address.
9889 	 */
9890 	uint32_t dst_ipaddr_mask[4];
9891 	/*
9892 	 * The value of destination IP address mask to be used in
9893 	 * filtering. For IPv4, first four bytes represent the IP
9894 	 * address mask.
9895 	 */
9896 	uint16_t src_port;
9897 	/*
9898 	 * The value of source port to be used in filtering. Applies to
9899 	 * UDP and TCP traffic.
9900 	 */
9901 	uint16_t src_port_mask;
9902 	/*
9903 	 * The value of source port mask to be used in filtering.
9904 	 * Applies to UDP and TCP traffic.
9905 	 */
9906 	uint16_t dst_port;
9907 	/*
9908 	 * The value of destination port to be used in filtering.
9909 	 * Applies to UDP and TCP traffic.
9910 	 */
9911 	uint16_t dst_port_mask;
9912 	/*
9913 	 * The value of destination port mask to be used in filtering.
9914 	 * Applies to UDP and TCP traffic.
9915 	 */
9916 	uint64_t ntuple_filter_id_hint;
9917 	/* This is the ID of the filter that goes along with the pri_hint. */
9918 } __attribute__((packed));
9919 
9920 /* Output	(24 bytes) */
9921 struct hwrm_cfa_ntuple_filter_alloc_output {
9922 	uint16_t error_code;
9923 	/*
9924 	 * Pass/Fail or error type Note: receiver to verify the in
9925 	 * parameters, and fail the call with an error when appropriate
9926 	 */
9927 	uint16_t req_type;
9928 	/* This field returns the type of original request. */
9929 	uint16_t seq_id;
9930 	/* This field provides original sequence number of the command. */
9931 	uint16_t resp_len;
9932 	/*
9933 	 * This field is the length of the response in bytes. The last
9934 	 * byte of the response is a valid flag that will read as '1'
9935 	 * when the command has been completely written to memory.
9936 	 */
9937 	uint64_t ntuple_filter_id;
9938 	/* This value is an opaque id into CFA data structures. */
9939 	uint32_t flow_id;
9940 	/*
9941 	 * This is the ID of the flow associated with this filter. This
9942 	 * value shall be used to match and associate the flow
9943 	 * identifier returned in completion records. A value of
9944 	 * 0xFFFFFFFF shall indicate no flow id.
9945 	 */
9946 	uint8_t unused_0;
9947 	uint8_t unused_1;
9948 	uint8_t unused_2;
9949 	uint8_t valid;
9950 	/*
9951 	 * This field is used in Output records to indicate that the
9952 	 * output is completely written to RAM. This field should be
9953 	 * read as '1' to indicate that the output has been completely
9954 	 * written. When writing a command completion or response to an
9955 	 * internal processor, the order of writes has to be such that
9956 	 * this field is written last.
9957 	 */
9958 } __attribute__((packed));
9959 
9960 /* Command specific Error Codes (8 bytes) */
9961 struct hwrm_cfa_ntuple_filter_alloc_cmd_err {
9962 	uint8_t code;
9963 	/*
9964 	 * command specific error codes that goes to the cmd_err field
9965 	 * in Common HWRM Error Response.
9966 	 */
9967 	/* Unknown error */
9968 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_UNKNOWN UINT32_C(0x0)
9969 	/*
9970 	 * Unable to complete operation due to conflict
9971 	 * with Rx Mask VLAN
9972 	 */
9973 	#define \
9974 	HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_RX_MASK_VLAN_CONFLICT_ERR \
9975 	UINT32_C(0x1)
9976 	uint8_t unused_0[7];
9977 } __attribute__((packed));
9978 
9979 /* hwrm_cfa_ntuple_filter_free */
9980 /* Description: Free an ntuple filter */
9981 /* Input	(24 bytes) */
9982 struct hwrm_cfa_ntuple_filter_free_input {
9983 	uint16_t req_type;
9984 	/*
9985 	 * This value indicates what type of request this is. The format
9986 	 * for the rest of the command is determined by this field.
9987 	 */
9988 	uint16_t cmpl_ring;
9989 	/*
9990 	 * This value indicates the what completion ring the request
9991 	 * will be optionally completed on. If the value is -1, then no
9992 	 * CR completion will be generated. Any other value must be a
9993 	 * valid CR ring_id value for this function.
9994 	 */
9995 	uint16_t seq_id;
9996 	/* This value indicates the command sequence number. */
9997 	uint16_t target_id;
9998 	/*
9999 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
10000 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
10001 	 * - HWRM
10002 	 */
10003 	uint64_t resp_addr;
10004 	/*
10005 	 * This is the host address where the response will be written
10006 	 * when the request is complete. This area must be 16B aligned
10007 	 * and must be cleared to zero before the request is made.
10008 	 */
10009 	uint64_t ntuple_filter_id;
10010 	/* This value is an opaque id into CFA data structures. */
10011 } __attribute__((packed));
10012 
10013 /* Output	(16 bytes) */
10014 struct hwrm_cfa_ntuple_filter_free_output {
10015 	uint16_t error_code;
10016 	/*
10017 	 * Pass/Fail or error type Note: receiver to verify the in
10018 	 * parameters, and fail the call with an error when appropriate
10019 	 */
10020 	uint16_t req_type;
10021 	/* This field returns the type of original request. */
10022 	uint16_t seq_id;
10023 	/* This field provides original sequence number of the command. */
10024 	uint16_t resp_len;
10025 	/*
10026 	 * This field is the length of the response in bytes. The last
10027 	 * byte of the response is a valid flag that will read as '1'
10028 	 * when the command has been completely written to memory.
10029 	 */
10030 	uint32_t unused_0;
10031 	uint8_t unused_1;
10032 	uint8_t unused_2;
10033 	uint8_t unused_3;
10034 	uint8_t valid;
10035 	/*
10036 	 * This field is used in Output records to indicate that the
10037 	 * output is completely written to RAM. This field should be
10038 	 * read as '1' to indicate that the output has been completely
10039 	 * written. When writing a command completion or response to an
10040 	 * internal processor, the order of writes has to be such that
10041 	 * this field is written last.
10042 	 */
10043 } __attribute__((packed));
10044 
10045 /* hwrm_cfa_ntuple_filter_cfg */
10046 /*
10047  * Description: Configure an ntuple filter with a new destination VNIC and/or
10048  * meter.
10049  */
10050 /* Input	(48 bytes) */
10051 struct hwrm_cfa_ntuple_filter_cfg_input {
10052 	uint16_t req_type;
10053 	/*
10054 	 * This value indicates what type of request this is. The format
10055 	 * for the rest of the command is determined by this field.
10056 	 */
10057 	uint16_t cmpl_ring;
10058 	/*
10059 	 * This value indicates the what completion ring the request
10060 	 * will be optionally completed on. If the value is -1, then no
10061 	 * CR completion will be generated. Any other value must be a
10062 	 * valid CR ring_id value for this function.
10063 	 */
10064 	uint16_t seq_id;
10065 	/* This value indicates the command sequence number. */
10066 	uint16_t target_id;
10067 	/*
10068 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
10069 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
10070 	 * - HWRM
10071 	 */
10072 	uint64_t resp_addr;
10073 	/*
10074 	 * This is the host address where the response will be written
10075 	 * when the request is complete. This area must be 16B aligned
10076 	 * and must be cleared to zero before the request is made.
10077 	 */
10078 	uint32_t enables;
10079 	/* This bit must be '1' for the new_dst_id field to be configured. */
10080 	#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_DST_ID	\
10081 		UINT32_C(0x1)
10082 	/*
10083 	 * This bit must be '1' for the new_mirror_vnic_id field to be
10084 	 * configured.
10085 	 */
10086 	#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID \
10087 		UINT32_C(0x2)
10088 	/*
10089 	 * This bit must be '1' for the new_meter_instance_id field to
10090 	 * be configured.
10091 	 */
10092 	#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_METER_INSTANCE_ID \
10093 		UINT32_C(0x4)
10094 	uint32_t unused_0;
10095 	uint64_t ntuple_filter_id;
10096 	/* This value is an opaque id into CFA data structures. */
10097 	uint32_t new_dst_id;
10098 	/*
10099 	 * If set, this value shall represent the new Logical VNIC ID of
10100 	 * the destination VNIC for the RX path and new network port id
10101 	 * of the destination port for the TX path.
10102 	 */
10103 	uint32_t new_mirror_vnic_id;
10104 	/* New Logical VNIC ID of the VNIC where traffic is mirrored. */
10105 	uint16_t new_meter_instance_id;
10106 	/*
10107 	 * New meter to attach to the flow. Specifying the invalid
10108 	 * instance ID is used to remove any existing meter from the
10109 	 * flow.
10110 	 */
10111 	/*
10112 	 * A value of 0xfff is considered invalid and
10113 	 * implies the instance is not configured.
10114 	 */
10115 	#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID \
10116 		UINT32_C(0xffff)
10117 	uint16_t unused_1[3];
10118 } __attribute__((packed));
10119 
10120 /* Output	(16 bytes) */
10121 struct hwrm_cfa_ntuple_filter_cfg_output {
10122 	uint16_t error_code;
10123 	/*
10124 	 * Pass/Fail or error type Note: receiver to verify the in
10125 	 * parameters, and fail the call with an error when appropriate
10126 	 */
10127 	uint16_t req_type;
10128 	/* This field returns the type of original request. */
10129 	uint16_t seq_id;
10130 	/* This field provides original sequence number of the command. */
10131 	uint16_t resp_len;
10132 	/*
10133 	 * This field is the length of the response in bytes. The last
10134 	 * byte of the response is a valid flag that will read as '1'
10135 	 * when the command has been completely written to memory.
10136 	 */
10137 	uint32_t unused_0;
10138 	uint8_t unused_1;
10139 	uint8_t unused_2;
10140 	uint8_t unused_3;
10141 	uint8_t valid;
10142 	/*
10143 	 * This field is used in Output records to indicate that the
10144 	 * output is completely written to RAM. This field should be
10145 	 * read as '1' to indicate that the output has been completely
10146 	 * written. When writing a command completion or response to an
10147 	 * internal processor, the order of writes has to be such that
10148 	 * this field is written last.
10149 	 */
10150 } __attribute__((packed));
10151 
10152 /* hwrm_cfa_em_flow_alloc */
10153 /*
10154  * Description: This is a generic Exact Match	(EM) flow that uses fields from
10155  * L4/L3/L2 headers. The EM flows apply to transmit and receive traffic. All
10156  * L2/L3/L4 header fields are specified in network byte order. For each EM flow,
10157  * there is an associated set of actions specified. For tunneled packets, all
10158  * L2/L3/L4 fields specified are fields of inner headers unless otherwise
10159  * specified. # If a field specified in this command is not enabled as a valid
10160  * field, then that field shall not be used in matching packet header fields
10161  * against this EM flow entry.
10162  */
10163 /* Input	(112 bytes) */
10164 struct hwrm_cfa_em_flow_alloc_input {
10165 	uint16_t req_type;
10166 	/*
10167 	 * This value indicates what type of request this is. The format
10168 	 * for the rest of the command is determined by this field.
10169 	 */
10170 	uint16_t cmpl_ring;
10171 	/*
10172 	 * This value indicates the what completion ring the request
10173 	 * will be optionally completed on. If the value is -1, then no
10174 	 * CR completion will be generated. Any other value must be a
10175 	 * valid CR ring_id value for this function.
10176 	 */
10177 	uint16_t seq_id;
10178 	/* This value indicates the command sequence number. */
10179 	uint16_t target_id;
10180 	/*
10181 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
10182 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
10183 	 * - HWRM
10184 	 */
10185 	uint64_t resp_addr;
10186 	/*
10187 	 * This is the host address where the response will be written
10188 	 * when the request is complete. This area must be 16B aligned
10189 	 * and must be cleared to zero before the request is made.
10190 	 */
10191 	uint32_t flags;
10192 	/*
10193 	 * Enumeration denoting the RX, TX type of the resource. This
10194 	 * enumeration is used for resources that are similar for both
10195 	 * TX and RX paths of the chip.
10196 	 */
10197 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH	UINT32_C(0x1)
10198 	/* tx path */
10199 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_TX	\
10200 		(UINT32_C(0x0) << 0)
10201 	/* rx path */
10202 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_RX	\
10203 		(UINT32_C(0x1) << 0)
10204 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_LAST \
10205 		CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_RX
10206 	/*
10207 	 * Setting of this flag indicates enabling of a byte counter for
10208 	 * a given flow.
10209 	 */
10210 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_BYTE_CTR	UINT32_C(0x2)
10211 	/*
10212 	 * Setting of this flag indicates enabling of a packet counter
10213 	 * for a given flow.
10214 	 */
10215 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PKT_CTR	UINT32_C(0x4)
10216 	/*
10217 	 * Setting of this flag indicates de-capsulation action for the
10218 	 * given flow.
10219 	 */
10220 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_DECAP	UINT32_C(0x8)
10221 	/*
10222 	 * Setting of this flag indicates encapsulation action for the
10223 	 * given flow.
10224 	 */
10225 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_ENCAP	UINT32_C(0x10)
10226 	/*
10227 	 * Setting of this flag indicates drop action. If this flag is
10228 	 * not set, then it should be considered accept action.
10229 	 */
10230 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_DROP	UINT32_C(0x20)
10231 	/*
10232 	 * Setting of this flag indicates that a meter is expected to be
10233 	 * attached to this flow. This hint can be used when choosing
10234 	 * the action record format required for the flow.
10235 	 */
10236 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_METER	UINT32_C(0x40)
10237 	uint32_t enables;
10238 	/* This bit must be '1' for the l2_filter_id field to be configured. */
10239 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_L2_FILTER_ID UINT32_C(0x1)
10240 	/* This bit must be '1' for the tunnel_type field to be configured. */
10241 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_TUNNEL_TYPE UINT32_C(0x2)
10242 	/* This bit must be '1' for the tunnel_id field to be configured. */
10243 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_TUNNEL_ID UINT32_C(0x4)
10244 	/* This bit must be '1' for the src_macaddr field to be configured. */
10245 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_MACADDR UINT32_C(0x8)
10246 	/* This bit must be '1' for the dst_macaddr field to be configured. */
10247 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_MACADDR UINT32_C(0x10)
10248 	/* This bit must be '1' for the ovlan_vid field to be configured. */
10249 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_OVLAN_VID UINT32_C(0x20)
10250 	/* This bit must be '1' for the ivlan_vid field to be configured. */
10251 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IVLAN_VID UINT32_C(0x40)
10252 	/* This bit must be '1' for the ethertype field to be configured. */
10253 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_ETHERTYPE UINT32_C(0x80)
10254 	/* This bit must be '1' for the src_ipaddr field to be configured. */
10255 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_IPADDR	UINT32_C(0x100)
10256 	/* This bit must be '1' for the dst_ipaddr field to be configured. */
10257 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_IPADDR	UINT32_C(0x200)
10258 	/* This bit must be '1' for the ipaddr_type field to be configured. */
10259 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IPADDR_TYPE UINT32_C(0x400)
10260 	/* This bit must be '1' for the ip_protocol field to be configured. */
10261 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IP_PROTOCOL UINT32_C(0x800)
10262 	/* This bit must be '1' for the src_port field to be configured. */
10263 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_PORT UINT32_C(0x1000)
10264 	/* This bit must be '1' for the dst_port field to be configured. */
10265 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_PORT UINT32_C(0x2000)
10266 	/* This bit must be '1' for the dst_id field to be configured. */
10267 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_ID	UINT32_C(0x4000)
10268 	/*
10269 	 * This bit must be '1' for the mirror_vnic_id field to be
10270 	 * configured.
10271 	 */
10272 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID	\
10273 		UINT32_C(0x8000)
10274 	/*
10275 	 * This bit must be '1' for the encap_record_id field to be
10276 	 * configured.
10277 	 */
10278 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_ENCAP_RECORD_ID	 \
10279 		UINT32_C(0x10000)
10280 	/*
10281 	 * This bit must be '1' for the meter_instance_id field to be
10282 	 * configured.
10283 	 */
10284 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_METER_INSTANCE_ID	\
10285 		UINT32_C(0x20000)
10286 	uint64_t l2_filter_id;
10287 	/*
10288 	 * This value identifies a set of CFA data structures used for
10289 	 * an L2 context.
10290 	 */
10291 	uint8_t tunnel_type;
10292 	/* Tunnel Type. */
10293 	/* Non-tunnel */
10294 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
10295 		UINT32_C(0x0)
10296 	/* Virtual eXtensible Local Area Network	(VXLAN) */
10297 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN	UINT32_C(0x1)
10298 	/*
10299 	 * Network Virtualization Generic Routing
10300 	 * Encapsulation	(NVGRE)
10301 	 */
10302 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NVGRE	UINT32_C(0x2)
10303 	/*
10304 	 * Generic Routing Encapsulation	(GRE) inside
10305 	 * Ethernet payload
10306 	 */
10307 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_L2GRE	UINT32_C(0x3)
10308 	/* IP in IP */
10309 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPIP	UINT32_C(0x4)
10310 	/* Generic Network Virtualization Encapsulation	(Geneve) */
10311 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_GENEVE	UINT32_C(0x5)
10312 	/* Multi-Protocol Lable Switching	(MPLS) */
10313 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_MPLS	UINT32_C(0x6)
10314 	/* Stateless Transport Tunnel	(STT) */
10315 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_STT	UINT32_C(0x7)
10316 	/*
10317 	 * Generic Routing Encapsulation	(GRE) inside IP
10318 	 * datagram payload
10319 	 */
10320 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPGRE	UINT32_C(0x8)
10321 	/*
10322 	 * IPV4 over virtual eXtensible Local Area
10323 	 * Network (IPV4oVXLAN)
10324 	 */
10325 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 UINT32_C(0x9)
10326 	/* Any tunneled traffic */
10327 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
10328 		UINT32_C(0xff)
10329 	uint8_t unused_0;
10330 	uint16_t unused_1;
10331 	uint32_t tunnel_id;
10332 	/*
10333 	 * Tunnel identifier. Virtual Network Identifier	(VNI). Only
10334 	 * valid with tunnel_types VXLAN, NVGRE, and Geneve. Only lower
10335 	 * 24-bits of VNI field are used in setting up the filter.
10336 	 */
10337 	uint8_t src_macaddr[6];
10338 	/*
10339 	 * This value indicates the source MAC address in the Ethernet
10340 	 * header.
10341 	 */
10342 	uint16_t meter_instance_id;
10343 	/* The meter instance to attach to the flow. */
10344 	/*
10345 	 * A value of 0xfff is considered invalid and
10346 	 * implies the instance is not configured.
10347 	 */
10348 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_INVALID   \
10349 		UINT32_C(0xffff)
10350 	uint8_t dst_macaddr[6];
10351 	/*
10352 	 * This value indicates the destination MAC address in the
10353 	 * Ethernet header.
10354 	 */
10355 	uint16_t ovlan_vid;
10356 	/*
10357 	 * This value indicates the VLAN ID of the outer VLAN tag in the
10358 	 * Ethernet header.
10359 	 */
10360 	uint16_t ivlan_vid;
10361 	/*
10362 	 * This value indicates the VLAN ID of the inner VLAN tag in the
10363 	 * Ethernet header.
10364 	 */
10365 	uint16_t ethertype;
10366 	/* This value indicates the ethertype in the Ethernet header. */
10367 	uint8_t ip_addr_type;
10368 	/*
10369 	 * This value indicates the type of IP address. 4 - IPv4 6 -
10370 	 * IPv6 All others are invalid.
10371 	 */
10372 	/* invalid */
10373 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN UINT32_C(0x0)
10374 	/* IPv4 */
10375 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV4	UINT32_C(0x4)
10376 	/* IPv6 */
10377 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV6	UINT32_C(0x6)
10378 	uint8_t ip_protocol;
10379 	/*
10380 	 * The value of protocol filed in IP header. Applies to UDP and
10381 	 * TCP traffic. 6 - TCP 17 - UDP
10382 	 */
10383 	/* invalid */
10384 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN UINT32_C(0x0)
10385 	/* TCP */
10386 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_TCP UINT32_C(0x6)
10387 	/* UDP */
10388 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UDP UINT32_C(0x11)
10389 	uint8_t unused_2;
10390 	uint8_t unused_3;
10391 	uint32_t src_ipaddr[4];
10392 	/*
10393 	 * The value of source IP address to be used in filtering. For
10394 	 * IPv4, first four bytes represent the IP address.
10395 	 */
10396 	uint32_t dst_ipaddr[4];
10397 	/*
10398 	 * big_endian = True The value of destination IP address to be
10399 	 * used in filtering. For IPv4, first four bytes represent the
10400 	 * IP address.
10401 	 */
10402 	uint16_t src_port;
10403 	/*
10404 	 * The value of source port to be used in filtering. Applies to
10405 	 * UDP and TCP traffic.
10406 	 */
10407 	uint16_t dst_port;
10408 	/*
10409 	 * The value of destination port to be used in filtering.
10410 	 * Applies to UDP and TCP traffic.
10411 	 */
10412 	uint16_t dst_id;
10413 	/*
10414 	 * If set, this value shall represent the Logical VNIC ID of the
10415 	 * destination VNIC for the RX path and network port id of the
10416 	 * destination port for the TX path.
10417 	 */
10418 	uint16_t mirror_vnic_id;
10419 	/* Logical VNIC ID of the VNIC where traffic is mirrored. */
10420 	uint32_t encap_record_id;
10421 	/* Logical ID of the encapsulation record. */
10422 	uint32_t unused_4;
10423 } __attribute__((packed));
10424 
10425 /* Output	(24 bytes) */
10426 struct hwrm_cfa_em_flow_alloc_output {
10427 	uint16_t error_code;
10428 	/*
10429 	 * Pass/Fail or error type Note: receiver to verify the in
10430 	 * parameters, and fail the call with an error when appropriate
10431 	 */
10432 	uint16_t req_type;
10433 	/* This field returns the type of original request. */
10434 	uint16_t seq_id;
10435 	/* This field provides original sequence number of the command. */
10436 	uint16_t resp_len;
10437 	/*
10438 	 * This field is the length of the response in bytes. The last
10439 	 * byte of the response is a valid flag that will read as '1'
10440 	 * when the command has been completely written to memory.
10441 	 */
10442 	uint64_t em_filter_id;
10443 	/* This value is an opaque id into CFA data structures. */
10444 	uint32_t flow_id;
10445 	/*
10446 	 * This is the ID of the flow associated with this filter. This
10447 	 * value shall be used to match and associate the flow
10448 	 * identifier returned in completion records. A value of
10449 	 * 0xFFFFFFFF shall indicate no flow id.
10450 	 */
10451 	uint8_t unused_0;
10452 	uint8_t unused_1;
10453 	uint8_t unused_2;
10454 	uint8_t valid;
10455 	/*
10456 	 * This field is used in Output records to indicate that the
10457 	 * output is completely written to RAM. This field should be
10458 	 * read as '1' to indicate that the output has been completely
10459 	 * written. When writing a command completion or response to an
10460 	 * internal processor, the order of writes has to be such that
10461 	 * this field is written last.
10462 	 */
10463 } __attribute__((packed));
10464 
10465 /* hwrm_cfa_em_flow_free */
10466 /* Description: Free an EM flow table entry */
10467 /* Input	(24 bytes) */
10468 struct hwrm_cfa_em_flow_free_input {
10469 	uint16_t req_type;
10470 	/*
10471 	 * This value indicates what type of request this is. The format
10472 	 * for the rest of the command is determined by this field.
10473 	 */
10474 	uint16_t cmpl_ring;
10475 	/*
10476 	 * This value indicates the what completion ring the request
10477 	 * will be optionally completed on. If the value is -1, then no
10478 	 * CR completion will be generated. Any other value must be a
10479 	 * valid CR ring_id value for this function.
10480 	 */
10481 	uint16_t seq_id;
10482 	/* This value indicates the command sequence number. */
10483 	uint16_t target_id;
10484 	/*
10485 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
10486 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
10487 	 * - HWRM
10488 	 */
10489 	uint64_t resp_addr;
10490 	/*
10491 	 * This is the host address where the response will be written
10492 	 * when the request is complete. This area must be 16B aligned
10493 	 * and must be cleared to zero before the request is made.
10494 	 */
10495 	uint64_t em_filter_id;
10496 	/* This value is an opaque id into CFA data structures. */
10497 } __attribute__((packed));
10498 
10499 /* Output	(16 bytes) */
10500 struct hwrm_cfa_em_flow_free_output {
10501 	uint16_t error_code;
10502 	/*
10503 	 * Pass/Fail or error type Note: receiver to verify the in
10504 	 * parameters, and fail the call with an error when appropriate
10505 	 */
10506 	uint16_t req_type;
10507 	/* This field returns the type of original request. */
10508 	uint16_t seq_id;
10509 	/* This field provides original sequence number of the command. */
10510 	uint16_t resp_len;
10511 	/*
10512 	 * This field is the length of the response in bytes. The last
10513 	 * byte of the response is a valid flag that will read as '1'
10514 	 * when the command has been completely written to memory.
10515 	 */
10516 	uint32_t unused_0;
10517 	uint8_t unused_1;
10518 	uint8_t unused_2;
10519 	uint8_t unused_3;
10520 	uint8_t valid;
10521 	/*
10522 	 * This field is used in Output records to indicate that the
10523 	 * output is completely written to RAM. This field should be
10524 	 * read as '1' to indicate that the output has been completely
10525 	 * written. When writing a command completion or response to an
10526 	 * internal processor, the order of writes has to be such that
10527 	 * this field is written last.
10528 	 */
10529 } __attribute__((packed));
10530 
10531 /* hwrm_cfa_em_flow_cfg */
10532 /*
10533  * Description: Configure an EM flow with a new destination VNIC and/or meter.
10534  */
10535 /* Input	(48 bytes) */
10536 struct hwrm_cfa_em_flow_cfg_input {
10537 	uint16_t req_type;
10538 	/*
10539 	 * This value indicates what type of request this is. The format
10540 	 * for the rest of the command is determined by this field.
10541 	 */
10542 	uint16_t cmpl_ring;
10543 	/*
10544 	 * This value indicates the what completion ring the request
10545 	 * will be optionally completed on. If the value is -1, then no
10546 	 * CR completion will be generated. Any other value must be a
10547 	 * valid CR ring_id value for this function.
10548 	 */
10549 	uint16_t seq_id;
10550 	/* This value indicates the command sequence number. */
10551 	uint16_t target_id;
10552 	/*
10553 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
10554 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
10555 	 * - HWRM
10556 	 */
10557 	uint64_t resp_addr;
10558 	/*
10559 	 * This is the host address where the response will be written
10560 	 * when the request is complete. This area must be 16B aligned
10561 	 * and must be cleared to zero before the request is made.
10562 	 */
10563 	uint32_t enables;
10564 	/* This bit must be '1' for the new_dst_id field to be configured. */
10565 	#define HWRM_CFA_EM_FLOW_CFG_INPUT_ENABLES_NEW_DST_ID	UINT32_C(0x1)
10566 	/*
10567 	 * This bit must be '1' for the new_mirror_vnic_id field to be
10568 	 * configured.
10569 	 */
10570 	#define HWRM_CFA_EM_FLOW_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID	\
10571 		UINT32_C(0x2)
10572 	/*
10573 	 * This bit must be '1' for the new_meter_instance_id field to
10574 	 * be configured.
10575 	 */
10576 	#define HWRM_CFA_EM_FLOW_CFG_INPUT_ENABLES_NEW_METER_INSTANCE_ID  \
10577 		UINT32_C(0x4)
10578 	uint32_t unused_0;
10579 	uint64_t em_filter_id;
10580 	/* This value is an opaque id into CFA data structures. */
10581 	uint32_t new_dst_id;
10582 	/*
10583 	 * If set, this value shall represent the new Logical VNIC ID of
10584 	 * the destination VNIC for the RX path and network port id of
10585 	 * the destination port for the TX path.
10586 	 */
10587 	uint32_t new_mirror_vnic_id;
10588 	/* New Logical VNIC ID of the VNIC where traffic is mirrored. */
10589 	uint16_t new_meter_instance_id;
10590 	/*
10591 	 * New meter to attach to the flow. Specifying the invalid
10592 	 * instance ID is used to remove any existing meter from the
10593 	 * flow.
10594 	 */
10595 	/*
10596 	 * A value of 0xfff is considered invalid and
10597 	 * implies the instance is not configured.
10598 	 */
10599 	#define HWRM_CFA_EM_FLOW_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID \
10600 		UINT32_C(0xffff)
10601 	uint16_t unused_1[3];
10602 } __attribute__((packed));
10603 
10604 /* Output	(16 bytes) */
10605 struct hwrm_cfa_em_flow_cfg_output {
10606 	uint16_t error_code;
10607 	/*
10608 	 * Pass/Fail or error type Note: receiver to verify the in
10609 	 * parameters, and fail the call with an error when appropriate
10610 	 */
10611 	uint16_t req_type;
10612 	/* This field returns the type of original request. */
10613 	uint16_t seq_id;
10614 	/* This field provides original sequence number of the command. */
10615 	uint16_t resp_len;
10616 	/*
10617 	 * This field is the length of the response in bytes. The last
10618 	 * byte of the response is a valid flag that will read as '1'
10619 	 * when the command has been completely written to memory.
10620 	 */
10621 	uint32_t unused_0;
10622 	uint8_t unused_1;
10623 	uint8_t unused_2;
10624 	uint8_t unused_3;
10625 	uint8_t valid;
10626 	/*
10627 	 * This field is used in Output records to indicate that the
10628 	 * output is completely written to RAM. This field should be
10629 	 * read as '1' to indicate that the output has been completely
10630 	 * written. When writing a command completion or response to an
10631 	 * internal processor, the order of writes has to be such that
10632 	 * this field is written last.
10633 	 */
10634 } __attribute__((packed));
10635 
10636 /* hwrm_tunnel_dst_port_query */
10637 /*
10638  * Description: This function is called by a driver to query tunnel type
10639  * specific destination port configuration.
10640  */
10641 /* Input	(24 bytes) */
10642 struct hwrm_tunnel_dst_port_query_input {
10643 	uint16_t req_type;
10644 	/*
10645 	 * This value indicates what type of request this is. The format
10646 	 * for the rest of the command is determined by this field.
10647 	 */
10648 	uint16_t cmpl_ring;
10649 	/*
10650 	 * This value indicates the what completion ring the request
10651 	 * will be optionally completed on. If the value is -1, then no
10652 	 * CR completion will be generated. Any other value must be a
10653 	 * valid CR ring_id value for this function.
10654 	 */
10655 	uint16_t seq_id;
10656 	/* This value indicates the command sequence number. */
10657 	uint16_t target_id;
10658 	/*
10659 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
10660 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
10661 	 * - HWRM
10662 	 */
10663 	uint64_t resp_addr;
10664 	/*
10665 	 * This is the host address where the response will be written
10666 	 * when the request is complete. This area must be 16B aligned
10667 	 * and must be cleared to zero before the request is made.
10668 	 */
10669 	uint8_t tunnel_type;
10670 	/* Tunnel Type. */
10671 	/* Virtual eXtensible Local Area Network	(VXLAN) */
10672 	#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN \
10673 		UINT32_C(0x1)
10674 	/* Generic Network Virtualization Encapsulation	(Geneve) */
10675 	#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_GENEVE \
10676 		UINT32_C(0x5)
10677 	/*
10678 	 * IPV4 over virtual eXtensible Local Area
10679 	 * Network (IPV4oVXLAN)
10680 	 */
10681 	#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN_V4 \
10682 		UINT32_C(0x9)
10683 	uint8_t unused_0[7];
10684 } __attribute__((packed));
10685 
10686 /* Output	(16 bytes) */
10687 struct hwrm_tunnel_dst_port_query_output {
10688 	uint16_t error_code;
10689 	/*
10690 	 * Pass/Fail or error type Note: receiver to verify the in
10691 	 * parameters, and fail the call with an error when appropriate
10692 	 */
10693 	uint16_t req_type;
10694 	/* This field returns the type of original request. */
10695 	uint16_t seq_id;
10696 	/* This field provides original sequence number of the command. */
10697 	uint16_t resp_len;
10698 	/*
10699 	 * This field is the length of the response in bytes. The last
10700 	 * byte of the response is a valid flag that will read as '1'
10701 	 * when the command has been completely written to memory.
10702 	 */
10703 	uint16_t tunnel_dst_port_id;
10704 	/*
10705 	 * This field represents the identifier of L4 destination port
10706 	 * used for the given tunnel type. This field is valid for
10707 	 * specific tunnel types that use layer 4	(e.g. UDP) transports
10708 	 * for tunneling.
10709 	 */
10710 	uint16_t tunnel_dst_port_val;
10711 	/*
10712 	 * This field represents the value of L4 destination port
10713 	 * identified by tunnel_dst_port_id. This field is valid for
10714 	 * specific tunnel types that use layer 4	(e.g. UDP) transports
10715 	 * for tunneling. This field is in network byte order. A value
10716 	 * of 0 means that the destination port is not configured.
10717 	 */
10718 	uint8_t unused_0;
10719 	uint8_t unused_1;
10720 	uint8_t unused_2;
10721 	uint8_t valid;
10722 	/*
10723 	 * This field is used in Output records to indicate that the
10724 	 * output is completely written to RAM. This field should be
10725 	 * read as '1' to indicate that the output has been completely
10726 	 * written. When writing a command completion or response to an
10727 	 * internal processor, the order of writes has to be such that
10728 	 * this field is written last.
10729 	 */
10730 } __attribute__((packed));
10731 
10732 /* hwrm_tunnel_dst_port_alloc */
10733 /*
10734  * Description: This function is called by a driver to allocate l4 destination
10735  * port for a specific tunnel type. The destination port value is provided in
10736  * the input. If the HWRM supports only one global destination port for a tunnel
10737  * type, then the HWRM shall keep track of its usage as described below. # The
10738  * first caller that allocates a destination port shall always succeed and the
10739  * HWRM shall save the destination port configuration for that tunnel type and
10740  * increment the usage count to 1. # Subsequent callers allocating the same
10741  * destination port for that tunnel type shall succeed and the HWRM shall
10742  * increment the usage count for that port for each subsequent caller that
10743  * succeeds. # Any subsequent caller trying to allocate a different destination
10744  * port for that tunnel type shall fail until the usage count for the original
10745  * destination port goes to zero. # A caller that frees a port will cause the
10746  * usage count for that port to decrement.
10747  */
10748 /* Input	(24 bytes) */
10749 struct hwrm_tunnel_dst_port_alloc_input {
10750 	uint16_t req_type;
10751 	/*
10752 	 * This value indicates what type of request this is. The format
10753 	 * for the rest of the command is determined by this field.
10754 	 */
10755 	uint16_t cmpl_ring;
10756 	/*
10757 	 * This value indicates the what completion ring the request
10758 	 * will be optionally completed on. If the value is -1, then no
10759 	 * CR completion will be generated. Any other value must be a
10760 	 * valid CR ring_id value for this function.
10761 	 */
10762 	uint16_t seq_id;
10763 	/* This value indicates the command sequence number. */
10764 	uint16_t target_id;
10765 	/*
10766 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
10767 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
10768 	 * - HWRM
10769 	 */
10770 	uint64_t resp_addr;
10771 	/*
10772 	 * This is the host address where the response will be written
10773 	 * when the request is complete. This area must be 16B aligned
10774 	 * and must be cleared to zero before the request is made.
10775 	 */
10776 	uint8_t tunnel_type;
10777 	/* Tunnel Type. */
10778 	/* Virtual eXtensible Local Area Network	(VXLAN) */
10779 	#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN UINT32_C(0x1)
10780 	/* Generic Network Virtualization Encapsulation	(Geneve) */
10781 	#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
10782 		UINT32_C(0x5)
10783 	/*
10784 	 * IPV4 over virtual eXtensible Local Area
10785 	 * Network (IPV4oVXLAN)
10786 	 */
10787 	#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
10788 		UINT32_C(0x9)
10789 	uint8_t unused_0;
10790 	uint16_t tunnel_dst_port_val;
10791 	/*
10792 	 * This field represents the value of L4 destination port used
10793 	 * for the given tunnel type. This field is valid for specific
10794 	 * tunnel types that use layer 4	(e.g. UDP) transports for
10795 	 * tunneling. This field is in network byte order. A value of 0
10796 	 * shall fail the command.
10797 	 */
10798 	uint32_t unused_1;
10799 } __attribute__((packed));
10800 
10801 /* Output	(16 bytes) */
10802 struct hwrm_tunnel_dst_port_alloc_output {
10803 	uint16_t error_code;
10804 	/*
10805 	 * Pass/Fail or error type Note: receiver to verify the in
10806 	 * parameters, and fail the call with an error when appropriate
10807 	 */
10808 	uint16_t req_type;
10809 	/* This field returns the type of original request. */
10810 	uint16_t seq_id;
10811 	/* This field provides original sequence number of the command. */
10812 	uint16_t resp_len;
10813 	/*
10814 	 * This field is the length of the response in bytes. The last
10815 	 * byte of the response is a valid flag that will read as '1'
10816 	 * when the command has been completely written to memory.
10817 	 */
10818 	uint16_t tunnel_dst_port_id;
10819 	/*
10820 	 * Identifier of a tunnel L4 destination port value. Only
10821 	 * applies to tunnel types that has l4 destination port
10822 	 * parameters.
10823 	 */
10824 	uint8_t unused_0;
10825 	uint8_t unused_1;
10826 	uint8_t unused_2;
10827 	uint8_t unused_3;
10828 	uint8_t unused_4;
10829 	uint8_t valid;
10830 	/*
10831 	 * This field is used in Output records to indicate that the
10832 	 * output is completely written to RAM. This field should be
10833 	 * read as '1' to indicate that the output has been completely
10834 	 * written. When writing a command completion or response to an
10835 	 * internal processor, the order of writes has to be such that
10836 	 * this field is written last.
10837 	 */
10838 } __attribute__((packed));
10839 
10840 /* hwrm_tunnel_dst_port_free */
10841 /*
10842  * Description: This function is called by a driver to free l4 destination port
10843  * for a specific tunnel type.
10844  */
10845 /* Input	(24 bytes) */
10846 struct hwrm_tunnel_dst_port_free_input {
10847 	uint16_t req_type;
10848 	/*
10849 	 * This value indicates what type of request this is. The format
10850 	 * for the rest of the command is determined by this field.
10851 	 */
10852 	uint16_t cmpl_ring;
10853 	/*
10854 	 * This value indicates the what completion ring the request
10855 	 * will be optionally completed on. If the value is -1, then no
10856 	 * CR completion will be generated. Any other value must be a
10857 	 * valid CR ring_id value for this function.
10858 	 */
10859 	uint16_t seq_id;
10860 	/* This value indicates the command sequence number. */
10861 	uint16_t target_id;
10862 	/*
10863 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
10864 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
10865 	 * - HWRM
10866 	 */
10867 	uint64_t resp_addr;
10868 	/*
10869 	 * This is the host address where the response will be written
10870 	 * when the request is complete. This area must be 16B aligned
10871 	 * and must be cleared to zero before the request is made.
10872 	 */
10873 	uint8_t tunnel_type;
10874 	/* Tunnel Type. */
10875 	/* Virtual eXtensible Local Area Network	(VXLAN) */
10876 	#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN UINT32_C(0x1)
10877 	/* Generic Network Virtualization Encapsulation	(Geneve) */
10878 	#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_GENEVE UINT32_C(0x5)
10879 	/*
10880 	 * IPV4 over virtual eXtensible Local Area
10881 	 * Network (IPV4oVXLAN)
10882 	 */
10883 	#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN_V4 \
10884 		UINT32_C(0x9)
10885 	uint8_t unused_0;
10886 	uint16_t tunnel_dst_port_id;
10887 	/*
10888 	 * Identifier of a tunnel L4 destination port value. Only
10889 	 * applies to tunnel types that has l4 destination port
10890 	 * parameters.
10891 	 */
10892 	uint32_t unused_1;
10893 } __attribute__((packed));
10894 
10895 /* Output	(16 bytes) */
10896 struct hwrm_tunnel_dst_port_free_output {
10897 	uint16_t error_code;
10898 	/*
10899 	 * Pass/Fail or error type Note: receiver to verify the in
10900 	 * parameters, and fail the call with an error when appropriate
10901 	 */
10902 	uint16_t req_type;
10903 	/* This field returns the type of original request. */
10904 	uint16_t seq_id;
10905 	/* This field provides original sequence number of the command. */
10906 	uint16_t resp_len;
10907 	/*
10908 	 * This field is the length of the response in bytes. The last
10909 	 * byte of the response is a valid flag that will read as '1'
10910 	 * when the command has been completely written to memory.
10911 	 */
10912 	uint32_t unused_0;
10913 	uint8_t unused_1;
10914 	uint8_t unused_2;
10915 	uint8_t unused_3;
10916 	uint8_t valid;
10917 	/*
10918 	 * This field is used in Output records to indicate that the
10919 	 * output is completely written to RAM. This field should be
10920 	 * read as '1' to indicate that the output has been completely
10921 	 * written. When writing a command completion or response to an
10922 	 * internal processor, the order of writes has to be such that
10923 	 * this field is written last.
10924 	 */
10925 } __attribute__((packed));
10926 
10927 /* hwrm_stat_ctx_alloc */
10928 /*
10929  * Description: This command allocates and does basic preparation for a stat
10930  * context.
10931  */
10932 /* Input	(32 bytes) */
10933 struct hwrm_stat_ctx_alloc_input {
10934 	uint16_t req_type;
10935 	/*
10936 	 * This value indicates what type of request this is. The format
10937 	 * for the rest of the command is determined by this field.
10938 	 */
10939 	uint16_t cmpl_ring;
10940 	/*
10941 	 * This value indicates the what completion ring the request
10942 	 * will be optionally completed on. If the value is -1, then no
10943 	 * CR completion will be generated. Any other value must be a
10944 	 * valid CR ring_id value for this function.
10945 	 */
10946 	uint16_t seq_id;
10947 	/* This value indicates the command sequence number. */
10948 	uint16_t target_id;
10949 	/*
10950 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
10951 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
10952 	 * - HWRM
10953 	 */
10954 	uint64_t resp_addr;
10955 	/*
10956 	 * This is the host address where the response will be written
10957 	 * when the request is complete. This area must be 16B aligned
10958 	 * and must be cleared to zero before the request is made.
10959 	 */
10960 	uint64_t stats_dma_addr;
10961 	/* This is the address for statistic block. */
10962 	uint32_t update_period_ms;
10963 	/*
10964 	 * The statistic block update period in ms. e.g. 250ms, 500ms,
10965 	 * 750ms, 1000ms. If update_period_ms is 0, then the stats
10966 	 * update shall be never done and the DMA address shall not be
10967 	 * used. In this case, the stat block can only be read by
10968 	 * hwrm_stat_ctx_query command.
10969 	 */
10970 	uint8_t stat_ctx_flags;
10971 	/*
10972 	 * This field is used to specify statistics context specific
10973 	 * configuration flags.
10974 	 */
10975 	/*
10976 	 * When this bit is set to '1', the statistics context shall be
10977 	 * allocated for RoCE traffic only. In this case, traffic other
10978 	 * than offloaded RoCE traffic shall not be included in this
10979 	 * statistic context. When this bit is set to '0', the
10980 	 * statistics context shall be used for the network traffic
10981 	 * other than offloaded RoCE traffic.
10982 	 */
10983 	#define HWRM_STAT_CTX_ALLOC_INPUT_STAT_CTX_FLAGS_ROCE	UINT32_C(0x1)
10984 	uint8_t unused_0[3];
10985 } __attribute__((packed));
10986 
10987 /* Output	(16 bytes) */
10988 struct hwrm_stat_ctx_alloc_output {
10989 	uint16_t error_code;
10990 	/*
10991 	 * Pass/Fail or error type Note: receiver to verify the in
10992 	 * parameters, and fail the call with an error when appropriate
10993 	 */
10994 	uint16_t req_type;
10995 	/* This field returns the type of original request. */
10996 	uint16_t seq_id;
10997 	/* This field provides original sequence number of the command. */
10998 	uint16_t resp_len;
10999 	/*
11000 	 * This field is the length of the response in bytes. The last
11001 	 * byte of the response is a valid flag that will read as '1'
11002 	 * when the command has been completely written to memory.
11003 	 */
11004 	uint32_t stat_ctx_id;
11005 	/* This is the statistics context ID value. */
11006 	uint8_t unused_0;
11007 	uint8_t unused_1;
11008 	uint8_t unused_2;
11009 	uint8_t valid;
11010 	/*
11011 	 * This field is used in Output records to indicate that the
11012 	 * output is completely written to RAM. This field should be
11013 	 * read as '1' to indicate that the output has been completely
11014 	 * written. When writing a command completion or response to an
11015 	 * internal processor, the order of writes has to be such that
11016 	 * this field is written last.
11017 	 */
11018 } __attribute__((packed));
11019 
11020 /* hwrm_stat_ctx_free */
11021 /* Description: This command is used to free a stat context. */
11022 /* Input	(24 bytes) */
11023 struct hwrm_stat_ctx_free_input {
11024 	uint16_t req_type;
11025 	/*
11026 	 * This value indicates what type of request this is. The format
11027 	 * for the rest of the command is determined by this field.
11028 	 */
11029 	uint16_t cmpl_ring;
11030 	/*
11031 	 * This value indicates the what completion ring the request
11032 	 * will be optionally completed on. If the value is -1, then no
11033 	 * CR completion will be generated. Any other value must be a
11034 	 * valid CR ring_id value for this function.
11035 	 */
11036 	uint16_t seq_id;
11037 	/* This value indicates the command sequence number. */
11038 	uint16_t target_id;
11039 	/*
11040 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
11041 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
11042 	 * - HWRM
11043 	 */
11044 	uint64_t resp_addr;
11045 	/*
11046 	 * This is the host address where the response will be written
11047 	 * when the request is complete. This area must be 16B aligned
11048 	 * and must be cleared to zero before the request is made.
11049 	 */
11050 	uint32_t stat_ctx_id;
11051 	/* ID of the statistics context that is being queried. */
11052 	uint32_t unused_0;
11053 } __attribute__((packed));
11054 
11055 /* Output	(16 bytes) */
11056 struct hwrm_stat_ctx_free_output {
11057 	uint16_t error_code;
11058 	/*
11059 	 * Pass/Fail or error type Note: receiver to verify the in
11060 	 * parameters, and fail the call with an error when appropriate
11061 	 */
11062 	uint16_t req_type;
11063 	/* This field returns the type of original request. */
11064 	uint16_t seq_id;
11065 	/* This field provides original sequence number of the command. */
11066 	uint16_t resp_len;
11067 	/*
11068 	 * This field is the length of the response in bytes. The last
11069 	 * byte of the response is a valid flag that will read as '1'
11070 	 * when the command has been completely written to memory.
11071 	 */
11072 	uint32_t stat_ctx_id;
11073 	/* This is the statistics context ID value. */
11074 	uint8_t unused_0;
11075 	uint8_t unused_1;
11076 	uint8_t unused_2;
11077 	uint8_t valid;
11078 	/*
11079 	 * This field is used in Output records to indicate that the
11080 	 * output is completely written to RAM. This field should be
11081 	 * read as '1' to indicate that the output has been completely
11082 	 * written. When writing a command completion or response to an
11083 	 * internal processor, the order of writes has to be such that
11084 	 * this field is written last.
11085 	 */
11086 } __attribute__((packed));
11087 
11088 /* hwrm_stat_ctx_query */
11089 /* Description: This command returns statistics of a context. */
11090 /* Input (24 bytes) */
11091 struct hwrm_stat_ctx_query_input {
11092 	uint16_t req_type;
11093 	/*
11094 	 * This value indicates what type of request this is. The format for the
11095 	 * rest of the command is determined by this field.
11096 	 */
11097 	uint16_t cmpl_ring;
11098 	/*
11099 	 * This value indicates the what completion ring the request will be
11100 	 * optionally completed on. If the value is -1, then no CR completion
11101 	 * will be generated. Any other value must be a valid CR ring_id value
11102 	 * for this function.
11103 	 */
11104 	uint16_t seq_id;
11105 	/* This value indicates the command sequence number. */
11106 	uint16_t target_id;
11107 	/*
11108 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function ids
11109 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF - HWRM
11110 	 */
11111 	uint64_t resp_addr;
11112 	/*
11113 	 * This is the host address where the response will be written when the
11114 	 * request is complete. This area must be 16B aligned and must be
11115 	 * cleared to zero before the request is made.
11116 	 */
11117 	uint32_t stat_ctx_id;
11118 	/* ID of the statistics context that is being queried. */
11119 	uint32_t unused_0;
11120 } __attribute__((packed));
11121 
11122 /* Output (176 bytes) */
11123 struct hwrm_stat_ctx_query_output {
11124 	uint16_t error_code;
11125 	/*
11126 	 * Pass/Fail or error type Note: receiver to verify the in parameters,
11127 	 * and fail the call with an error when appropriate
11128 	 */
11129 	uint16_t req_type;
11130 	/* This field returns the type of original request. */
11131 	uint16_t seq_id;
11132 	/* This field provides original sequence number of the command. */
11133 	uint16_t resp_len;
11134 	/*
11135 	 * This field is the length of the response in bytes. The last byte of
11136 	 * the response is a valid flag that will read as '1' when the command
11137 	 * has been completely written to memory.
11138 	 */
11139 	uint64_t tx_ucast_pkts;
11140 	/* Number of transmitted unicast packets */
11141 	uint64_t tx_mcast_pkts;
11142 	/* Number of transmitted multicast packets */
11143 	uint64_t tx_bcast_pkts;
11144 	/* Number of transmitted broadcast packets */
11145 	uint64_t tx_err_pkts;
11146 	/* Number of transmitted packets with error */
11147 	uint64_t tx_drop_pkts;
11148 	/* Number of dropped packets on transmit path */
11149 	uint64_t tx_ucast_bytes;
11150 	/* Number of transmitted bytes for unicast traffic */
11151 	uint64_t tx_mcast_bytes;
11152 	/* Number of transmitted bytes for multicast traffic */
11153 	uint64_t tx_bcast_bytes;
11154 	/* Number of transmitted bytes for broadcast traffic */
11155 	uint64_t rx_ucast_pkts;
11156 	/* Number of received unicast packets */
11157 	uint64_t rx_mcast_pkts;
11158 	/* Number of received multicast packets */
11159 	uint64_t rx_bcast_pkts;
11160 	/* Number of received broadcast packets */
11161 	uint64_t rx_err_pkts;
11162 	/* Number of received packets with error */
11163 	uint64_t rx_drop_pkts;
11164 	/* Number of dropped packets on received path */
11165 	uint64_t rx_ucast_bytes;
11166 	/* Number of received bytes for unicast traffic */
11167 	uint64_t rx_mcast_bytes;
11168 	/* Number of received bytes for multicast traffic */
11169 	uint64_t rx_bcast_bytes;
11170 	/* Number of received bytes for broadcast traffic */
11171 	uint64_t rx_agg_pkts;
11172 	/* Number of aggregated unicast packets */
11173 	uint64_t rx_agg_bytes;
11174 	/* Number of aggregated unicast bytes */
11175 	uint64_t rx_agg_events;
11176 	/* Number of aggregation events */
11177 	uint64_t rx_agg_aborts;
11178 	/* Number of aborted aggregations */
11179 	uint32_t unused_0;
11180 	uint8_t unused_1;
11181 	uint8_t unused_2;
11182 	uint8_t unused_3;
11183 	uint8_t valid;
11184 	/*
11185 	 * This field is used in Output records to indicate that the output is
11186 	 * completely written to RAM. This field should be read as '1' to
11187 	 * indicate that the output has been completely written. When writing a
11188 	 * command completion or response to an internal processor, the order of
11189 	 * writes has to be such that this field is written last.
11190 	 */
11191 } __attribute__((packed));
11192 
11193 /* hwrm_stat_ctx_clr_stats */
11194 /* Description: This command clears statistics of a context. */
11195 /* Input	(24 bytes) */
11196 struct hwrm_stat_ctx_clr_stats_input {
11197 	uint16_t req_type;
11198 	/*
11199 	 * This value indicates what type of request this is. The format
11200 	 * for the rest of the command is determined by this field.
11201 	 */
11202 	uint16_t cmpl_ring;
11203 	/*
11204 	 * This value indicates the what completion ring the request
11205 	 * will be optionally completed on. If the value is -1, then no
11206 	 * CR completion will be generated. Any other value must be a
11207 	 * valid CR ring_id value for this function.
11208 	 */
11209 	uint16_t seq_id;
11210 	/* This value indicates the command sequence number. */
11211 	uint16_t target_id;
11212 	/*
11213 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
11214 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
11215 	 * - HWRM
11216 	 */
11217 	uint64_t resp_addr;
11218 	/*
11219 	 * This is the host address where the response will be written
11220 	 * when the request is complete. This area must be 16B aligned
11221 	 * and must be cleared to zero before the request is made.
11222 	 */
11223 	uint32_t stat_ctx_id;
11224 	/* ID of the statistics context that is being queried. */
11225 	uint32_t unused_0;
11226 } __attribute__((packed));
11227 
11228 /* Output	(16 bytes) */
11229 struct hwrm_stat_ctx_clr_stats_output {
11230 	uint16_t error_code;
11231 	/*
11232 	 * Pass/Fail or error type Note: receiver to verify the in
11233 	 * parameters, and fail the call with an error when appropriate
11234 	 */
11235 	uint16_t req_type;
11236 	/* This field returns the type of original request. */
11237 	uint16_t seq_id;
11238 	/* This field provides original sequence number of the command. */
11239 	uint16_t resp_len;
11240 	/*
11241 	 * This field is the length of the response in bytes. The last
11242 	 * byte of the response is a valid flag that will read as '1'
11243 	 * when the command has been completely written to memory.
11244 	 */
11245 	uint32_t unused_0;
11246 	uint8_t unused_1;
11247 	uint8_t unused_2;
11248 	uint8_t unused_3;
11249 	uint8_t valid;
11250 	/*
11251 	 * This field is used in Output records to indicate that the
11252 	 * output is completely written to RAM. This field should be
11253 	 * read as '1' to indicate that the output has been completely
11254 	 * written. When writing a command completion or response to an
11255 	 * internal processor, the order of writes has to be such that
11256 	 * this field is written last.
11257 	 */
11258 } __attribute__((packed));
11259 
11260 /* hwrm_exec_fwd_resp */
11261 /*
11262  * Description: This command is used to send an encapsulated request to the
11263  * HWRM. This command instructs the HWRM to execute the request and forward the
11264  * response of the encapsulated request to the location specified in the
11265  * original request that is encapsulated. The target id of this command shall be
11266  * set to 0xFFFF (HWRM). The response location in this command shall be used to
11267  * acknowledge the receipt of the encapsulated request and forwarding of the
11268  * response.
11269  */
11270 /* Input	(128 bytes) */
11271 struct hwrm_exec_fwd_resp_input {
11272 	uint16_t req_type;
11273 	/*
11274 	 * This value indicates what type of request this is. The format
11275 	 * for the rest of the command is determined by this field.
11276 	 */
11277 	uint16_t cmpl_ring;
11278 	/*
11279 	 * This value indicates the what completion ring the request
11280 	 * will be optionally completed on. If the value is -1, then no
11281 	 * CR completion will be generated. Any other value must be a
11282 	 * valid CR ring_id value for this function.
11283 	 */
11284 	uint16_t seq_id;
11285 	/* This value indicates the command sequence number. */
11286 	uint16_t target_id;
11287 	/*
11288 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
11289 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
11290 	 * - HWRM
11291 	 */
11292 	uint64_t resp_addr;
11293 	/*
11294 	 * This is the host address where the response will be written
11295 	 * when the request is complete. This area must be 16B aligned
11296 	 * and must be cleared to zero before the request is made.
11297 	 */
11298 	uint32_t encap_request[26];
11299 	/*
11300 	 * This is an encapsulated request. This request should be
11301 	 * executed by the HWRM and the response should be provided in
11302 	 * the response buffer inside the encapsulated request.
11303 	 */
11304 	uint16_t encap_resp_target_id;
11305 	/*
11306 	 * This value indicates the target id of the response to the
11307 	 * encapsulated request. 0x0 - 0xFFF8 - Used for function ids
11308 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF -
11309 	 * HWRM
11310 	 */
11311 	uint16_t unused_0[3];
11312 } __attribute__((packed));
11313 
11314 /* Output	(16 bytes) */
11315 struct hwrm_exec_fwd_resp_output {
11316 	uint16_t error_code;
11317 	/*
11318 	 * Pass/Fail or error type Note: receiver to verify the in
11319 	 * parameters, and fail the call with an error when appropriate
11320 	 */
11321 	uint16_t req_type;
11322 	/* This field returns the type of original request. */
11323 	uint16_t seq_id;
11324 	/* This field provides original sequence number of the command. */
11325 	uint16_t resp_len;
11326 	/*
11327 	 * This field is the length of the response in bytes. The last
11328 	 * byte of the response is a valid flag that will read as '1'
11329 	 * when the command has been completely written to memory.
11330 	 */
11331 	uint32_t unused_0;
11332 	uint8_t unused_1;
11333 	uint8_t unused_2;
11334 	uint8_t unused_3;
11335 	uint8_t valid;
11336 	/*
11337 	 * This field is used in Output records to indicate that the
11338 	 * output is completely written to RAM. This field should be
11339 	 * read as '1' to indicate that the output has been completely
11340 	 * written. When writing a command completion or response to an
11341 	 * internal processor, the order of writes has to be such that
11342 	 * this field is written last.
11343 	 */
11344 } __attribute__((packed));
11345 
11346 /* hwrm_reject_fwd_resp */
11347 /*
11348  * Description: This command is used to send an encapsulated request to the
11349  * HWRM. This command instructs the HWRM to reject the request and forward the
11350  * error response of the encapsulated request to the location specified in the
11351  * original request that is encapsulated. The target id of this command shall be
11352  * set to 0xFFFF (HWRM). The response location in this command shall be used to
11353  * acknowledge the receipt of the encapsulated request and forwarding of the
11354  * response.
11355  */
11356 /* Input	(128 bytes) */
11357 struct hwrm_reject_fwd_resp_input {
11358 	uint16_t req_type;
11359 	/*
11360 	 * This value indicates what type of request this is. The format
11361 	 * for the rest of the command is determined by this field.
11362 	 */
11363 	uint16_t cmpl_ring;
11364 	/*
11365 	 * This value indicates the what completion ring the request
11366 	 * will be optionally completed on. If the value is -1, then no
11367 	 * CR completion will be generated. Any other value must be a
11368 	 * valid CR ring_id value for this function.
11369 	 */
11370 	uint16_t seq_id;
11371 	/* This value indicates the command sequence number. */
11372 	uint16_t target_id;
11373 	/*
11374 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
11375 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
11376 	 * - HWRM
11377 	 */
11378 	uint64_t resp_addr;
11379 	/*
11380 	 * This is the host address where the response will be written
11381 	 * when the request is complete. This area must be 16B aligned
11382 	 * and must be cleared to zero before the request is made.
11383 	 */
11384 	uint32_t encap_request[26];
11385 	/*
11386 	 * This is an encapsulated request. This request should be
11387 	 * rejected by the HWRM and the error response should be
11388 	 * provided in the response buffer inside the encapsulated
11389 	 * request.
11390 	 */
11391 	uint16_t encap_resp_target_id;
11392 	/*
11393 	 * This value indicates the target id of the response to the
11394 	 * encapsulated request. 0x0 - 0xFFF8 - Used for function ids
11395 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF -
11396 	 * HWRM
11397 	 */
11398 	uint16_t unused_0[3];
11399 } __attribute__((packed));
11400 
11401 /* Output	(16 bytes) */
11402 struct hwrm_reject_fwd_resp_output {
11403 	uint16_t error_code;
11404 	/*
11405 	 * Pass/Fail or error type Note: receiver to verify the in
11406 	 * parameters, and fail the call with an error when appropriate
11407 	 */
11408 	uint16_t req_type;
11409 	/* This field returns the type of original request. */
11410 	uint16_t seq_id;
11411 	/* This field provides original sequence number of the command. */
11412 	uint16_t resp_len;
11413 	/*
11414 	 * This field is the length of the response in bytes. The last
11415 	 * byte of the response is a valid flag that will read as '1'
11416 	 * when the command has been completely written to memory.
11417 	 */
11418 	uint32_t unused_0;
11419 	uint8_t unused_1;
11420 	uint8_t unused_2;
11421 	uint8_t unused_3;
11422 	uint8_t valid;
11423 	/*
11424 	 * This field is used in Output records to indicate that the
11425 	 * output is completely written to RAM. This field should be
11426 	 * read as '1' to indicate that the output has been completely
11427 	 * written. When writing a command completion or response to an
11428 	 * internal processor, the order of writes has to be such that
11429 	 * this field is written last.
11430 	 */
11431 } __attribute__((packed));
11432 
11433 /* hwrm_nvm_get_dir_entries */
11434 /* Input (24 bytes) */
11435 struct hwrm_nvm_get_dir_entries_input {
11436 	uint16_t req_type;
11437 	uint16_t cmpl_ring;
11438 	uint16_t seq_id;
11439 	uint16_t target_id;
11440 	uint64_t resp_addr;
11441 	uint64_t host_dest_addr;
11442 } __attribute__((packed));
11443 
11444 /* Output (16 bytes) */
11445 struct hwrm_nvm_get_dir_entries_output {
11446 	uint16_t error_code;
11447 	uint16_t req_type;
11448 	uint16_t seq_id;
11449 	uint16_t resp_len;
11450 	uint32_t unused_0;
11451 	uint8_t unused_1;
11452 	uint8_t unused_2;
11453 	uint8_t unused_3;
11454 	uint8_t valid;
11455 } __attribute__((packed));
11456 
11457 
11458 /* hwrm_nvm_erase_dir_entry */
11459 /* Input (24 bytes) */
11460 struct hwrm_nvm_erase_dir_entry_input {
11461 	uint16_t req_type;
11462 	uint16_t cmpl_ring;
11463 	uint16_t seq_id;
11464 	uint16_t target_id;
11465 	uint64_t resp_addr;
11466 	uint16_t dir_idx;
11467 	uint16_t unused_0[3];
11468 };
11469 
11470 /* Output (16 bytes) */
11471 struct hwrm_nvm_erase_dir_entry_output {
11472 	uint16_t error_code;
11473 	uint16_t req_type;
11474 	uint16_t seq_id;
11475 	uint16_t resp_len;
11476 	uint32_t unused_0;
11477 	uint8_t unused_1;
11478 	uint8_t unused_2;
11479 	uint8_t unused_3;
11480 	uint8_t valid;
11481 };
11482 
11483 /* hwrm_nvm_get_dir_info */
11484 /* Input (16 bytes) */
11485 struct hwrm_nvm_get_dir_info_input {
11486 	uint16_t req_type;
11487 	uint16_t cmpl_ring;
11488 	uint16_t seq_id;
11489 	uint16_t target_id;
11490 	uint64_t resp_addr;
11491 } __attribute__((packed));
11492 
11493 /* Output (24 bytes) */
11494 struct hwrm_nvm_get_dir_info_output {
11495 	uint16_t error_code;
11496 	/*
11497 	 * Pass/Fail or error type Note: receiver to verify the in
11498 	 * parameters, and fail the call with an error when appropriate
11499 	 */
11500 	uint16_t req_type;
11501 	/* This field returns the type of original request. */
11502 	uint16_t seq_id;
11503 	/* This field provides original sequence number of the command. */
11504 	uint16_t resp_len;
11505 	/*
11506 	 * This field is the length of the response in bytes. The last
11507 	 * byte of the response is a valid flag that will read as '1'
11508 	 * when the command has been completely written to memory.
11509 	 */
11510 	uint32_t entries;
11511 	/* Number of directory entries in the directory. */
11512 	uint32_t entry_length;
11513 	/* Size of each directory entry, in bytes. */
11514 	uint32_t unused_0;
11515 	uint8_t unused_1;
11516 	uint8_t unused_2;
11517 	uint8_t unused_3;
11518 	uint8_t valid;
11519 	/*
11520 	 * This field is used in Output records to indicate that the
11521 	 * output is completely written to RAM. This field should be
11522 	 * read as '1' to indicate that the output has been completely
11523 	 * written. When writing a command completion or response to an
11524 	 * internal processor, the order of writes has to be such that
11525 	 * this field is written last.
11526 	 */
11527 } __attribute__((packed));
11528 
11529 /* hwrm_nvm_write */
11530 /*
11531  * Note: Write to the allocated NVRAM of an item referenced by an existing
11532  * directory entry.
11533  */
11534 /* Input (48 bytes) */
11535 struct hwrm_nvm_write_input {
11536 	uint16_t req_type;
11537 	/*
11538 	 * This value indicates what type of request this is. The format
11539 	 * for the rest of the command is determined by this field.
11540 	 */
11541 	uint16_t cmpl_ring;
11542 	/*
11543 	 * This value indicates the what completion ring the request
11544 	 * will be optionally completed on. If the value is -1, then no
11545 	 * CR completion will be generated. Any other value must be a
11546 	 * valid CR ring_id value for this function.
11547 	 */
11548 	uint16_t seq_id;
11549 	/* This value indicates the command sequence number. */
11550 	uint16_t target_id;
11551 	/*
11552 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
11553 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
11554 	 * - HWRM
11555 	 */
11556 	uint64_t resp_addr;
11557 	/*
11558 	 * This is the host address where the response will be written
11559 	 * when the request is complete. This area must be 16B aligned
11560 	 * and must be cleared to zero before the request is made.
11561 	 */
11562 	uint64_t host_src_addr;
11563 	/* 64-bit Host Source Address. This is where the source data is. */
11564 	uint16_t dir_type;
11565 	/*
11566 	 * The Directory Entry Type (valid values are defined in the
11567 	 * bnxnvm_directory_type enum defined in the file
11568 	 * bnxnvm_defs.h).
11569 	 */
11570 	uint16_t dir_ordinal;
11571 	/*
11572 	 * Directory ordinal. The 0-based instance of the combined
11573 	 * Directory Entry Type and Extension.
11574 	 */
11575 	uint16_t dir_ext;
11576 	/*
11577 	 * The Directory Entry Extension flags (see BNX_DIR_EXT_* in the
11578 	 * file bnxnvm_defs.h).
11579 	 */
11580 	uint16_t dir_attr;
11581 	/*
11582 	 * Directory Entry Attribute flags (see BNX_DIR_ATTR_* in the
11583 	 * file bnxnvm_defs.h).
11584 	 */
11585 	uint32_t dir_data_length;
11586 	/*
11587 	 * Length of data to write, in bytes. May be less than or equal
11588 	 * to the allocated size for the directory entry. The data
11589 	 * length stored in the directory entry will be updated to
11590 	 * reflect this value once the write is complete.
11591 	 */
11592 	uint16_t option;
11593 	/* Option. */
11594 	uint16_t flags;
11595 	/*
11596 	 * When this bit is '1', the original active image will not be
11597 	 * removed. TBD: what purpose is this?
11598 	 */
11599 	#define HWRM_NVM_WRITE_INPUT_FLAGS_KEEP_ORIG_ACTIVE_IMG UINT32_C(0x1)
11600 	uint32_t dir_item_length;
11601 	/*
11602 	 * The requested length of the allocated NVM for the item, in
11603 	 * bytes. This value may be greater than or equal to the
11604 	 * specified data length (dir_data_length). If this value is
11605 	 * less than the specified data length, it will be ignored. The
11606 	 * response will contain the actual allocated item length, which
11607 	 * may be greater than the requested item length. The purpose
11608 	 * for allocating more than the required number of bytes for an
11609 	 * item's data is to pre-allocate extra storage (padding) to
11610 	 * accommodate the potential future growth of an item (e.g.
11611 	 * upgraded firmware with a size increase, log growth, expanded
11612 	 * configuration data).
11613 	 */
11614 	uint32_t unused_0;
11615 } __attribute__((packed));
11616 
11617 /* Output (16 bytes) */
11618 struct hwrm_nvm_write_output {
11619 	uint16_t error_code;
11620 	/*
11621 	 * Pass/Fail or error type Note: receiver to verify the in
11622 	 * parameters, and fail the call with an error when appropriate
11623 	 */
11624 	uint16_t req_type;
11625 	/* This field returns the type of original request. */
11626 	uint16_t seq_id;
11627 	/* This field provides original sequence number of the command. */
11628 	uint16_t resp_len;
11629 	/*
11630 	 * This field is the length of the response in bytes. The last
11631 	 * byte of the response is a valid flag that will read as '1'
11632 	 * when the command has been completely written to memory.
11633 	 */
11634 	uint32_t dir_item_length;
11635 	/*
11636 	 * Length of the allocated NVM for the item, in bytes. The value
11637 	 * may be greater than or equal to the specified data length or
11638 	 * the requested item length. The actual item length used when
11639 	 * creating a new directory entry will be a multiple of an NVM
11640 	 * block size.
11641 	 */
11642 	uint16_t dir_idx;
11643 	/* The directory index of the created or modified item. */
11644 	uint8_t unused_0;
11645 	uint8_t valid;
11646 	/*
11647 	 * This field is used in Output records to indicate that the
11648 	 * output is completely written to RAM. This field should be
11649 	 * read as '1' to indicate that the output has been completely
11650 	 * written. When writing a command completion or response to an
11651 	 * internal processor, the order of writes has to be such that
11652 	 * this field is written last.
11653 	 */
11654 } __attribute__((packed));
11655 
11656 /* hwrm_nvm_read */
11657 /*
11658  * Note: Read the contents of an NVRAM item as referenced (indexed) by an
11659  * existing directory entry.
11660  */
11661 /* Input (40 bytes) */
11662 struct hwrm_nvm_read_input {
11663 	uint16_t req_type;
11664 	/*
11665 	 * This value indicates what type of request this is. The format
11666 	 * for the rest of the command is determined by this field.
11667 	 */
11668 	uint16_t cmpl_ring;
11669 	/*
11670 	 * This value indicates the what completion ring the request
11671 	 * will be optionally completed on. If the value is -1, then no
11672 	 * CR completion will be generated. Any other value must be a
11673 	 * valid CR ring_id value for this function.
11674 	 */
11675 	uint16_t seq_id;
11676 	/* This value indicates the command sequence number. */
11677 	uint16_t target_id;
11678 	/*
11679 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
11680 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
11681 	 * - HWRM
11682 	 */
11683 	uint64_t resp_addr;
11684 	/*
11685 	 * This is the host address where the response will be written
11686 	 * when the request is complete. This area must be 16B aligned
11687 	 * and must be cleared to zero before the request is made.
11688 	 */
11689 	uint64_t host_dest_addr;
11690 	/*
11691 	 * 64-bit Host Destination Address. This is the host address
11692 	 * where the data will be written to.
11693 	 */
11694 	uint16_t dir_idx;
11695 	/* The 0-based index of the directory entry. */
11696 	uint8_t unused_0;
11697 	uint8_t unused_1;
11698 	uint32_t offset;
11699 	/* The NVRAM byte-offset to read from. */
11700 	uint32_t len;
11701 	/* The length of the data to be read, in bytes. */
11702 	uint32_t unused_2;
11703 } __attribute__((packed));
11704 
11705 /* Output (16 bytes) */
11706 struct hwrm_nvm_read_output {
11707 	uint16_t error_code;
11708 	/*
11709 	 * Pass/Fail or error type Note: receiver to verify the in
11710 	 * parameters, and fail the call with an error when appropriate
11711 	 */
11712 	uint16_t req_type;
11713 	/* This field returns the type of original request. */
11714 	uint16_t seq_id;
11715 	/* This field provides original sequence number of the command. */
11716 	uint16_t resp_len;
11717 	/*
11718 	 * This field is the length of the response in bytes. The last
11719 	 * byte of the response is a valid flag that will read as '1'
11720 	 * when the command has been completely written to memory.
11721 	 */
11722 	uint32_t unused_0;
11723 	uint8_t unused_1;
11724 	uint8_t unused_2;
11725 	uint8_t unused_3;
11726 	uint8_t valid;
11727 	/*
11728 	 * This field is used in Output records to indicate that the
11729 	 * output is completely written to RAM. This field should be
11730 	 * read as '1' to indicate that the output has been completely
11731 	 * written. When writing a command completion or response to an
11732 	 * internal processor, the order of writes has to be such that
11733 	 * this field is written last.
11734 	 */
11735 } __attribute__((packed));
11736 
11737 /* Hardware Resource Manager Specification */
11738 /* Description: This structure is used to specify port description. */
11739 /*
11740  * Note: The Hardware Resource Manager (HWRM) manages various hardware resources
11741  * inside the chip. The HWRM is implemented in firmware, and runs on embedded
11742  * processors inside the chip. This firmware service is vital part of the chip.
11743  * The chip can not be used by a driver or HWRM client without the HWRM.
11744  */
11745 /* Input	(16 bytes) */
11746 struct input {
11747 	uint16_t req_type;
11748 	/*
11749 	 * This value indicates what type of request this is. The format
11750 	 * for the rest of the command is determined by this field.
11751 	 */
11752 	uint16_t cmpl_ring;
11753 	/*
11754 	 * This value indicates the what completion ring the request
11755 	 * will be optionally completed on. If the value is -1, then no
11756 	 * CR completion will be generated. Any other value must be a
11757 	 * valid CR ring_id value for this function.
11758 	 */
11759 	uint16_t seq_id;
11760 	/* This value indicates the command sequence number. */
11761 	uint16_t target_id;
11762 	/*
11763 	 * Target ID of this command. 0x0 - 0xFFF8 - Used for function
11764 	 * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
11765 	 * - HWRM
11766 	 */
11767 	uint64_t resp_addr;
11768 	/*
11769 	 * This is the host address where the response will be written
11770 	 * when the request is complete. This area must be 16B aligned
11771 	 * and must be cleared to zero before the request is made.
11772 	 */
11773 } __attribute__((packed));
11774 
11775 /* Output	(8 bytes) */
11776 struct output {
11777 	uint16_t error_code;
11778 	/*
11779 	 * Pass/Fail or error type Note: receiver to verify the in
11780 	 * parameters, and fail the call with an error when appropriate
11781 	 */
11782 	uint16_t req_type;
11783 	/* This field returns the type of original request. */
11784 	uint16_t seq_id;
11785 	/* This field provides original sequence number of the command. */
11786 	uint16_t resp_len;
11787 	/*
11788 	 * This field is the length of the response in bytes. The last
11789 	 * byte of the response is a valid flag that will read as '1'
11790 	 * when the command has been completely written to memory.
11791 	 */
11792 } __attribute__((packed));
11793 
11794 /* Short Command Structure (16 bytes) */
11795 struct hwrm_short_input {
11796 	uint16_t req_type;
11797 	/*
11798 	 * This field indicates the type of request in the request
11799 	 * buffer. The format for the rest of the command (request) is
11800 	 * determined by this field.
11801 	 */
11802 	uint16_t signature;
11803 	/*
11804 	 * This field indicates a signature that is used to identify
11805 	 * short form of the command listed here. This field shall be
11806 	 * set to 17185 (0x4321).
11807 	 */
11808 	/* Signature indicating this is a short form of HWRM command */
11809 	#define HWRM_SHORT_REQ_SIGNATURE_SHORT_CMD UINT32_C(0x4321)
11810 	uint16_t unused_0;
11811 	/* Reserved for future use. */
11812 	uint16_t size;
11813 	/* This value indicates the length of the request. */
11814 	uint64_t req_addr;
11815 	/*
11816 	 * This is the host address where the request was written. This
11817 	 * area must be 16B aligned.
11818 	 */
11819 } __attribute__((packed));
11820 
11821 #define HWRM_GET_HWRM_ERROR_CODE(arg) \
11822 	{ \
11823 		typeof(arg) x = (arg); \
11824 	((x) == 0xf ? "HWRM_ERROR" : \
11825 	((x) == 0xffff ? "CMD_NOT_SUPPORTED" : \
11826 	((x) == 0xfffe ? "UNKNOWN_ERR" : \
11827 	((x) == 0x4 ? "RESOURCE_ALLOC_ERROR" : \
11828 	((x) == 0x5 ? "INVALID_FLAGS" : \
11829 	((x) == 0x6 ? "INVALID_ENABLES" : \
11830 	((x) == 0x0 ? "SUCCESS" : \
11831 	((x) == 0x1 ? "FAIL" : \
11832 	((x) == 0x2 ? "INVALID_PARAMS" : \
11833 	((x) == 0x3 ? "RESOURCE_ACCESS_DENIED" : \
11834 	"Unknown error_code")))))))))) \
11835 	}
11836 
11837 /* Return Codes	(8 bytes) */
11838 struct ret_codes {
11839 	uint16_t error_code;
11840 	/* These are numbers assigned to return/error codes. */
11841 	/* Request was successfully executed by the HWRM. */
11842 	#define HWRM_ERR_CODE_SUCCESS	(UINT32_C(0x0))
11843 	/* THe HWRM failed to execute the request. */
11844 	#define HWRM_ERR_CODE_FAIL	(UINT32_C(0x1))
11845 	/*
11846 	 * The request contains invalid argument(s) or
11847 	 * input parameters.
11848 	 */
11849 	#define HWRM_ERR_CODE_INVALID_PARAMS	(UINT32_C(0x2))
11850 	/*
11851 	 * The requester is not allowed to access the
11852 	 * requested resource. This error code shall be
11853 	 * provided in a response to a request to query
11854 	 * or modify an existing resource that is not
11855 	 * accessible by the requester.
11856 	 */
11857 	#define HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED	(UINT32_C(0x3))
11858 	/*
11859 	 * The HWRM is unable to allocate the requested
11860 	 * resource. This code only applies to requests
11861 	 * for HWRM resource allocations.
11862 	 */
11863 	#define HWRM_ERR_CODE_RESOURCE_ALLOC_ERROR	(UINT32_C(0x4))
11864 	/* Invalid combination of flags is specified in the request. */
11865 	#define HWRM_ERR_CODE_INVALID_FLAGS	(UINT32_C(0x5))
11866 	/*
11867 	 * Invalid combination of enables fields is
11868 	 * specified in the request.
11869 	 */
11870 	#define HWRM_ERR_CODE_INVALID_ENABLES	(UINT32_C(0x6))
11871 	/*
11872 	 * Generic HWRM execution error that represents
11873 	 * an internal error.
11874 	 */
11875 	#define HWRM_ERR_CODE_HWRM_ERROR	(UINT32_C(0xf))
11876 	/* Unknown error */
11877 	#define HWRM_ERR_CODE_UNKNOWN_ERR	(UINT32_C(0xfffe))
11878 	/* Unsupported or invalid command */
11879 	#define HWRM_ERR_CODE_CMD_NOT_SUPPORTED	(UINT32_C(0xffff))
11880 	uint16_t unused_0[3];
11881 } __attribute__((packed));
11882 
11883 /* Output	(16 bytes) */
11884 struct hwrm_err_output {
11885 	uint16_t error_code;
11886 	/*
11887 	 * Pass/Fail or error type Note: receiver to verify the in
11888 	 * parameters, and fail the call with an error when appropriate
11889 	 */
11890 	uint16_t req_type;
11891 	/* This field returns the type of original request. */
11892 	uint16_t seq_id;
11893 	/* This field provides original sequence number of the command. */
11894 	uint16_t resp_len;
11895 	/*
11896 	 * This field is the length of the response in bytes. The last
11897 	 * byte of the response is a valid flag that will read as '1'
11898 	 * when the command has been completely written to memory.
11899 	 */
11900 	uint32_t opaque_0;
11901 	/* debug info for this error response. */
11902 	uint16_t opaque_1;
11903 	/* debug info for this error response. */
11904 	uint8_t cmd_err;
11905 	/*
11906 	 * In the case of an error response, command specific error code
11907 	 * is returned in this field.
11908 	 */
11909 	uint8_t valid;
11910 	/*
11911 	 * This field is used in Output records to indicate that the
11912 	 * output is completely written to RAM. This field should be
11913 	 * read as '1' to indicate that the output has been completely
11914 	 * written. When writing a command completion or response to an
11915 	 * internal processor, the order of writes has to be such that
11916 	 * this field is written last.
11917 	 */
11918 } __attribute__((packed));
11919 
11920 /* Port Tx Statistics Formats	(408 bytes) */
11921 struct tx_port_stats {
11922 	uint64_t tx_64b_frames;
11923 	/* Total Number of 64 Bytes frames transmitted */
11924 	uint64_t tx_65b_127b_frames;
11925 	/* Total Number of 65-127 Bytes frames transmitted */
11926 	uint64_t tx_128b_255b_frames;
11927 	/* Total Number of 128-255 Bytes frames transmitted */
11928 	uint64_t tx_256b_511b_frames;
11929 	/* Total Number of 256-511 Bytes frames transmitted */
11930 	uint64_t tx_512b_1023b_frames;
11931 	/* Total Number of 512-1023 Bytes frames transmitted */
11932 	uint64_t tx_1024b_1518_frames;
11933 	/* Total Number of 1024-1518 Bytes frames transmitted */
11934 	uint64_t tx_good_vlan_frames;
11935 	/*
11936 	 * Total Number of each good VLAN	(exludes FCS errors) frame
11937 	 * transmitted which is 1519 to 1522 bytes in length inclusive
11938 	 *	(excluding framing bits but including FCS bytes).
11939 	 */
11940 	uint64_t tx_1519b_2047_frames;
11941 	/* Total Number of 1519-2047 Bytes frames transmitted */
11942 	uint64_t tx_2048b_4095b_frames;
11943 	/* Total Number of 2048-4095 Bytes frames transmitted */
11944 	uint64_t tx_4096b_9216b_frames;
11945 	/* Total Number of 4096-9216 Bytes frames transmitted */
11946 	uint64_t tx_9217b_16383b_frames;
11947 	/* Total Number of 9217-16383 Bytes frames transmitted */
11948 	uint64_t tx_good_frames;
11949 	/* Total Number of good frames transmitted */
11950 	uint64_t tx_total_frames;
11951 	/* Total Number of frames transmitted */
11952 	uint64_t tx_ucast_frames;
11953 	/* Total number of unicast frames transmitted */
11954 	uint64_t tx_mcast_frames;
11955 	/* Total number of multicast frames transmitted */
11956 	uint64_t tx_bcast_frames;
11957 	/* Total number of broadcast frames transmitted */
11958 	uint64_t tx_pause_frames;
11959 	/* Total number of PAUSE control frames transmitted */
11960 	uint64_t tx_pfc_frames;
11961 	/* Total number of PFC/per-priority PAUSE control frames transmitted */
11962 	uint64_t tx_jabber_frames;
11963 	/* Total number of jabber frames transmitted */
11964 	uint64_t tx_fcs_err_frames;
11965 	/* Total number of frames transmitted with FCS error */
11966 	uint64_t tx_control_frames;
11967 	/* Total number of control frames transmitted */
11968 	uint64_t tx_oversz_frames;
11969 	/* Total number of over-sized frames transmitted */
11970 	uint64_t tx_single_dfrl_frames;
11971 	/* Total number of frames with single deferral */
11972 	uint64_t tx_multi_dfrl_frames;
11973 	/* Total number of frames with multiple deferrals */
11974 	uint64_t tx_single_coll_frames;
11975 	/* Total number of frames with single collision */
11976 	uint64_t tx_multi_coll_frames;
11977 	/* Total number of frames with multiple collisions */
11978 	uint64_t tx_late_coll_frames;
11979 	/* Total number of frames with late collisions */
11980 	uint64_t tx_excessive_coll_frames;
11981 	/* Total number of frames with excessive collisions */
11982 	uint64_t tx_frag_frames;
11983 	/* Total number of fragmented frames transmitted */
11984 	uint64_t tx_err;
11985 	/* Total number of transmit errors */
11986 	uint64_t tx_tagged_frames;
11987 	/* Total number of single VLAN tagged frames transmitted */
11988 	uint64_t tx_dbl_tagged_frames;
11989 	/* Total number of double VLAN tagged frames transmitted */
11990 	uint64_t tx_runt_frames;
11991 	/* Total number of runt frames transmitted */
11992 	uint64_t tx_fifo_underruns;
11993 	/* Total number of TX FIFO under runs */
11994 	uint64_t tx_pfc_ena_frames_pri0;
11995 	/*
11996 	 * Total number of PFC frames with PFC enabled bit for Pri 0
11997 	 * transmitted
11998 	 */
11999 	uint64_t tx_pfc_ena_frames_pri1;
12000 	/*
12001 	 * Total number of PFC frames with PFC enabled bit for Pri 1
12002 	 * transmitted
12003 	 */
12004 	uint64_t tx_pfc_ena_frames_pri2;
12005 	/*
12006 	 * Total number of PFC frames with PFC enabled bit for Pri 2
12007 	 * transmitted
12008 	 */
12009 	uint64_t tx_pfc_ena_frames_pri3;
12010 	/*
12011 	 * Total number of PFC frames with PFC enabled bit for Pri 3
12012 	 * transmitted
12013 	 */
12014 	uint64_t tx_pfc_ena_frames_pri4;
12015 	/*
12016 	 * Total number of PFC frames with PFC enabled bit for Pri 4
12017 	 * transmitted
12018 	 */
12019 	uint64_t tx_pfc_ena_frames_pri5;
12020 	/*
12021 	 * Total number of PFC frames with PFC enabled bit for Pri 5
12022 	 * transmitted
12023 	 */
12024 	uint64_t tx_pfc_ena_frames_pri6;
12025 	/*
12026 	 * Total number of PFC frames with PFC enabled bit for Pri 6
12027 	 * transmitted
12028 	 */
12029 	uint64_t tx_pfc_ena_frames_pri7;
12030 	/*
12031 	 * Total number of PFC frames with PFC enabled bit for Pri 7
12032 	 * transmitted
12033 	 */
12034 	uint64_t tx_eee_lpi_events;
12035 	/* Total number of EEE LPI Events on TX */
12036 	uint64_t tx_eee_lpi_duration;
12037 	/* EEE LPI Duration Counter on TX */
12038 	uint64_t tx_llfc_logical_msgs;
12039 	/*
12040 	 * Total number of Link Level Flow Control	(LLFC) messages
12041 	 * transmitted
12042 	 */
12043 	uint64_t tx_hcfc_msgs;
12044 	/* Total number of HCFC messages transmitted */
12045 	uint64_t tx_total_collisions;
12046 	/* Total number of TX collisions */
12047 	uint64_t tx_bytes;
12048 	/* Total number of transmitted bytes */
12049 	uint64_t tx_xthol_frames;
12050 	/* Total number of end-to-end HOL frames */
12051 	uint64_t tx_stat_discard;
12052 	/* Total Tx Drops per Port reported by STATS block */
12053 	uint64_t tx_stat_error;
12054 	/* Total Tx Error Drops per Port reported by STATS block */
12055 } __attribute__((packed));
12056 
12057 /* Port Rx Statistics Formats	(528 bytes) */
12058 struct rx_port_stats {
12059 	uint64_t rx_64b_frames;
12060 	/* Total Number of 64 Bytes frames received */
12061 	uint64_t rx_65b_127b_frames;
12062 	/* Total Number of 65-127 Bytes frames received */
12063 	uint64_t rx_128b_255b_frames;
12064 	/* Total Number of 128-255 Bytes frames received */
12065 	uint64_t rx_256b_511b_frames;
12066 	/* Total Number of 256-511 Bytes frames received */
12067 	uint64_t rx_512b_1023b_frames;
12068 	/* Total Number of 512-1023 Bytes frames received */
12069 	uint64_t rx_1024b_1518_frames;
12070 	/* Total Number of 1024-1518 Bytes frames received */
12071 	uint64_t rx_good_vlan_frames;
12072 	/*
12073 	 * Total Number of each good VLAN	(exludes FCS errors) frame
12074 	 * received which is 1519 to 1522 bytes in length inclusive
12075 	 *	(excluding framing bits but including FCS bytes).
12076 	 */
12077 	uint64_t rx_1519b_2047b_frames;
12078 	/* Total Number of 1519-2047 Bytes frames received */
12079 	uint64_t rx_2048b_4095b_frames;
12080 	/* Total Number of 2048-4095 Bytes frames received */
12081 	uint64_t rx_4096b_9216b_frames;
12082 	/* Total Number of 4096-9216 Bytes frames received */
12083 	uint64_t rx_9217b_16383b_frames;
12084 	/* Total Number of 9217-16383 Bytes frames received */
12085 	uint64_t rx_total_frames;
12086 	/* Total number of frames received */
12087 	uint64_t rx_ucast_frames;
12088 	/* Total number of unicast frames received */
12089 	uint64_t rx_mcast_frames;
12090 	/* Total number of multicast frames received */
12091 	uint64_t rx_bcast_frames;
12092 	/* Total number of broadcast frames received */
12093 	uint64_t rx_fcs_err_frames;
12094 	/* Total number of received frames with FCS error */
12095 	uint64_t rx_ctrl_frames;
12096 	/* Total number of control frames received */
12097 	uint64_t rx_pause_frames;
12098 	/* Total number of PAUSE frames received */
12099 	uint64_t rx_pfc_frames;
12100 	/* Total number of PFC frames received */
12101 	uint64_t rx_unsupported_opcode_frames;
12102 	/* Total number of frames received with an unsupported opcode */
12103 	uint64_t rx_unsupported_da_pausepfc_frames;
12104 	/*
12105 	 * Total number of frames received with an unsupported DA for
12106 	 * pause and PFC
12107 	 */
12108 	uint64_t rx_wrong_sa_frames;
12109 	/* Total number of frames received with an unsupported SA */
12110 	uint64_t rx_align_err_frames;
12111 	/* Total number of received packets with alignment error */
12112 	uint64_t rx_oor_len_frames;
12113 	/* Total number of received frames with out-of-range length */
12114 	uint64_t rx_code_err_frames;
12115 	/* Total number of received frames with error termination */
12116 	uint64_t rx_false_carrier_frames;
12117 	/*
12118 	 * Total number of received frames with a false carrier is
12119 	 * detected during idle, as defined by RX_ER samples active and
12120 	 * RXD is 0xE. The event is reported along with the statistics
12121 	 * generated on the next received frame. Only one false carrier
12122 	 * condition can be detected and logged between frames. Carrier
12123 	 * event, valid for 10M/100M speed modes only.
12124 	 */
12125 	uint64_t rx_ovrsz_frames;
12126 	/* Total number of over-sized frames received */
12127 	uint64_t rx_jbr_frames;
12128 	/* Total number of jabber packets received */
12129 	uint64_t rx_mtu_err_frames;
12130 	/* Total number of received frames with MTU error */
12131 	uint64_t rx_match_crc_frames;
12132 	/* Total number of received frames with CRC match */
12133 	uint64_t rx_promiscuous_frames;
12134 	/* Total number of frames received promiscuously */
12135 	uint64_t rx_tagged_frames;
12136 	/* Total number of received frames with one or two VLAN tags */
12137 	uint64_t rx_double_tagged_frames;
12138 	/* Total number of received frames with two VLAN tags */
12139 	uint64_t rx_trunc_frames;
12140 	/* Total number of truncated frames received */
12141 	uint64_t rx_good_frames;
12142 	/* Total number of good frames	(without errors) received */
12143 	uint64_t rx_pfc_xon2xoff_frames_pri0;
12144 	/*
12145 	 * Total number of received PFC frames with transition from XON
12146 	 * to XOFF on Pri 0
12147 	 */
12148 	uint64_t rx_pfc_xon2xoff_frames_pri1;
12149 	/*
12150 	 * Total number of received PFC frames with transition from XON
12151 	 * to XOFF on Pri 1
12152 	 */
12153 	uint64_t rx_pfc_xon2xoff_frames_pri2;
12154 	/*
12155 	 * Total number of received PFC frames with transition from XON
12156 	 * to XOFF on Pri 2
12157 	 */
12158 	uint64_t rx_pfc_xon2xoff_frames_pri3;
12159 	/*
12160 	 * Total number of received PFC frames with transition from XON
12161 	 * to XOFF on Pri 3
12162 	 */
12163 	uint64_t rx_pfc_xon2xoff_frames_pri4;
12164 	/*
12165 	 * Total number of received PFC frames with transition from XON
12166 	 * to XOFF on Pri 4
12167 	 */
12168 	uint64_t rx_pfc_xon2xoff_frames_pri5;
12169 	/*
12170 	 * Total number of received PFC frames with transition from XON
12171 	 * to XOFF on Pri 5
12172 	 */
12173 	uint64_t rx_pfc_xon2xoff_frames_pri6;
12174 	/*
12175 	 * Total number of received PFC frames with transition from XON
12176 	 * to XOFF on Pri 6
12177 	 */
12178 	uint64_t rx_pfc_xon2xoff_frames_pri7;
12179 	/*
12180 	 * Total number of received PFC frames with transition from XON
12181 	 * to XOFF on Pri 7
12182 	 */
12183 	uint64_t rx_pfc_ena_frames_pri0;
12184 	/*
12185 	 * Total number of received PFC frames with PFC enabled bit for
12186 	 * Pri 0
12187 	 */
12188 	uint64_t rx_pfc_ena_frames_pri1;
12189 	/*
12190 	 * Total number of received PFC frames with PFC enabled bit for
12191 	 * Pri 1
12192 	 */
12193 	uint64_t rx_pfc_ena_frames_pri2;
12194 	/*
12195 	 * Total number of received PFC frames with PFC enabled bit for
12196 	 * Pri 2
12197 	 */
12198 	uint64_t rx_pfc_ena_frames_pri3;
12199 	/*
12200 	 * Total number of received PFC frames with PFC enabled bit for
12201 	 * Pri 3
12202 	 */
12203 	uint64_t rx_pfc_ena_frames_pri4;
12204 	/*
12205 	 * Total number of received PFC frames with PFC enabled bit for
12206 	 * Pri 4
12207 	 */
12208 	uint64_t rx_pfc_ena_frames_pri5;
12209 	/*
12210 	 * Total number of received PFC frames with PFC enabled bit for
12211 	 * Pri 5
12212 	 */
12213 	uint64_t rx_pfc_ena_frames_pri6;
12214 	/*
12215 	 * Total number of received PFC frames with PFC enabled bit for
12216 	 * Pri 6
12217 	 */
12218 	uint64_t rx_pfc_ena_frames_pri7;
12219 	/*
12220 	 * Total number of received PFC frames with PFC enabled bit for
12221 	 * Pri 7
12222 	 */
12223 	uint64_t rx_sch_crc_err_frames;
12224 	/* Total Number of frames received with SCH CRC error */
12225 	uint64_t rx_undrsz_frames;
12226 	/* Total Number of under-sized frames received */
12227 	uint64_t rx_frag_frames;
12228 	/* Total Number of fragmented frames received */
12229 	uint64_t rx_eee_lpi_events;
12230 	/* Total number of RX EEE LPI Events */
12231 	uint64_t rx_eee_lpi_duration;
12232 	/* EEE LPI Duration Counter on RX */
12233 	uint64_t rx_llfc_physical_msgs;
12234 	/*
12235 	 * Total number of physical type Link Level Flow Control	(LLFC)
12236 	 * messages received
12237 	 */
12238 	uint64_t rx_llfc_logical_msgs;
12239 	/*
12240 	 * Total number of logical type Link Level Flow Control	(LLFC)
12241 	 * messages received
12242 	 */
12243 	uint64_t rx_llfc_msgs_with_crc_err;
12244 	/*
12245 	 * Total number of logical type Link Level Flow Control	(LLFC)
12246 	 * messages received with CRC error
12247 	 */
12248 	uint64_t rx_hcfc_msgs;
12249 	/* Total number of HCFC messages received */
12250 	uint64_t rx_hcfc_msgs_with_crc_err;
12251 	/* Total number of HCFC messages received with CRC error */
12252 	uint64_t rx_bytes;
12253 	/* Total number of received bytes */
12254 	uint64_t rx_runt_bytes;
12255 	/* Total number of bytes received in runt frames */
12256 	uint64_t rx_runt_frames;
12257 	/* Total number of runt frames received */
12258 	uint64_t rx_stat_discard;
12259 	/* Total Rx Discards per Port reported by STATS block */
12260 	uint64_t rx_stat_err;
12261 	/* Total Rx Error Drops per Port reported by STATS block */
12262 } __attribute__((packed));
12263 
12264 /* Periodic Statistics Context DMA to host	(160 bytes) */
12265 /*
12266  * per-context HW statistics -- chip view
12267  */
12268 
12269 struct ctx_hw_stats64 {
12270 	uint64_t rx_ucast_pkts;
12271 	uint64_t rx_mcast_pkts;
12272 	uint64_t rx_bcast_pkts;
12273 	uint64_t rx_drop_pkts;
12274 	uint64_t rx_discard_pkts;
12275 	uint64_t rx_ucast_bytes;
12276 	uint64_t rx_mcast_bytes;
12277 	uint64_t rx_bcast_bytes;
12278 
12279 	uint64_t tx_ucast_pkts;
12280 	uint64_t tx_mcast_pkts;
12281 	uint64_t tx_bcast_pkts;
12282 	uint64_t tx_drop_pkts;
12283 	uint64_t tx_discard_pkts;
12284 	uint64_t tx_ucast_bytes;
12285 	uint64_t tx_mcast_bytes;
12286 	uint64_t tx_bcast_bytes;
12287 
12288 	uint64_t tpa_pkts;
12289 	uint64_t tpa_bytes;
12290 	uint64_t tpa_events;
12291 	uint64_t tpa_aborts;
12292 } __attribute__((packed));
12293 
12294 #endif /* _HSI_STRUCT_DEF_DPDK_ */
12295