xref: /dpdk/drivers/net/bnxt/hsi_struct_def_dpdk.h (revision 26469260)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2014-2022 Broadcom Inc.
3  * All rights reserved.
4  *
5  * DO NOT MODIFY!!! This file is automatically generated.
6  */
7 
8 #ifndef _HSI_STRUCT_DEF_DPDK_H_
9 #define _HSI_STRUCT_DEF_DPDK_H_
10 
11 /* This is the HWRM command header. */
12 /* hwrm_cmd_hdr (size:128b/16B) */
13 struct hwrm_cmd_hdr {
14 	/* The HWRM command request type. */
15 	uint16_t	req_type;
16 	/*
17 	 * The completion ring to send the completion event on. This should
18 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
19 	 */
20 	uint16_t	cmpl_ring;
21 	/*
22 	 * The sequence ID is used by the driver for tracking multiple
23 	 * commands. This ID is treated as opaque data by the firmware and
24 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
25 	 */
26 	uint16_t	seq_id;
27 	/*
28 	 * The target ID of the command:
29 	 * * 0x0-0xFFF8 - The function ID
30 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
31 	 * * 0xFFFD - Reserved for user-space HWRM interface
32 	 * * 0xFFFF - HWRM
33 	 */
34 	uint16_t	target_id;
35 	/*
36 	 * A physical address pointer pointing to a host buffer that the
37 	 * command's response data will be written. This can be either a host
38 	 * physical address (HPA) or a guest physical address (GPA) and must
39 	 * point to a physically contiguous block of memory.
40 	 */
41 	uint64_t	resp_addr;
42 } __rte_packed;
43 
44 /* This is the HWRM response header. */
45 /* hwrm_resp_hdr (size:64b/8B) */
46 struct hwrm_resp_hdr {
47 	/* The specific error status for the command. */
48 	uint16_t	error_code;
49 	/* The HWRM command request type. */
50 	uint16_t	req_type;
51 	/* The sequence ID from the original command. */
52 	uint16_t	seq_id;
53 	/* The length of the response data in number of bytes. */
54 	uint16_t	resp_len;
55 } __rte_packed;
56 
57 /*
58  * TLV encapsulated message. Use the TLV type field of the
59  * TLV to determine the type of message encapsulated.
60  */
61 #define CMD_DISCR_TLV_ENCAP UINT32_C(0x8000)
62 #define CMD_DISCR_LAST     CMD_DISCR_TLV_ENCAP
63 
64 
65 /* HWRM request message */
66 #define TLV_TYPE_HWRM_REQUEST                    UINT32_C(0x1)
67 /* HWRM response message */
68 #define TLV_TYPE_HWRM_RESPONSE                   UINT32_C(0x2)
69 /* RoCE slow path command */
70 #define TLV_TYPE_ROCE_SP_COMMAND                 UINT32_C(0x3)
71 /* RoCE slow path command to query CC Gen1 support. */
72 #define TLV_TYPE_QUERY_ROCE_CC_GEN1              UINT32_C(0x4)
73 /* RoCE slow path command to modify CC Gen1 support. */
74 #define TLV_TYPE_MODIFY_ROCE_CC_GEN1             UINT32_C(0x5)
75 /* Engine CKV - The Alias key EC curve and ECC public key information. */
76 #define TLV_TYPE_ENGINE_CKV_ALIAS_ECC_PUBLIC_KEY UINT32_C(0x8001)
77 /* Engine CKV - Initialization vector. */
78 #define TLV_TYPE_ENGINE_CKV_IV                   UINT32_C(0x8003)
79 /* Engine CKV - Authentication tag. */
80 #define TLV_TYPE_ENGINE_CKV_AUTH_TAG             UINT32_C(0x8004)
81 /* Engine CKV - The encrypted data. */
82 #define TLV_TYPE_ENGINE_CKV_CIPHERTEXT           UINT32_C(0x8005)
83 /* Engine CKV - Supported host_algorithms. */
84 #define TLV_TYPE_ENGINE_CKV_HOST_ALGORITHMS      UINT32_C(0x8006)
85 /* Engine CKV - The Host EC curve name and ECC public key information. */
86 #define TLV_TYPE_ENGINE_CKV_HOST_ECC_PUBLIC_KEY  UINT32_C(0x8007)
87 /* Engine CKV - The ECDSA signature. */
88 #define TLV_TYPE_ENGINE_CKV_ECDSA_SIGNATURE      UINT32_C(0x8008)
89 /* Engine CKV - The firmware EC curve name and ECC public key information. */
90 #define TLV_TYPE_ENGINE_CKV_FW_ECC_PUBLIC_KEY    UINT32_C(0x8009)
91 /* Engine CKV - Supported firmware algorithms. */
92 #define TLV_TYPE_ENGINE_CKV_FW_ALGORITHMS        UINT32_C(0x800a)
93 #define TLV_TYPE_LAST \
94 	TLV_TYPE_ENGINE_CKV_FW_ALGORITHMS
95 
96 
97 /* tlv (size:64b/8B) */
98 struct tlv {
99 	/*
100 	 * The command discriminator is used to differentiate between various
101 	 * types of HWRM messages. This includes legacy HWRM and RoCE slowpath
102 	 * command messages as well as newer TLV encapsulated HWRM commands.
103 	 *
104 	 * For TLV encapsulated messages this field must be 0x8000.
105 	 */
106 	uint16_t	cmd_discr;
107 	uint8_t	reserved_8b;
108 	uint8_t	flags;
109 	/*
110 	 * Indicates the presence of additional TLV encapsulated data
111 	 * follows this TLV.
112 	 */
113 	#define TLV_FLAGS_MORE         UINT32_C(0x1)
114 	/* Last TLV in a sequence of TLVs. */
115 	#define TLV_FLAGS_MORE_LAST      UINT32_C(0x0)
116 	/* More TLVs follow this TLV. */
117 	#define TLV_FLAGS_MORE_NOT_LAST  UINT32_C(0x1)
118 	/*
119 	 * When an HWRM receiver detects a TLV type that it does not
120 	 * support with the TLV required flag set, the receiver must
121 	 * reject the HWRM message with an error code indicating an
122 	 * unsupported TLV type.
123 	 */
124 	#define TLV_FLAGS_REQUIRED     UINT32_C(0x2)
125 	/* No */
126 	#define TLV_FLAGS_REQUIRED_NO    (UINT32_C(0x0) << 1)
127 	/* Yes */
128 	#define TLV_FLAGS_REQUIRED_YES   (UINT32_C(0x1) << 1)
129 	#define TLV_FLAGS_REQUIRED_LAST TLV_FLAGS_REQUIRED_YES
130 	/*
131 	 * This field defines the TLV type value which is divided into
132 	 * two ranges to differentiate between global and local TLV types.
133 	 * Global TLV types must be unique across all defined TLV types.
134 	 * Local TLV types are valid only for extensions to a given
135 	 * HWRM message and may be repeated across different HWRM message
136 	 * types. There is a direct correlation of each HWRM message type
137 	 * to a single global TLV type value.
138 	 *
139 	 * Global TLV range: `0 - (63k-1)`
140 	 *
141 	 * Local TLV range: `63k - (64k-1)`
142 	 */
143 	uint16_t	tlv_type;
144 	/*
145 	 * Length of the message data encapsulated by this TLV in bytes.
146 	 * This length does not include the size of the TLV header itself
147 	 * and it must be an integer multiple of 8B.
148 	 */
149 	uint16_t	length;
150 } __rte_packed;
151 
152 /* Input */
153 /* input (size:128b/16B) */
154 struct input {
155 	/*
156 	 * This value indicates what type of request this is.  The format
157 	 * for the rest of the command is determined by this field.
158 	 */
159 	uint16_t	req_type;
160 	/*
161 	 * This value indicates the what completion ring the request will
162 	 * be optionally completed on.  If the value is -1, then no
163 	 * CR completion will be generated.  Any other value must be a
164 	 * valid CR ring_id value for this function.
165 	 */
166 	uint16_t	cmpl_ring;
167 	/* This value indicates the command sequence number. */
168 	uint16_t	seq_id;
169 	/*
170 	 * Target ID of this command.
171 	 *
172 	 * 0x0 - 0xFFF8 - Used for function ids
173 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors
174 	 * 0xFFFF - HWRM
175 	 */
176 	uint16_t	target_id;
177 	/*
178 	 * This is the host address where the response will be written
179 	 * when the request is complete.  This area must be 16B aligned
180 	 * and must be cleared to zero before the request is made.
181 	 */
182 	uint64_t	resp_addr;
183 } __rte_packed;
184 
185 /* Output */
186 /* output (size:64b/8B) */
187 struct output {
188 	/*
189 	 * Pass/Fail or error type
190 	 *
191 	 * Note: receiver to verify the in parameters, and fail the call
192 	 * with an error when appropriate
193 	 */
194 	uint16_t	error_code;
195 	/* This field returns the type of original request. */
196 	uint16_t	req_type;
197 	/* This field provides original sequence number of the command. */
198 	uint16_t	seq_id;
199 	/*
200 	 * This field is the length of the response in bytes.  The
201 	 * last byte of the response is a valid flag that will read
202 	 * as '1' when the command has been completely written to
203 	 * memory.
204 	 */
205 	uint16_t	resp_len;
206 } __rte_packed;
207 
208 /* Short Command Structure */
209 /* hwrm_short_input (size:128b/16B) */
210 struct hwrm_short_input {
211 	/*
212 	 * This field indicates the type of request in the request buffer.
213 	 * The format for the rest of the command (request) is determined
214 	 * by this field.
215 	 */
216 	uint16_t	req_type;
217 	/*
218 	 * This field indicates a signature that is used to identify short
219 	 * form of the command listed here. This field shall be set to
220 	 * 17185 (0x4321).
221 	 */
222 	uint16_t	signature;
223 	/* Signature indicating this is a short form of HWRM command */
224 	#define HWRM_SHORT_INPUT_SIGNATURE_SHORT_CMD UINT32_C(0x4321)
225 	#define HWRM_SHORT_INPUT_SIGNATURE_LAST \
226 		HWRM_SHORT_INPUT_SIGNATURE_SHORT_CMD
227 	/* The target ID of the command */
228 	uint16_t	target_id;
229 	/* Default target_id (0x0) to maintain compatibility with old driver */
230 	#define HWRM_SHORT_INPUT_TARGET_ID_DEFAULT UINT32_C(0x0)
231 	/* Reserved for user-space HWRM interface */
232 	#define HWRM_SHORT_INPUT_TARGET_ID_TOOLS   UINT32_C(0xfffd)
233 	#define HWRM_SHORT_INPUT_TARGET_ID_LAST \
234 		HWRM_SHORT_INPUT_TARGET_ID_TOOLS
235 	/* This value indicates the length of the request. */
236 	uint16_t	size;
237 	/*
238 	 * This is the host address where the request was written.
239 	 * This area must be 16B aligned.
240 	 */
241 	uint64_t	req_addr;
242 } __rte_packed;
243 
244 /*
245  * Command numbering
246  * # NOTE - definitions already in hwrm_req_type, in hwrm_types.yaml
247  * #        So only structure definition is provided here.
248  */
249 /* cmd_nums (size:64b/8B) */
250 struct cmd_nums {
251 	/*
252 	 * This version of the specification defines the commands listed in
253 	 * the table below. The following are general implementation
254 	 * requirements for these commands:
255 	 *
256 	 * # All commands listed below that are marked neither
257 	 * reserved nor experimental shall be implemented by the HWRM.
258 	 * # A HWRM client compliant to this specification should not use
259 	 * commands outside of the list below.
260 	 * # A HWRM client compliant to this specification should not use
261 	 * command numbers marked reserved below.
262 	 * # A command marked experimental below may not be implemented
263 	 * by the HWRM.
264 	 * # A command marked experimental may change in the
265 	 * future version of the HWRM specification.
266 	 * # A command not listed below may be implemented by the HWRM.
267 	 * The behavior of commands that are not listed below is outside
268 	 * the scope of this specification.
269 	 */
270 	uint16_t	req_type;
271 	#define HWRM_VER_GET                              UINT32_C(0x0)
272 	#define HWRM_FUNC_ECHO_RESPONSE                   UINT32_C(0xb)
273 	#define HWRM_ERROR_RECOVERY_QCFG                  UINT32_C(0xc)
274 	#define HWRM_FUNC_DRV_IF_CHANGE                   UINT32_C(0xd)
275 	#define HWRM_FUNC_BUF_UNRGTR                      UINT32_C(0xe)
276 	#define HWRM_FUNC_VF_CFG                          UINT32_C(0xf)
277 	/* Reserved for future use. */
278 	#define HWRM_RESERVED1                            UINT32_C(0x10)
279 	#define HWRM_FUNC_RESET                           UINT32_C(0x11)
280 	#define HWRM_FUNC_GETFID                          UINT32_C(0x12)
281 	#define HWRM_FUNC_VF_ALLOC                        UINT32_C(0x13)
282 	#define HWRM_FUNC_VF_FREE                         UINT32_C(0x14)
283 	#define HWRM_FUNC_QCAPS                           UINT32_C(0x15)
284 	#define HWRM_FUNC_QCFG                            UINT32_C(0x16)
285 	#define HWRM_FUNC_CFG                             UINT32_C(0x17)
286 	#define HWRM_FUNC_QSTATS                          UINT32_C(0x18)
287 	#define HWRM_FUNC_CLR_STATS                       UINT32_C(0x19)
288 	#define HWRM_FUNC_DRV_UNRGTR                      UINT32_C(0x1a)
289 	#define HWRM_FUNC_VF_RESC_FREE                    UINT32_C(0x1b)
290 	#define HWRM_FUNC_VF_VNIC_IDS_QUERY               UINT32_C(0x1c)
291 	#define HWRM_FUNC_DRV_RGTR                        UINT32_C(0x1d)
292 	#define HWRM_FUNC_DRV_QVER                        UINT32_C(0x1e)
293 	#define HWRM_FUNC_BUF_RGTR                        UINT32_C(0x1f)
294 	#define HWRM_PORT_PHY_CFG                         UINT32_C(0x20)
295 	#define HWRM_PORT_MAC_CFG                         UINT32_C(0x21)
296 	/* Experimental */
297 	#define HWRM_PORT_TS_QUERY                        UINT32_C(0x22)
298 	#define HWRM_PORT_QSTATS                          UINT32_C(0x23)
299 	#define HWRM_PORT_LPBK_QSTATS                     UINT32_C(0x24)
300 	/* Experimental */
301 	#define HWRM_PORT_CLR_STATS                       UINT32_C(0x25)
302 	/* Experimental */
303 	#define HWRM_PORT_LPBK_CLR_STATS                  UINT32_C(0x26)
304 	#define HWRM_PORT_PHY_QCFG                        UINT32_C(0x27)
305 	#define HWRM_PORT_MAC_QCFG                        UINT32_C(0x28)
306 	/* Experimental */
307 	#define HWRM_PORT_MAC_PTP_QCFG                    UINT32_C(0x29)
308 	#define HWRM_PORT_PHY_QCAPS                       UINT32_C(0x2a)
309 	#define HWRM_PORT_PHY_I2C_WRITE                   UINT32_C(0x2b)
310 	#define HWRM_PORT_PHY_I2C_READ                    UINT32_C(0x2c)
311 	#define HWRM_PORT_LED_CFG                         UINT32_C(0x2d)
312 	#define HWRM_PORT_LED_QCFG                        UINT32_C(0x2e)
313 	#define HWRM_PORT_LED_QCAPS                       UINT32_C(0x2f)
314 	#define HWRM_QUEUE_QPORTCFG                       UINT32_C(0x30)
315 	#define HWRM_QUEUE_QCFG                           UINT32_C(0x31)
316 	#define HWRM_QUEUE_CFG                            UINT32_C(0x32)
317 	#define HWRM_FUNC_VLAN_CFG                        UINT32_C(0x33)
318 	#define HWRM_FUNC_VLAN_QCFG                       UINT32_C(0x34)
319 	#define HWRM_QUEUE_PFCENABLE_QCFG                 UINT32_C(0x35)
320 	#define HWRM_QUEUE_PFCENABLE_CFG                  UINT32_C(0x36)
321 	#define HWRM_QUEUE_PRI2COS_QCFG                   UINT32_C(0x37)
322 	#define HWRM_QUEUE_PRI2COS_CFG                    UINT32_C(0x38)
323 	#define HWRM_QUEUE_COS2BW_QCFG                    UINT32_C(0x39)
324 	#define HWRM_QUEUE_COS2BW_CFG                     UINT32_C(0x3a)
325 	#define HWRM_QUEUE_DSCP_QCAPS                     UINT32_C(0x3b)
326 	#define HWRM_QUEUE_DSCP2PRI_QCFG                  UINT32_C(0x3c)
327 	#define HWRM_QUEUE_DSCP2PRI_CFG                   UINT32_C(0x3d)
328 	#define HWRM_VNIC_ALLOC                           UINT32_C(0x40)
329 	#define HWRM_VNIC_FREE                            UINT32_C(0x41)
330 	#define HWRM_VNIC_CFG                             UINT32_C(0x42)
331 	#define HWRM_VNIC_QCFG                            UINT32_C(0x43)
332 	#define HWRM_VNIC_TPA_CFG                         UINT32_C(0x44)
333 	/* Experimental */
334 	#define HWRM_VNIC_TPA_QCFG                        UINT32_C(0x45)
335 	#define HWRM_VNIC_RSS_CFG                         UINT32_C(0x46)
336 	#define HWRM_VNIC_RSS_QCFG                        UINT32_C(0x47)
337 	#define HWRM_VNIC_PLCMODES_CFG                    UINT32_C(0x48)
338 	#define HWRM_VNIC_PLCMODES_QCFG                   UINT32_C(0x49)
339 	#define HWRM_VNIC_QCAPS                           UINT32_C(0x4a)
340 	/* Updates specific fields in RX VNIC structure */
341 	#define HWRM_VNIC_UPDATE                          UINT32_C(0x4b)
342 	#define HWRM_RING_ALLOC                           UINT32_C(0x50)
343 	#define HWRM_RING_FREE                            UINT32_C(0x51)
344 	#define HWRM_RING_CMPL_RING_QAGGINT_PARAMS        UINT32_C(0x52)
345 	#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS     UINT32_C(0x53)
346 	#define HWRM_RING_AGGINT_QCAPS                    UINT32_C(0x54)
347 	#define HWRM_RING_SCHQ_ALLOC                      UINT32_C(0x55)
348 	#define HWRM_RING_SCHQ_CFG                        UINT32_C(0x56)
349 	#define HWRM_RING_SCHQ_FREE                       UINT32_C(0x57)
350 	#define HWRM_RING_RESET                           UINT32_C(0x5e)
351 	#define HWRM_RING_GRP_ALLOC                       UINT32_C(0x60)
352 	#define HWRM_RING_GRP_FREE                        UINT32_C(0x61)
353 	#define HWRM_RING_CFG                             UINT32_C(0x62)
354 	#define HWRM_RING_QCFG                            UINT32_C(0x63)
355 	/* Reserved for future use. */
356 	#define HWRM_RESERVED5                            UINT32_C(0x64)
357 	/* Reserved for future use. */
358 	#define HWRM_RESERVED6                            UINT32_C(0x65)
359 	#define HWRM_VNIC_RSS_COS_LB_CTX_ALLOC            UINT32_C(0x70)
360 	#define HWRM_VNIC_RSS_COS_LB_CTX_FREE             UINT32_C(0x71)
361 	#define HWRM_QUEUE_MPLS_QCAPS                     UINT32_C(0x80)
362 	#define HWRM_QUEUE_MPLSTC2PRI_QCFG                UINT32_C(0x81)
363 	#define HWRM_QUEUE_MPLSTC2PRI_CFG                 UINT32_C(0x82)
364 	#define HWRM_QUEUE_VLANPRI_QCAPS                  UINT32_C(0x83)
365 	#define HWRM_QUEUE_VLANPRI2PRI_QCFG               UINT32_C(0x84)
366 	#define HWRM_QUEUE_VLANPRI2PRI_CFG                UINT32_C(0x85)
367 	#define HWRM_QUEUE_GLOBAL_CFG                     UINT32_C(0x86)
368 	#define HWRM_QUEUE_GLOBAL_QCFG                    UINT32_C(0x87)
369 	#define HWRM_CFA_L2_FILTER_ALLOC                  UINT32_C(0x90)
370 	#define HWRM_CFA_L2_FILTER_FREE                   UINT32_C(0x91)
371 	#define HWRM_CFA_L2_FILTER_CFG                    UINT32_C(0x92)
372 	#define HWRM_CFA_L2_SET_RX_MASK                   UINT32_C(0x93)
373 	#define HWRM_CFA_VLAN_ANTISPOOF_CFG               UINT32_C(0x94)
374 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC              UINT32_C(0x95)
375 	#define HWRM_CFA_TUNNEL_FILTER_FREE               UINT32_C(0x96)
376 	/* Experimental */
377 	#define HWRM_CFA_ENCAP_RECORD_ALLOC               UINT32_C(0x97)
378 	/* Experimental */
379 	#define HWRM_CFA_ENCAP_RECORD_FREE                UINT32_C(0x98)
380 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC              UINT32_C(0x99)
381 	#define HWRM_CFA_NTUPLE_FILTER_FREE               UINT32_C(0x9a)
382 	#define HWRM_CFA_NTUPLE_FILTER_CFG                UINT32_C(0x9b)
383 	/* Experimental */
384 	#define HWRM_CFA_EM_FLOW_ALLOC                    UINT32_C(0x9c)
385 	/* Experimental */
386 	#define HWRM_CFA_EM_FLOW_FREE                     UINT32_C(0x9d)
387 	/* Experimental */
388 	#define HWRM_CFA_EM_FLOW_CFG                      UINT32_C(0x9e)
389 	#define HWRM_TUNNEL_DST_PORT_QUERY                UINT32_C(0xa0)
390 	#define HWRM_TUNNEL_DST_PORT_ALLOC                UINT32_C(0xa1)
391 	#define HWRM_TUNNEL_DST_PORT_FREE                 UINT32_C(0xa2)
392 	#define HWRM_STAT_CTX_ENG_QUERY                   UINT32_C(0xaf)
393 	#define HWRM_STAT_CTX_ALLOC                       UINT32_C(0xb0)
394 	#define HWRM_STAT_CTX_FREE                        UINT32_C(0xb1)
395 	#define HWRM_STAT_CTX_QUERY                       UINT32_C(0xb2)
396 	#define HWRM_STAT_CTX_CLR_STATS                   UINT32_C(0xb3)
397 	#define HWRM_PORT_QSTATS_EXT                      UINT32_C(0xb4)
398 	#define HWRM_PORT_PHY_MDIO_WRITE                  UINT32_C(0xb5)
399 	#define HWRM_PORT_PHY_MDIO_READ                   UINT32_C(0xb6)
400 	#define HWRM_PORT_PHY_MDIO_BUS_ACQUIRE            UINT32_C(0xb7)
401 	#define HWRM_PORT_PHY_MDIO_BUS_RELEASE            UINT32_C(0xb8)
402 	#define HWRM_PORT_QSTATS_EXT_PFC_WD               UINT32_C(0xb9)
403 	/* Reserved. */
404 	#define HWRM_RESERVED7                            UINT32_C(0xba)
405 	#define HWRM_PORT_TX_FIR_CFG                      UINT32_C(0xbb)
406 	#define HWRM_PORT_TX_FIR_QCFG                     UINT32_C(0xbc)
407 	#define HWRM_PORT_ECN_QSTATS                      UINT32_C(0xbd)
408 	#define HWRM_FW_LIVEPATCH_QUERY                   UINT32_C(0xbe)
409 	#define HWRM_FW_LIVEPATCH                         UINT32_C(0xbf)
410 	#define HWRM_FW_RESET                             UINT32_C(0xc0)
411 	#define HWRM_FW_QSTATUS                           UINT32_C(0xc1)
412 	#define HWRM_FW_HEALTH_CHECK                      UINT32_C(0xc2)
413 	#define HWRM_FW_SYNC                              UINT32_C(0xc3)
414 	#define HWRM_FW_STATE_QCAPS                       UINT32_C(0xc4)
415 	#define HWRM_FW_STATE_QUIESCE                     UINT32_C(0xc5)
416 	#define HWRM_FW_STATE_BACKUP                      UINT32_C(0xc6)
417 	#define HWRM_FW_STATE_RESTORE                     UINT32_C(0xc7)
418 	/* Experimental */
419 	#define HWRM_FW_SET_TIME                          UINT32_C(0xc8)
420 	/* Experimental */
421 	#define HWRM_FW_GET_TIME                          UINT32_C(0xc9)
422 	/* Experimental */
423 	#define HWRM_FW_SET_STRUCTURED_DATA               UINT32_C(0xca)
424 	/* Experimental */
425 	#define HWRM_FW_GET_STRUCTURED_DATA               UINT32_C(0xcb)
426 	/* Experimental */
427 	#define HWRM_FW_IPC_MAILBOX                       UINT32_C(0xcc)
428 	#define HWRM_FW_ECN_CFG                           UINT32_C(0xcd)
429 	#define HWRM_FW_ECN_QCFG                          UINT32_C(0xce)
430 	#define HWRM_FW_SECURE_CFG                        UINT32_C(0xcf)
431 	#define HWRM_EXEC_FWD_RESP                        UINT32_C(0xd0)
432 	#define HWRM_REJECT_FWD_RESP                      UINT32_C(0xd1)
433 	#define HWRM_FWD_RESP                             UINT32_C(0xd2)
434 	#define HWRM_FWD_ASYNC_EVENT_CMPL                 UINT32_C(0xd3)
435 	#define HWRM_OEM_CMD                              UINT32_C(0xd4)
436 	/* Tells the fw to run PRBS test on a given port and lane. */
437 	#define HWRM_PORT_PRBS_TEST                       UINT32_C(0xd5)
438 	#define HWRM_PORT_SFP_SIDEBAND_CFG                UINT32_C(0xd6)
439 	#define HWRM_PORT_SFP_SIDEBAND_QCFG               UINT32_C(0xd7)
440 	#define HWRM_FW_STATE_UNQUIESCE                   UINT32_C(0xd8)
441 	/* Tells the fw to collect dsc dump on a given port and lane. */
442 	#define HWRM_PORT_DSC_DUMP                        UINT32_C(0xd9)
443 	#define HWRM_PORT_EP_TX_QCFG                      UINT32_C(0xda)
444 	#define HWRM_PORT_EP_TX_CFG                       UINT32_C(0xdb)
445 	#define HWRM_TEMP_MONITOR_QUERY                   UINT32_C(0xe0)
446 	#define HWRM_REG_POWER_QUERY                      UINT32_C(0xe1)
447 	#define HWRM_CORE_FREQUENCY_QUERY                 UINT32_C(0xe2)
448 	#define HWRM_REG_POWER_HISTOGRAM                  UINT32_C(0xe3)
449 	#define HWRM_WOL_FILTER_ALLOC                     UINT32_C(0xf0)
450 	#define HWRM_WOL_FILTER_FREE                      UINT32_C(0xf1)
451 	#define HWRM_WOL_FILTER_QCFG                      UINT32_C(0xf2)
452 	#define HWRM_WOL_REASON_QCFG                      UINT32_C(0xf3)
453 	/* Experimental */
454 	#define HWRM_CFA_METER_QCAPS                      UINT32_C(0xf4)
455 	/* Experimental */
456 	#define HWRM_CFA_METER_PROFILE_ALLOC              UINT32_C(0xf5)
457 	/* Experimental */
458 	#define HWRM_CFA_METER_PROFILE_FREE               UINT32_C(0xf6)
459 	/* Experimental */
460 	#define HWRM_CFA_METER_PROFILE_CFG                UINT32_C(0xf7)
461 	/* Experimental */
462 	#define HWRM_CFA_METER_INSTANCE_ALLOC             UINT32_C(0xf8)
463 	/* Experimental */
464 	#define HWRM_CFA_METER_INSTANCE_FREE              UINT32_C(0xf9)
465 	/* Experimental */
466 	#define HWRM_CFA_METER_INSTANCE_CFG               UINT32_C(0xfa)
467 	/* Experimental */
468 	#define HWRM_CFA_VFR_ALLOC                        UINT32_C(0xfd)
469 	/* Experimental */
470 	#define HWRM_CFA_VFR_FREE                         UINT32_C(0xfe)
471 	/* Experimental */
472 	#define HWRM_CFA_VF_PAIR_ALLOC                    UINT32_C(0x100)
473 	/* Experimental */
474 	#define HWRM_CFA_VF_PAIR_FREE                     UINT32_C(0x101)
475 	/* Experimental */
476 	#define HWRM_CFA_VF_PAIR_INFO                     UINT32_C(0x102)
477 	/* Experimental */
478 	#define HWRM_CFA_FLOW_ALLOC                       UINT32_C(0x103)
479 	/* Experimental */
480 	#define HWRM_CFA_FLOW_FREE                        UINT32_C(0x104)
481 	/* Experimental */
482 	#define HWRM_CFA_FLOW_FLUSH                       UINT32_C(0x105)
483 	/* Experimental */
484 	#define HWRM_CFA_FLOW_STATS                       UINT32_C(0x106)
485 	/* Experimental */
486 	#define HWRM_CFA_FLOW_INFO                        UINT32_C(0x107)
487 	/* Experimental */
488 	#define HWRM_CFA_DECAP_FILTER_ALLOC               UINT32_C(0x108)
489 	/* Experimental */
490 	#define HWRM_CFA_DECAP_FILTER_FREE                UINT32_C(0x109)
491 	#define HWRM_CFA_VLAN_ANTISPOOF_QCFG              UINT32_C(0x10a)
492 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC       UINT32_C(0x10b)
493 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE        UINT32_C(0x10c)
494 	/* Experimental */
495 	#define HWRM_CFA_PAIR_ALLOC                       UINT32_C(0x10d)
496 	/* Experimental */
497 	#define HWRM_CFA_PAIR_FREE                        UINT32_C(0x10e)
498 	/* Experimental */
499 	#define HWRM_CFA_PAIR_INFO                        UINT32_C(0x10f)
500 	/* Experimental */
501 	#define HWRM_FW_IPC_MSG                           UINT32_C(0x110)
502 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO        UINT32_C(0x111)
503 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE       UINT32_C(0x112)
504 	/* Experimental */
505 	#define HWRM_CFA_FLOW_AGING_TIMER_RESET           UINT32_C(0x113)
506 	/* Experimental */
507 	#define HWRM_CFA_FLOW_AGING_CFG                   UINT32_C(0x114)
508 	/* Experimental */
509 	#define HWRM_CFA_FLOW_AGING_QCFG                  UINT32_C(0x115)
510 	/* Experimental */
511 	#define HWRM_CFA_FLOW_AGING_QCAPS                 UINT32_C(0x116)
512 	/* Experimental */
513 	#define HWRM_CFA_CTX_MEM_RGTR                     UINT32_C(0x117)
514 	/* Experimental */
515 	#define HWRM_CFA_CTX_MEM_UNRGTR                   UINT32_C(0x118)
516 	/* Experimental */
517 	#define HWRM_CFA_CTX_MEM_QCTX                     UINT32_C(0x119)
518 	/* Experimental */
519 	#define HWRM_CFA_CTX_MEM_QCAPS                    UINT32_C(0x11a)
520 	/* Experimental */
521 	#define HWRM_CFA_COUNTER_QCAPS                    UINT32_C(0x11b)
522 	/* Experimental */
523 	#define HWRM_CFA_COUNTER_CFG                      UINT32_C(0x11c)
524 	/* Experimental */
525 	#define HWRM_CFA_COUNTER_QCFG                     UINT32_C(0x11d)
526 	/* Experimental */
527 	#define HWRM_CFA_COUNTER_QSTATS                   UINT32_C(0x11e)
528 	/* Experimental */
529 	#define HWRM_CFA_TCP_FLAG_PROCESS_QCFG            UINT32_C(0x11f)
530 	/* Experimental */
531 	#define HWRM_CFA_EEM_QCAPS                        UINT32_C(0x120)
532 	/* Experimental */
533 	#define HWRM_CFA_EEM_CFG                          UINT32_C(0x121)
534 	/* Experimental */
535 	#define HWRM_CFA_EEM_QCFG                         UINT32_C(0x122)
536 	/* Experimental */
537 	#define HWRM_CFA_EEM_OP                           UINT32_C(0x123)
538 	/* Experimental */
539 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS              UINT32_C(0x124)
540 	/* Experimental - DEPRECATED */
541 	#define HWRM_CFA_TFLIB                            UINT32_C(0x125)
542 	/* Experimental */
543 	#define HWRM_CFA_LAG_GROUP_MEMBER_RGTR            UINT32_C(0x126)
544 	/* Experimental */
545 	#define HWRM_CFA_LAG_GROUP_MEMBER_UNRGTR          UINT32_C(0x127)
546 	/* Experimental */
547 	#define HWRM_CFA_TLS_FILTER_ALLOC                 UINT32_C(0x128)
548 	/* Experimental */
549 	#define HWRM_CFA_TLS_FILTER_FREE                  UINT32_C(0x129)
550 	/* Engine CKV - Get the current allocation status of keys provisioned in the key vault. */
551 	#define HWRM_ENGINE_CKV_STATUS                    UINT32_C(0x12e)
552 	/* Engine CKV - Add a new CKEK used to encrypt keys. */
553 	#define HWRM_ENGINE_CKV_CKEK_ADD                  UINT32_C(0x12f)
554 	/* Engine CKV - Delete a previously added CKEK. */
555 	#define HWRM_ENGINE_CKV_CKEK_DELETE               UINT32_C(0x130)
556 	/* Engine CKV - Add a new key to the key vault. */
557 	#define HWRM_ENGINE_CKV_KEY_ADD                   UINT32_C(0x131)
558 	/* Engine CKV - Delete a key from the key vault. */
559 	#define HWRM_ENGINE_CKV_KEY_DELETE                UINT32_C(0x132)
560 	/* Engine CKV - Delete all keys from the key vault. */
561 	#define HWRM_ENGINE_CKV_FLUSH                     UINT32_C(0x133)
562 	/* Engine CKV - Get random data. */
563 	#define HWRM_ENGINE_CKV_RNG_GET                   UINT32_C(0x134)
564 	/* Engine CKV - Generate and encrypt a new AES key. */
565 	#define HWRM_ENGINE_CKV_KEY_GEN                   UINT32_C(0x135)
566 	/* Engine CKV - Configure a label index with a label value. */
567 	#define HWRM_ENGINE_CKV_KEY_LABEL_CFG             UINT32_C(0x136)
568 	/* Engine CKV - Query a label */
569 	#define HWRM_ENGINE_CKV_KEY_LABEL_QCFG            UINT32_C(0x137)
570 	/* Engine - Query the available queue groups configuration. */
571 	#define HWRM_ENGINE_QG_CONFIG_QUERY               UINT32_C(0x13c)
572 	/* Engine - Query the queue groups assigned to a function. */
573 	#define HWRM_ENGINE_QG_QUERY                      UINT32_C(0x13d)
574 	/* Engine - Query the available queue group meter profile configuration. */
575 	#define HWRM_ENGINE_QG_METER_PROFILE_CONFIG_QUERY UINT32_C(0x13e)
576 	/* Engine - Query the configuration of a queue group meter profile. */
577 	#define HWRM_ENGINE_QG_METER_PROFILE_QUERY        UINT32_C(0x13f)
578 	/* Engine - Allocate a queue group meter profile. */
579 	#define HWRM_ENGINE_QG_METER_PROFILE_ALLOC        UINT32_C(0x140)
580 	/* Engine - Free a queue group meter profile. */
581 	#define HWRM_ENGINE_QG_METER_PROFILE_FREE         UINT32_C(0x141)
582 	/* Engine - Query the meters assigned to a queue group. */
583 	#define HWRM_ENGINE_QG_METER_QUERY                UINT32_C(0x142)
584 	/* Engine - Bind a queue group meter profile to a queue group. */
585 	#define HWRM_ENGINE_QG_METER_BIND                 UINT32_C(0x143)
586 	/* Engine - Unbind a queue group meter profile from a queue group. */
587 	#define HWRM_ENGINE_QG_METER_UNBIND               UINT32_C(0x144)
588 	/* Engine - Bind a queue group to a function. */
589 	#define HWRM_ENGINE_QG_FUNC_BIND                  UINT32_C(0x145)
590 	/* Engine - Query the scheduling group configuration. */
591 	#define HWRM_ENGINE_SG_CONFIG_QUERY               UINT32_C(0x146)
592 	/* Engine - Query the queue groups assigned to a scheduling group. */
593 	#define HWRM_ENGINE_SG_QUERY                      UINT32_C(0x147)
594 	/* Engine - Query the configuration of a scheduling group's meter profiles. */
595 	#define HWRM_ENGINE_SG_METER_QUERY                UINT32_C(0x148)
596 	/* Engine - Configure a scheduling group's meter profiles. */
597 	#define HWRM_ENGINE_SG_METER_CONFIG               UINT32_C(0x149)
598 	/* Engine - Bind a queue group to a scheduling group. */
599 	#define HWRM_ENGINE_SG_QG_BIND                    UINT32_C(0x14a)
600 	/* Engine - Unbind a queue group from its scheduling group. */
601 	#define HWRM_ENGINE_QG_SG_UNBIND                  UINT32_C(0x14b)
602 	/* Engine - Query the Engine configuration. */
603 	#define HWRM_ENGINE_CONFIG_QUERY                  UINT32_C(0x154)
604 	/* Engine - Configure the statistics accumulator for an Engine. */
605 	#define HWRM_ENGINE_STATS_CONFIG                  UINT32_C(0x155)
606 	/* Engine - Clear the statistics accumulator for an Engine. */
607 	#define HWRM_ENGINE_STATS_CLEAR                   UINT32_C(0x156)
608 	/* Engine - Query the statistics accumulator for an Engine. */
609 	#define HWRM_ENGINE_STATS_QUERY                   UINT32_C(0x157)
610 	/* Engine - Query statistics counters for continuous errors from all CDDIP Engines. */
611 	#define HWRM_ENGINE_STATS_QUERY_CONTINUOUS_ERROR  UINT32_C(0x158)
612 	/* Engine - Allocate an Engine RQ. */
613 	#define HWRM_ENGINE_RQ_ALLOC                      UINT32_C(0x15e)
614 	/* Engine - Free an Engine RQ. */
615 	#define HWRM_ENGINE_RQ_FREE                       UINT32_C(0x15f)
616 	/* Engine - Allocate an Engine CQ. */
617 	#define HWRM_ENGINE_CQ_ALLOC                      UINT32_C(0x160)
618 	/* Engine - Free an Engine CQ. */
619 	#define HWRM_ENGINE_CQ_FREE                       UINT32_C(0x161)
620 	/* Engine - Allocate an NQ. */
621 	#define HWRM_ENGINE_NQ_ALLOC                      UINT32_C(0x162)
622 	/* Engine - Free an NQ. */
623 	#define HWRM_ENGINE_NQ_FREE                       UINT32_C(0x163)
624 	/* Engine - Set the on-die RQE credit update location. */
625 	#define HWRM_ENGINE_ON_DIE_RQE_CREDITS            UINT32_C(0x164)
626 	/* Engine - Query the engine function configuration. */
627 	#define HWRM_ENGINE_FUNC_QCFG                     UINT32_C(0x165)
628 	/* Experimental */
629 	#define HWRM_FUNC_RESOURCE_QCAPS                  UINT32_C(0x190)
630 	/* Experimental */
631 	#define HWRM_FUNC_VF_RESOURCE_CFG                 UINT32_C(0x191)
632 	/* Experimental */
633 	#define HWRM_FUNC_BACKING_STORE_QCAPS             UINT32_C(0x192)
634 	/* Experimental */
635 	#define HWRM_FUNC_BACKING_STORE_CFG               UINT32_C(0x193)
636 	/* Experimental */
637 	#define HWRM_FUNC_BACKING_STORE_QCFG              UINT32_C(0x194)
638 	/* Configures the BW of any VF */
639 	#define HWRM_FUNC_VF_BW_CFG                       UINT32_C(0x195)
640 	/* Queries the BW of any VF */
641 	#define HWRM_FUNC_VF_BW_QCFG                      UINT32_C(0x196)
642 	/* Queries pf ids belong to specified host(s) */
643 	#define HWRM_FUNC_HOST_PF_IDS_QUERY               UINT32_C(0x197)
644 	/* Queries extended stats per function */
645 	#define HWRM_FUNC_QSTATS_EXT                      UINT32_C(0x198)
646 	/* Queries extended statistics context */
647 	#define HWRM_STAT_EXT_CTX_QUERY                   UINT32_C(0x199)
648 	/* Configure SoC packet DMA settings */
649 	#define HWRM_FUNC_SPD_CFG                         UINT32_C(0x19a)
650 	/* Query SoC packet DMA settings */
651 	#define HWRM_FUNC_SPD_QCFG                        UINT32_C(0x19b)
652 	/* PTP - Queries configuration of timesync IO pins. */
653 	#define HWRM_FUNC_PTP_PIN_QCFG                    UINT32_C(0x19c)
654 	/* PTP - Configuration of timesync IO pins. */
655 	#define HWRM_FUNC_PTP_PIN_CFG                     UINT32_C(0x19d)
656 	/* PTP - Configuration for disciplining PHC. */
657 	#define HWRM_FUNC_PTP_CFG                         UINT32_C(0x19e)
658 	/* PTP - Queries for PHC timestamps. */
659 	#define HWRM_FUNC_PTP_TS_QUERY                    UINT32_C(0x19f)
660 	/* PTP - Extended PTP configuration. */
661 	#define HWRM_FUNC_PTP_EXT_CFG                     UINT32_C(0x1a0)
662 	/* PTP - Query extended PTP configuration. */
663 	#define HWRM_FUNC_PTP_EXT_QCFG                    UINT32_C(0x1a1)
664 	/* The command is used to allocate KTLS or QUIC key contexts. */
665 	#define HWRM_FUNC_KEY_CTX_ALLOC                   UINT32_C(0x1a2)
666 	/* The is the new API to configure backing stores. */
667 	#define HWRM_FUNC_BACKING_STORE_CFG_V2            UINT32_C(0x1a3)
668 	/* The is the new API to query backing store configurations. */
669 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2           UINT32_C(0x1a4)
670 	/* To support doorbell pacing configuration. */
671 	#define HWRM_FUNC_DBR_PACING_CFG                  UINT32_C(0x1a5)
672 	/* To query doorbell pacing configuration. */
673 	#define HWRM_FUNC_DBR_PACING_QCFG                 UINT32_C(0x1a6)
674 	/*
675 	 * To broadcast the doorbell event to the drivers to
676 	 * initiate pacing of doorbells.
677 	 */
678 	#define HWRM_FUNC_DBR_PACING_BROADCAST_EVENT      UINT32_C(0x1a7)
679 	/* The is the new API to query backing store capabilities. */
680 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2          UINT32_C(0x1a8)
681 	/* Experimental */
682 	#define HWRM_SELFTEST_QLIST                       UINT32_C(0x200)
683 	/* Experimental */
684 	#define HWRM_SELFTEST_EXEC                        UINT32_C(0x201)
685 	/* Experimental */
686 	#define HWRM_SELFTEST_IRQ                         UINT32_C(0x202)
687 	/* Experimental */
688 	#define HWRM_SELFTEST_RETRIEVE_SERDES_DATA        UINT32_C(0x203)
689 	/* Experimental */
690 	#define HWRM_PCIE_QSTATS                          UINT32_C(0x204)
691 	/* Experimental */
692 	#define HWRM_MFG_FRU_WRITE_CONTROL                UINT32_C(0x205)
693 	/* Returns the current value of a free running counter from the device. */
694 	#define HWRM_MFG_TIMERS_QUERY                     UINT32_C(0x206)
695 	/* Experimental */
696 	#define HWRM_MFG_OTP_CFG                          UINT32_C(0x207)
697 	/* Experimental */
698 	#define HWRM_MFG_OTP_QCFG                         UINT32_C(0x208)
699 	/*
700 	 * Tells the fw to run the DMA read from the host and DMA write
701 	 * to the host test.
702 	 */
703 	#define HWRM_MFG_HDMA_TEST                        UINT32_C(0x209)
704 	/* Tells the fw to program the fru memory */
705 	#define HWRM_MFG_FRU_EEPROM_WRITE                 UINT32_C(0x20a)
706 	/* Tells the fw to read the fru memory */
707 	#define HWRM_MFG_FRU_EEPROM_READ                  UINT32_C(0x20b)
708 	/* Used to provision SoC software images */
709 	#define HWRM_MFG_SOC_IMAGE                        UINT32_C(0x20c)
710 	/* Retrieves the SoC status and image provisioning information */
711 	#define HWRM_MFG_SOC_QSTATUS                      UINT32_C(0x20d)
712 	/* Tells the fw to program the seeprom memory */
713 	#define HWRM_MFG_PARAM_SEEPROM_SYNC               UINT32_C(0x20e)
714 	/* Tells the fw to read the seeprom memory */
715 	#define HWRM_MFG_PARAM_SEEPROM_READ               UINT32_C(0x20f)
716 	/* Tells the fw to get the health of seeprom data */
717 	#define HWRM_MFG_PARAM_SEEPROM_HEALTH             UINT32_C(0x210)
718 	/*
719 	 * The command is used for certificate provisioning to export a
720 	 * Certificate Signing Request (CSR) from the device.
721 	 */
722 	#define HWRM_MFG_PRVSN_EXPORT_CSR                 UINT32_C(0x211)
723 	/*
724 	 * The command is used for certificate provisioning to import a
725 	 * CA-signed certificate chain to the device.
726 	 */
727 	#define HWRM_MFG_PRVSN_IMPORT_CERT                UINT32_C(0x212)
728 	/*
729 	 * The command is used for certificate provisioning to query the
730 	 * provisioned state.
731 	 */
732 	#define HWRM_MFG_PRVSN_GET_STATE                  UINT32_C(0x213)
733 	/*
734 	 * The command is used to get the hash of the NVM configuration that is
735 	 * calculated during firmware boot.
736 	 */
737 	#define HWRM_MFG_GET_NVM_MEASUREMENT              UINT32_C(0x214)
738 	/* Retrieves the PSOC status and provisioning information. */
739 	#define HWRM_MFG_PSOC_QSTATUS                     UINT32_C(0x215)
740 	/*
741 	 * This command allows manufacturing tool to determine which selftests
742 	 * are available to be run.
743 	 */
744 	#define HWRM_MFG_SELFTEST_QLIST                   UINT32_C(0x216)
745 	/*
746 	 * This command allows manufacturing tool to request which selftests
747 	 * to run.
748 	 */
749 	#define HWRM_MFG_SELFTEST_EXEC                    UINT32_C(0x217)
750 	/* Experimental */
751 	#define HWRM_TF                                   UINT32_C(0x2bc)
752 	/* Experimental */
753 	#define HWRM_TF_VERSION_GET                       UINT32_C(0x2bd)
754 	/* Experimental */
755 	#define HWRM_TF_SESSION_OPEN                      UINT32_C(0x2c6)
756 	/* Experimental */
757 	#define HWRM_TF_SESSION_ATTACH                    UINT32_C(0x2c7)
758 	/* Experimental */
759 	#define HWRM_TF_SESSION_REGISTER                  UINT32_C(0x2c8)
760 	/* Experimental */
761 	#define HWRM_TF_SESSION_UNREGISTER                UINT32_C(0x2c9)
762 	/* Experimental */
763 	#define HWRM_TF_SESSION_CLOSE                     UINT32_C(0x2ca)
764 	/* Experimental */
765 	#define HWRM_TF_SESSION_QCFG                      UINT32_C(0x2cb)
766 	/* Experimental */
767 	#define HWRM_TF_SESSION_RESC_QCAPS                UINT32_C(0x2cc)
768 	/* Experimental */
769 	#define HWRM_TF_SESSION_RESC_ALLOC                UINT32_C(0x2cd)
770 	/* Experimental */
771 	#define HWRM_TF_SESSION_RESC_FREE                 UINT32_C(0x2ce)
772 	/* Experimental */
773 	#define HWRM_TF_SESSION_RESC_FLUSH                UINT32_C(0x2cf)
774 	/* Experimental */
775 	#define HWRM_TF_SESSION_RESC_INFO                 UINT32_C(0x2d0)
776 	/* Experimental */
777 	#define HWRM_TF_TBL_TYPE_GET                      UINT32_C(0x2da)
778 	/* Experimental */
779 	#define HWRM_TF_TBL_TYPE_SET                      UINT32_C(0x2db)
780 	/* Experimental */
781 	#define HWRM_TF_TBL_TYPE_BULK_GET                 UINT32_C(0x2dc)
782 	/* Experimental */
783 	#define HWRM_TF_CTXT_MEM_ALLOC                    UINT32_C(0x2e2)
784 	/* Experimental */
785 	#define HWRM_TF_CTXT_MEM_FREE                     UINT32_C(0x2e3)
786 	/* Experimental */
787 	#define HWRM_TF_CTXT_MEM_RGTR                     UINT32_C(0x2e4)
788 	/* Experimental */
789 	#define HWRM_TF_CTXT_MEM_UNRGTR                   UINT32_C(0x2e5)
790 	/* Experimental */
791 	#define HWRM_TF_EXT_EM_QCAPS                      UINT32_C(0x2e6)
792 	/* Experimental */
793 	#define HWRM_TF_EXT_EM_OP                         UINT32_C(0x2e7)
794 	/* Experimental */
795 	#define HWRM_TF_EXT_EM_CFG                        UINT32_C(0x2e8)
796 	/* Experimental */
797 	#define HWRM_TF_EXT_EM_QCFG                       UINT32_C(0x2e9)
798 	/* Experimental */
799 	#define HWRM_TF_EM_INSERT                         UINT32_C(0x2ea)
800 	/* Experimental */
801 	#define HWRM_TF_EM_DELETE                         UINT32_C(0x2eb)
802 	/* Experimental */
803 	#define HWRM_TF_EM_HASH_INSERT                    UINT32_C(0x2ec)
804 	/* Experimental */
805 	#define HWRM_TF_EM_MOVE                           UINT32_C(0x2ed)
806 	/* Experimental */
807 	#define HWRM_TF_TCAM_SET                          UINT32_C(0x2f8)
808 	/* Experimental */
809 	#define HWRM_TF_TCAM_GET                          UINT32_C(0x2f9)
810 	/* Experimental */
811 	#define HWRM_TF_TCAM_MOVE                         UINT32_C(0x2fa)
812 	/* Experimental */
813 	#define HWRM_TF_TCAM_FREE                         UINT32_C(0x2fb)
814 	/* Experimental */
815 	#define HWRM_TF_GLOBAL_CFG_SET                    UINT32_C(0x2fc)
816 	/* Experimental */
817 	#define HWRM_TF_GLOBAL_CFG_GET                    UINT32_C(0x2fd)
818 	/* Experimental */
819 	#define HWRM_TF_IF_TBL_SET                        UINT32_C(0x2fe)
820 	/* Experimental */
821 	#define HWRM_TF_IF_TBL_GET                        UINT32_C(0x2ff)
822 	/* Experimental */
823 	#define HWRM_SV                                   UINT32_C(0x400)
824 	/* Experimental */
825 	#define HWRM_DBG_READ_DIRECT                      UINT32_C(0xff10)
826 	/* Experimental */
827 	#define HWRM_DBG_READ_INDIRECT                    UINT32_C(0xff11)
828 	/* Experimental */
829 	#define HWRM_DBG_WRITE_DIRECT                     UINT32_C(0xff12)
830 	/* Experimental */
831 	#define HWRM_DBG_WRITE_INDIRECT                   UINT32_C(0xff13)
832 	#define HWRM_DBG_DUMP                             UINT32_C(0xff14)
833 	/* Experimental */
834 	#define HWRM_DBG_ERASE_NVM                        UINT32_C(0xff15)
835 	/* Experimental */
836 	#define HWRM_DBG_CFG                              UINT32_C(0xff16)
837 	/* Experimental */
838 	#define HWRM_DBG_COREDUMP_LIST                    UINT32_C(0xff17)
839 	/* Experimental */
840 	#define HWRM_DBG_COREDUMP_INITIATE                UINT32_C(0xff18)
841 	/* Experimental */
842 	#define HWRM_DBG_COREDUMP_RETRIEVE                UINT32_C(0xff19)
843 	/* Experimental */
844 	#define HWRM_DBG_FW_CLI                           UINT32_C(0xff1a)
845 	/*  */
846 	#define HWRM_DBG_I2C_CMD                          UINT32_C(0xff1b)
847 	/*  */
848 	#define HWRM_DBG_RING_INFO_GET                    UINT32_C(0xff1c)
849 	/* Experimental */
850 	#define HWRM_DBG_CRASHDUMP_HEADER                 UINT32_C(0xff1d)
851 	/* Experimental */
852 	#define HWRM_DBG_CRASHDUMP_ERASE                  UINT32_C(0xff1e)
853 	/* Send driver debug information to firmware */
854 	#define HWRM_DBG_DRV_TRACE                        UINT32_C(0xff1f)
855 	/* Query debug capabilities of firmware */
856 	#define HWRM_DBG_QCAPS                            UINT32_C(0xff20)
857 	/* Retrieve debug settings of firmware */
858 	#define HWRM_DBG_QCFG                             UINT32_C(0xff21)
859 	/* Set destination parameters for crashdump medium */
860 	#define HWRM_DBG_CRASHDUMP_MEDIUM_CFG             UINT32_C(0xff22)
861 	/* Experimental */
862 	#define HWRM_DBG_USEQ_ALLOC                       UINT32_C(0xff23)
863 	/* Experimental */
864 	#define HWRM_DBG_USEQ_FREE                        UINT32_C(0xff24)
865 	/* Experimental */
866 	#define HWRM_DBG_USEQ_FLUSH                       UINT32_C(0xff25)
867 	/* Experimental */
868 	#define HWRM_DBG_USEQ_QCAPS                       UINT32_C(0xff26)
869 	/* Experimental */
870 	#define HWRM_DBG_USEQ_CW_CFG                      UINT32_C(0xff27)
871 	/* Experimental */
872 	#define HWRM_DBG_USEQ_SCHED_CFG                   UINT32_C(0xff28)
873 	/* Experimental */
874 	#define HWRM_DBG_USEQ_RUN                         UINT32_C(0xff29)
875 	/* Experimental */
876 	#define HWRM_DBG_USEQ_DELIVERY_REQ                UINT32_C(0xff2a)
877 	/* Experimental */
878 	#define HWRM_DBG_USEQ_RESP_HDR                    UINT32_C(0xff2b)
879 	#define HWRM_NVM_DEFRAG                           UINT32_C(0xffec)
880 	#define HWRM_NVM_REQ_ARBITRATION                  UINT32_C(0xffed)
881 	/* Experimental */
882 	#define HWRM_NVM_FACTORY_DEFAULTS                 UINT32_C(0xffee)
883 	#define HWRM_NVM_VALIDATE_OPTION                  UINT32_C(0xffef)
884 	#define HWRM_NVM_FLUSH                            UINT32_C(0xfff0)
885 	#define HWRM_NVM_GET_VARIABLE                     UINT32_C(0xfff1)
886 	#define HWRM_NVM_SET_VARIABLE                     UINT32_C(0xfff2)
887 	#define HWRM_NVM_INSTALL_UPDATE                   UINT32_C(0xfff3)
888 	#define HWRM_NVM_MODIFY                           UINT32_C(0xfff4)
889 	#define HWRM_NVM_VERIFY_UPDATE                    UINT32_C(0xfff5)
890 	#define HWRM_NVM_GET_DEV_INFO                     UINT32_C(0xfff6)
891 	#define HWRM_NVM_ERASE_DIR_ENTRY                  UINT32_C(0xfff7)
892 	#define HWRM_NVM_MOD_DIR_ENTRY                    UINT32_C(0xfff8)
893 	#define HWRM_NVM_FIND_DIR_ENTRY                   UINT32_C(0xfff9)
894 	#define HWRM_NVM_GET_DIR_ENTRIES                  UINT32_C(0xfffa)
895 	#define HWRM_NVM_GET_DIR_INFO                     UINT32_C(0xfffb)
896 	#define HWRM_NVM_RAW_DUMP                         UINT32_C(0xfffc)
897 	#define HWRM_NVM_READ                             UINT32_C(0xfffd)
898 	#define HWRM_NVM_WRITE                            UINT32_C(0xfffe)
899 	#define HWRM_NVM_RAW_WRITE_BLK                    UINT32_C(0xffff)
900 	#define HWRM_LAST                                HWRM_NVM_RAW_WRITE_BLK
901 	uint16_t	unused_0[3];
902 } __rte_packed;
903 
904 /* Return Codes */
905 /* ret_codes (size:64b/8B) */
906 struct ret_codes {
907 	uint16_t	error_code;
908 	/* Request was successfully executed by the HWRM. */
909 	#define HWRM_ERR_CODE_SUCCESS                      UINT32_C(0x0)
910 	/* The HWRM failed to execute the request. */
911 	#define HWRM_ERR_CODE_FAIL                         UINT32_C(0x1)
912 	/*
913 	 * The request contains invalid argument(s) or input
914 	 * parameters.
915 	 */
916 	#define HWRM_ERR_CODE_INVALID_PARAMS               UINT32_C(0x2)
917 	/*
918 	 * The requester is not allowed to access the requested
919 	 * resource. This error code shall be provided in a
920 	 * response to a request to query or modify an existing
921 	 * resource that is not accessible by the requester.
922 	 */
923 	#define HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED       UINT32_C(0x3)
924 	/*
925 	 * The HWRM is unable to allocate the requested resource.
926 	 * This code only applies to requests for HWRM resource
927 	 * allocations.
928 	 */
929 	#define HWRM_ERR_CODE_RESOURCE_ALLOC_ERROR         UINT32_C(0x4)
930 	/*
931 	 * Invalid combination of flags is specified in the
932 	 * request.
933 	 */
934 	#define HWRM_ERR_CODE_INVALID_FLAGS                UINT32_C(0x5)
935 	/*
936 	 * Invalid combination of enables fields is specified in
937 	 * the request.
938 	 */
939 	#define HWRM_ERR_CODE_INVALID_ENABLES              UINT32_C(0x6)
940 	/*
941 	 * Request contains a required TLV that is not supported by
942 	 * the installed version of firmware.
943 	 */
944 	#define HWRM_ERR_CODE_UNSUPPORTED_TLV              UINT32_C(0x7)
945 	/*
946 	 * No firmware buffer available to accept the request. Driver
947 	 * should retry the request.
948 	 */
949 	#define HWRM_ERR_CODE_NO_BUFFER                    UINT32_C(0x8)
950 	/*
951 	 * This error code is only reported by firmware when some
952 	 * sub-option of a supported HWRM command is unsupported.
953 	 */
954 	#define HWRM_ERR_CODE_UNSUPPORTED_OPTION_ERR       UINT32_C(0x9)
955 	/*
956 	 * This error code is only reported by firmware when the specific
957 	 * request is not able to process when the HOT reset in progress.
958 	 */
959 	#define HWRM_ERR_CODE_HOT_RESET_PROGRESS           UINT32_C(0xa)
960 	/*
961 	 * This error code is only reported by firmware when the registered
962 	 * driver instances are not capable of hot reset.
963 	 */
964 	#define HWRM_ERR_CODE_HOT_RESET_FAIL               UINT32_C(0xb)
965 	/*
966 	 * This error code is only reported by the firmware when during
967 	 * flow allocation when a request for a flow counter fails because
968 	 * the number of flow counters are exhausted.
969 	 */
970 	#define HWRM_ERR_CODE_NO_FLOW_COUNTER_DURING_ALLOC UINT32_C(0xc)
971 	/*
972 	 * This error code is only reported by firmware when the registered
973 	 * driver instances requested to offloaded a flow but was unable to because
974 	 * the requested key's hash collides with the installed keys.
975 	 */
976 	#define HWRM_ERR_CODE_KEY_HASH_COLLISION           UINT32_C(0xd)
977 	/*
978 	 * This error code is only reported by firmware when the registered
979 	 * driver instances requested to offloaded a flow but was unable to because
980 	 * the same key has already been installed.
981 	 */
982 	#define HWRM_ERR_CODE_KEY_ALREADY_EXISTS           UINT32_C(0xe)
983 	/*
984 	 * Generic HWRM execution error that represents an
985 	 * internal error.
986 	 */
987 	#define HWRM_ERR_CODE_HWRM_ERROR                   UINT32_C(0xf)
988 	/*
989 	 * Firmware is unable to service the request at the present time. Caller
990 	 * may try again later.
991 	 */
992 	#define HWRM_ERR_CODE_BUSY                         UINT32_C(0x10)
993 	/*
994 	 * This error code is reported by Firmware when an operation requested
995 	 * by the host is not allowed due to a secure lock violation.
996 	 */
997 	#define HWRM_ERR_CODE_RESOURCE_LOCKED              UINT32_C(0x11)
998 	/*
999 	 * This error code is reported by Firmware when an operation requested
1000 	 * by a VF cannot be forwarded to the parent PF as required, either
1001 	 * because the PF is down or otherwise doesn't have an appropriate
1002 	 * async completion ring or associated forwarding buffers configured.
1003 	 */
1004 	#define HWRM_ERR_CODE_PF_UNAVAILABLE               UINT32_C(0x12)
1005 	/*
1006 	 * This value indicates that the HWRM response is in TLV format and
1007 	 * should be interpreted as one or more TLVs starting with the
1008 	 * hwrm_resp_hdr TLV. This value is not an indication of any error
1009 	 * by itself, just an indication that the response should be parsed
1010 	 * as TLV and the actual error code will be in the hwrm_resp_hdr TLV.
1011 	 */
1012 	#define HWRM_ERR_CODE_TLV_ENCAPSULATED_RESPONSE    UINT32_C(0x8000)
1013 	/* Unknown error */
1014 	#define HWRM_ERR_CODE_UNKNOWN_ERR                  UINT32_C(0xfffe)
1015 	/* Unsupported or invalid command */
1016 	#define HWRM_ERR_CODE_CMD_NOT_SUPPORTED            UINT32_C(0xffff)
1017 	#define HWRM_ERR_CODE_LAST \
1018 		HWRM_ERR_CODE_CMD_NOT_SUPPORTED
1019 	uint16_t	unused_0[3];
1020 } __rte_packed;
1021 
1022 /* Output */
1023 /* hwrm_err_output (size:128b/16B) */
1024 struct hwrm_err_output {
1025 	/*
1026 	 * Pass/Fail or error type
1027 	 *
1028 	 * Note: receiver to verify the in parameters, and fail the call
1029 	 * with an error when appropriate
1030 	 */
1031 	uint16_t	error_code;
1032 	/* This field returns the type of original request. */
1033 	uint16_t	req_type;
1034 	/* This field provides original sequence number of the command. */
1035 	uint16_t	seq_id;
1036 	/*
1037 	 * This field is the length of the response in bytes.  The
1038 	 * last byte of the response is a valid flag that will read
1039 	 * as '1' when the command has been completely written to
1040 	 * memory.
1041 	 */
1042 	uint16_t	resp_len;
1043 	/* debug info for this error response. */
1044 	uint32_t	opaque_0;
1045 	/* debug info for this error response. */
1046 	uint16_t	opaque_1;
1047 	/*
1048 	 * In the case of an error response, command specific error
1049 	 * code is returned in this field.
1050 	 */
1051 	uint8_t	cmd_err;
1052 	/*
1053 	 * This field is used in Output records to indicate that the output
1054 	 * is completely written to RAM.  This field should be read as '1'
1055 	 * to indicate that the output has been completely written.
1056 	 * When writing a command completion or response to an internal processor,
1057 	 * the order of writes has to be such that this field is written last.
1058 	 */
1059 	uint8_t	valid;
1060 } __rte_packed;
1061 /*
1062  * Following is the signature for HWRM message field that indicates not
1063  * applicable (All F's). Need to cast it the size of the field if needed.
1064  */
1065 #define HWRM_NA_SIGNATURE ((uint32_t)(-1))
1066 /* hwrm_func_buf_rgtr */
1067 #define HWRM_MAX_REQ_LEN 128
1068 /* hwrm_cfa_flow_info */
1069 #define HWRM_MAX_RESP_LEN 704
1070 /* 7 bit indirection table index. */
1071 #define HW_HASH_INDEX_SIZE 0x80
1072 #define HW_HASH_KEY_SIZE 40
1073 /* valid key for HWRM response */
1074 #define HWRM_RESP_VALID_KEY 1
1075 /* Reserved for BONO processor */
1076 #define HWRM_TARGET_ID_BONO 0xFFF8
1077 /* Reserved for KONG processor */
1078 #define HWRM_TARGET_ID_KONG 0xFFF9
1079 /* Reserved for APE processor */
1080 #define HWRM_TARGET_ID_APE 0xFFFA
1081 /*
1082  * This value will be used by tools for User-space HWRM Interface.
1083  * When tool execute any HWRM command with this target_id, firmware
1084  * will copy the response and/or data payload via register space instead
1085  * of DMAing it.
1086  */
1087 #define HWRM_TARGET_ID_TOOLS 0xFFFD
1088 #define HWRM_VERSION_MAJOR 1
1089 #define HWRM_VERSION_MINOR 10
1090 #define HWRM_VERSION_UPDATE 2
1091 /* non-zero means beta version */
1092 #define HWRM_VERSION_RSVD 83
1093 #define HWRM_VERSION_STR "1.10.2.83"
1094 
1095 /****************
1096  * hwrm_ver_get *
1097  ****************/
1098 
1099 
1100 /* hwrm_ver_get_input (size:192b/24B) */
1101 struct hwrm_ver_get_input {
1102 	/* The HWRM command request type. */
1103 	uint16_t	req_type;
1104 	/*
1105 	 * The completion ring to send the completion event on. This should
1106 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
1107 	 */
1108 	uint16_t	cmpl_ring;
1109 	/*
1110 	 * The sequence ID is used by the driver for tracking multiple
1111 	 * commands. This ID is treated as opaque data by the firmware and
1112 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
1113 	 */
1114 	uint16_t	seq_id;
1115 	/*
1116 	 * The target ID of the command:
1117 	 * * 0x0-0xFFF8 - The function ID
1118 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
1119 	 * * 0xFFFD - Reserved for user-space HWRM interface
1120 	 * * 0xFFFF - HWRM
1121 	 */
1122 	uint16_t	target_id;
1123 	/*
1124 	 * A physical address pointer pointing to a host buffer that the
1125 	 * command's response data will be written. This can be either a host
1126 	 * physical address (HPA) or a guest physical address (GPA) and must
1127 	 * point to a physically contiguous block of memory.
1128 	 */
1129 	uint64_t	resp_addr;
1130 	/*
1131 	 * This field represents the major version of HWRM interface
1132 	 * specification supported by the driver HWRM implementation.
1133 	 * The interface major version is intended to change only when
1134 	 * non backward compatible changes are made to the HWRM
1135 	 * interface specification.
1136 	 */
1137 	uint8_t	hwrm_intf_maj;
1138 	/*
1139 	 * This field represents the minor version of HWRM interface
1140 	 * specification supported by the driver HWRM implementation.
1141 	 * A change in interface minor version is used to reflect
1142 	 * significant backward compatible modification to HWRM
1143 	 * interface specification.
1144 	 * This can be due to addition or removal of functionality.
1145 	 * HWRM interface specifications with the same major version
1146 	 * but different minor versions are compatible.
1147 	 */
1148 	uint8_t	hwrm_intf_min;
1149 	/*
1150 	 * This field represents the update version of HWRM interface
1151 	 * specification supported by the driver HWRM implementation.
1152 	 * The interface update version is used to reflect minor
1153 	 * changes or bug fixes to a released HWRM interface
1154 	 * specification.
1155 	 */
1156 	uint8_t	hwrm_intf_upd;
1157 	uint8_t	unused_0[5];
1158 } __rte_packed;
1159 
1160 /* hwrm_ver_get_output (size:1408b/176B) */
1161 struct hwrm_ver_get_output {
1162 	/* The specific error status for the command. */
1163 	uint16_t	error_code;
1164 	/* The HWRM command request type. */
1165 	uint16_t	req_type;
1166 	/* The sequence ID from the original command. */
1167 	uint16_t	seq_id;
1168 	/* The length of the response data in number of bytes. */
1169 	uint16_t	resp_len;
1170 	/*
1171 	 * This field represents the major version of HWRM interface
1172 	 * specification supported by the HWRM implementation.
1173 	 * The interface major version is intended to change only when
1174 	 * non backward compatible changes are made to the HWRM
1175 	 * interface specification.
1176 	 * A HWRM implementation that is compliant with this
1177 	 * specification shall provide value of 1 in this field.
1178 	 */
1179 	uint8_t	hwrm_intf_maj_8b;
1180 	/*
1181 	 * This field represents the minor version of HWRM interface
1182 	 * specification supported by the HWRM implementation.
1183 	 * A change in interface minor version is used to reflect
1184 	 * significant backward compatible modification to HWRM
1185 	 * interface specification.
1186 	 * This can be due to addition or removal of functionality.
1187 	 * HWRM interface specifications with the same major version
1188 	 * but different minor versions are compatible.
1189 	 * A HWRM implementation that is compliant with this
1190 	 * specification shall provide value of 2 in this field.
1191 	 */
1192 	uint8_t	hwrm_intf_min_8b;
1193 	/*
1194 	 * This field represents the update version of HWRM interface
1195 	 * specification supported by the HWRM implementation.
1196 	 * The interface update version is used to reflect minor
1197 	 * changes or bug fixes to a released HWRM interface
1198 	 * specification.
1199 	 * A HWRM implementation that is compliant with this
1200 	 * specification shall provide value of 2 in this field.
1201 	 */
1202 	uint8_t	hwrm_intf_upd_8b;
1203 	uint8_t	hwrm_intf_rsvd_8b;
1204 	/*
1205 	 * This field represents the major version of HWRM firmware.
1206 	 * A change in firmware major version represents a major
1207 	 * firmware release.
1208 	 */
1209 	uint8_t	hwrm_fw_maj_8b;
1210 	/*
1211 	 * This field represents the minor version of HWRM firmware.
1212 	 * A change in firmware minor version represents significant
1213 	 * firmware functionality changes.
1214 	 */
1215 	uint8_t	hwrm_fw_min_8b;
1216 	/*
1217 	 * This field represents the build version of HWRM firmware.
1218 	 * A change in firmware build version represents bug fixes
1219 	 * to a released firmware.
1220 	 */
1221 	uint8_t	hwrm_fw_bld_8b;
1222 	/*
1223 	 * This field is a reserved field. This field can be used to
1224 	 * represent firmware branches or customer specific releases
1225 	 * tied to a specific (major,minor,update) version of the
1226 	 * HWRM firmware.
1227 	 */
1228 	uint8_t	hwrm_fw_rsvd_8b;
1229 	/*
1230 	 * This field represents the major version of mgmt firmware.
1231 	 * A change in major version represents a major release.
1232 	 */
1233 	uint8_t	mgmt_fw_maj_8b;
1234 	/*
1235 	 * This field represents the minor version of mgmt firmware.
1236 	 * A change in minor version represents significant
1237 	 * functionality changes.
1238 	 */
1239 	uint8_t	mgmt_fw_min_8b;
1240 	/*
1241 	 * This field represents the build version of mgmt firmware.
1242 	 * A change in update version represents bug fixes.
1243 	 */
1244 	uint8_t	mgmt_fw_bld_8b;
1245 	/*
1246 	 * This field is a reserved field. This field can be used to
1247 	 * represent firmware branches or customer specific releases
1248 	 * tied to a specific (major,minor,update) version
1249 	 */
1250 	uint8_t	mgmt_fw_rsvd_8b;
1251 	/*
1252 	 * This field represents the major version of network
1253 	 * control firmware.
1254 	 * A change in major version represents a major release.
1255 	 */
1256 	uint8_t	netctrl_fw_maj_8b;
1257 	/*
1258 	 * This field represents the minor version of network
1259 	 * control firmware.
1260 	 * A change in minor version represents significant
1261 	 * functionality changes.
1262 	 */
1263 	uint8_t	netctrl_fw_min_8b;
1264 	/*
1265 	 * This field represents the build version of network
1266 	 * control firmware.
1267 	 * A change in update version represents bug fixes.
1268 	 */
1269 	uint8_t	netctrl_fw_bld_8b;
1270 	/*
1271 	 * This field is a reserved field. This field can be used to
1272 	 * represent firmware branches or customer specific releases
1273 	 * tied to a specific (major,minor,update) version
1274 	 */
1275 	uint8_t	netctrl_fw_rsvd_8b;
1276 	/*
1277 	 * This field is used to indicate device's capabilities and
1278 	 * configurations.
1279 	 */
1280 	uint32_t	dev_caps_cfg;
1281 	/*
1282 	 * If set to 1, then secure firmware update behavior
1283 	 * is supported.
1284 	 * If set to 0, then secure firmware update behavior is
1285 	 * not supported.
1286 	 */
1287 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SECURE_FW_UPD_SUPPORTED \
1288 		UINT32_C(0x1)
1289 	/*
1290 	 * If set to 1, then firmware based DCBX agent is supported.
1291 	 * If set to 0, then firmware based DCBX agent capability
1292 	 * is not supported on this device.
1293 	 */
1294 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_FW_DCBX_AGENT_SUPPORTED \
1295 		UINT32_C(0x2)
1296 	/*
1297 	 * If set to 1, then HWRM short command format is supported.
1298 	 * If set to 0, then HWRM short command format is not supported.
1299 	 */
1300 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SHORT_CMD_SUPPORTED \
1301 		UINT32_C(0x4)
1302 	/*
1303 	 * If set to 1, then HWRM short command format is required.
1304 	 * If set to 0, then HWRM short command format is not required.
1305 	 */
1306 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SHORT_CMD_REQUIRED \
1307 		UINT32_C(0x8)
1308 	/*
1309 	 * If set to 1, then the KONG host mailbox channel is supported.
1310 	 * If set to 0, then the KONG host mailbox channel is not supported.
1311 	 * By default, this flag should be 0 for older version of core firmware.
1312 	 */
1313 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_KONG_MB_CHNL_SUPPORTED \
1314 		UINT32_C(0x10)
1315 	/*
1316 	 * If set to 1, then the 64bit flow handle is supported in addition to the
1317 	 * legacy 16bit flow handle. If set to 0, then the 64bit flow handle is not
1318 	 * supported. By default, this flag should be 0 for older version of core firmware.
1319 	 */
1320 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_FLOW_HANDLE_64BIT_SUPPORTED \
1321 		UINT32_C(0x20)
1322 	/*
1323 	 * If set to 1, then filter type can be provided in filter_alloc or filter_cfg
1324 	 * filter types like L2 for l2 traffic and ROCE for roce & l2 traffic.
1325 	 * If set to 0, then filter types not supported.
1326 	 * By default, this flag should be 0 for older version of core firmware.
1327 	 */
1328 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_L2_FILTER_TYPES_ROCE_OR_L2_SUPPORTED \
1329 		UINT32_C(0x40)
1330 	/*
1331 	 * If set to 1, firmware is capable to support virtio vSwitch offload model.
1332 	 * If set to 0, firmware can't supported virtio vSwitch offload model.
1333 	 * By default, this flag should be 0 for older version of core firmware.
1334 	 */
1335 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_VIRTIO_VSWITCH_OFFLOAD_SUPPORTED \
1336 		UINT32_C(0x80)
1337 	/*
1338 	 * If set to 1, firmware is capable to support trusted VF.
1339 	 * If set to 0, firmware is not capable to support trusted VF.
1340 	 * By default, this flag should be 0 for older version of core firmware.
1341 	 */
1342 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_TRUSTED_VF_SUPPORTED \
1343 		UINT32_C(0x100)
1344 	/*
1345 	 * If set to 1, firmware is capable to support flow aging.
1346 	 * If set to 0, firmware is not capable to support flow aging.
1347 	 * By default, this flag should be 0 for older version of core firmware.
1348 	 */
1349 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_FLOW_AGING_SUPPORTED \
1350 		UINT32_C(0x200)
1351 	/*
1352 	 * If set to 1, firmware is capable to support advanced flow counters like,
1353 	 * Meter drop counters and EEM counters.
1354 	 * If set to 0, firmware is not capable to support advanced flow counters.
1355 	 * By default, this flag should be 0 for older version of core firmware.
1356 	 */
1357 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_ADV_FLOW_COUNTERS_SUPPORTED \
1358 		UINT32_C(0x400)
1359 	/*
1360 	 * If set to 1, the firmware is able to support the use of the CFA
1361 	 * Extended Exact Match(EEM) feature.
1362 	 * If set to 0, firmware is not capable to support the use of the
1363 	 * CFA EEM feature.
1364 	 * By default, this flag should be 0 for older version of core firmware.
1365 	 */
1366 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_CFA_EEM_SUPPORTED \
1367 		UINT32_C(0x800)
1368 	/*
1369 	 * If set to 1, the firmware is able to support advance CFA flow management
1370 	 * features reported in the HWRM_CFA_FLOW_MGNT_QCAPS.
1371 	 * If set to 0, then the firmware doesn’t support the advance CFA flow management
1372 	 * features.
1373 	 * By default, this flag should be 0 for older version of core firmware.
1374 	 */
1375 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_CFA_ADV_FLOW_MGNT_SUPPORTED \
1376 		UINT32_C(0x1000)
1377 	/*
1378 	 * Deprecated and replaced with cfa_truflow_supported.
1379 	 * If set to 1, the firmware is able to support TFLIB features.
1380 	 * If set to 0, then the firmware doesn’t support TFLIB features.
1381 	 * By default, this flag should be 0 for older version of core firmware.
1382 	 */
1383 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_CFA_TFLIB_SUPPORTED \
1384 		UINT32_C(0x2000)
1385 	/*
1386 	 * If set to 1, the firmware is able to support TruFlow features.
1387 	 * If set to 0, then the firmware doesn’t support TruFlow features.
1388 	 * By default, this flag should be 0 for older version of
1389 	 * core firmware.
1390 	 */
1391 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_CFA_TRUFLOW_SUPPORTED \
1392 		UINT32_C(0x4000)
1393 	/*
1394 	 * If set to 1, then firmware supports secure boot.
1395 	 * If set to 0, then firmware doesn't support secure boot.
1396 	 */
1397 	#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SECURE_BOOT_CAPABLE \
1398 		UINT32_C(0x8000)
1399 	/*
1400 	 * This field represents the major version of RoCE firmware.
1401 	 * A change in major version represents a major release.
1402 	 */
1403 	uint8_t	roce_fw_maj_8b;
1404 	/*
1405 	 * This field represents the minor version of RoCE firmware.
1406 	 * A change in minor version represents significant
1407 	 * functionality changes.
1408 	 */
1409 	uint8_t	roce_fw_min_8b;
1410 	/*
1411 	 * This field represents the build version of RoCE firmware.
1412 	 * A change in update version represents bug fixes.
1413 	 */
1414 	uint8_t	roce_fw_bld_8b;
1415 	/*
1416 	 * This field is a reserved field. This field can be used to
1417 	 * represent firmware branches or customer specific releases
1418 	 * tied to a specific (major,minor,update) version
1419 	 */
1420 	uint8_t	roce_fw_rsvd_8b;
1421 	/*
1422 	 * This field represents the name of HWRM FW (ASCII chars
1423 	 * with NULL at the end).
1424 	 */
1425 	char	hwrm_fw_name[16];
1426 	/*
1427 	 * This field represents the name of mgmt FW (ASCII chars
1428 	 * with NULL at the end).
1429 	 */
1430 	char	mgmt_fw_name[16];
1431 	/*
1432 	 * This field represents the name of network control
1433 	 * firmware (ASCII chars with NULL at the end).
1434 	 */
1435 	char	netctrl_fw_name[16];
1436 	/* This field represents the active board package name. */
1437 	char	active_pkg_name[16];
1438 	/*
1439 	 * This field represents the name of RoCE FW (ASCII chars
1440 	 * with NULL at the end).
1441 	 */
1442 	char	roce_fw_name[16];
1443 	/* This field returns the chip number. */
1444 	uint16_t	chip_num;
1445 	/* This field returns the revision of chip. */
1446 	uint8_t	chip_rev;
1447 	/* This field returns the chip metal number. */
1448 	uint8_t	chip_metal;
1449 	/* This field returns the bond id of the chip. */
1450 	uint8_t	chip_bond_id;
1451 	/* This value indicates the type of platform used for chip implementation. */
1452 	uint8_t	chip_platform_type;
1453 	/* ASIC */
1454 	#define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_ASIC      UINT32_C(0x0)
1455 	/* FPGA platform of the chip. */
1456 	#define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_FPGA      UINT32_C(0x1)
1457 	/* Palladium platform of the chip. */
1458 	#define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_PALLADIUM UINT32_C(0x2)
1459 	#define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_LAST \
1460 		HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_PALLADIUM
1461 	/*
1462 	 * This field returns the maximum value of request window that
1463 	 * is supported by the HWRM. The request window is mapped
1464 	 * into device address space using MMIO.
1465 	 */
1466 	uint16_t	max_req_win_len;
1467 	/*
1468 	 * This field returns the maximum value of response buffer in
1469 	 * bytes.
1470 	 */
1471 	uint16_t	max_resp_len;
1472 	/*
1473 	 * This field returns the default request timeout value in
1474 	 * milliseconds.
1475 	 */
1476 	uint16_t	def_req_timeout;
1477 	/*
1478 	 * This field will indicate if any subsystems is not fully
1479 	 * initialized.
1480 	 */
1481 	uint8_t	flags;
1482 	/*
1483 	 * If set to 1, it will indicate to host drivers that firmware is
1484 	 * not ready to start full blown HWRM commands. Host drivers should
1485 	 * re-try HWRM_VER_GET with some timeout period. The timeout period
1486 	 * can be selected up to 5 seconds. Host drivers should also check
1487 	 * for dev_not_rdy_backing_store to identify if flag is set due to
1488 	 * backing store not been available.
1489 	 * For Example, PCIe hot-plug:
1490 	 *     Hot plug timing is system dependent. It generally takes up to
1491 	 *     600 milliseconds for firmware to clear DEV_NOT_RDY flag.
1492 	 * If set to 0, device is ready to accept all HWRM commands.
1493 	 */
1494 	#define HWRM_VER_GET_OUTPUT_FLAGS_DEV_NOT_RDY \
1495 		UINT32_C(0x1)
1496 	/*
1497 	 * If set to 1, external version present.
1498 	 * If set to 0, external version not present.
1499 	 */
1500 	#define HWRM_VER_GET_OUTPUT_FLAGS_EXT_VER_AVAIL \
1501 		UINT32_C(0x2)
1502 	/*
1503 	 * Firmware sets this flag along with dev_not_rdy flag to indicate
1504 	 * host drivers that it has not completed resource initialization
1505 	 * required for data path operations. Host drivers should not send
1506 	 * any HWRM command that requires data path resources. Firmware will
1507 	 * fail those commands with HWRM_ERR_CODE_BUSY. Host drivers can retry
1508 	 * those commands once both the flags are cleared.
1509 	 * If this flag and dev_not_rdy flag are set to 0, device is ready
1510 	 * to accept all HWRM commands.
1511 	 */
1512 	#define HWRM_VER_GET_OUTPUT_FLAGS_DEV_NOT_RDY_BACKING_STORE \
1513 		UINT32_C(0x4)
1514 	uint8_t	unused_0[2];
1515 	/*
1516 	 * For backward compatibility this field must be set to 1.
1517 	 * Older drivers might look for this field to be 1 before
1518 	 * processing the message.
1519 	 */
1520 	uint8_t	always_1;
1521 	/*
1522 	 * This field represents the major version of HWRM interface
1523 	 * specification supported by the HWRM implementation.
1524 	 * The interface major version is intended to change only when
1525 	 * non backward compatible changes are made to the HWRM
1526 	 * interface specification. A HWRM implementation that is
1527 	 * compliant with this specification shall provide value of 1
1528 	 * in this field.
1529 	 */
1530 	uint16_t	hwrm_intf_major;
1531 	/*
1532 	 * This field represents the minor version of HWRM interface
1533 	 * specification supported by the HWRM implementation.
1534 	 * A change in interface minor version is used to reflect
1535 	 * significant backward compatible modification to HWRM
1536 	 * interface specification. This can be due to addition or
1537 	 * removal of functionality. HWRM interface specifications
1538 	 * with the same major version but different minor versions are
1539 	 * compatible. A HWRM implementation that is compliant with
1540 	 * this specification shall provide value of 2 in this field.
1541 	 */
1542 	uint16_t	hwrm_intf_minor;
1543 	/*
1544 	 * This field represents the update version of HWRM interface
1545 	 * specification supported by the HWRM implementation. The
1546 	 * interface update version is used to reflect minor changes or
1547 	 * bug fixes to a released HWRM interface specification.
1548 	 * A HWRM implementation that is compliant with this
1549 	 * specification shall provide value of 2 in this field.
1550 	 */
1551 	uint16_t	hwrm_intf_build;
1552 	/*
1553 	 * This field represents the patch version of HWRM interface
1554 	 * specification supported by the HWRM implementation.
1555 	 */
1556 	uint16_t	hwrm_intf_patch;
1557 	/*
1558 	 * This field represents the major version of HWRM firmware.
1559 	 * A change in firmware major version represents a major
1560 	 * firmware release.
1561 	 */
1562 	uint16_t	hwrm_fw_major;
1563 	/*
1564 	 * This field represents the minor version of HWRM firmware.
1565 	 * A change in firmware minor version represents significant
1566 	 * firmware functionality changes.
1567 	 */
1568 	uint16_t	hwrm_fw_minor;
1569 	/*
1570 	 * This field represents the build version of HWRM firmware.
1571 	 * A change in firmware build version represents bug fixes to
1572 	 * a released firmware.
1573 	 */
1574 	uint16_t	hwrm_fw_build;
1575 	/*
1576 	 * This field is a reserved field.
1577 	 * This field can be used to represent firmware branches or customer
1578 	 * specific releases tied to a specific (major,minor,update) version
1579 	 * of the HWRM firmware.
1580 	 */
1581 	uint16_t	hwrm_fw_patch;
1582 	/*
1583 	 * This field represents the major version of mgmt firmware.
1584 	 * A change in major version represents a major release.
1585 	 */
1586 	uint16_t	mgmt_fw_major;
1587 	/*
1588 	 * This field represents the minor version of HWRM firmware.
1589 	 * A change in firmware minor version represents significant
1590 	 * firmware functionality changes.
1591 	 */
1592 	uint16_t	mgmt_fw_minor;
1593 	/*
1594 	 * This field represents the build version of mgmt firmware.
1595 	 * A change in update version represents bug fixes.
1596 	 */
1597 	uint16_t	mgmt_fw_build;
1598 	/*
1599 	 * This field is a reserved field. This field can be used to
1600 	 * represent firmware branches or customer specific releases
1601 	 * tied to a specific (major,minor,update) version.
1602 	 */
1603 	uint16_t	mgmt_fw_patch;
1604 	/*
1605 	 * This field represents the major version of network control
1606 	 * firmware. A change in major version represents
1607 	 * a major release.
1608 	 */
1609 	uint16_t	netctrl_fw_major;
1610 	/*
1611 	 * This field represents the minor version of network control
1612 	 * firmware. A change in minor version represents significant
1613 	 * functionality changes.
1614 	 */
1615 	uint16_t	netctrl_fw_minor;
1616 	/*
1617 	 * This field represents the build version of network control
1618 	 * firmware. A change in update version represents bug fixes.
1619 	 */
1620 	uint16_t	netctrl_fw_build;
1621 	/*
1622 	 * This field is a reserved field. This field can be used to
1623 	 * represent firmware branches or customer specific releases
1624 	 * tied to a specific (major,minor,update) version
1625 	 */
1626 	uint16_t	netctrl_fw_patch;
1627 	/*
1628 	 * This field represents the major version of RoCE firmware.
1629 	 * A change in major version represents a major release.
1630 	 */
1631 	uint16_t	roce_fw_major;
1632 	/*
1633 	 * This field represents the minor version of RoCE firmware.
1634 	 * A change in minor version represents significant
1635 	 * functionality changes.
1636 	 */
1637 	uint16_t	roce_fw_minor;
1638 	/*
1639 	 * This field represents the build version of RoCE firmware.
1640 	 * A change in update version represents bug fixes.
1641 	 */
1642 	uint16_t	roce_fw_build;
1643 	/*
1644 	 * This field is a reserved field. This field can be used to
1645 	 * represent firmware branches or customer specific releases
1646 	 * tied to a specific (major,minor,update) version
1647 	 */
1648 	uint16_t	roce_fw_patch;
1649 	/*
1650 	 * This field returns the maximum extended request length acceptable
1651 	 * by the device which allows requests greater than mailbox size when
1652 	 * used with the short cmd request format.
1653 	 */
1654 	uint16_t	max_ext_req_len;
1655 	/*
1656 	 * This field returns the maximum request timeout value in seconds.
1657 	 * For backward compatibility, a value of zero should be interpreted
1658 	 * as the default value of 40 seconds. Drivers should always honor the
1659 	 * maximum timeout, but are permitted to warn if a longer duration than
1660 	 * this default is advertised. Values larger than 40 seconds should
1661 	 * only be used as a stopgap measure to address a device limitation or
1662 	 * for the purposes of test and debugging. The long term goal is for
1663 	 * firmware to significantly reduce this value in the passage of time.
1664 	 */
1665 	uint16_t	max_req_timeout;
1666 	uint8_t	unused_1[3];
1667 	/*
1668 	 * This field is used in Output records to indicate that the output
1669 	 * is completely written to RAM.  This field should be read as '1'
1670 	 * to indicate that the output has been completely written.
1671 	 * When writing a command completion or response to an internal processor,
1672 	 * the order of writes has to be such that this field is written last.
1673 	 */
1674 	uint8_t	valid;
1675 } __rte_packed;
1676 
1677 /* cfa_bds_read_cmd_data_msg (size:128b/16B) */
1678 struct cfa_bds_read_cmd_data_msg {
1679 	/* This value selects the format for the mid-path command for the CFA. */
1680 	uint8_t	opcode;
1681 	/*
1682 	 * This is read command. From 32 to 128B can be read from a table
1683 	 * using this command.
1684 	 */
1685 	#define CFA_BDS_READ_CMD_DATA_MSG_OPCODE_READ UINT32_C(0x0)
1686 	#define CFA_BDS_READ_CMD_DATA_MSG_OPCODE_LAST \
1687 		CFA_BDS_READ_CMD_DATA_MSG_OPCODE_READ
1688 	/* This value selects the table type to be acted upon. */
1689 	uint8_t	table_type;
1690 	/* This value selects the table type to be acted upon. */
1691 	#define CFA_BDS_READ_CMD_DATA_MSG_TABLE_TYPE_MASK  UINT32_C(0xf)
1692 	#define CFA_BDS_READ_CMD_DATA_MSG_TABLE_TYPE_SFT   0
1693 	/* This command acts on the action table of the specified scope. */
1694 	#define CFA_BDS_READ_CMD_DATA_MSG_TABLE_TYPE_ACTION  UINT32_C(0x0)
1695 	/* This command acts on the exact match table of the specified scope. */
1696 	#define CFA_BDS_READ_CMD_DATA_MSG_TABLE_TYPE_EM      UINT32_C(0x1)
1697 	#define CFA_BDS_READ_CMD_DATA_MSG_TABLE_TYPE_LAST \
1698 		CFA_BDS_READ_CMD_DATA_MSG_TABLE_TYPE_EM
1699 	/* This value selects which table scope will be accessed. */
1700 	uint8_t	table_scope;
1701 	#define CFA_BDS_READ_CMD_DATA_MSG_TABLE_SCOPE_MASK UINT32_C(0x1f)
1702 	#define CFA_BDS_READ_CMD_DATA_MSG_TABLE_SCOPE_SFT 0
1703 	/*
1704 	 * This value identifies the number of 32B units will be accessed. A
1705 	 * value of zero is invalid. Maximum value is 4.
1706 	 */
1707 	uint8_t	data_size;
1708 	#define CFA_BDS_READ_CMD_DATA_MSG_DATA_SIZE_MASK UINT32_C(0x7)
1709 	#define CFA_BDS_READ_CMD_DATA_MSG_DATA_SIZE_SFT 0
1710 	/* This is the 32B index into the selected table to access. */
1711 	uint32_t	table_index;
1712 	#define CFA_BDS_READ_CMD_DATA_MSG_TABLE_INDEX_MASK UINT32_C(0x3ffffff)
1713 	#define CFA_BDS_READ_CMD_DATA_MSG_TABLE_INDEX_SFT 0
1714 	/*
1715 	 * This is the 64b host address where you want the data returned to. The
1716 	 * data will be written to the same function as the one that owns the SQ
1717 	 * this command is read from. The bottom two bits of this value must be
1718 	 * zero. The size of the write is controlled by the data_size field.
1719 	 */
1720 	uint64_t	host_address;
1721 } __rte_packed;
1722 
1723 /* cfa_bds_write_cmd_data_msg (size:1152b/144B) */
1724 struct cfa_bds_write_cmd_data_msg {
1725 	/* This value selects the format for the mid-path command for the CFA. */
1726 	uint8_t	opcode;
1727 	/*
1728 	 * This is write command. From 32 to 128B can be written to a table
1729 	 * using this command.
1730 	 */
1731 	#define CFA_BDS_WRITE_CMD_DATA_MSG_OPCODE_WRITE UINT32_C(0x1)
1732 	#define CFA_BDS_WRITE_CMD_DATA_MSG_OPCODE_LAST \
1733 		CFA_BDS_WRITE_CMD_DATA_MSG_OPCODE_WRITE
1734 	/* This value selects the table type to be acted upon. */
1735 	uint8_t	write_thru_table_type;
1736 	/* This value selects the table type to be acted upon. */
1737 	#define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_TYPE_MASK  UINT32_C(0xf)
1738 	#define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_TYPE_SFT   0
1739 	/* This command acts on the action table of the specified scope. */
1740 	#define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_TYPE_ACTION  UINT32_C(0x0)
1741 	/* This command acts on the exact match table of the specified scope. */
1742 	#define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_TYPE_EM      UINT32_C(0x1)
1743 	#define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_TYPE_LAST \
1744 		CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_TYPE_EM
1745 	/*
1746 	 * Indicates write-through control. Indicates write-through when set,
1747 	 * or write back when cleared.
1748 	 */
1749 	#define CFA_BDS_WRITE_CMD_DATA_MSG_WRITE_THRU       UINT32_C(0x10)
1750 	/* This value selects which table scope will be accessed. */
1751 	uint8_t	table_scope;
1752 	#define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_SCOPE_MASK UINT32_C(0x1f)
1753 	#define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_SCOPE_SFT 0
1754 	/*
1755 	 * This value identifies the number of 32B units will be accessed. A
1756 	 * value of zero is invalid. Maximum value is 4.
1757 	 */
1758 	uint8_t	data_size;
1759 	#define CFA_BDS_WRITE_CMD_DATA_MSG_DATA_SIZE_MASK UINT32_C(0x7)
1760 	#define CFA_BDS_WRITE_CMD_DATA_MSG_DATA_SIZE_SFT 0
1761 	/* This is the 32B index into the selected table to access. */
1762 	uint32_t	table_index;
1763 	#define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_INDEX_MASK UINT32_C(0x3ffffff)
1764 	#define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_INDEX_SFT 0
1765 	uint32_t	unused0;
1766 	uint32_t	unused1;
1767 	/*
1768 	 * This is the data to be written. Data length is determined by the
1769 	 * data_size field. The bd_cnt in the encapsulating BD must also be set
1770 	 * correctly to ensure that the BD is processed correctly and the full
1771 	 * WRITE_CMD message is extracted from the BD.
1772 	 */
1773 	uint32_t	dta[32];
1774 } __rte_packed;
1775 
1776 /* cfa_bds_read_clr_cmd_data_msg (size:256b/32B) */
1777 struct cfa_bds_read_clr_cmd_data_msg {
1778 	/* This value selects the format for the mid-path command for the CFA. */
1779 	uint8_t	opcode;
1780 	/*
1781 	 * This is read-clear command. 32B can be read from a table and
1782 	 * a 16b mask can be used to clear specific 16b units after the
1783 	 * read as an atomic operation.
1784 	 */
1785 	#define CFA_BDS_READ_CLR_CMD_DATA_MSG_OPCODE_READ_CLR UINT32_C(0x2)
1786 	#define CFA_BDS_READ_CLR_CMD_DATA_MSG_OPCODE_LAST \
1787 		CFA_BDS_READ_CLR_CMD_DATA_MSG_OPCODE_READ_CLR
1788 	/* This value selects the table type to be acted upon. */
1789 	uint8_t	table_type;
1790 	/* This value selects the table type to be acted upon. */
1791 	#define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_TYPE_MASK  UINT32_C(0xf)
1792 	#define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_TYPE_SFT   0
1793 	/* This command acts on the action table of the specified scope. */
1794 	#define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_TYPE_ACTION  UINT32_C(0x0)
1795 	/* This command acts on the exact match table of the specified scope. */
1796 	#define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_TYPE_EM      UINT32_C(0x1)
1797 	#define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_TYPE_LAST \
1798 		CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_TYPE_EM
1799 	/* This value selects which table scope will be accessed. */
1800 	uint8_t	table_scope;
1801 	#define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_SCOPE_MASK UINT32_C(0x1f)
1802 	#define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_SCOPE_SFT 0
1803 	/*
1804 	 * This value identifies the number of 32B units will be accessed.
1805 	 * Always set the value to 1.
1806 	 */
1807 	uint8_t	data_size;
1808 	#define CFA_BDS_READ_CLR_CMD_DATA_MSG_DATA_SIZE_MASK UINT32_C(0x7)
1809 	#define CFA_BDS_READ_CLR_CMD_DATA_MSG_DATA_SIZE_SFT 0
1810 	/* This is the 32B index into the selected table to access. */
1811 	uint32_t	table_index;
1812 	#define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_INDEX_MASK \
1813 		UINT32_C(0x3ffffff)
1814 	#define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_INDEX_SFT 0
1815 	/*
1816 	 * This is the 64b host address where you want the data returned to. The
1817 	 * data will be written to the same function as the one that owns the SQ
1818 	 * this command is read from. The bottom two bits of this value must be
1819 	 * zero. The size of the write is controlled by the data_size field.
1820 	 */
1821 	uint64_t	host_address;
1822 	/*
1823 	 * This is active high clear mask for the 32B of data that this command
1824 	 * can read. Bit 0 of the field will clear bits 15:0 of the first word
1825 	 * of data read when set to '1'.
1826 	 */
1827 	uint16_t	clear_mask;
1828 	uint16_t	unused0[3];
1829 	uint16_t	unused1[4];
1830 } __rte_packed;
1831 
1832 /* cfa_bds_em_insert_cmd_data_msg (size:1152b/144B) */
1833 struct cfa_bds_em_insert_cmd_data_msg {
1834 	/* This value selects the format for the mid-path command for the CFA. */
1835 	uint8_t	opcode;
1836 	/*
1837 	 * An exact match table insert will be attempted into the table.
1838 	 * If there is a free location in the bucket, the payload will
1839 	 * be written to the bucket.
1840 	 */
1841 	#define CFA_BDS_EM_INSERT_CMD_DATA_MSG_OPCODE_EM_INSERT UINT32_C(0x3)
1842 	#define CFA_BDS_EM_INSERT_CMD_DATA_MSG_OPCODE_LAST \
1843 		CFA_BDS_EM_INSERT_CMD_DATA_MSG_OPCODE_EM_INSERT
1844 	/*
1845 	 * Indicates write-through control. Indicates write-through when set,
1846 	 * or write back when cleared.
1847 	 */
1848 	uint8_t	write_thru;
1849 	#define CFA_BDS_EM_INSERT_CMD_DATA_MSG_UNUSED_MASK    UINT32_C(0xf)
1850 	#define CFA_BDS_EM_INSERT_CMD_DATA_MSG_UNUSED_SFT     0
1851 	/*
1852 	 * Indicates write-through control. Indicates write-through when set,
1853 	 * or write back when cleared.
1854 	 */
1855 	#define CFA_BDS_EM_INSERT_CMD_DATA_MSG_WRITE_THRU     UINT32_C(0x10)
1856 	/* This value selects which table scope will be accessed. */
1857 	uint8_t	table_scope;
1858 	#define CFA_BDS_EM_INSERT_CMD_DATA_MSG_TABLE_SCOPE_MASK UINT32_C(0x1f)
1859 	#define CFA_BDS_EM_INSERT_CMD_DATA_MSG_TABLE_SCOPE_SFT 0
1860 	/*
1861 	 * This value identifies the number of 32B units will be accessed. A
1862 	 * value of zero is invalid. Maximum value is 4.
1863 	 */
1864 	uint8_t	data_size;
1865 	#define CFA_BDS_EM_INSERT_CMD_DATA_MSG_DATA_SIZE_MASK UINT32_C(0x7)
1866 	#define CFA_BDS_EM_INSERT_CMD_DATA_MSG_DATA_SIZE_SFT 0
1867 	/* This is the 32B index into the selected table to access. */
1868 	uint32_t	table_index;
1869 	#define CFA_BDS_EM_INSERT_CMD_DATA_MSG_TABLE_INDEX_MASK \
1870 		UINT32_C(0x3ffffff)
1871 	#define CFA_BDS_EM_INSERT_CMD_DATA_MSG_TABLE_INDEX_SFT 0
1872 	/*
1873 	 * This is the 64b host address where you want the data returned to. The
1874 	 * data will be written to the same function as the one that owns the SQ
1875 	 */
1876 	uint64_t	host_address;
1877 	/*
1878 	 * This is the Exact Match Lookup Record. Data length is determined by
1879 	 * the data_size field. The bd_cnt in the encapsulating BD must also be
1880 	 */
1881 	uint32_t	dta[32];
1882 } __rte_packed;
1883 
1884 /* cfa_bds_em_delete_cmd_data_msg (size:256b/32B) */
1885 struct cfa_bds_em_delete_cmd_data_msg {
1886 	/* This value selects the format for the mid-path command for the CFA. */
1887 	uint8_t	opcode;
1888 	/* An exact match table delete will be attempted. */
1889 	#define CFA_BDS_EM_DELETE_CMD_DATA_MSG_OPCODE_EM_DELETE UINT32_C(0x4)
1890 	#define CFA_BDS_EM_DELETE_CMD_DATA_MSG_OPCODE_LAST \
1891 		CFA_BDS_EM_DELETE_CMD_DATA_MSG_OPCODE_EM_DELETE
1892 	/*
1893 	 * Indicates write-through control. Indicates write-through when set,
1894 	 * or write back when cleared.
1895 	 */
1896 	uint8_t	write_thru;
1897 	#define CFA_BDS_EM_DELETE_CMD_DATA_MSG_UNUSED_MASK    UINT32_C(0xf)
1898 	#define CFA_BDS_EM_DELETE_CMD_DATA_MSG_UNUSED_SFT     0
1899 	/*
1900 	 * Indicates write-through control. Indicates write-through when set,
1901 	 * or write back when cleared.
1902 	 */
1903 	#define CFA_BDS_EM_DELETE_CMD_DATA_MSG_WRITE_THRU     UINT32_C(0x10)
1904 	/* This value selects which table scope will be accessed. */
1905 	uint8_t	table_scope;
1906 	#define CFA_BDS_EM_DELETE_CMD_DATA_MSG_TABLE_SCOPE_MASK UINT32_C(0x1f)
1907 	#define CFA_BDS_EM_DELETE_CMD_DATA_MSG_TABLE_SCOPE_SFT 0
1908 	/*
1909 	 * This value identifies the number of 32B units will be accessed. A
1910 	 * value of zero is invalid. Maximum value is 4.
1911 	 */
1912 	uint8_t	data_size;
1913 	#define CFA_BDS_EM_DELETE_CMD_DATA_MSG_DATA_SIZE_MASK UINT32_C(0x7)
1914 	#define CFA_BDS_EM_DELETE_CMD_DATA_MSG_DATA_SIZE_SFT 0
1915 	uint32_t	unused0;
1916 	/*
1917 	 * This is the 64b host address where you want the data returned to. The
1918 	 * data will be written to the same function as the one that owns the SQ
1919 	 */
1920 	uint64_t	host_address;
1921 	/*
1922 	 * This is the Exact Match Lookup Record. Data length is determined by
1923 	 * the data_size field. The bd_cnt in the encapsulating BD must also be
1924 	 */
1925 	uint64_t	dta;
1926 	uint32_t	unused1[2];
1927 } __rte_packed;
1928 
1929 /* cfa_bds_invalidate_cmd_data_msg (size:128b/16B) */
1930 struct cfa_bds_invalidate_cmd_data_msg {
1931 	/* This value selects the format for the mid-path command for the CFA. */
1932 	uint8_t	opcode;
1933 	/*
1934 	 * The specified table area will be invalidated. If it is needed.
1935 	 * again, it will be read from the backing store.
1936 	 */
1937 	#define CFA_BDS_INVALIDATE_CMD_DATA_MSG_OPCODE_INVALIDATE UINT32_C(0x5)
1938 	#define CFA_BDS_INVALIDATE_CMD_DATA_MSG_OPCODE_LAST \
1939 		CFA_BDS_INVALIDATE_CMD_DATA_MSG_OPCODE_INVALIDATE
1940 	/* This value selects the table type to be acted upon. */
1941 	uint8_t	table_type;
1942 	/* This value selects the table type to be acted upon. */
1943 	#define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_TYPE_MASK  UINT32_C(0xf)
1944 	#define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_TYPE_SFT   0
1945 	/* This command acts on the action table of the specified scope. */
1946 	#define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_TYPE_ACTION \
1947 		UINT32_C(0x0)
1948 	/* This command acts on the exact match table of the specified scope. */
1949 	#define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_TYPE_EM \
1950 		UINT32_C(0x1)
1951 	#define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_TYPE_LAST \
1952 		CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_TYPE_EM
1953 	/* This value selects which table scope will be accessed. */
1954 	uint8_t	table_scope;
1955 	#define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_SCOPE_MASK UINT32_C(0x1f)
1956 	#define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_SCOPE_SFT 0
1957 	/* This value specifies the number of cache lines to invalidate. */
1958 	uint8_t	data_size;
1959 	#define CFA_BDS_INVALIDATE_CMD_DATA_MSG_DATA_SIZE_MASK UINT32_C(0x7)
1960 	#define CFA_BDS_INVALIDATE_CMD_DATA_MSG_DATA_SIZE_SFT 0
1961 	/* This is the 32B index into the selected table to access. */
1962 	uint32_t	table_index;
1963 	#define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_INDEX_MASK \
1964 		UINT32_C(0x3ffffff)
1965 	#define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_INDEX_SFT 0
1966 	uint32_t	unused[2];
1967 } __rte_packed;
1968 
1969 /* cfa_bds_event_collect_cmd_data_msg (size:128b/16B) */
1970 struct cfa_bds_event_collect_cmd_data_msg {
1971 	/* This value selects the format for the mid-path command for the CFA. */
1972 	uint8_t	opcode;
1973 	/* Reads notification messages from the Host Notification Queue. */
1974 	#define CFA_BDS_EVENT_COLLECT_CMD_DATA_MSG_OPCODE_EVENT_COLLECT \
1975 		UINT32_C(0x6)
1976 	#define CFA_BDS_EVENT_COLLECT_CMD_DATA_MSG_OPCODE_LAST \
1977 		CFA_BDS_EVENT_COLLECT_CMD_DATA_MSG_OPCODE_EVENT_COLLECT
1978 	uint8_t	unused0;
1979 	/* This value selects which table scope will be accessed. */
1980 	uint8_t	table_scope;
1981 	#define CFA_BDS_EVENT_COLLECT_CMD_DATA_MSG_TABLE_SCOPE_MASK \
1982 		UINT32_C(0x1f)
1983 	#define CFA_BDS_EVENT_COLLECT_CMD_DATA_MSG_TABLE_SCOPE_SFT 0
1984 	/*
1985 	 * This value identifies the number of 32B units will be accessed. A
1986 	 * value of zero is invalid. Maximum value is 4.
1987 	 */
1988 	uint8_t	data_size;
1989 	#define CFA_BDS_EVENT_COLLECT_CMD_DATA_MSG_DATA_SIZE_MASK UINT32_C(0x7)
1990 	#define CFA_BDS_EVENT_COLLECT_CMD_DATA_MSG_DATA_SIZE_SFT 0
1991 	uint32_t	unused1;
1992 	/*
1993 	 * This is the 64b host address where you want the data returned to. The
1994 	 * data will be written to the same function as the one that owns the SQ
1995 	 */
1996 	uint64_t	host_address;
1997 } __rte_packed;
1998 
1999 /* ce_bds_add_data_msg (size:512b/64B) */
2000 struct ce_bds_add_data_msg {
2001 	uint32_t	version_algorithm_kid_opcode;
2002 	/*
2003 	 * This value selects the operation for the mid-path command for the
2004 	 * crypto blocks.
2005 	 */
2006 	#define CE_BDS_ADD_DATA_MSG_OPCODE_MASK               UINT32_C(0xf)
2007 	#define CE_BDS_ADD_DATA_MSG_OPCODE_SFT                0
2008 	/*
2009 	 * This is the add command. Using this opcode, Host Driver can add
2010 	 * information required for kTLS processing. The information is
2011 	 * updated in the CFCK context.
2012 	 */
2013 	#define CE_BDS_ADD_DATA_MSG_OPCODE_ADD                  UINT32_C(0x1)
2014 	#define CE_BDS_ADD_DATA_MSG_OPCODE_LAST \
2015 		CE_BDS_ADD_DATA_MSG_OPCODE_ADD
2016 	/*
2017 	 * This field is the Crypto Context ID. The KID is used to store
2018 	 * information used by the associated kTLS offloaded connection.
2019 	 */
2020 	#define CE_BDS_ADD_DATA_MSG_KID_MASK \
2021 		UINT32_C(0xfffff0)
2022 	#define CE_BDS_ADD_DATA_MSG_KID_SFT                   4
2023 	/*
2024 	 * Currently only two algorithms are supported, AES_GCM_128 and
2025 	 * AES_GCM_256. Additional bits for future growth.
2026 	 */
2027 	#define CE_BDS_ADD_DATA_MSG_ALGORITHM_MASK \
2028 		UINT32_C(0xf000000)
2029 	#define CE_BDS_ADD_DATA_MSG_ALGORITHM_SFT             24
2030 	/* AES_GCM_128 Algorithm */
2031 	#define CE_BDS_ADD_DATA_MSG_ALGORITHM_AES_GCM_128 \
2032 		UINT32_C(0x1000000)
2033 	/* AES_GCM_256 Algorithm */
2034 	#define CE_BDS_ADD_DATA_MSG_ALGORITHM_AES_GCM_256 \
2035 		UINT32_C(0x2000000)
2036 	/*
2037 	 * Version number of TLS connection. HW will provide registers that
2038 	 * converts the 4b encoded version number to 16b of actual version
2039 	 * number in the TLS Header. This field is initialized/updated by
2040 	 * this "KTLS crypto add" mid-path command.
2041 	 */
2042 	#define CE_BDS_ADD_DATA_MSG_VERSION_MASK \
2043 		UINT32_C(0xf0000000)
2044 	#define CE_BDS_ADD_DATA_MSG_VERSION_SFT               28
2045 	/* TLS1.2 Version */
2046 	#define CE_BDS_ADD_DATA_MSG__TLS1_2 \
2047 		(UINT32_C(0x0) << 28)
2048 	/* TLS1.3 Version */
2049 	#define CE_BDS_ADD_DATA_MSG__TLS1_3 \
2050 		(UINT32_C(0x1) << 28)
2051 	#define CE_BDS_ADD_DATA_MSG__LAST \
2052 		CE_BDS_ADD_DATA_MSG__TLS1_3
2053 	uint8_t	cmd_type_ctx_kind;
2054 	/*
2055 	 * Command Type in the TLS header. HW will provide registers that
2056 	 * converts the 3b encoded command type to 8b of actual command
2057 	 * type in the TLS Header. This field is initialized/updated by
2058 	 * this "KTLS crypto add" mid-path command.
2059 	 */
2060 	#define CE_BDS_ADD_DATA_MSG_CMD_TYPE_MASK UINT32_C(0x7)
2061 	#define CE_BDS_ADD_DATA_MSG_CMD_TYPE_SFT  0
2062 	/* Application */
2063 	#define CE_BDS_ADD_DATA_MSG_CMD_TYPE_APP    UINT32_C(0x0)
2064 	#define CE_BDS_ADD_DATA_MSG_CMD_TYPE_LAST \
2065 		CE_BDS_ADD_DATA_MSG_CMD_TYPE_APP
2066 	/* This field selects the context kind for the request. */
2067 	#define CE_BDS_ADD_DATA_MSG_CTX_KIND_MASK UINT32_C(0xf8)
2068 	#define CE_BDS_ADD_DATA_MSG_CTX_KIND_SFT  3
2069 	/* Crypto key transmit context */
2070 	#define CE_BDS_ADD_DATA_MSG_CTX_KIND_CK_TX  (UINT32_C(0x11) << 3)
2071 	/* Crypto key receive context */
2072 	#define CE_BDS_ADD_DATA_MSG_CTX_KIND_CK_RX  (UINT32_C(0x12) << 3)
2073 	#define CE_BDS_ADD_DATA_MSG_CTX_KIND_LAST \
2074 		CE_BDS_ADD_DATA_MSG_CTX_KIND_CK_RX
2075 	uint8_t	unused0[3];
2076 	/*
2077 	 * Salt is part of the nonce that is used as the Initial Vector (IV) in
2078 	 * AES-GCM cipher suites. These are exchanged as part of the handshake
2079 	 * process and is either the client_write_iv (when the client is
2080 	 * sending) or server_write_iv (when the server is sending). In
2081 	 * TLS1.2, 4B of Salt is concatenated with 8B of explicit_nonce to
2082 	 * generate the 12B of IV. In TLS1.3, 8B of TLS record sequence number
2083 	 * is zero padded to 12B and then xor'ed with the 4B of salt to generate
2084 	 * the 12B of IV. This value is initialized by this mid-path command.
2085 	 */
2086 	uint32_t	salt;
2087 	uint32_t	unused1;
2088 	/*
2089 	 * This field keeps track of the TCP sequence number that is expected as
2090 	 * the first byte in the next TCP packet. This field is calculated by HW
2091 	 * using the output of the parser. The field is initialized as part of
2092 	 * the Mid-path BD download/update of a kTLS connection. For every TCP
2093 	 * packet processed, TCE HW will update the value to Current packet TCP
2094 	 * sequence number + Current packet TCP Payload Length.
2095 	 */
2096 	uint32_t	pkt_tcp_seq_num;
2097 	/*
2098 	 * This field maintains the TCP sequence number of the first byte in the
2099 	 * header of the active TLS record. This field is initialized as part of
2100 	 * the Mid-path BD download/update of a kTLS connection. For every
2101 	 * record that is processed, TCE HW copies the value from the
2102 	 * next_tls_header_tcp_seq_num field.
2103 	 */
2104 	uint32_t	tls_header_tcp_seq_num;
2105 	/*
2106 	 * This is sequence number for the TLS record in a particular session.
2107 	 * In TLS1.2, record sequence number is part of the Associated Data (AD)
2108 	 * in the AEAD algorithm. In TLS1.3, record sequence number is part of
2109 	 * the Initial Vector (IV). The field is initialized as part of the
2110 	 * mid-path BD download/update of a kTLS connection. TCE HW increments
2111 	 * the field after that for every record processed as it parses the TCP
2112 	 * packet.
2113 	 */
2114 	uint32_t	record_seq_num[2];
2115 	/*
2116 	 * Key used for encrypting or decrypting TLS records. The Key is
2117 	 * exchanged during the hand-shake protocol by the client-server and
2118 	 * provided to HW through this mid-path BD.
2119 	 */
2120 	uint32_t	session_key[8];
2121 } __rte_packed;
2122 
2123 /* ce_bds_delete_data_msg (size:64b/8B) */
2124 struct ce_bds_delete_data_msg {
2125 	uint32_t	kid_opcode_ctx_kind;
2126 	/*
2127 	 * This value selects the operation for the mid-path command for the
2128 	 * crypto blocks.
2129 	 */
2130 	#define CE_BDS_DELETE_DATA_MSG_OPCODE_MASK     UINT32_C(0xf)
2131 	#define CE_BDS_DELETE_DATA_MSG_OPCODE_SFT      0
2132 	/*
2133 	 * This is the delete command. Using this opcode, the host Driver
2134 	 * can remove a key context from the CFCK. If context is deleted
2135 	 * and packets with the same KID come through the pipeline, the
2136 	 * following actions are taken. For transmit packets, no crypto
2137 	 * operation will be performed, payload will be zero'ed out. For
2138 	 * receive packets, no crypto operation will be performed,
2139 	 * payload will be unmodified.
2140 	 */
2141 	#define CE_BDS_DELETE_DATA_MSG_OPCODE_DELETE     UINT32_C(0x2)
2142 	#define CE_BDS_DELETE_DATA_MSG_OPCODE_LAST \
2143 		CE_BDS_DELETE_DATA_MSG_OPCODE_DELETE
2144 	/*
2145 	 * This field is the Crypto Context ID. The KID is used to store
2146 	 * information used by the associated kTLS offloaded connection.
2147 	 */
2148 	#define CE_BDS_DELETE_DATA_MSG_KID_MASK        UINT32_C(0xfffff0)
2149 	#define CE_BDS_DELETE_DATA_MSG_KID_SFT         4
2150 	/* This field selects the context kind for the request. */
2151 	#define CE_BDS_DELETE_DATA_MSG_CTX_KIND_MASK   UINT32_C(0x1f000000)
2152 	#define CE_BDS_DELETE_DATA_MSG_CTX_KIND_SFT    24
2153 	/* Crypto Key Transmit Context. */
2154 	#define CE_BDS_DELETE_DATA_MSG_CTX_KIND_CK_TX    (UINT32_C(0x11) << 24)
2155 	/* Crypto Key Receive Context. */
2156 	#define CE_BDS_DELETE_DATA_MSG_CTX_KIND_CK_RX    (UINT32_C(0x12) << 24)
2157 	/* QUIC Key Transmit Context. */
2158 	#define CE_BDS_DELETE_DATA_MSG_CTX_KIND_QUIC_TX  (UINT32_C(0x14) << 24)
2159 	/* QUIC Key Receive Context. */
2160 	#define CE_BDS_DELETE_DATA_MSG_CTX_KIND_QUIC_RX  (UINT32_C(0x15) << 24)
2161 	#define CE_BDS_DELETE_DATA_MSG_CTX_KIND_LAST \
2162 		CE_BDS_DELETE_DATA_MSG_CTX_KIND_QUIC_RX
2163 	uint32_t	unused0;
2164 } __rte_packed;
2165 
2166 /* ce_bds_resync_resp_ack_msg (size:128b/16B) */
2167 struct ce_bds_resync_resp_ack_msg {
2168 	uint32_t	resync_status_kid_opcode;
2169 	/*
2170 	 * This value selects the operation for the mid-path command for the
2171 	 * crypto blocks.
2172 	 */
2173 	#define CE_BDS_RESYNC_RESP_ACK_MSG_OPCODE_MASK       UINT32_C(0xf)
2174 	#define CE_BDS_RESYNC_RESP_ACK_MSG_OPCODE_SFT        0
2175 	/*
2176 	 * This command is used by the driver as a response to the resync
2177 	 * request sent by the crypto engine.
2178 	 */
2179 	#define CE_BDS_RESYNC_RESP_ACK_MSG_OPCODE_RESYNC       UINT32_C(0x3)
2180 	#define CE_BDS_RESYNC_RESP_ACK_MSG_OPCODE_LAST \
2181 		CE_BDS_RESYNC_RESP_ACK_MSG_OPCODE_RESYNC
2182 	/*
2183 	 * This field is the Crypto Context ID. The KID is used to store
2184 	 * information used by the associated kTLS offloaded connection.
2185 	 */
2186 	#define CE_BDS_RESYNC_RESP_ACK_MSG_KID_MASK          UINT32_C(0xfffff0)
2187 	#define CE_BDS_RESYNC_RESP_ACK_MSG_KID_SFT           4
2188 	/*
2189 	 * This field indicates if the resync request resulted in a success or
2190 	 * a failure.
2191 	 */
2192 	#define CE_BDS_RESYNC_RESP_ACK_MSG_RESYNC_STATUS \
2193 		UINT32_C(0x1000000)
2194 	/*
2195 	 * An ACK indicates that the driver was able to find the TLS record
2196 	 * associated with TCP sequence number provided by the HW
2197 	 */
2198 	#define CE_BDS_RESYNC_RESP_ACK_MSG_RESYNC_STATUS_ACK \
2199 		(UINT32_C(0x0) << 24)
2200 	#define CE_BDS_RESYNC_RESP_ACK_MSG_RESYNC_STATUS_LAST \
2201 		CE_BDS_RESYNC_RESP_ACK_MSG_RESYNC_STATUS_ACK
2202 	/*
2203 	 * This field is the echo of the TCP sequence number provided in the
2204 	 * resync request by the HW. If HW sent multiple resync requests, it
2205 	 * only tracks the latest TCP sequence number. When the response from
2206 	 * the Driver doesn't match the latest request, HW will drop the resync
2207 	 * response.
2208 	 */
2209 	uint32_t	resync_record_tcp_seq_num;
2210 	/*
2211 	 * This field indicates the TLS record sequence number associated with
2212 	 * the resync request. HW will take this number and add the delta records
2213 	 * it has found since sending the resync request, update the context and
2214 	 * resume decrypting records.
2215 	 */
2216 	uint32_t	resync_record_seq_num[2];
2217 } __rte_packed;
2218 
2219 /* ce_bds_resync_resp_nack_msg (size:64b/8B) */
2220 struct ce_bds_resync_resp_nack_msg {
2221 	uint32_t	resync_status_kid_opcode;
2222 	/*
2223 	 * This value selects the operation for the mid-path command for the
2224 	 * crypto blocks.
2225 	 */
2226 	#define CE_BDS_RESYNC_RESP_NACK_MSG_OPCODE_MASK       UINT32_C(0xf)
2227 	#define CE_BDS_RESYNC_RESP_NACK_MSG_OPCODE_SFT        0
2228 	/*
2229 	 * This command is used by the driver as a response to the resync
2230 	 * request sent by the crypto engine.
2231 	 */
2232 	#define CE_BDS_RESYNC_RESP_NACK_MSG_OPCODE_RESYNC       UINT32_C(0x3)
2233 	#define CE_BDS_RESYNC_RESP_NACK_MSG_OPCODE_LAST \
2234 		CE_BDS_RESYNC_RESP_NACK_MSG_OPCODE_RESYNC
2235 	/*
2236 	 * This field is the Crypto Context ID. The KID is used to store
2237 	 * information used by the associated kTLS offloaded connection.
2238 	 */
2239 	#define CE_BDS_RESYNC_RESP_NACK_MSG_KID_MASK \
2240 		UINT32_C(0xfffff0)
2241 	#define CE_BDS_RESYNC_RESP_NACK_MSG_KID_SFT           4
2242 	/*
2243 	 * This field indicates if the resync request resulted in a success or
2244 	 * a failure.
2245 	 */
2246 	#define CE_BDS_RESYNC_RESP_NACK_MSG_RESYNC_STATUS \
2247 		UINT32_C(0x1000000)
2248 	/*
2249 	 * An NAK indicates that the driver wasn't able to find the TLS
2250 	 * record associated with TCP sequence number provided by the HW
2251 	 */
2252 	#define CE_BDS_RESYNC_RESP_NACK_MSG_RESYNC_STATUS_NACK \
2253 		(UINT32_C(0x1) << 24)
2254 	#define CE_BDS_RESYNC_RESP_NACK_MSG_RESYNC_STATUS_LAST \
2255 		CE_BDS_RESYNC_RESP_NACK_MSG_RESYNC_STATUS_NACK
2256 	/*
2257 	 * This field is the echo of the TCP sequence number provided in the
2258 	 * resync request by the HW. If HW sent multiple resync requests, it
2259 	 * only tracks the latest TCP sequence number. When the response from
2260 	 * the Driver doesn't match the latest request, HW will drop the resync
2261 	 * response.
2262 	 */
2263 	uint32_t	resync_record_tcp_seq_num;
2264 } __rte_packed;
2265 
2266 /* crypto_presync_bd_cmd (size:256b/32B) */
2267 struct crypto_presync_bd_cmd {
2268 	uint8_t	flags;
2269 	/*
2270 	 * Typically, presync BDs are used for packet retransmissions. Source
2271 	 * port sends all the packets in order over the network to destination
2272 	 * port and packets get dropped in the network. The destination port
2273 	 * will request retranmission of dropped packets and source port driver
2274 	 * will send presync BD to setup the transmitter appropriately. It will
2275 	 * provide the start and end TCP sequence number of the data to be
2276 	 * transmitted. HW keeps two sets of context variable, one for in order
2277 	 * traffic and one for retransmission traffic. HW is designed to
2278 	 * transmit everything posted in the presync BD and return to in order
2279 	 * mode after that. No inorder context variables are updated in the
2280 	 * process. There is a special case where packets can be dropped
2281 	 * between the TCP stack and Device Driver (Berkeley Packet Filter for
2282 	 * ex) and HW still needs to transmit rest of the traffic. In this
2283 	 * mode, driver will send a presync BD as if it is a retransmission but
2284 	 * at the end of the transmission, the in order variables need to be
2285 	 * updated. This flag is used by driver to indicate that in order
2286 	 * variables needs to be updated at the end of completing the task
2287 	 * associated with the presync BD.
2288 	 */
2289 	#define CRYPTO_PRESYNC_BD_CMD_FLAGS_UPDATE_IN_ORDER_VAR \
2290 		UINT32_C(0x1)
2291 	uint8_t	unused0;
2292 	uint16_t	unused1;
2293 	/*
2294 	 * This field maintains the TCP sequence number of the first byte in the
2295 	 * Header of the active TLS record. This field is set to 0 during
2296 	 * mid-path BD updates, but is set to correct value when a presync BD is
2297 	 * detected. For every record that is processed, the value from the
2298 	 * next_tls_header_tcp_seq_num field is copied.
2299 	 */
2300 	uint32_t	header_tcp_seq_num;
2301 	/*
2302 	 * When a retransmitted packet has a TLS authentication TAG present and
2303 	 * the data spans multiple TCP Packets, HW is required to read the entire
2304 	 * record to recalculate the TAG but only transmit what is required. This
2305 	 * field is the start TCP sequence number of the packet(s) that need to
2306 	 * be re-transmitted. This field is initialized to 0 during Mid-path BD
2307 	 * add command and initialized to value provided by the driver when
2308 	 * Pre-sync BD is detected. This field is never updated unless another
2309 	 * Pre-sync BD signaling a new retransmission is scheduled.
2310 	 */
2311 	uint32_t	start_tcp_seq_num;
2312 	/*
2313 	 * When a retransmitted packet has a TLS authentication TAG present and
2314 	 * the data spans multiple TCP Packets, HW is required to read the
2315 	 * entire record to recalculate the TAG but only transmit what is
2316 	 * required. This field is the end TCP sequence number of the packet(s)
2317 	 * that need to be re-transmitted. This field is initialized to 0 during
2318 	 * Mid-path BD add command and initialized to value provided by the
2319 	 * driver when Pre-sync BD is detected. This field is never updated
2320 	 * unless another Pre-sync BD signaling a new retransmission is
2321 	 * scheduled.
2322 	 */
2323 	uint32_t	end_tcp_seq_num;
2324 	/*
2325 	 * For TLS1.2, an explicit nonce is used as part of the IV (concatenated
2326 	 * with the SALT). For retrans packets, this field is extracted from the
2327 	 * TLS record, field right after the TLS Header and stored in the
2328 	 * context. This field needs to be stored in context as TCP segmentation
2329 	 * could have split the field into multiple TCP packets. This value is
2330 	 * initialized to 0 when presync BD is detected by taking the value from
2331 	 * the first TLS header. When subsequent TLS Headers are detected, the
2332 	 * value is extracted from packet.
2333 	 */
2334 	uint32_t	explicit_nonce[2];
2335 	/*
2336 	 * This is sequence number for the TLS record in a particular session. In
2337 	 * TLS1.2, record sequence number is part of the Associated Data (AD) in
2338 	 * the AEAD algorithm. In TLS1.3, record sequence number is part of the
2339 	 * Initial Vector (IV). The field is initialized to 0 during Mid-path BD
2340 	 * download. Is initialized to correct value when a pre-sync BD is
2341 	 * detected. TCE HW increments the field after that for every record
2342 	 * processed as it parses the TCP packet. Subsequent pre-sync BDs
2343 	 * delivering more retransmission instruction will also update this
2344 	 * field.
2345 	 */
2346 	uint32_t	record_seq_num[2];
2347 } __rte_packed;
2348 
2349 /* bd_base (size:64b/8B) */
2350 struct bd_base {
2351 	uint8_t	type;
2352 	/* This value identifies the type of buffer descriptor. */
2353 	#define BD_BASE_TYPE_MASK             UINT32_C(0x3f)
2354 	#define BD_BASE_TYPE_SFT              0
2355 	/*
2356 	 * Indicates that this BD is 16B long and is used for
2357 	 * normal L2 packet transmission.
2358 	 */
2359 	#define BD_BASE_TYPE_TX_BD_SHORT        UINT32_C(0x0)
2360 	/*
2361 	 * Indicates that this BD is 1BB long and is an empty
2362 	 * TX BD. Not valid for use by the driver.
2363 	 */
2364 	#define BD_BASE_TYPE_TX_BD_EMPTY        UINT32_C(0x1)
2365 	/*
2366 	 * Indicates that this BD is 16B long and is an RX Producer
2367 	 * (i.e. empty) buffer descriptor.
2368 	 */
2369 	#define BD_BASE_TYPE_RX_PROD_PKT        UINT32_C(0x4)
2370 	/*
2371 	 * Indicates that this BD is 16B long and is an RX
2372 	 * Producer Buffer BD.
2373 	 */
2374 	#define BD_BASE_TYPE_RX_PROD_BFR        UINT32_C(0x5)
2375 	/*
2376 	 * Indicates that this BD is 16B long and is an
2377 	 * RX Producer Assembly Buffer Descriptor.
2378 	 */
2379 	#define BD_BASE_TYPE_RX_PROD_AGG        UINT32_C(0x6)
2380 	/*
2381 	 * Indicates that this BD is used to issue a command to one of
2382 	 * the mid-path destinations.
2383 	 */
2384 	#define BD_BASE_TYPE_TX_BD_MP_CMD       UINT32_C(0x8)
2385 	/*
2386 	 * Indicates that this BD is used to issue a cryptographic pre-
2387 	 * sync command through the fast path and destined for TCE.
2388 	 */
2389 	#define BD_BASE_TYPE_TX_BD_PRESYNC_CMD  UINT32_C(0x9)
2390 	/*
2391 	 * Indicates a timed transmit BD. This is a 16b BD that is inserted
2392 	 * into a packet BD chain immediately after the first BD. It is used
2393 	 * to control the flow in a timed transmit operation.
2394 	 */
2395 	#define BD_BASE_TYPE_TX_BD_TIMEDTX      UINT32_C(0xa)
2396 	/*
2397 	 * Indicates that this BD is 32B long and is used for
2398 	 * normal L2 packet transmission.
2399 	 */
2400 	#define BD_BASE_TYPE_TX_BD_LONG         UINT32_C(0x10)
2401 	/*
2402 	 * Indicates that this BD is 32B long and is used for
2403 	 * L2 packet transmission for small packets that require
2404 	 * low latency.
2405 	 */
2406 	#define BD_BASE_TYPE_TX_BD_LONG_INLINE  UINT32_C(0x11)
2407 	#define BD_BASE_TYPE_LAST              BD_BASE_TYPE_TX_BD_LONG_INLINE
2408 	uint8_t	unused_1[7];
2409 } __rte_packed;
2410 
2411 /* tx_bd_short (size:128b/16B) */
2412 struct tx_bd_short {
2413 	/*
2414 	 * All bits in this field must be valid on the first BD of a packet.
2415 	 * Only the packet_end bit must be valid for the remaining BDs
2416 	 * of a packet.
2417 	 */
2418 	uint16_t	flags_type;
2419 	/* This value identifies the type of buffer descriptor. */
2420 	#define TX_BD_SHORT_TYPE_MASK            UINT32_C(0x3f)
2421 	#define TX_BD_SHORT_TYPE_SFT             0
2422 	/*
2423 	 * Indicates that this BD is 16B long and is used for
2424 	 * normal L2 packet transmission.
2425 	 */
2426 	#define TX_BD_SHORT_TYPE_TX_BD_SHORT       UINT32_C(0x0)
2427 	#define TX_BD_SHORT_TYPE_LAST             TX_BD_SHORT_TYPE_TX_BD_SHORT
2428 	/*
2429 	 * All bits in this field must be valid on the first BD of a packet.
2430 	 * Only the packet_end bit must be valid for the remaining BDs
2431 	 * of a packet.
2432 	 */
2433 	#define TX_BD_SHORT_FLAGS_MASK           UINT32_C(0xffc0)
2434 	#define TX_BD_SHORT_FLAGS_SFT            6
2435 	/*
2436 	 * If set to 1, the packet ends with the data in the buffer
2437 	 * pointed to by this descriptor. This flag must be
2438 	 * valid on every BD.
2439 	 */
2440 	#define TX_BD_SHORT_FLAGS_PACKET_END      UINT32_C(0x40)
2441 	/*
2442 	 * If set to 1, the device will not generate a completion for
2443 	 * this transmit packet unless there is an error in it's
2444 	 * processing.
2445 	 * If this bit
2446 	 * is set to 0, then the packet will be completed normally.
2447 	 *
2448 	 * This bit must be valid only on the first BD of a packet.
2449 	 */
2450 	#define TX_BD_SHORT_FLAGS_NO_CMPL         UINT32_C(0x80)
2451 	/*
2452 	 * This value indicates how many 16B BD locations are consumed
2453 	 * in the ring by this packet.
2454 	 * A value of 1 indicates that this BD is the only BD (and that
2455 	 * it is a short BD). A value
2456 	 * of 3 indicates either 3 short BDs or 1 long BD and one short
2457 	 * BD in the packet. A value of 0 indicates
2458 	 * that there are 32 BD locations in the packet (the maximum).
2459 	 *
2460 	 * This field is valid only on the first BD of a packet.
2461 	 */
2462 	#define TX_BD_SHORT_FLAGS_BD_CNT_MASK     UINT32_C(0x1f00)
2463 	#define TX_BD_SHORT_FLAGS_BD_CNT_SFT      8
2464 	/*
2465 	 * This value is a hint for the length of the entire packet.
2466 	 * It is used by the chip to optimize internal processing.
2467 	 *
2468 	 * The packet will be dropped if the hint is too short.
2469 	 *
2470 	 * This field is valid only on the first BD of a packet.
2471 	 */
2472 	#define TX_BD_SHORT_FLAGS_LHINT_MASK      UINT32_C(0x6000)
2473 	#define TX_BD_SHORT_FLAGS_LHINT_SFT       13
2474 	/* indicates packet length < 512B */
2475 	#define TX_BD_SHORT_FLAGS_LHINT_LT512       (UINT32_C(0x0) << 13)
2476 	/* indicates 512 <= packet length < 1KB */
2477 	#define TX_BD_SHORT_FLAGS_LHINT_LT1K        (UINT32_C(0x1) << 13)
2478 	/* indicates 1KB <= packet length < 2KB */
2479 	#define TX_BD_SHORT_FLAGS_LHINT_LT2K        (UINT32_C(0x2) << 13)
2480 	/* indicates packet length >= 2KB */
2481 	#define TX_BD_SHORT_FLAGS_LHINT_GTE2K       (UINT32_C(0x3) << 13)
2482 	#define TX_BD_SHORT_FLAGS_LHINT_LAST \
2483 		TX_BD_SHORT_FLAGS_LHINT_GTE2K
2484 	/*
2485 	 * If set to 1, the device immediately updates the Send Consumer
2486 	 * Index after the buffer associated with this descriptor has
2487 	 * been transferred via DMA to NIC memory from host memory. An
2488 	 * interrupt may or may not be generated according to the state
2489 	 * of the interrupt avoidance mechanisms. If this bit
2490 	 * is set to 0, then the Consumer Index is only updated as soon
2491 	 * as one of the host interrupt coalescing conditions has been met.
2492 	 *
2493 	 * This bit must be valid on the first BD of a packet.
2494 	 */
2495 	#define TX_BD_SHORT_FLAGS_COAL_NOW        UINT32_C(0x8000)
2496 	/*
2497 	 * This is the length of the host physical buffer this BD describes
2498 	 * in bytes.
2499 	 *
2500 	 * This field must be valid on all BDs of a packet.
2501 	 */
2502 	uint16_t	len;
2503 	/*
2504 	 * The opaque data field is pass through to the completion and can be
2505 	 * used for any data that the driver wants to associate with the
2506 	 * transmit BD.
2507 	 *
2508 	 * This field must be valid on the first BD of a packet. If completion
2509 	 * coalescing is enabled on the TX ring, it is suggested that the driver
2510 	 * populate the opaque field to indicate the specific TX ring with which
2511 	 * the completion is associated, then utilize the opaque and sq_cons_idx
2512 	 * fields in the coalesced completion record to determine the specific
2513 	 * packets that are to be completed on that ring.
2514 	 */
2515 	uint32_t	opaque;
2516 	/*
2517 	 * This is the host physical address for the portion of the packet
2518 	 * described by this TX BD.
2519 	 *
2520 	 * This value must be valid on all BDs of a packet.
2521 	 */
2522 	uint64_t	address;
2523 } __rte_packed;
2524 
2525 /* tx_bd_long (size:128b/16B) */
2526 struct tx_bd_long {
2527 	/* This value identifies the type of buffer descriptor. */
2528 	uint16_t	flags_type;
2529 	/*
2530 	 * This value indicates the type of buffer descriptor.
2531 	 * packet.
2532 	 */
2533 	#define TX_BD_LONG_TYPE_MASK            UINT32_C(0x3f)
2534 	#define TX_BD_LONG_TYPE_SFT             0
2535 	/*
2536 	 * Indicates that this BD is 32B long and is used for
2537 	 * normal L2 packet transmission.
2538 	 */
2539 	#define TX_BD_LONG_TYPE_TX_BD_LONG        UINT32_C(0x10)
2540 	#define TX_BD_LONG_TYPE_LAST             TX_BD_LONG_TYPE_TX_BD_LONG
2541 	/*
2542 	 * All bits in this field must be valid on the first BD of a packet.
2543 	 * Only the packet_end bit must be valid for the remaining BDs
2544 	 * of a packet.
2545 	 */
2546 	#define TX_BD_LONG_FLAGS_MASK           UINT32_C(0xffc0)
2547 	#define TX_BD_LONG_FLAGS_SFT            6
2548 	/*
2549 	 * If set to 1, the packet ends with the data in the buffer
2550 	 * pointed to by this descriptor. This flag must be
2551 	 * valid on every BD.
2552 	 */
2553 	#define TX_BD_LONG_FLAGS_PACKET_END      UINT32_C(0x40)
2554 	/*
2555 	 * If set to 1, the device will not generate a completion for
2556 	 * this transmit packet unless there is an error in it's
2557 	 * processing.
2558 	 * If this bit
2559 	 * is set to 0, then the packet will be completed normally.
2560 	 *
2561 	 * This bit must be valid only on the first BD of a packet.
2562 	 */
2563 	#define TX_BD_LONG_FLAGS_NO_CMPL         UINT32_C(0x80)
2564 	/*
2565 	 * This value indicates how many 16B BD locations are consumed
2566 	 * in the ring by this packet.
2567 	 * A value of 1 indicates that this BD is the only BD (and that
2568 	 * it is a short BD). A value
2569 	 * of 3 indicates either 3 short BDs or 1 long BD and one short
2570 	 * BD in the packet. A value of 0 indicates
2571 	 * that there are 32 BD locations in the packet (the maximum).
2572 	 *
2573 	 * This field is valid only on the first BD of a packet.
2574 	 */
2575 	#define TX_BD_LONG_FLAGS_BD_CNT_MASK     UINT32_C(0x1f00)
2576 	#define TX_BD_LONG_FLAGS_BD_CNT_SFT      8
2577 	/*
2578 	 * This value is a hint for the length of the entire packet.
2579 	 * It is used by the chip to optimize internal processing.
2580 	 *
2581 	 * The packet will be dropped if the hint is too short.
2582 	 *
2583 	 * This field is valid only on the first BD of a packet.
2584 	 */
2585 	#define TX_BD_LONG_FLAGS_LHINT_MASK      UINT32_C(0x6000)
2586 	#define TX_BD_LONG_FLAGS_LHINT_SFT       13
2587 	/* indicates packet length < 512B */
2588 	#define TX_BD_LONG_FLAGS_LHINT_LT512       (UINT32_C(0x0) << 13)
2589 	/* indicates 512 <= packet length < 1KB */
2590 	#define TX_BD_LONG_FLAGS_LHINT_LT1K        (UINT32_C(0x1) << 13)
2591 	/* indicates 1KB <= packet length < 2KB */
2592 	#define TX_BD_LONG_FLAGS_LHINT_LT2K        (UINT32_C(0x2) << 13)
2593 	/* indicates packet length >= 2KB */
2594 	#define TX_BD_LONG_FLAGS_LHINT_GTE2K       (UINT32_C(0x3) << 13)
2595 	#define TX_BD_LONG_FLAGS_LHINT_LAST       TX_BD_LONG_FLAGS_LHINT_GTE2K
2596 	/*
2597 	 * If set to 1, the device immediately updates the Send Consumer
2598 	 * Index after the buffer associated with this descriptor has
2599 	 * been transferred via DMA to NIC memory from host memory. An
2600 	 * interrupt may or may not be generated according to the state
2601 	 * of the interrupt avoidance mechanisms. If this bit
2602 	 * is set to 0, then the Consumer Index is only updated as soon
2603 	 * as one of the host interrupt coalescing conditions has been met.
2604 	 *
2605 	 * This bit must be valid on the first BD of a packet.
2606 	 */
2607 	#define TX_BD_LONG_FLAGS_COAL_NOW        UINT32_C(0x8000)
2608 	/*
2609 	 * This is the length of the host physical buffer this BD describes
2610 	 * in bytes.
2611 	 *
2612 	 * This field must be valid on all BDs of a packet.
2613 	 */
2614 	uint16_t	len;
2615 	/*
2616 	 * The opaque data field is passed through to the completion and can be
2617 	 * used for any data that the driver wants to associate with the
2618 	 * transmit BD.
2619 	 *
2620 	 * This field must be valid on the first BD of a packet. If completion
2621 	 * coalescing is enabled on the TX ring, it is suggested that the driver
2622 	 * populate the opaque field to indicate the specific TX ring with which
2623 	 * the completion is associated, then utilize the opaque and sq_cons_idx
2624 	 * fields in the coalesced completion record to determine the specific
2625 	 * packets that are to be completed on that ring.
2626 	 */
2627 	uint32_t	opaque;
2628 	/*
2629 	 * This is the host physical address for the portion of the packet
2630 	 * described by this TX BD.
2631 	 *
2632 	 * This value must be valid on all BDs of a packet.
2633 	 */
2634 	uint64_t	address;
2635 } __rte_packed;
2636 
2637 /* Last 16 bytes of tx_bd_long. */
2638 /* tx_bd_long_hi (size:128b/16B) */
2639 struct tx_bd_long_hi {
2640 	/*
2641 	 * All bits in this field must be valid on the first BD of a packet.
2642 	 * Their value on other BDs of the packet will be ignored.
2643 	 */
2644 	uint16_t	lflags;
2645 	/*
2646 	 * If set to 1, the controller replaces the TCP/UPD checksum
2647 	 * fields of normal TCP/UPD checksum, or the inner TCP/UDP
2648 	 * checksum field of the encapsulated TCP/UDP packets with the
2649 	 * hardware calculated TCP/UDP checksum for the packet associated
2650 	 * with this descriptor. The flag is ignored if the LSO flag is set.
2651 	 *
2652 	 * This bit must be valid on the first BD of a packet.
2653 	 */
2654 	#define TX_BD_LONG_LFLAGS_TCP_UDP_CHKSUM     UINT32_C(0x1)
2655 	/*
2656 	 * If set to 1, the controller replaces the IP checksum of the
2657 	 * normal packets, or the inner IP checksum of the encapsulated
2658 	 * packets with the hardware calculated IP checksum for the
2659 	 * packet associated with this descriptor.
2660 	 *
2661 	 * This bit must be valid on the first BD of a packet.
2662 	 */
2663 	#define TX_BD_LONG_LFLAGS_IP_CHKSUM          UINT32_C(0x2)
2664 	/*
2665 	 * If set to 1, the controller will not append an Ethernet CRC
2666 	 * to the end of the frame.
2667 	 *
2668 	 * This bit must be valid on the first BD of a packet.
2669 	 *
2670 	 * Packet must be 64B or longer when this flag is set. It is not
2671 	 * useful to use this bit with any form of TX offload such as
2672 	 * CSO or LSO. The intent is that the packet from the host already
2673 	 * has a valid Ethernet CRC on the packet.
2674 	 */
2675 	#define TX_BD_LONG_LFLAGS_NOCRC              UINT32_C(0x4)
2676 	/*
2677 	 * This bit, in conjunction with the stamp_1step bit, controls whether
2678 	 * a TX packet timestamp is collected and the type of timestamp that
2679 	 * is collected.
2680 	 *
2681 	 * This bit must be valid on the first BD of a packet.
2682 	 *
2683 	 * Enumerations of the concatenation { stamp, stamp_1step } are
2684 	 * as follows:
2685 	 *
2686 	 * - 2'b00: ts_none - no timestamp
2687 	 * - 2'b01: ts_ptp_1step - 1-step PTP
2688 	 * - 2'b10: ts_2cmpl - 2-step PTP timestamp or PA timestamp
2689 	 * - 2'b11: ts_rsvd - reserved, same behavior as ts_none
2690 	 * For the ts_2cmpl enumeration, an additional completion is returned.
2691 	 * This additional completion may carry a 2-step PTP timestamp or a PA
2692 	 * timestamp, depending on parsing of the transmitted packet.
2693 	 */
2694 	#define TX_BD_LONG_LFLAGS_STAMP              UINT32_C(0x8)
2695 	/*
2696 	 * If set to 1, The controller replaces the tunnel IP checksum
2697 	 * field with hardware calculated IP checksum for the IP header
2698 	 * of the packet associated with this descriptor.
2699 	 *
2700 	 * For outer UDP checksum, global outer UDP checksum TE_NIC register
2701 	 * needs to be enabled. If the global outer UDP checksum TE_NIC
2702 	 * register bit is set, outer UDP checksum will be calculated for
2703 	 * the following cases:
2704 	 * 1. Packets with tcp_udp_chksum flag set to offload checksum for
2705 	 * inner packet AND the inner packet is TCP/UDP. If the inner packet
2706 	 * is ICMP for example (non-TCP/UDP), even if the tcp_udp_chksum is
2707 	 * set, the outer UDP checksum will not be calculated.
2708 	 * 2. Packets with lso flag set which implies inner TCP checksum
2709 	 * calculation as part of LSO operation.
2710 	 */
2711 	#define TX_BD_LONG_LFLAGS_T_IP_CHKSUM        UINT32_C(0x10)
2712 	/*
2713 	 * If set to 1, the device will treat this packet with LSO(Large
2714 	 * Send Offload) processing for both normal or encapsulated
2715 	 * packets, which is a form of TCP segmentation. When this bit
2716 	 * is 1, the hdr_size and mss fields must be valid. The driver
2717 	 * doesn't need to set ot_ip_chksum, t_ip_chksum, ip_chksum, and
2718 	 * tcp_udp_chksum flags since the controller will replace the
2719 	 * appropriate checksum fields for segmented packets.
2720 	 *
2721 	 * When this bit is 1, the hdr_size and mss fields must be valid.
2722 	 */
2723 	#define TX_BD_LONG_LFLAGS_LSO                UINT32_C(0x20)
2724 	/*
2725 	 * If set to zero when LSO is '1', then the IPID will be treated
2726 	 * as a 16b number and will be wrapped if it exceeds a value of
2727 	 * 0xffff.
2728 	 *
2729 	 * If set to one when LSO is '1', then the IPID will be treated
2730 	 * as a 15b number and will be wrapped if it exceeds a value 0f
2731 	 * 0x7fff.
2732 	 */
2733 	#define TX_BD_LONG_LFLAGS_IPID_FMT           UINT32_C(0x40)
2734 	/*
2735 	 * If set to zero when LSO is '1', then the IPID of the tunnel
2736 	 * IP header will not be modified during LSO operations.
2737 	 *
2738 	 * If set to one when LSO is '1', then the IPID of the tunnel
2739 	 * IP header will be incremented for each subsequent segment of an
2740 	 * LSO operation.
2741 	 *
2742 	 * The flag is ignored if the LSO packet is a normal (non-tunneled)
2743 	 * TCP packet.
2744 	 */
2745 	#define TX_BD_LONG_LFLAGS_T_IPID             UINT32_C(0x80)
2746 	/*
2747 	 * If set to '1', then the RoCE ICRC will be appended to the
2748 	 * packet. Packet must be a valid RoCE format packet.
2749 	 */
2750 	#define TX_BD_LONG_LFLAGS_ROCE_CRC           UINT32_C(0x100)
2751 	/*
2752 	 * If set to '1', then the FCoE CRC will be appended to the
2753 	 * packet. Packet must be a valid FCoE format packet.
2754 	 */
2755 	#define TX_BD_LONG_LFLAGS_FCOE_CRC           UINT32_C(0x200)
2756 	/*
2757 	 * If set to '1', then the timestamp from the BD is used. If cleared
2758 	 * to 0, then TWE provides the timestamp.
2759 	 */
2760 	#define TX_BD_LONG_LFLAGS_BD_TS_EN           UINT32_C(0x400)
2761 	/*
2762 	 * If set to '1', this operation will cause a trace capture in each
2763 	 * block it passes through.
2764 	 */
2765 	#define TX_BD_LONG_LFLAGS_DEBUG_TRACE        UINT32_C(0x800)
2766 	/*
2767 	 * This bit, in conjunction with the stamp bit, controls whether a
2768 	 * TX packet timestamp is collected and the type of timestamp that
2769 	 * is collected.
2770 	 *
2771 	 * See the stamp field for a description of the valid combinations of
2772 	 * stamp and stamp_1step.
2773 	 *
2774 	 * This bit must be valid on the first BD of a packet.
2775 	 */
2776 	#define TX_BD_LONG_LFLAGS_STAMP_1STEP        UINT32_C(0x1000)
2777 	/*
2778 	 * If set to '1', the controller replaces the Outer-tunnel IP checksum
2779 	 * field with hardware calculated IP checksum for the IP header of the
2780 	 * packet associated with this descriptor. For outer UDP checksum, it
2781 	 * will be the following behavior for all cases independent of
2782 	 * settings of inner LSO and checksum offload BD flags.
2783 	 * If outer UDP checksum is 0, then do not update it.
2784 	 * If outer UDP checksum is non zero, then  the hardware should
2785 	 * compute and update it.
2786 	 */
2787 	#define TX_BD_LONG_LFLAGS_OT_IP_CHKSUM       UINT32_C(0x2000)
2788 	/*
2789 	 * If set to zero when LSO is '1', then the IPID of the Outer-tunnel
2790 	 * IP header will not be modified during LSO operations. If set to one
2791 	 * when LSO is '1', then the IPID of the Outer-tunnel IP header will
2792 	 * be incremented for each subsequent segment of an LSO operation. The
2793 	 * flag is ignored if the LSO packet is a normal (non-tunneled) TCP
2794 	 * packet.
2795 	 */
2796 	#define TX_BD_LONG_LFLAGS_OT_IPID            UINT32_C(0x4000)
2797 	/*
2798 	 * If set to '1', When set to 1, KTLS encryption will be enabled for
2799 	 * the packet.
2800 	 */
2801 	#define TX_BD_LONG_LFLAGS_CRYPTO_EN          UINT32_C(0x8000)
2802 	uint16_t	kid_or_ts_low_hdr_size;
2803 	/*
2804 	 * When LSO is '1', this field must contain the offset of the
2805 	 * TCP payload from the beginning of the packet in as
2806 	 * 16b words. In case of encapsulated/tunneling packet, this field
2807 	 * contains the offset of the inner TCP payload from beginning of the
2808 	 * packet as 16-bit words.
2809 	 *
2810 	 * This value must be valid on the first BD of a packet.
2811 	 */
2812 	#define TX_BD_LONG_HDR_SIZE_MASK     UINT32_C(0x1ff)
2813 	#define TX_BD_LONG_HDR_SIZE_SFT      0
2814 	/*
2815 	 * If lflags.bd_ts_en is 1, this is the lower 7 bits of the 24-bit
2816 	 * timestamp. If lflags.crypto_en is 1, this is the lower 7 bits of
2817 	 * the 20-bit KID.
2818 	 */
2819 	#define TX_BD_LONG_KID_OR_TS_LOW_MASK UINT32_C(0xfe00)
2820 	#define TX_BD_LONG_KID_OR_TS_LOW_SFT 9
2821 	uint32_t	kid_or_ts_high_mss;
2822 	/*
2823 	 * This is the MSS value that will be used to do the LSO processing.
2824 	 * The value is the length in bytes of the TCP payload for each
2825 	 * segment generated by the LSO operation.
2826 	 *
2827 	 * This value must be valid on the first BD of a packet.
2828 	 */
2829 	#define TX_BD_LONG_MSS_MASK           UINT32_C(0x7fff)
2830 	#define TX_BD_LONG_MSS_SFT            0
2831 	/*
2832 	 * If lflags.bd_ts_en is 1, this is the upper 17 bits of the 24-bit
2833 	 * timestamp. If lflags.crypto_en is 1, the least significant 13 bits
2834 	 * of this field contain the upper 13 bits of the 20-bit KID.
2835 	 */
2836 	#define TX_BD_LONG_KID_OR_TS_HIGH_MASK UINT32_C(0xffff8000)
2837 	#define TX_BD_LONG_KID_OR_TS_HIGH_SFT 15
2838 	/*
2839 	 * This value selects bits 25:16 of the CFA action to perform on the
2840 	 * packet. See the cfa_action field for more information.
2841 	 */
2842 	uint16_t	cfa_action_high;
2843 	#define TX_BD_LONG_CFA_ACTION_HIGH_MASK UINT32_C(0x3ff)
2844 	#define TX_BD_LONG_CFA_ACTION_HIGH_SFT 0
2845 	/*
2846 	 * This value selects a CFA action to perform on the packet.
2847 	 * Set this value to zero if no CFA action is desired.
2848 	 *
2849 	 * This value must be valid on the first BD of a packet.
2850 	 */
2851 	uint16_t	cfa_action;
2852 	/*
2853 	 * This value is action meta-data that defines CFA edit operations
2854 	 * that are done in addition to any action editing.
2855 	 */
2856 	uint32_t	cfa_meta;
2857 	/* When key=1, This is the VLAN tag VID value. */
2858 	#define TX_BD_LONG_CFA_META_VLAN_VID_MASK        UINT32_C(0xfff)
2859 	#define TX_BD_LONG_CFA_META_VLAN_VID_SFT         0
2860 	/* When key=1, This is the VLAN tag DE value. */
2861 	#define TX_BD_LONG_CFA_META_VLAN_DE              UINT32_C(0x1000)
2862 	/* When key=1, This is the VLAN tag PRI value. */
2863 	#define TX_BD_LONG_CFA_META_VLAN_PRI_MASK        UINT32_C(0xe000)
2864 	#define TX_BD_LONG_CFA_META_VLAN_PRI_SFT         13
2865 	/* When key=1, This is the VLAN tag TPID select value. */
2866 	#define TX_BD_LONG_CFA_META_VLAN_TPID_MASK       UINT32_C(0x70000)
2867 	#define TX_BD_LONG_CFA_META_VLAN_TPID_SFT        16
2868 	/* 0x88a8 */
2869 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID88A8 \
2870 		(UINT32_C(0x0) << 16)
2871 	/* 0x8100 */
2872 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID8100 \
2873 		(UINT32_C(0x1) << 16)
2874 	/* 0x9100 */
2875 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9100 \
2876 		(UINT32_C(0x2) << 16)
2877 	/* 0x9200 */
2878 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9200 \
2879 		(UINT32_C(0x3) << 16)
2880 	/* 0x9300 */
2881 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9300 \
2882 		(UINT32_C(0x4) << 16)
2883 	/* Value programmed in CFA VLANTPID register. */
2884 	#define TX_BD_LONG_CFA_META_VLAN_TPID_TPIDCFG \
2885 		(UINT32_C(0x5) << 16)
2886 	#define TX_BD_LONG_CFA_META_VLAN_TPID_LAST \
2887 		TX_BD_LONG_CFA_META_VLAN_TPID_TPIDCFG
2888 	/* When key=1, This is the VLAN tag TPID select value. */
2889 	#define TX_BD_LONG_CFA_META_VLAN_RESERVED_MASK   UINT32_C(0xff80000)
2890 	#define TX_BD_LONG_CFA_META_VLAN_RESERVED_SFT    19
2891 	/*
2892 	 * This field identifies the type of edit to be performed
2893 	 * on the packet.
2894 	 *
2895 	 * This value must be valid on the first BD of a packet.
2896 	 */
2897 	#define TX_BD_LONG_CFA_META_KEY_MASK             UINT32_C(0xf0000000)
2898 	#define TX_BD_LONG_CFA_META_KEY_SFT              28
2899 	/* No editing */
2900 	#define TX_BD_LONG_CFA_META_KEY_NONE \
2901 		(UINT32_C(0x0) << 28)
2902 	/*
2903 	 * - meta[17:16] - TPID select value (0 = 0x8100).
2904 	 * - meta[15:12] - PRI/DE value.
2905 	 * - meta[11:0] - VID value.
2906 	 */
2907 	#define TX_BD_LONG_CFA_META_KEY_VLAN_TAG \
2908 		(UINT32_C(0x1) << 28)
2909 	/*
2910 	 * Provide metadata
2911 	 * - Wh+/SR - this option is not supported.
2912 	 * - Thor - cfa_meta[15:0] is used for metadata output if en_bd_meta
2913 	 *   is set in the Lookup Table.
2914 	 * - SR2 - {4’d0, cfa_meta[27:0]} is used for metadata output if
2915 	 *   en_bd_meta is set in the Lookup Table.
2916 	 */
2917 	#define TX_BD_LONG_CFA_META_KEY_METADATA_TRANSFER \
2918 		(UINT32_C(0x2) << 28)
2919 	#define TX_BD_LONG_CFA_META_KEY_LAST \
2920 		TX_BD_LONG_CFA_META_KEY_METADATA_TRANSFER
2921 } __rte_packed;
2922 
2923 /*
2924  * This structure is used to inform the NIC of packet data that needs to
2925  * be transmitted with additional processing that requires extra data
2926  * such as VLAN insertion plus attached inline data.
2927  * This BD type may be used to improve latency for small packets needing
2928  * the additional extended features supported by long BDs.
2929  */
2930 /* tx_bd_long_inline (size:256b/32B) */
2931 struct tx_bd_long_inline {
2932 	uint16_t	flags_type;
2933 	/* This value identifies the type of buffer descriptor. */
2934 	#define TX_BD_LONG_INLINE_TYPE_MASK             UINT32_C(0x3f)
2935 	#define TX_BD_LONG_INLINE_TYPE_SFT              0
2936 	/*
2937 	 * This type of BD is 32B long and is used for inline L2 packet
2938 	 * transmission.
2939 	 */
2940 	#define TX_BD_LONG_INLINE_TYPE_TX_BD_LONG_INLINE  UINT32_C(0x11)
2941 	#define TX_BD_LONG_INLINE_TYPE_LAST \
2942 		TX_BD_LONG_INLINE_TYPE_TX_BD_LONG_INLINE
2943 	/*
2944 	 * All bits in this field may be set on the first BD of a packet.
2945 	 * Only the packet_end bit may be set in non-first BDs.
2946 	 */
2947 	#define TX_BD_LONG_INLINE_FLAGS_MASK            UINT32_C(0xffc0)
2948 	#define TX_BD_LONG_INLINE_FLAGS_SFT             6
2949 	/*
2950 	 * If set to 1, the packet ends with the data in the buffer
2951 	 * pointed to by this descriptor. This flag must be
2952 	 * valid on every BD.
2953 	 */
2954 	#define TX_BD_LONG_INLINE_FLAGS_PACKET_END       UINT32_C(0x40)
2955 	/*
2956 	 * If set to 1, the device will not generate a completion for
2957 	 * this transmit packet unless there is an error in its processing.
2958 	 * If this bit is set to 0, then the packet will be completed
2959 	 * normally.
2960 	 *
2961 	 * This bit may be set only on the first BD of a packet.
2962 	 */
2963 	#define TX_BD_LONG_INLINE_FLAGS_NO_CMPL          UINT32_C(0x80)
2964 	/*
2965 	 * This value indicates how many 16B BD locations are consumed
2966 	 * in the ring by this packet, including the BD and inline
2967 	 * data.
2968 	 */
2969 	#define TX_BD_LONG_INLINE_FLAGS_BD_CNT_MASK      UINT32_C(0x1f00)
2970 	#define TX_BD_LONG_INLINE_FLAGS_BD_CNT_SFT       8
2971 	/* This field is deprecated. */
2972 	#define TX_BD_LONG_INLINE_FLAGS_LHINT_MASK       UINT32_C(0x6000)
2973 	#define TX_BD_LONG_INLINE_FLAGS_LHINT_SFT        13
2974 	/*
2975 	 * If set to 1, the device immediately updates the Send Consumer
2976 	 * Index after the buffer associated with this descriptor has
2977 	 * been transferred via DMA to NIC memory from host memory. An
2978 	 * interrupt may or may not be generated according to the state
2979 	 * of the interrupt avoidance mechanisms. If this bit
2980 	 * is set to 0, then the Consumer Index is only updated as soon
2981 	 * as one of the host interrupt coalescing conditions has been met.
2982 	 *
2983 	 * This bit must be valid on the first BD of a packet.
2984 	 */
2985 	#define TX_BD_LONG_INLINE_FLAGS_COAL_NOW         UINT32_C(0x8000)
2986 	/*
2987 	 * This is the length of the inline data, not including BD length, in
2988 	 * bytes.
2989 	 * The maximum value is 480.
2990 	 *
2991 	 * This field must be valid on all BDs of a packet.
2992 	 */
2993 	uint16_t	len;
2994 	/*
2995 	 * The opaque data field is passed through to the completion and can be
2996 	 * used for any data that the driver wants to associate with the
2997 	 * transmit BD. This field must be valid on the first BD of a packet.
2998 	 * If completion coalescing is enabled on the TX ring, it is suggested
2999 	 * that the driver populate the opaque field to indicate the specific
3000 	 * TX ring with which the completion is associated, then utilize the
3001 	 * opaque and sq_cons_idx fields in the coalesced completion record to
3002 	 * determine the specific packets that are to be completed on that ring.
3003 	 *
3004 	 * This field must be valid on the first BD of a packet.
3005 	 */
3006 	uint32_t	opaque;
3007 	uint64_t	unused1;
3008 	/*
3009 	 * All bits in this field must be valid on the first BD of a packet.
3010 	 * Their value on other BDs of the packet is ignored.
3011 	 */
3012 	uint16_t	lflags;
3013 	/*
3014 	 * If set to 1, the controller replaces the TCP/UPD checksum
3015 	 * fields of normal TCP/UPD checksum, or the inner TCP/UDP
3016 	 * checksum field of the encapsulated TCP/UDP packets with the
3017 	 * hardware calculated TCP/UDP checksum for the packet associated
3018 	 * with this descriptor. The flag is ignored if the LSO flag is set.
3019 	 */
3020 	#define TX_BD_LONG_INLINE_LFLAGS_TCP_UDP_CHKSUM     UINT32_C(0x1)
3021 	/*
3022 	 * If set to 1, the controller replaces the IP checksum of the
3023 	 * normal packets, or the inner IP checksum of the encapsulated
3024 	 * packets with the hardware calculated IP checksum for the
3025 	 * packet associated with this descriptor.
3026 	 */
3027 	#define TX_BD_LONG_INLINE_LFLAGS_IP_CHKSUM          UINT32_C(0x2)
3028 	/*
3029 	 * If set to 1, the controller will not append an Ethernet CRC
3030 	 * to the end of the frame.
3031 	 *
3032 	 * Packet must be 64B or longer when this flag is set. It is not
3033 	 * useful to use this bit with any form of TX offload such as
3034 	 * CSO or LSO. The intent is that the packet from the host already
3035 	 * has a valid Ethernet CRC on the packet.
3036 	 */
3037 	#define TX_BD_LONG_INLINE_LFLAGS_NOCRC              UINT32_C(0x4)
3038 	/*
3039 	 * If set to 1, the device will record the time at which the packet
3040 	 * was actually transmitted at the TX MAC for 2-step time sync. This
3041 	 * bit must be valid on the first BD of a packet.
3042 	 */
3043 	#define TX_BD_LONG_INLINE_LFLAGS_STAMP              UINT32_C(0x8)
3044 	/*
3045 	 * If set to 1, the controller replaces the tunnel IP checksum
3046 	 * field with hardware calculated IP checksum for the IP header
3047 	 * of the packet associated with this descriptor. The hardware
3048 	 * updates an outer UDP checksum if it is non-zero.
3049 	 */
3050 	#define TX_BD_LONG_INLINE_LFLAGS_T_IP_CHKSUM        UINT32_C(0x10)
3051 	/*
3052 	 * This bit must be 0 for BDs of this type. LSO is not supported with
3053 	 * inline BDs.
3054 	 */
3055 	#define TX_BD_LONG_INLINE_LFLAGS_LSO                UINT32_C(0x20)
3056 	/* Since LSO is not supported with inline BDs, this bit is not used. */
3057 	#define TX_BD_LONG_INLINE_LFLAGS_IPID_FMT           UINT32_C(0x40)
3058 	/* Since LSO is not supported with inline BDs, this bit is not used. */
3059 	#define TX_BD_LONG_INLINE_LFLAGS_T_IPID             UINT32_C(0x80)
3060 	/*
3061 	 * If set to '1', then the RoCE ICRC will be appended to the
3062 	 * packet. Packet must be a valid RoCE format packet.
3063 	 */
3064 	#define TX_BD_LONG_INLINE_LFLAGS_ROCE_CRC           UINT32_C(0x100)
3065 	/*
3066 	 * If set to '1', then the FCoE CRC will be appended to the
3067 	 * packet. Packet must be a valid FCoE format packet.
3068 	 */
3069 	#define TX_BD_LONG_INLINE_LFLAGS_FCOE_CRC           UINT32_C(0x200)
3070 	/*
3071 	 * If set to '1', then the timestamp from the BD is used. If cleared
3072 	 * to 0, then TWE provides the timestamp.
3073 	 */
3074 	#define TX_BD_LONG_INLINE_LFLAGS_BD_TS_EN           UINT32_C(0x400)
3075 	/*
3076 	 * If set to '1', this operation will cause a trace capture in each
3077 	 * block it passes through.
3078 	 */
3079 	#define TX_BD_LONG_INLINE_LFLAGS_DEBUG_TRACE        UINT32_C(0x800)
3080 	/*
3081 	 * If set to '1', the device will record the time at which the packet
3082 	 * was actually transmitted at the TX MAC for 1-step time sync. This
3083 	 * bit must be valid on the first BD of a packet.
3084 	 */
3085 	#define TX_BD_LONG_INLINE_LFLAGS_STAMP_1STEP        UINT32_C(0x1000)
3086 	/*
3087 	 * If set to '1', the controller replaces the Outer-tunnel IP checksum
3088 	 * field with hardware calculated IP checksum for the IP header of the
3089 	 * packet associated with this descriptor. For outer UDP checksum, it
3090 	 * will be the following behavior for all cases independent of settings
3091 	 * of inner LSO and checksum offload BD flags. If outer UDP checksum
3092 	 * is 0, then do not update it. If outer UDP checksum is non zero, then
3093 	 * the hardware should compute and update it.
3094 	 */
3095 	#define TX_BD_LONG_INLINE_LFLAGS_OT_IP_CHKSUM       UINT32_C(0x2000)
3096 	/*
3097 	 * If set to zero when LSO is '1', then the IPID of the Outer-tunnel IP
3098 	 * header will not be modified during LSO operations. If set to one
3099 	 * when LSO is '1', then the IPID of the Outer-tunnel IP header will be
3100 	 * incremented for each subsequent segment of an LSO operation. The
3101 	 * flag is ignored if the LSO packet is a normal (non-tunneled) TCP
3102 	 * packet.
3103 	 */
3104 	#define TX_BD_LONG_INLINE_LFLAGS_OT_IPID            UINT32_C(0x4000)
3105 	/*
3106 	 * If set to '1', When set to 1, KTLS encryption will be enabled for
3107 	 * the packet.
3108 	 */
3109 	#define TX_BD_LONG_INLINE_LFLAGS_CRYPTO_EN          UINT32_C(0x8000)
3110 	uint8_t	unused2;
3111 	uint8_t	kid_or_ts_low;
3112 	#define TX_BD_LONG_INLINE_UNUSED            UINT32_C(0x1)
3113 	/*
3114 	 * If lflags.bd_ts_en is 1, this is the lower 7 bits of the 24-bit
3115 	 * timestamp. If lflags.crypto_en is 1, this is the lower 7 bits of
3116 	 * the 20-bit KID.
3117 	 */
3118 	#define TX_BD_LONG_INLINE_KID_OR_TS_LOW_MASK UINT32_C(0xfe)
3119 	#define TX_BD_LONG_INLINE_KID_OR_TS_LOW_SFT 1
3120 	uint32_t	kid_or_ts_high;
3121 	#define TX_BD_LONG_INLINE_UNUSED_MASK        UINT32_C(0x7fff)
3122 	#define TX_BD_LONG_INLINE_UNUSED_SFT         0
3123 	/*
3124 	 * If lflags.bd_ts_en is 1, this is the upper 17 bits of the 24-bit
3125 	 * timestamp. If lflags.crypto_en is 1, the least significant 13 bits
3126 	 * of this field contain the upper 13 bits of the 20-bit KID.
3127 	 */
3128 	#define TX_BD_LONG_INLINE_KID_OR_TS_HIGH_MASK UINT32_C(0xffff8000)
3129 	#define TX_BD_LONG_INLINE_KID_OR_TS_HIGH_SFT 15
3130 	/*
3131 	 * This value selects bits 25:16 of the CFA action to perform on the
3132 	 * packet. See the cfa_action field for more information.
3133 	 */
3134 	uint16_t	cfa_action_high;
3135 	#define TX_BD_LONG_INLINE_CFA_ACTION_HIGH_MASK UINT32_C(0x3ff)
3136 	#define TX_BD_LONG_INLINE_CFA_ACTION_HIGH_SFT 0
3137 	/*
3138 	 * This value selects a CFA action to perform on the packet.
3139 	 * Set this value to zero if no CFA action is desired.
3140 	 *
3141 	 * This value must be valid on the first BD of a packet.
3142 	 */
3143 	uint16_t	cfa_action;
3144 	/*
3145 	 * This value is action meta-data that defines CFA edit operations
3146 	 * that are done in addition to any action editing.
3147 	 */
3148 	uint32_t	cfa_meta;
3149 	/* When key = 1, this is the VLAN tag VID value. */
3150 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_VID_MASK        UINT32_C(0xfff)
3151 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_VID_SFT         0
3152 	/* When key = 1, this is the VLAN tag DE value. */
3153 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_DE \
3154 		UINT32_C(0x1000)
3155 	/* When key = 1, this is the VLAN tag PRI value. */
3156 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_PRI_MASK \
3157 		UINT32_C(0xe000)
3158 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_PRI_SFT         13
3159 	/* When key = 1, this is the VLAN tag TPID select value. */
3160 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_MASK \
3161 		UINT32_C(0x70000)
3162 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_SFT        16
3163 	/* 0x88a8 */
3164 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID88A8 \
3165 		(UINT32_C(0x0) << 16)
3166 	/* 0x8100 */
3167 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID8100 \
3168 		(UINT32_C(0x1) << 16)
3169 	/* 0x9100 */
3170 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID9100 \
3171 		(UINT32_C(0x2) << 16)
3172 	/* 0x9200 */
3173 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID9200 \
3174 		(UINT32_C(0x3) << 16)
3175 	/* 0x9300 */
3176 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID9300 \
3177 		(UINT32_C(0x4) << 16)
3178 	/* Value programmed in CFA VLANTPID register. */
3179 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPIDCFG \
3180 		(UINT32_C(0x5) << 16)
3181 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_LAST \
3182 		TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPIDCFG
3183 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_RESERVED_MASK \
3184 		UINT32_C(0xff80000)
3185 	#define TX_BD_LONG_INLINE_CFA_META_VLAN_RESERVED_SFT    19
3186 	/*
3187 	 * This field identifies the type of edit to be performed
3188 	 * on the packet.
3189 	 *
3190 	 * This value must be valid on the first BD of a packet.
3191 	 */
3192 	#define TX_BD_LONG_INLINE_CFA_META_KEY_MASK \
3193 		UINT32_C(0xf0000000)
3194 	#define TX_BD_LONG_INLINE_CFA_META_KEY_SFT              28
3195 	/* No editing */
3196 	#define TX_BD_LONG_INLINE_CFA_META_KEY_NONE \
3197 		(UINT32_C(0x0) << 28)
3198 	/*
3199 	 * - meta[17:16] - TPID select value (0 = 0x8100).
3200 	 * - meta[15:12] - PRI/DE value.
3201 	 * - meta[11:0] - VID value.
3202 	 */
3203 	#define TX_BD_LONG_INLINE_CFA_META_KEY_VLAN_TAG \
3204 		(UINT32_C(0x1) << 28)
3205 	/*
3206 	 * Provide metadata
3207 	 * - Wh+/SR - this option is not supported.
3208 	 * - Thor - cfa_meta[15:0] is used for metadata output if en_bd_meta
3209 	 *   is set in the Lookup Table.
3210 	 * - SR2 - {4’d0, cfa_meta[27:0]} is used for metadata output if
3211 	 *   en_bd_meta is set in the Lookup Table.
3212 	 */
3213 	#define TX_BD_LONG_INLINE_CFA_META_KEY_METADATA_TRANSFER \
3214 		(UINT32_C(0x2) << 28)
3215 	#define TX_BD_LONG_INLINE_CFA_META_KEY_LAST \
3216 		TX_BD_LONG_INLINE_CFA_META_KEY_METADATA_TRANSFER
3217 } __rte_packed;
3218 
3219 /* tx_bd_empty (size:128b/16B) */
3220 struct tx_bd_empty {
3221 	/* This value identifies the type of buffer descriptor. */
3222 	uint8_t	type;
3223 	#define TX_BD_EMPTY_TYPE_MASK       UINT32_C(0x3f)
3224 	#define TX_BD_EMPTY_TYPE_SFT        0
3225 	/*
3226 	 * Indicates that this BD is 1BB long and is an empty
3227 	 * TX BD. Not valid for use by the driver.
3228 	 */
3229 	#define TX_BD_EMPTY_TYPE_TX_BD_EMPTY  UINT32_C(0x1)
3230 	#define TX_BD_EMPTY_TYPE_LAST        TX_BD_EMPTY_TYPE_TX_BD_EMPTY
3231 	uint8_t	unused_1[3];
3232 	uint8_t	unused_2;
3233 	uint8_t	unused_3[3];
3234 	uint8_t	unused_4[8];
3235 } __rte_packed;
3236 
3237 /* tx_bd_mp_cmd (size:128b/16B) */
3238 struct tx_bd_mp_cmd {
3239 	/* Unless otherwise stated, sub-fields of this field are always valid. */
3240 	uint16_t	flags_type;
3241 	/* This value identifies the type of buffer descriptor. */
3242 	#define TX_BD_MP_CMD_TYPE_MASK        UINT32_C(0x3f)
3243 	#define TX_BD_MP_CMD_TYPE_SFT         0
3244 	/*
3245 	 * Indicates that this BD is used to issue a command to one of
3246 	 * the mid-path destinations.
3247 	 */
3248 	#define TX_BD_MP_CMD_TYPE_TX_BD_MP_CMD  UINT32_C(0x8)
3249 	#define TX_BD_MP_CMD_TYPE_LAST         TX_BD_MP_CMD_TYPE_TX_BD_MP_CMD
3250 	#define TX_BD_MP_CMD_FLAGS_MASK       UINT32_C(0xffc0)
3251 	#define TX_BD_MP_CMD_FLAGS_SFT        6
3252 	/*  */
3253 	#define TX_BD_MP_CMD_FLAGS_UNUSED_MASK UINT32_C(0xc0)
3254 	#define TX_BD_MP_CMD_FLAGS_UNUSED_SFT  6
3255 	/*
3256 	 * This value indicates the number of 16B BD locations (slots)
3257 	 * consumed in the ring by this mid-path command BD, including the
3258 	 * BD header and the command field.
3259 	 */
3260 	#define TX_BD_MP_CMD_FLAGS_BD_CNT_MASK UINT32_C(0x1f00)
3261 	#define TX_BD_MP_CMD_FLAGS_BD_CNT_SFT  8
3262 	/*
3263 	 * This value defines the length of command field in bytes. The maximum
3264 	 * value shall be 496.
3265 	 */
3266 	uint16_t	len;
3267 	/*
3268 	 * The opaque data field is pass through to the completion and can be
3269 	 * used for any data that the driver wants to associate with this
3270 	 * Tx mid-path command.
3271 	 */
3272 	uint32_t	opaque;
3273 	uint64_t	unused1;
3274 } __rte_packed;
3275 
3276 /* tx_bd_presync_cmd (size:128b/16B) */
3277 struct tx_bd_presync_cmd {
3278 	/* Unless otherwise stated, sub-fields of this field are always valid. */
3279 	uint16_t	flags_type;
3280 	/* This value identifies the type of buffer descriptor. */
3281 	#define TX_BD_PRESYNC_CMD_TYPE_MASK             UINT32_C(0x3f)
3282 	#define TX_BD_PRESYNC_CMD_TYPE_SFT              0
3283 	/*
3284 	 * Indicates that this BD is used to issue a cryptographic pre-
3285 	 * sync command through the fast path and destined for TCE.
3286 	 */
3287 	#define TX_BD_PRESYNC_CMD_TYPE_TX_BD_PRESYNC_CMD  UINT32_C(0x9)
3288 	#define TX_BD_PRESYNC_CMD_TYPE_LAST \
3289 		TX_BD_PRESYNC_CMD_TYPE_TX_BD_PRESYNC_CMD
3290 	#define TX_BD_PRESYNC_CMD_FLAGS_MASK            UINT32_C(0xffc0)
3291 	#define TX_BD_PRESYNC_CMD_FLAGS_SFT             6
3292 	/*  */
3293 	#define TX_BD_PRESYNC_CMD_FLAGS_UNUSED_MASK      UINT32_C(0xc0)
3294 	#define TX_BD_PRESYNC_CMD_FLAGS_UNUSED_SFT       6
3295 	/*
3296 	 * This value indicates the number of 16B BD locations (slots)
3297 	 * consumed in the ring by this pre-sync command BD, including the
3298 	 * BD header and the command field.
3299 	 */
3300 	#define TX_BD_PRESYNC_CMD_FLAGS_BD_CNT_MASK      UINT32_C(0x1f00)
3301 	#define TX_BD_PRESYNC_CMD_FLAGS_BD_CNT_SFT       8
3302 	/*
3303 	 * This value defines the length of command field in bytes. The maximum
3304 	 * value shall be 496.
3305 	 */
3306 	uint16_t	len;
3307 	/*
3308 	 * The opaque data field is pass through to TCE and can be used for
3309 	 * debug.
3310 	 */
3311 	uint32_t	opaque;
3312 	/*
3313 	 * This field is the Crypto Context ID to which the retransmit packet is
3314 	 * applied. The KID references the context fields used by the
3315 	 * associated kTLS offloaded connection.
3316 	 */
3317 	uint32_t	kid;
3318 	/*
3319 	 * The KID value of all-ones is reserved for non-KTLS packets, which
3320 	 * only implies that this value must not be used when filling this
3321 	 * field for crypto packets.
3322 	 */
3323 	#define TX_BD_PRESYNC_CMD_KID_VAL_MASK UINT32_C(0xfffff)
3324 	#define TX_BD_PRESYNC_CMD_KID_VAL_SFT 0
3325 	uint32_t	unused_1;
3326 } __rte_packed;
3327 
3328 /* rx_prod_pkt_bd (size:128b/16B) */
3329 struct rx_prod_pkt_bd {
3330 	/* This value identifies the type of buffer descriptor. */
3331 	uint16_t	flags_type;
3332 	/* This value identifies the type of buffer descriptor. */
3333 	#define RX_PROD_PKT_BD_TYPE_MASK         UINT32_C(0x3f)
3334 	#define RX_PROD_PKT_BD_TYPE_SFT          0
3335 	/*
3336 	 * Indicates that this BD is 16B long and is an RX Producer
3337 	 * (i.e. empty) buffer descriptor.
3338 	 */
3339 	#define RX_PROD_PKT_BD_TYPE_RX_PROD_PKT    UINT32_C(0x4)
3340 	#define RX_PROD_PKT_BD_TYPE_LAST \
3341 		RX_PROD_PKT_BD_TYPE_RX_PROD_PKT
3342 	#define RX_PROD_PKT_BD_FLAGS_MASK        UINT32_C(0xffc0)
3343 	#define RX_PROD_PKT_BD_FLAGS_SFT         6
3344 	/*
3345 	 * If set to 1, the packet will be placed at the address plus
3346 	 * 2B. The 2 Bytes of padding will be written as zero.
3347 	 */
3348 	#define RX_PROD_PKT_BD_FLAGS_SOP_PAD      UINT32_C(0x40)
3349 	/*
3350 	 * If set to 1, the packet write will be padded out to the
3351 	 * nearest cache-line with zero value padding.
3352 	 */
3353 	#define RX_PROD_PKT_BD_FLAGS_EOP_PAD      UINT32_C(0x80)
3354 	/*
3355 	 * This field has been deprecated. There can be no additional
3356 	 * BDs for this packet from this ring.
3357 	 *
3358 	 * Old definition:
3359 	 * This value is the number of additional buffers in the ring that
3360 	 * describe the buffer space to be consumed for this packet.
3361 	 * If the value is zero, then the packet must fit within the
3362 	 * space described by this BD. If this value is 1 or more, it
3363 	 * indicates how many additional "buffer" BDs are in the ring
3364 	 * immediately following this BD to be used for the same
3365 	 * network packet. Even if the packet to be placed does not need
3366 	 * all the additional buffers, they will be consumed anyway.
3367 	 */
3368 	#define RX_PROD_PKT_BD_FLAGS_BUFFERS_MASK UINT32_C(0x300)
3369 	#define RX_PROD_PKT_BD_FLAGS_BUFFERS_SFT  8
3370 	/*
3371 	 * This is the length in Bytes of the host physical buffer where
3372 	 * data for the packet may be placed in host memory.
3373 	 */
3374 	uint16_t	len;
3375 	/*
3376 	 * The opaque data field is pass through to the completion and can be
3377 	 * used for any data that the driver wants to associate with this
3378 	 * receive buffer set.
3379 	 */
3380 	uint32_t	opaque;
3381 	/*
3382 	 * This is the host physical address where data for the packet may
3383 	 * be placed in host memory.
3384 	 */
3385 	uint64_t	address;
3386 } __rte_packed;
3387 
3388 /* rx_prod_bfr_bd (size:128b/16B) */
3389 struct rx_prod_bfr_bd {
3390 	/* This value identifies the type of buffer descriptor. */
3391 	uint16_t	flags_type;
3392 	/* This value identifies the type of buffer descriptor. */
3393 	#define RX_PROD_BFR_BD_TYPE_MASK       UINT32_C(0x3f)
3394 	#define RX_PROD_BFR_BD_TYPE_SFT        0
3395 	/*
3396 	 * Indicates that this BD is 16B long and is an RX
3397 	 * Producer Buffer BD.
3398 	 */
3399 	#define RX_PROD_BFR_BD_TYPE_RX_PROD_BFR  UINT32_C(0x5)
3400 	#define RX_PROD_BFR_BD_TYPE_LAST        RX_PROD_BFR_BD_TYPE_RX_PROD_BFR
3401 	#define RX_PROD_BFR_BD_FLAGS_MASK      UINT32_C(0xffc0)
3402 	#define RX_PROD_BFR_BD_FLAGS_SFT       6
3403 	/*
3404 	 * This is the length in Bytes of the host physical buffer where
3405 	 * data for the packet may be placed in host memory.
3406 	 */
3407 	uint16_t	len;
3408 	/* This field is not used. */
3409 	uint32_t	opaque;
3410 	/*
3411 	 * This is the host physical address where data for the packet may
3412 	 * be placed in host memory.
3413 	 */
3414 	uint64_t	address;
3415 } __rte_packed;
3416 
3417 /* rx_prod_agg_bd (size:128b/16B) */
3418 struct rx_prod_agg_bd {
3419 	/* This value identifies the type of buffer descriptor. */
3420 	uint16_t	flags_type;
3421 	/* This value identifies the type of buffer descriptor. */
3422 	#define RX_PROD_AGG_BD_TYPE_MASK         UINT32_C(0x3f)
3423 	#define RX_PROD_AGG_BD_TYPE_SFT          0
3424 	/*
3425 	 * Indicates that this BD is 16B long and is an
3426 	 * RX Producer Assembly Buffer Descriptor.
3427 	 */
3428 	#define RX_PROD_AGG_BD_TYPE_RX_PROD_AGG    UINT32_C(0x6)
3429 	#define RX_PROD_AGG_BD_TYPE_LAST \
3430 		RX_PROD_AGG_BD_TYPE_RX_PROD_AGG
3431 	#define RX_PROD_AGG_BD_FLAGS_MASK        UINT32_C(0xffc0)
3432 	#define RX_PROD_AGG_BD_FLAGS_SFT         6
3433 	/*
3434 	 * If set to 1, the packet write will be padded out to the
3435 	 * nearest cache-line with zero value padding.
3436 	 */
3437 	#define RX_PROD_AGG_BD_FLAGS_EOP_PAD      UINT32_C(0x40)
3438 	/*
3439 	 * This is the length in Bytes of the host physical buffer where
3440 	 * data for the packet may be placed in host memory.
3441 	 */
3442 	uint16_t	len;
3443 	/*
3444 	 * The opaque data field is pass through to the completion and can be
3445 	 * used for any data that the driver wants to associate with this
3446 	 * receive assembly buffer.
3447 	 */
3448 	uint32_t	opaque;
3449 	/*
3450 	 * This is the host physical address where data for the packet may
3451 	 * be placed in host memory.
3452 	 */
3453 	uint64_t	address;
3454 } __rte_packed;
3455 
3456 /* cfa_cmpls_cmp_data_msg (size:128b/16B) */
3457 struct cfa_cmpls_cmp_data_msg {
3458 	uint32_t	mp_client_dma_length_opcode_status_type;
3459 	/*
3460 	 * This field represents the Mid-Path client that generated the
3461 	 * completion.
3462 	 */
3463 	#define CFA_CMPLS_CMP_DATA_MSG_TYPE_MASK                UINT32_C(0x3f)
3464 	#define CFA_CMPLS_CMP_DATA_MSG_TYPE_SFT                 0
3465 	/* Mid Path Short Completion with length = 16B. */
3466 	#define CFA_CMPLS_CMP_DATA_MSG_TYPE_MID_PATH_SHORT \
3467 		UINT32_C(0x1e)
3468 	#define CFA_CMPLS_CMP_DATA_MSG_TYPE_LAST \
3469 		CFA_CMPLS_CMP_DATA_MSG_TYPE_MID_PATH_SHORT
3470 	/* This value indicates the status for the command. */
3471 	#define CFA_CMPLS_CMP_DATA_MSG_STATUS_MASK              UINT32_C(0x3c0)
3472 	#define CFA_CMPLS_CMP_DATA_MSG_STATUS_SFT               6
3473 	/* Completed without error. */
3474 	#define CFA_CMPLS_CMP_DATA_MSG_STATUS_OK \
3475 		(UINT32_C(0x0) << 6)
3476 	/* Indicates an unsupported CFA opcode in the command. */
3477 	#define CFA_CMPLS_CMP_DATA_MSG_STATUS_UNSPRT_ERR \
3478 		(UINT32_C(0x1) << 6)
3479 	/*
3480 	 * Indicates a CFA command formatting error. This error can occur on
3481 	 * any of the supported CFA commands.
3482 	 */
3483 	#define CFA_CMPLS_CMP_DATA_MSG_STATUS_FMT_ERR \
3484 		(UINT32_C(0x2) << 6)
3485 	/*
3486 	 * Indicates an SVIF-Table scope error. This error can occur on any
3487 	 * of the supported CFA commands.
3488 	 */
3489 	#define CFA_CMPLS_CMP_DATA_MSG_STATUS_SCOPE_ERR \
3490 		(UINT32_C(0x3) << 6)
3491 	/*
3492 	 * Indicates that the table_index is either outside of the
3493 	 * table_scope range set by its EM_SIZE or, for EM Insert, it is in
3494 	 * the static bucket range. This error can occur on EM Insert
3495 	 * commands. It can also occur on Read, Read Clear, Write, and
3496 	 * Invalidate commands if the table_type is EM.
3497 	 */
3498 	#define CFA_CMPLS_CMP_DATA_MSG_STATUS_ADDR_ERR \
3499 		(UINT32_C(0x4) << 6)
3500 	/*
3501 	 * Cache operation responded with an error. This error can occur on
3502 	 * Read, Read Clear, Write, EM Insert, and EM Delete commands.
3503 	 */
3504 	#define CFA_CMPLS_CMP_DATA_MSG_STATUS_CACHE_ERR \
3505 		(UINT32_C(0x5) << 6)
3506 	/*
3507 	 * Indicates failure on EM Insert or EM Delete Command. Hash index
3508 	 * and hash msb are returned in table_index and hash_msb fields.
3509 	 * Dma_length is set to 1 if the bucket is also returned (as dma
3510 	 * data).
3511 	 */
3512 	#define CFA_CMPLS_CMP_DATA_MSG_STATUS_EM_FAIL \
3513 		(UINT32_C(0x6) << 6)
3514 	/*
3515 	 * Indicates no notifications were available on an Event Collection
3516 	 * command.
3517 	 */
3518 	#define CFA_CMPLS_CMP_DATA_MSG_STATUS_EVENT_COLLECT_FAIL \
3519 		(UINT32_C(0x7) << 6)
3520 	#define CFA_CMPLS_CMP_DATA_MSG_STATUS_LAST \
3521 		CFA_CMPLS_CMP_DATA_MSG_STATUS_EVENT_COLLECT_FAIL
3522 	#define CFA_CMPLS_CMP_DATA_MSG_UNUSED0_MASK             UINT32_C(0xc00)
3523 	#define CFA_CMPLS_CMP_DATA_MSG_UNUSED0_SFT              10
3524 	/* This is the opcode from the command. */
3525 	#define CFA_CMPLS_CMP_DATA_MSG_OPCODE_MASK \
3526 		UINT32_C(0xff000)
3527 	#define CFA_CMPLS_CMP_DATA_MSG_OPCODE_SFT               12
3528 	/*
3529 	 * This is read command. From 32 to 128B can be read from a table
3530 	 * using this command.
3531 	 */
3532 	#define CFA_CMPLS_CMP_DATA_MSG_OPCODE_READ \
3533 		(UINT32_C(0x0) << 12)
3534 	/*
3535 	 * This is write command. From 32 to 128B can be written to a table
3536 	 * using this command.
3537 	 */
3538 	#define CFA_CMPLS_CMP_DATA_MSG_OPCODE_WRITE \
3539 		(UINT32_C(0x1) << 12)
3540 	/*
3541 	 * This is read-clear command. 32B can be read from a table and a 16b
3542 	 * mask can be used to clear specific 16b units after the read as an
3543 	 * atomic operation.
3544 	 */
3545 	#define CFA_CMPLS_CMP_DATA_MSG_OPCODE_READ_CLR \
3546 		(UINT32_C(0x2) << 12)
3547 	/*
3548 	 * An exact match table insert will be attempted into the table. If
3549 	 * there is a free location in the bucket, the payload will be
3550 	 * written to the bucket.
3551 	 */
3552 	#define CFA_CMPLS_CMP_DATA_MSG_OPCODE_EM_INSERT \
3553 		(UINT32_C(0x3) << 12)
3554 	/* An exact match table delete will be attempted. */
3555 	#define CFA_CMPLS_CMP_DATA_MSG_OPCODE_EM_DELETE \
3556 		(UINT32_C(0x4) << 12)
3557 	/*
3558 	 * The specified table area will be invalidated. If it is needed
3559 	 * again, it will be read from the backing store.
3560 	 */
3561 	#define CFA_CMPLS_CMP_DATA_MSG_OPCODE_INVALIDATE \
3562 		(UINT32_C(0x5) << 12)
3563 	/* Reads notification messages from the Host Notification Queue. */
3564 	#define CFA_CMPLS_CMP_DATA_MSG_OPCODE_EVENT_COLLECT \
3565 		(UINT32_C(0x6) << 12)
3566 	#define CFA_CMPLS_CMP_DATA_MSG_OPCODE_LAST \
3567 		CFA_CMPLS_CMP_DATA_MSG_OPCODE_EVENT_COLLECT
3568 	/*
3569 	 * This field indicates the length of the DMA that accompanies the
3570 	 * completion. Specified in units of DWords (32b). Valid values are
3571 	 * between 0 and 128. A value of zero indicates that there is no DMA
3572 	 * that accompanies the completion.
3573 	 */
3574 	#define CFA_CMPLS_CMP_DATA_MSG_DMA_LENGTH_MASK \
3575 		UINT32_C(0xff00000)
3576 	#define CFA_CMPLS_CMP_DATA_MSG_DMA_LENGTH_SFT           20
3577 	/*
3578 	 * This field represents the Mid-Path client that generated the
3579 	 * completion.
3580 	 */
3581 	#define CFA_CMPLS_CMP_DATA_MSG_MP_CLIENT_MASK \
3582 		UINT32_C(0xf0000000)
3583 	#define CFA_CMPLS_CMP_DATA_MSG_MP_CLIENT_SFT            28
3584 	/* TX configurable flow processing block. */
3585 	#define CFA_CMPLS_CMP_DATA_MSG_MP_CLIENT_TE_CFA \
3586 		(UINT32_C(0x2) << 28)
3587 	/* RX configurable flow processing block. */
3588 	#define CFA_CMPLS_CMP_DATA_MSG_MP_CLIENT_RE_CFA \
3589 		(UINT32_C(0x3) << 28)
3590 	#define CFA_CMPLS_CMP_DATA_MSG_MP_CLIENT_LAST \
3591 		CFA_CMPLS_CMP_DATA_MSG_MP_CLIENT_RE_CFA
3592 	/*
3593 	 * This is a copy of the opaque field from the mid path BD of this
3594 	 * command.
3595 	 */
3596 	uint32_t	opaque;
3597 	uint16_t	hash_msb_v;
3598 	/*
3599 	 * This value is written by the NIC such that it will be different for
3600 	 * each pass through the completion queue. The even passes will
3601 	 * write 1. The odd passes will write 0.
3602 	 */
3603 	#define CFA_CMPLS_CMP_DATA_MSG_V            UINT32_C(0x1)
3604 	#define CFA_CMPLS_CMP_DATA_MSG_UNUSED1_MASK UINT32_C(0xe)
3605 	#define CFA_CMPLS_CMP_DATA_MSG_UNUSED1_SFT  1
3606 	/*
3607 	 * This is the upper 12b of the hash, returned on Exact Match
3608 	 * Insertion/Deletion Commands.
3609 	 */
3610 	#define CFA_CMPLS_CMP_DATA_MSG_HASH_MSB_MASK UINT32_C(0xfff0)
3611 	#define CFA_CMPLS_CMP_DATA_MSG_HASH_MSB_SFT 4
3612 	/* This is the table type from the command. */
3613 	uint8_t	table_type;
3614 	#define CFA_CMPLS_CMP_DATA_MSG_UNUSED2_MASK     UINT32_C(0xf)
3615 	#define CFA_CMPLS_CMP_DATA_MSG_UNUSED2_SFT      0
3616 	#define CFA_CMPLS_CMP_DATA_MSG_TABLE_TYPE_MASK  UINT32_C(0xf0)
3617 	#define CFA_CMPLS_CMP_DATA_MSG_TABLE_TYPE_SFT   4
3618 	/* This command acts on the action table of the specified scope. */
3619 	#define CFA_CMPLS_CMP_DATA_MSG_TABLE_TYPE_ACTION  (UINT32_C(0x0) << 4)
3620 	/* This command acts on the exact match table of the specified scope. */
3621 	#define CFA_CMPLS_CMP_DATA_MSG_TABLE_TYPE_EM      (UINT32_C(0x1) << 4)
3622 	#define CFA_CMPLS_CMP_DATA_MSG_TABLE_TYPE_LAST \
3623 		CFA_CMPLS_CMP_DATA_MSG_TABLE_TYPE_EM
3624 	uint8_t	table_scope;
3625 	/* This is the table scope from the command. */
3626 	#define CFA_CMPLS_CMP_DATA_MSG_TABLE_SCOPE_MASK UINT32_C(0x1f)
3627 	#define CFA_CMPLS_CMP_DATA_MSG_TABLE_SCOPE_SFT 0
3628 	uint32_t	table_index;
3629 	/*
3630 	 * This is the table index from the command (if it exists). However, if
3631 	 * an Exact Match Insertion/Deletion command failed, then this is the
3632 	 * table index of the calculated static hash bucket.
3633 	 */
3634 	#define CFA_CMPLS_CMP_DATA_MSG_TABLE_INDEX_MASK UINT32_C(0x3ffffff)
3635 	#define CFA_CMPLS_CMP_DATA_MSG_TABLE_INDEX_SFT 0
3636 } __rte_packed;
3637 
3638 /* CFA Mid-Path 32B DMA Message */
3639 /* cfa_dma32b_data_msg (size:256b/32B) */
3640 struct cfa_dma32b_data_msg {
3641 	/* DMA data value. */
3642 	uint32_t	dta[8];
3643 } __rte_packed;
3644 
3645 /* CFA Mid-Path 64B DMA Message */
3646 /* cfa_dma64b_data_msg (size:512b/64B) */
3647 struct cfa_dma64b_data_msg {
3648 	/* DMA data value. */
3649 	uint32_t	dta[16];
3650 } __rte_packed;
3651 
3652 /* CFA Mid-Path 96B DMA Message */
3653 /* cfa_dma96b_data_msg (size:768b/96B) */
3654 struct cfa_dma96b_data_msg {
3655 	/* DMA data value. */
3656 	uint32_t	dta[24];
3657 } __rte_packed;
3658 
3659 /* CFA Mid-Path 128B DMA Message */
3660 /* cfa_dma128b_data_msg (size:1024b/128B) */
3661 struct cfa_dma128b_data_msg {
3662 	/* DMA data value. */
3663 	uint32_t	dta[32];
3664 } __rte_packed;
3665 
3666 /* ce_cmpls_cmp_data_msg (size:128b/16B) */
3667 struct ce_cmpls_cmp_data_msg {
3668 	uint16_t	status_subtype_type;
3669 	/*
3670 	 * This field indicates the exact type of the completion. By
3671 	 * convention, the LSB identifies the length of the record in 16B
3672 	 * units. Even values indicate 16B records. Odd values indicate 32B
3673 	 * records.
3674 	 */
3675 	#define CE_CMPLS_CMP_DATA_MSG_TYPE_MASK          UINT32_C(0x3f)
3676 	#define CE_CMPLS_CMP_DATA_MSG_TYPE_SFT           0
3677 	/* Completion of a Mid Path Command. Length = 16B */
3678 	#define CE_CMPLS_CMP_DATA_MSG_TYPE_MID_PATH_SHORT  UINT32_C(0x1e)
3679 	#define CE_CMPLS_CMP_DATA_MSG_TYPE_LAST \
3680 		CE_CMPLS_CMP_DATA_MSG_TYPE_MID_PATH_SHORT
3681 	/*
3682 	 * This value indicates the CE sub-type operation that is being
3683 	 * completed.
3684 	 */
3685 	#define CE_CMPLS_CMP_DATA_MSG_SUBTYPE_MASK       UINT32_C(0x3c0)
3686 	#define CE_CMPLS_CMP_DATA_MSG_SUBTYPE_SFT        6
3687 	/* Completion Response for a Solicited Command. */
3688 	#define CE_CMPLS_CMP_DATA_MSG_SUBTYPE_SOLICITED    (UINT32_C(0x0) << 6)
3689 	/* Error Completion (Unsolicited). */
3690 	#define CE_CMPLS_CMP_DATA_MSG_SUBTYPE_ERR          (UINT32_C(0x1) << 6)
3691 	/* Re-Sync Completion (Unsolicited) */
3692 	#define CE_CMPLS_CMP_DATA_MSG_SUBTYPE_RESYNC       (UINT32_C(0x2) << 6)
3693 	#define CE_CMPLS_CMP_DATA_MSG_SUBTYPE_LAST \
3694 		CE_CMPLS_CMP_DATA_MSG_SUBTYPE_RESYNC
3695 	/* This value indicates the status for the command. */
3696 	#define CE_CMPLS_CMP_DATA_MSG_STATUS_MASK        UINT32_C(0x3c00)
3697 	#define CE_CMPLS_CMP_DATA_MSG_STATUS_SFT         10
3698 	/* Completed without error. */
3699 	#define CE_CMPLS_CMP_DATA_MSG_STATUS_OK \
3700 		(UINT32_C(0x0) << 10)
3701 	/* CFCK load error. */
3702 	#define CE_CMPLS_CMP_DATA_MSG_STATUS_CTX_LD_ERR \
3703 		(UINT32_C(0x1) << 10)
3704 	/* FID check error. */
3705 	#define CE_CMPLS_CMP_DATA_MSG_STATUS_FID_CHK_ERR \
3706 		(UINT32_C(0x2) << 10)
3707 	/* Context kind / MP version mismatch error. */
3708 	#define CE_CMPLS_CMP_DATA_MSG_STATUS_CTX_VER_ERR \
3709 		(UINT32_C(0x3) << 10)
3710 	/* Unsupported Destination Connection ID Length. */
3711 	#define CE_CMPLS_CMP_DATA_MSG_STATUS_DST_ID_ERR \
3712 		(UINT32_C(0x4) << 10)
3713 	/*
3714 	 * Invalid MP Command [anything other than ADD or DELETE
3715 	 * triggers this for QUIC].
3716 	 */
3717 	#define CE_CMPLS_CMP_DATA_MSG_STATUS_MP_CMD_ERR \
3718 		(UINT32_C(0x5) << 10)
3719 	#define CE_CMPLS_CMP_DATA_MSG_STATUS_LAST \
3720 		CE_CMPLS_CMP_DATA_MSG_STATUS_MP_CMD_ERR
3721 	uint8_t	unused0;
3722 	uint8_t	mp_clients;
3723 	#define CE_CMPLS_CMP_DATA_MSG_UNUSED1_MASK   UINT32_C(0xf)
3724 	#define CE_CMPLS_CMP_DATA_MSG_UNUSED1_SFT    0
3725 	/*
3726 	 * This field represents the Mid-Path client that generated the
3727 	 * completion.
3728 	 */
3729 	#define CE_CMPLS_CMP_DATA_MSG_MP_CLIENTS_MASK UINT32_C(0xf0)
3730 	#define CE_CMPLS_CMP_DATA_MSG_MP_CLIENTS_SFT 4
3731 	/* TX crypto engine block. */
3732 	#define CE_CMPLS_CMP_DATA_MSG_MP_CLIENTS_TCE   (UINT32_C(0x0) << 4)
3733 	/* RX crypto engine block. */
3734 	#define CE_CMPLS_CMP_DATA_MSG_MP_CLIENTS_RCE   (UINT32_C(0x1) << 4)
3735 	#define CE_CMPLS_CMP_DATA_MSG_MP_CLIENTS_LAST \
3736 		CE_CMPLS_CMP_DATA_MSG_MP_CLIENTS_RCE
3737 	/*
3738 	 * This is a copy of the opaque field from the mid path BD of this
3739 	 * command.
3740 	 */
3741 	uint32_t	opaque;
3742 	/*  */
3743 	uint32_t	kid_v;
3744 	/*
3745 	 * This value is written by the NIC such that it will be different
3746 	 * for each pass through the completion queue. The even passes will
3747 	 * write 1. The odd passes will write 0.
3748 	 */
3749 	#define CE_CMPLS_CMP_DATA_MSG_V       UINT32_C(0x1)
3750 	/*
3751 	 * This field is the Crypto Context ID. The KID is used to store
3752 	 * information used by the associated kTLS offloaded connection.
3753 	 */
3754 	#define CE_CMPLS_CMP_DATA_MSG_KID_MASK UINT32_C(0x1ffffe)
3755 	#define CE_CMPLS_CMP_DATA_MSG_KID_SFT 1
3756 	uint32_t	unused2;
3757 } __rte_packed;
3758 
3759 /* cmpl_base (size:128b/16B) */
3760 struct cmpl_base {
3761 	uint16_t	type;
3762 	/*
3763 	 * This field indicates the exact type of the completion.
3764 	 * By convention, the LSB identifies the length of the
3765 	 * record in 16B units. Even values indicate 16B
3766 	 * records. Odd values indicate 32B
3767 	 * records.
3768 	 */
3769 	#define CMPL_BASE_TYPE_MASK            UINT32_C(0x3f)
3770 	#define CMPL_BASE_TYPE_SFT             0
3771 	/*
3772 	 * TX L2 completion:
3773 	 * Completion of TX packet. Length = 16B
3774 	 */
3775 	#define CMPL_BASE_TYPE_TX_L2             UINT32_C(0x0)
3776 	/*
3777 	 * NO-OP completion:
3778 	 * Completion of NO-OP. Length = 16B
3779 	 */
3780 	#define CMPL_BASE_TYPE_NO_OP             UINT32_C(0x1)
3781 	/*
3782 	 * TX L2 coalesced completion:
3783 	 * Completion of coalesced TX packet. Length = 16B
3784 	 */
3785 	#define CMPL_BASE_TYPE_TX_L2_COAL        UINT32_C(0x2)
3786 	/*
3787 	 * TX L2 PTP completion:
3788 	 * Completion of PTP TX packet. Length = 32B
3789 	 */
3790 	#define CMPL_BASE_TYPE_TX_L2_PTP         UINT32_C(0x3)
3791 	/*
3792 	 * TX L2 Packet Timestamp completion:
3793 	 * Completion of an L2 Packet Timestamp Packet. Length = 16B
3794 	 */
3795 	#define CMPL_BASE_TYPE_TX_L2_PTP_TS      UINT32_C(0x4)
3796 	/*
3797 	 * RX L2 TPA Start V2 Completion:
3798 	 * Completion of and L2 RX packet. Length = 32B
3799 	 * This is the new version of the RX_TPA_START completion used
3800 	 * in SR2 and later chips.
3801 	 */
3802 	#define CMPL_BASE_TYPE_RX_TPA_START_V2   UINT32_C(0xd)
3803 	/*
3804 	 * RX L2 V2 completion:
3805 	 * Completion of and L2 RX packet. Length = 32B
3806 	 * This is the new version of the RX_L2 completion used in SR2
3807 	 * and later chips.
3808 	 */
3809 	#define CMPL_BASE_TYPE_RX_L2_V2          UINT32_C(0xf)
3810 	/*
3811 	 * RX L2 completion:
3812 	 * This is the compressed version of Rx Completion for performance
3813 	 * applications. Length = 16B
3814 	 */
3815 	#define CMPL_BASE_TYPE_RX_L2_COMPRESS    UINT32_C(0x10)
3816 	/*
3817 	 * RX L2 completion:
3818 	 * Completion of and L2 RX packet. Length = 32B
3819 	 */
3820 	#define CMPL_BASE_TYPE_RX_L2             UINT32_C(0x11)
3821 	/*
3822 	 * RX Aggregation Buffer completion:
3823 	 * Completion of an L2 aggregation buffer in support of
3824 	 * TPA, HDS, or Jumbo packet completion. Length = 16B
3825 	 */
3826 	#define CMPL_BASE_TYPE_RX_AGG            UINT32_C(0x12)
3827 	/*
3828 	 * RX L2 TPA Start Completion:
3829 	 * Completion at the beginning of a TPA operation.
3830 	 * Length = 32B
3831 	 */
3832 	#define CMPL_BASE_TYPE_RX_TPA_START      UINT32_C(0x13)
3833 	/*
3834 	 * RX L2 TPA End Completion:
3835 	 * Completion at the end of a TPA operation.
3836 	 * Length = 32B
3837 	 */
3838 	#define CMPL_BASE_TYPE_RX_TPA_END        UINT32_C(0x15)
3839 	/*
3840 	 * RX TPA Aggregation Buffer Completion:
3841 	 * Completion of an L2 aggregation buffer in support of TPA packet
3842 	 * completion.
3843 	 * Length = 16B
3844 	 */
3845 	#define CMPL_BASE_TYPE_RX_TPA_AGG        UINT32_C(0x16)
3846 	/*
3847 	 * RX L2 completion: Completion of and L2 RX packet.
3848 	 * Length = 32B
3849 	 */
3850 	#define CMPL_BASE_TYPE_RX_L2_V3          UINT32_C(0x17)
3851 	/*
3852 	 * RX L2 TPA Start completion: Completion at the beginning of a TPA
3853 	 * operation.
3854 	 * Length = 32B
3855 	 */
3856 	#define CMPL_BASE_TYPE_RX_TPA_START_V3   UINT32_C(0x19)
3857 	/*
3858 	 * Statistics Ejection Completion:
3859 	 * Completion of statistics data ejection buffer.
3860 	 * Length = 16B
3861 	 */
3862 	#define CMPL_BASE_TYPE_STAT_EJECT        UINT32_C(0x1a)
3863 	/*
3864 	 * VEE Flush Completion:
3865 	 * This completion is inserted manually by
3866 	 * the Primate and processed by the VEE hardware to ensure that
3867 	 * all completions on a VEE function have been processed by the
3868 	 * VEE hardware before FLR process is completed.
3869 	 */
3870 	#define CMPL_BASE_TYPE_VEE_FLUSH         UINT32_C(0x1c)
3871 	/*
3872 	 * Mid Path Short Completion :
3873 	 * Completion of a Mid Path Command. Length = 16B
3874 	 */
3875 	#define CMPL_BASE_TYPE_MID_PATH_SHORT    UINT32_C(0x1e)
3876 	/*
3877 	 * Mid Path Long Completion :
3878 	 * Completion of a Mid Path Command. Length = 32B
3879 	 */
3880 	#define CMPL_BASE_TYPE_MID_PATH_LONG     UINT32_C(0x1f)
3881 	/*
3882 	 * HWRM Command Completion:
3883 	 * Completion of an HWRM command.
3884 	 */
3885 	#define CMPL_BASE_TYPE_HWRM_DONE         UINT32_C(0x20)
3886 	/* Forwarded HWRM Request */
3887 	#define CMPL_BASE_TYPE_HWRM_FWD_REQ      UINT32_C(0x22)
3888 	/* Forwarded HWRM Response */
3889 	#define CMPL_BASE_TYPE_HWRM_FWD_RESP     UINT32_C(0x24)
3890 	/* HWRM Asynchronous Event Information */
3891 	#define CMPL_BASE_TYPE_HWRM_ASYNC_EVENT  UINT32_C(0x2e)
3892 	/* CQ Notification */
3893 	#define CMPL_BASE_TYPE_CQ_NOTIFICATION   UINT32_C(0x30)
3894 	/* SRQ Threshold Event */
3895 	#define CMPL_BASE_TYPE_SRQ_EVENT         UINT32_C(0x32)
3896 	/* DBQ Threshold Event */
3897 	#define CMPL_BASE_TYPE_DBQ_EVENT         UINT32_C(0x34)
3898 	/* QP Async Notification */
3899 	#define CMPL_BASE_TYPE_QP_EVENT          UINT32_C(0x38)
3900 	/* Function Async Notification */
3901 	#define CMPL_BASE_TYPE_FUNC_EVENT        UINT32_C(0x3a)
3902 	#define CMPL_BASE_TYPE_LAST             CMPL_BASE_TYPE_FUNC_EVENT
3903 	/* info1 is 16 b */
3904 	uint16_t	info1;
3905 	/* info2 is 32 b */
3906 	uint32_t	info2;
3907 	/*
3908 	 * This value is written by the NIC such that it will be different
3909 	 * for each pass through the completion queue. The even passes
3910 	 * will write 1. The odd passes will write 0.
3911 	 */
3912 	uint32_t	info3_v;
3913 	#define CMPL_BASE_V         UINT32_C(0x1)
3914 	#define CMPL_BASE_INFO3_MASK UINT32_C(0xfffffffe)
3915 	#define CMPL_BASE_INFO3_SFT 1
3916 	/* info4 is 32 b */
3917 	uint32_t	info4;
3918 } __rte_packed;
3919 
3920 /* tx_cmpl (size:128b/16B) */
3921 struct tx_cmpl {
3922 	uint16_t	flags_type;
3923 	/*
3924 	 * This field indicates the exact type of the completion.
3925 	 * By convention, the LSB identifies the length of the
3926 	 * record in 16B units. Even values indicate 16B
3927 	 * records. Odd values indicate 32B
3928 	 * records.
3929 	 */
3930 	#define TX_CMPL_TYPE_MASK       UINT32_C(0x3f)
3931 	#define TX_CMPL_TYPE_SFT        0
3932 	/*
3933 	 * TX L2 completion:
3934 	 * Completion of TX packet. Length = 16B
3935 	 */
3936 	#define TX_CMPL_TYPE_TX_L2        UINT32_C(0x0)
3937 	#define TX_CMPL_TYPE_LAST        TX_CMPL_TYPE_TX_L2
3938 	#define TX_CMPL_FLAGS_MASK      UINT32_C(0xffc0)
3939 	#define TX_CMPL_FLAGS_SFT       6
3940 	/*
3941 	 * When this bit is '1', it indicates a packet that has an
3942 	 * error of some type. Type of error is indicated in
3943 	 * error_flags.
3944 	 */
3945 	#define TX_CMPL_FLAGS_ERROR      UINT32_C(0x40)
3946 	/*
3947 	 * When this bit is '1', it indicates that the packet completed
3948 	 * was transmitted using the push acceleration data provided
3949 	 * by the driver. When this bit is '0', it indicates that the
3950 	 * packet had not push acceleration data written or was executed
3951 	 * as a normal packet even though push data was provided.
3952 	 */
3953 	#define TX_CMPL_FLAGS_PUSH       UINT32_C(0x80)
3954 	/* unused1 is 16 b */
3955 	uint16_t	unused_0;
3956 	/*
3957 	 * This is a copy of the opaque field from the first TX BD of this
3958 	 * transmitted packet. Note that, if the packet was described by a short
3959 	 * CSO or short CSO inline BD, then the 16-bit opaque field from the
3960 	 * short CSO BD will appear in the bottom 16 bits of this field.
3961 	 */
3962 	uint32_t	opaque;
3963 	uint16_t	errors_v;
3964 	/*
3965 	 * This value is written by the NIC such that it will be different
3966 	 * for each pass through the completion queue. The even passes
3967 	 * will write 1. The odd passes will write 0.
3968 	 */
3969 	#define TX_CMPL_V                                  UINT32_C(0x1)
3970 	#define TX_CMPL_ERRORS_MASK                        UINT32_C(0xfffe)
3971 	#define TX_CMPL_ERRORS_SFT                         1
3972 	/*
3973 	 * This error indicates that there was some sort of problem
3974 	 * with the BDs for the packet.
3975 	 */
3976 	#define TX_CMPL_ERRORS_BUFFER_ERROR_MASK            UINT32_C(0xe)
3977 	#define TX_CMPL_ERRORS_BUFFER_ERROR_SFT             1
3978 	/* No error */
3979 	#define TX_CMPL_ERRORS_BUFFER_ERROR_NO_ERROR \
3980 		(UINT32_C(0x0) << 1)
3981 	/*
3982 	 * Bad Format:
3983 	 * BDs were not formatted correctly.
3984 	 */
3985 	#define TX_CMPL_ERRORS_BUFFER_ERROR_BAD_FMT \
3986 		(UINT32_C(0x2) << 1)
3987 	#define TX_CMPL_ERRORS_BUFFER_ERROR_LAST \
3988 		TX_CMPL_ERRORS_BUFFER_ERROR_BAD_FMT
3989 	/*
3990 	 * When this bit is '1', it indicates that the length of
3991 	 * the packet was zero. No packet was transmitted.
3992 	 */
3993 	#define TX_CMPL_ERRORS_ZERO_LENGTH_PKT              UINT32_C(0x10)
3994 	/*
3995 	 * When this bit is '1', it indicates that the packet
3996 	 * was longer than the programmed limit in TDI. No
3997 	 * packet was transmitted.
3998 	 */
3999 	#define TX_CMPL_ERRORS_EXCESSIVE_BD_LENGTH          UINT32_C(0x20)
4000 	/*
4001 	 * When this bit is '1', it indicates that one or more of the
4002 	 * BDs associated with this packet generated a PCI error.
4003 	 * This probably means the address was not valid.
4004 	 */
4005 	#define TX_CMPL_ERRORS_DMA_ERROR                    UINT32_C(0x40)
4006 	/*
4007 	 * When this bit is '1', it indicates that the packet was longer
4008 	 * than indicated by the hint. No packet was transmitted.
4009 	 */
4010 	#define TX_CMPL_ERRORS_HINT_TOO_SHORT               UINT32_C(0x80)
4011 	/*
4012 	 * When this bit is '1', it indicates that the packet was
4013 	 * dropped due to Poison TLP error on one or more of the
4014 	 * TLPs in the PXP completion.
4015 	 */
4016 	#define TX_CMPL_ERRORS_POISON_TLP_ERROR             UINT32_C(0x100)
4017 	/*
4018 	 * When this bit is '1', it indicates that the packet was dropped
4019 	 * due to a transient internal error in TDC. The packet or LSO can
4020 	 * be retried and may transmit successfully on a subsequent attempt.
4021 	 */
4022 	#define TX_CMPL_ERRORS_INTERNAL_ERROR               UINT32_C(0x200)
4023 	/*
4024 	 * When this bit is '1', it was not possible to collect a timestamp
4025 	 * for a PTP completion, in which case the timestamp_hi and
4026 	 * timestamp_lo fields are invalid. When this bit is '0' for a PTP
4027 	 * completion, the timestamp_hi and timestamp_lo fields are valid.
4028 	 * RJRN will copy the value of this bit into the field of the same
4029 	 * name in all TX completions, regardless of whether such completions
4030 	 * are PTP completions or other TX completions.
4031 	 */
4032 	#define TX_CMPL_ERRORS_TIMESTAMP_INVALID_ERROR      UINT32_C(0x400)
4033 	/* unused2 is 16 b */
4034 	uint16_t	unused_1;
4035 	/* unused3 is 32 b */
4036 	uint32_t	unused_2;
4037 } __rte_packed;
4038 
4039 /* tx_cmpl_coal (size:128b/16B) */
4040 struct tx_cmpl_coal {
4041 	uint16_t	flags_type;
4042 	/*
4043 	 * This field indicates the exact type of the completion.
4044 	 * By convention, the LSB identifies the length of the
4045 	 * record in 16B units. Even values indicate 16B
4046 	 * records. Odd values indicate 32B
4047 	 * records.
4048 	 */
4049 	#define TX_CMPL_COAL_TYPE_MASK       UINT32_C(0x3f)
4050 	#define TX_CMPL_COAL_TYPE_SFT        0
4051 	/*
4052 	 * TX L2 coalesced completion:
4053 	 * Completion of TX packet. Length = 16B
4054 	 */
4055 	#define TX_CMPL_COAL_TYPE_TX_L2_COAL   UINT32_C(0x2)
4056 	#define TX_CMPL_COAL_TYPE_LAST        TX_CMPL_COAL_TYPE_TX_L2_COAL
4057 	#define TX_CMPL_COAL_FLAGS_MASK      UINT32_C(0xffc0)
4058 	#define TX_CMPL_COAL_FLAGS_SFT       6
4059 	/*
4060 	 * When this bit is '1', it indicates a packet that has an
4061 	 * error of some type. Type of error is indicated in
4062 	 * error_flags.
4063 	 */
4064 	#define TX_CMPL_COAL_FLAGS_ERROR      UINT32_C(0x40)
4065 	/*
4066 	 * When this bit is '1', it indicates that the packet completed
4067 	 * was transmitted using the push acceleration data provided
4068 	 * by the driver. When this bit is '0', it indicates that the
4069 	 * packet had not push acceleration data written or was executed
4070 	 * as a normal packet even though push data was provided.
4071 	 */
4072 	#define TX_CMPL_COAL_FLAGS_PUSH       UINT32_C(0x80)
4073 	/* unused1 is 16 b */
4074 	uint16_t	unused_0;
4075 	/*
4076 	 * This is a copy of the opaque field from the first TX BD of the packet
4077 	 * which corresponds with the reported sq_cons_idx. Note that, with
4078 	 * coalesced completions, completions are generated for only some of the
4079 	 * packets. The driver will see the opaque field for only those packets.
4080 	 * Note that, if the packet was described by a short CSO or short CSO
4081 	 * inline BD, then the 16-bit opaque field from the short CSO BD will
4082 	 * appear in the bottom 16 bits of this field. For TX rings with
4083 	 * completion coalescing enabled (which would use the coalesced
4084 	 * completion record), it is suggested that the driver populate the
4085 	 * opaque field to indicate the specific TX ring with which the
4086 	 * completion is associated, then utilize the opaque and sq_cons_idx
4087 	 * fields in the coalesced completion record to determine the specific
4088 	 * packets that are to be completed on that ring.
4089 	 */
4090 	uint32_t	opaque;
4091 	uint16_t	errors_v;
4092 	/*
4093 	 * This value is written by the NIC such that it will be different
4094 	 * for each pass through the completion queue. The even passes
4095 	 * will write 1. The odd passes will write 0.
4096 	 */
4097 	#define TX_CMPL_COAL_V                                  UINT32_C(0x1)
4098 	#define TX_CMPL_COAL_ERRORS_MASK \
4099 		UINT32_C(0xfffe)
4100 	#define TX_CMPL_COAL_ERRORS_SFT                         1
4101 	/*
4102 	 * This error indicates that there was some sort of problem
4103 	 * with the BDs for the packet.
4104 	 */
4105 	#define TX_CMPL_COAL_ERRORS_BUFFER_ERROR_MASK            UINT32_C(0xe)
4106 	#define TX_CMPL_COAL_ERRORS_BUFFER_ERROR_SFT             1
4107 	/* No error */
4108 	#define TX_CMPL_COAL_ERRORS_BUFFER_ERROR_NO_ERROR \
4109 		(UINT32_C(0x0) << 1)
4110 	/*
4111 	 * Bad Format:
4112 	 * BDs were not formatted correctly.
4113 	 */
4114 	#define TX_CMPL_COAL_ERRORS_BUFFER_ERROR_BAD_FMT \
4115 		(UINT32_C(0x2) << 1)
4116 	#define TX_CMPL_COAL_ERRORS_BUFFER_ERROR_LAST \
4117 		TX_CMPL_COAL_ERRORS_BUFFER_ERROR_BAD_FMT
4118 	/*
4119 	 * When this bit is '1', it indicates that the length of
4120 	 * the packet was zero. No packet was transmitted.
4121 	 */
4122 	#define TX_CMPL_COAL_ERRORS_ZERO_LENGTH_PKT              UINT32_C(0x10)
4123 	/*
4124 	 * When this bit is '1', it indicates that the packet
4125 	 * was longer than the programmed limit in TDI. No
4126 	 * packet was transmitted.
4127 	 */
4128 	#define TX_CMPL_COAL_ERRORS_EXCESSIVE_BD_LENGTH          UINT32_C(0x20)
4129 	/*
4130 	 * When this bit is '1', it indicates that one or more of the
4131 	 * BDs associated with this packet generated a PCI error.
4132 	 * This probably means the address was not valid.
4133 	 */
4134 	#define TX_CMPL_COAL_ERRORS_DMA_ERROR                    UINT32_C(0x40)
4135 	/*
4136 	 * When this bit is '1', it indicates that the packet was longer
4137 	 * than indicated by the hint. No packet was transmitted.
4138 	 */
4139 	#define TX_CMPL_COAL_ERRORS_HINT_TOO_SHORT               UINT32_C(0x80)
4140 	/*
4141 	 * When this bit is '1', it indicates that the packet was
4142 	 * dropped due to Poison TLP error on one or more of the
4143 	 * TLPs in the PXP completion.
4144 	 */
4145 	#define TX_CMPL_COAL_ERRORS_POISON_TLP_ERROR \
4146 		UINT32_C(0x100)
4147 	/*
4148 	 * When this bit is '1', it indicates that the packet was dropped
4149 	 * due to a transient internal error in TDC. The packet or LSO can
4150 	 * be retried and may transmit successfully on a subsequent attempt.
4151 	 */
4152 	#define TX_CMPL_COAL_ERRORS_INTERNAL_ERROR \
4153 		UINT32_C(0x200)
4154 	/*
4155 	 * When this bit is '1', it was not possible to collect a a timestamp
4156 	 * for a PTP completion, in which case the timestamp_hi and
4157 	 * timestamp_lo fields are invalid. When this bit is '0' for a PTP
4158 	 * completion, the timestamp_hi and timestamp_lo fields are valid.
4159 	 * RJRN will copy the value of this bit into the field of the same
4160 	 * name in all TX completions, regardless of whether such
4161 	 * completions are PTP completions or other TX completions.
4162 	 */
4163 	#define TX_CMPL_COAL_ERRORS_TIMESTAMP_INVALID_ERROR \
4164 		UINT32_C(0x400)
4165 	/* unused2 is 16 b */
4166 	uint16_t	unused_1;
4167 	uint32_t	sq_cons_idx;
4168 	/*
4169 	 * This value is SQ index for the start of the packet following the
4170 	 * last completed packet.
4171 	 */
4172 	#define TX_CMPL_COAL_SQ_CONS_IDX_MASK UINT32_C(0xffffff)
4173 	#define TX_CMPL_COAL_SQ_CONS_IDX_SFT 0
4174 } __rte_packed;
4175 
4176 /* tx_cmpl_ptp (size:128b/16B) */
4177 struct tx_cmpl_ptp {
4178 	uint16_t	flags_type;
4179 	/*
4180 	 * This field indicates the exact type of the completion.
4181 	 * By convention, the LSB identifies the length of the
4182 	 * record in 16B units. Even values indicate 16B
4183 	 * records. Odd values indicate 32B
4184 	 * records.
4185 	 */
4186 	#define TX_CMPL_PTP_TYPE_MASK       UINT32_C(0x3f)
4187 	#define TX_CMPL_PTP_TYPE_SFT        0
4188 	/*
4189 	 * TX L2 PTP completion:
4190 	 * Completion of TX packet. Length = 32B
4191 	 */
4192 	#define TX_CMPL_PTP_TYPE_TX_L2_PTP    UINT32_C(0x2)
4193 	#define TX_CMPL_PTP_TYPE_LAST        TX_CMPL_PTP_TYPE_TX_L2_PTP
4194 	#define TX_CMPL_PTP_FLAGS_MASK      UINT32_C(0xffc0)
4195 	#define TX_CMPL_PTP_FLAGS_SFT       6
4196 	/*
4197 	 * When this bit is '1', it indicates a packet that has an
4198 	 * error of some type. Type of error is indicated in
4199 	 * error_flags.
4200 	 */
4201 	#define TX_CMPL_PTP_FLAGS_ERROR      UINT32_C(0x40)
4202 	/*
4203 	 * When this bit is '1', it indicates that the packet completed
4204 	 * was transmitted using the push acceleration data provided
4205 	 * by the driver. When this bit is '0', it indicates that the
4206 	 * packet had not push acceleration data written or was executed
4207 	 * as a normal packet even though push data was provided.
4208 	 */
4209 	#define TX_CMPL_PTP_FLAGS_PUSH       UINT32_C(0x80)
4210 	/* unused1 is 16 b */
4211 	uint16_t	unused_0;
4212 	/*
4213 	 * This is a copy of the opaque field from the first TX BD of this
4214 	 * transmitted packet. Note that, if the packet was described by a short
4215 	 * CSO or short CSO inline BD, then the 16-bit opaque field from the
4216 	 * short CSO BD will appear in the bottom 16 bits of this field.
4217 	 */
4218 	uint32_t	opaque;
4219 	uint16_t	errors_v;
4220 	/*
4221 	 * This value is written by the NIC such that it will be different
4222 	 * for each pass through the completion queue. The even passes
4223 	 * will write 1. The odd passes will write 0.
4224 	 */
4225 	#define TX_CMPL_PTP_V                                  UINT32_C(0x1)
4226 	#define TX_CMPL_PTP_ERRORS_MASK                        UINT32_C(0xfffe)
4227 	#define TX_CMPL_PTP_ERRORS_SFT                         1
4228 	/*
4229 	 * This error indicates that there was some sort of problem
4230 	 * with the BDs for the packet.
4231 	 */
4232 	#define TX_CMPL_PTP_ERRORS_BUFFER_ERROR_MASK            UINT32_C(0xe)
4233 	#define TX_CMPL_PTP_ERRORS_BUFFER_ERROR_SFT             1
4234 	/* No error */
4235 	#define TX_CMPL_PTP_ERRORS_BUFFER_ERROR_NO_ERROR \
4236 		(UINT32_C(0x0) << 1)
4237 	/*
4238 	 * Bad Format:
4239 	 * BDs were not formatted correctly.
4240 	 */
4241 	#define TX_CMPL_PTP_ERRORS_BUFFER_ERROR_BAD_FMT \
4242 		(UINT32_C(0x2) << 1)
4243 	#define TX_CMPL_PTP_ERRORS_BUFFER_ERROR_LAST \
4244 		TX_CMPL_PTP_ERRORS_BUFFER_ERROR_BAD_FMT
4245 	/*
4246 	 * When this bit is '1', it indicates that the length of
4247 	 * the packet was zero. No packet was transmitted.
4248 	 */
4249 	#define TX_CMPL_PTP_ERRORS_ZERO_LENGTH_PKT              UINT32_C(0x10)
4250 	/*
4251 	 * When this bit is '1', it indicates that the packet
4252 	 * was longer than the programmed limit in TDI. No
4253 	 * packet was transmitted.
4254 	 */
4255 	#define TX_CMPL_PTP_ERRORS_EXCESSIVE_BD_LENGTH          UINT32_C(0x20)
4256 	/*
4257 	 * When this bit is '1', it indicates that one or more of the
4258 	 * BDs associated with this packet generated a PCI error.
4259 	 * This probably means the address was not valid.
4260 	 */
4261 	#define TX_CMPL_PTP_ERRORS_DMA_ERROR                    UINT32_C(0x40)
4262 	/*
4263 	 * When this bit is '1', it indicates that the packet was longer
4264 	 * than indicated by the hint. No packet was transmitted.
4265 	 */
4266 	#define TX_CMPL_PTP_ERRORS_HINT_TOO_SHORT               UINT32_C(0x80)
4267 	/*
4268 	 * When this bit is '1', it indicates that the packet was
4269 	 * dropped due to Poison TLP error on one or more of the
4270 	 * TLPs in the PXP completion.
4271 	 */
4272 	#define TX_CMPL_PTP_ERRORS_POISON_TLP_ERROR             UINT32_C(0x100)
4273 	/*
4274 	 * When this bit is '1', it indicates that the packet was dropped due
4275 	 * to a transient internal error in TDC. The packet or LSO can be
4276 	 * retried and may transmit successfully on a subsequent attempt.
4277 	 */
4278 	#define TX_CMPL_PTP_ERRORS_INTERNAL_ERROR               UINT32_C(0x200)
4279 	/*
4280 	 * When this bit is '1', it was not possible to collect a a timestamp
4281 	 * for a PTP completion, in which case the timestamp_hi and
4282 	 * timestamp_lo fields are invalid. When this bit is '0' for a PTP
4283 	 * completion, the timestamp_hi and timestamp_lo fields are valid.
4284 	 * RJRN will copy the value of this bit into the field of the same
4285 	 * name in all TX completions, regardless of whether such
4286 	 * completions are PTP completions or other TX completions.
4287 	 */
4288 	#define TX_CMPL_PTP_ERRORS_TIMESTAMP_INVALID_ERROR      UINT32_C(0x400)
4289 	/* unused2 is 16 b */
4290 	uint16_t	unused_1;
4291 	/*
4292 	 * This is timestamp value (lower 32bits) read from PM for the PTP
4293 	 * timestamp enabled packet.
4294 	 */
4295 	uint32_t	timestamp_lo;
4296 } __rte_packed;
4297 
4298 /* tx_cmpl_ptp_hi (size:128b/16B) */
4299 struct tx_cmpl_ptp_hi {
4300 	/*
4301 	 * This is timestamp value (lower 32bits) read from PM for the PTP
4302 	 * timestamp enabled packet.
4303 	 */
4304 	uint16_t	timestamp_hi[3];
4305 	uint16_t	reserved16;
4306 	uint64_t	v2;
4307 	/*
4308 	 * This value is written by the NIC such that it will be different for
4309 	 * each pass through the completion queue.
4310 	 * The even passes will write 1.
4311 	 * The odd passes will write 0.
4312 	 */
4313 	#define TX_CMPL_PTP_HI_V2     UINT32_C(0x1)
4314 } __rte_packed;
4315 
4316 /* rx_pkt_cmpl (size:128b/16B) */
4317 struct rx_pkt_cmpl {
4318 	uint16_t	flags_type;
4319 	/*
4320 	 * This field indicates the exact type of the completion.
4321 	 * By convention, the LSB identifies the length of the
4322 	 * record in 16B units. Even values indicate 16B
4323 	 * records. Odd values indicate 32B
4324 	 * records.
4325 	 */
4326 	#define RX_PKT_CMPL_TYPE_MASK                      UINT32_C(0x3f)
4327 	#define RX_PKT_CMPL_TYPE_SFT                       0
4328 	/*
4329 	 * RX L2 completion:
4330 	 * Completion of and L2 RX packet. Length = 32B
4331 	 */
4332 	#define RX_PKT_CMPL_TYPE_RX_L2                       UINT32_C(0x11)
4333 	#define RX_PKT_CMPL_TYPE_LAST \
4334 		RX_PKT_CMPL_TYPE_RX_L2
4335 	#define RX_PKT_CMPL_FLAGS_MASK                     UINT32_C(0xffc0)
4336 	#define RX_PKT_CMPL_FLAGS_SFT                      6
4337 	/*
4338 	 * When this bit is '1', it indicates a packet that has an
4339 	 * error of some type. Type of error is indicated in
4340 	 * error_flags.
4341 	 */
4342 	#define RX_PKT_CMPL_FLAGS_ERROR                     UINT32_C(0x40)
4343 	/* This field indicates how the packet was placed in the buffer. */
4344 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_MASK            UINT32_C(0x380)
4345 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_SFT             7
4346 	/*
4347 	 * Normal:
4348 	 * Packet was placed using normal algorithm.
4349 	 */
4350 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_NORMAL \
4351 		(UINT32_C(0x0) << 7)
4352 	/*
4353 	 * Jumbo:
4354 	 * Packet was placed using jumbo algorithm.
4355 	 */
4356 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_JUMBO \
4357 		(UINT32_C(0x1) << 7)
4358 	/*
4359 	 * Header/Data Separation:
4360 	 * Packet was placed using Header/Data separation algorithm.
4361 	 * The separation location is indicated by the itype field.
4362 	 */
4363 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_HDS \
4364 		(UINT32_C(0x2) << 7)
4365 	#define RX_PKT_CMPL_FLAGS_PLACEMENT_LAST \
4366 		RX_PKT_CMPL_FLAGS_PLACEMENT_HDS
4367 	/* This bit is '1' if the RSS field in this completion is valid. */
4368 	#define RX_PKT_CMPL_FLAGS_RSS_VALID                 UINT32_C(0x400)
4369 	/*
4370 	 * This bit is '1' if metadata has been added to the end of the
4371 	 * packet in host memory.
4372 	 */
4373 	#define RX_PKT_CMPL_FLAGS_PKT_METADATA_PRESENT      UINT32_C(0x800)
4374 	/*
4375 	 * This value indicates what the inner packet determined for the
4376 	 * packet was.
4377 	 */
4378 	#define RX_PKT_CMPL_FLAGS_ITYPE_MASK                UINT32_C(0xf000)
4379 	#define RX_PKT_CMPL_FLAGS_ITYPE_SFT                 12
4380 	/*
4381 	 * Not Known:
4382 	 * Indicates that the packet type was not known.
4383 	 */
4384 	#define RX_PKT_CMPL_FLAGS_ITYPE_NOT_KNOWN \
4385 		(UINT32_C(0x0) << 12)
4386 	/*
4387 	 * IP Packet:
4388 	 * Indicates that the packet was an IP packet, but further
4389 	 * classification was not possible.
4390 	 */
4391 	#define RX_PKT_CMPL_FLAGS_ITYPE_IP \
4392 		(UINT32_C(0x1) << 12)
4393 	/*
4394 	 * TCP Packet:
4395 	 * Indicates that the packet was IP and TCP.
4396 	 * This indicates that the payload_offset field is valid.
4397 	 */
4398 	#define RX_PKT_CMPL_FLAGS_ITYPE_TCP \
4399 		(UINT32_C(0x2) << 12)
4400 	/*
4401 	 * UDP Packet:
4402 	 * Indicates that the packet was IP and UDP.
4403 	 * This indicates that the payload_offset field is valid.
4404 	 */
4405 	#define RX_PKT_CMPL_FLAGS_ITYPE_UDP \
4406 		(UINT32_C(0x3) << 12)
4407 	/*
4408 	 * FCoE Packet:
4409 	 * Indicates that the packet was recognized as a FCoE.
4410 	 * This also indicates that the payload_offset field is valid.
4411 	 */
4412 	#define RX_PKT_CMPL_FLAGS_ITYPE_FCOE \
4413 		(UINT32_C(0x4) << 12)
4414 	/*
4415 	 * RoCE Packet:
4416 	 * Indicates that the packet was recognized as a RoCE.
4417 	 * This also indicates that the payload_offset field is valid.
4418 	 */
4419 	#define RX_PKT_CMPL_FLAGS_ITYPE_ROCE \
4420 		(UINT32_C(0x5) << 12)
4421 	/*
4422 	 * ICMP Packet:
4423 	 * Indicates that the packet was recognized as ICMP.
4424 	 * This indicates that the payload_offset field is valid.
4425 	 */
4426 	#define RX_PKT_CMPL_FLAGS_ITYPE_ICMP \
4427 		(UINT32_C(0x7) << 12)
4428 	/*
4429 	 * PTP packet wo/timestamp:
4430 	 * Indicates that the packet was recognized as a PTP
4431 	 * packet.
4432 	 */
4433 	#define RX_PKT_CMPL_FLAGS_ITYPE_PTP_WO_TIMESTAMP \
4434 		(UINT32_C(0x8) << 12)
4435 	/*
4436 	 * PTP packet w/timestamp:
4437 	 * Indicates that the packet was recognized as a PTP
4438 	 * packet and that a timestamp was taken for the packet.
4439 	 */
4440 	#define RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP \
4441 		(UINT32_C(0x9) << 12)
4442 	#define RX_PKT_CMPL_FLAGS_ITYPE_LAST \
4443 		RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP
4444 	/*
4445 	 * This is the length of the data for the packet stored in the
4446 	 * buffer(s) identified by the opaque value. This includes
4447 	 * the packet BD and any associated buffer BDs. This does not include
4448 	 * the length of any data places in aggregation BDs.
4449 	 */
4450 	uint16_t	len;
4451 	/*
4452 	 * This is a copy of the opaque field from the RX BD this completion
4453 	 * corresponds to.
4454 	 */
4455 	uint32_t	opaque;
4456 	uint8_t	agg_bufs_v1;
4457 	/*
4458 	 * This value is written by the NIC such that it will be different
4459 	 * for each pass through the completion queue. The even passes
4460 	 * will write 1. The odd passes will write 0.
4461 	 */
4462 	#define RX_PKT_CMPL_V1           UINT32_C(0x1)
4463 	/*
4464 	 * This value is the number of aggregation buffers that follow this
4465 	 * entry in the completion ring that are a part of this packet.
4466 	 * If the value is zero, then the packet is completely contained
4467 	 * in the buffer space provided for the packet in the RX ring.
4468 	 */
4469 	#define RX_PKT_CMPL_AGG_BUFS_MASK UINT32_C(0x3e)
4470 	#define RX_PKT_CMPL_AGG_BUFS_SFT 1
4471 	/* unused1 is 2 b */
4472 	#define RX_PKT_CMPL_UNUSED1_MASK UINT32_C(0xc0)
4473 	#define RX_PKT_CMPL_UNUSED1_SFT  6
4474 	/*
4475 	 * This is the RSS hash type for the packet. The value is packed
4476 	 * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
4477 	 * The value of tuple_extrac_op provides the information about
4478 	 * what fields the hash was computed on.
4479 	 * Note that 4-tuples values listed below are applicable
4480 	 * for layer 4 protocols supported and enabled for RSS in the hardware,
4481 	 * HWRM firmware, and drivers. For example, if RSS hash is supported and
4482 	 * enabled for TCP traffic only, then the values of tuple_extract_op
4483 	 * corresponding to 4-tuples are only valid for TCP traffic.
4484 	 */
4485 	uint8_t	rss_hash_type;
4486 	/*
4487 	 * The RSS hash was computed over source IP address,
4488 	 * destination IP address, source port, and destination port of inner
4489 	 * IP and TCP or UDP headers. Note: For non-tunneled packets,
4490 	 * the packet headers are considered inner packet headers for the RSS
4491 	 * hash computation purpose.
4492 	 */
4493 	#define RX_PKT_CMPL_RSS_HASH_TYPE_ENUM_0 UINT32_C(0x0)
4494 	/*
4495 	 * The RSS hash was computed over source IP address and destination
4496 	 * IP address of inner IP header. Note: For non-tunneled packets,
4497 	 * the packet headers are considered inner packet headers for the RSS
4498 	 * hash computation purpose.
4499 	 */
4500 	#define RX_PKT_CMPL_RSS_HASH_TYPE_ENUM_1 UINT32_C(0x1)
4501 	/*
4502 	 * The RSS hash was computed over source IP address,
4503 	 * destination IP address, source port, and destination port of
4504 	 * IP and TCP or UDP headers of outer tunnel headers.
4505 	 * Note: For non-tunneled packets, this value is not applicable.
4506 	 */
4507 	#define RX_PKT_CMPL_RSS_HASH_TYPE_ENUM_2 UINT32_C(0x2)
4508 	/*
4509 	 * The RSS hash was computed over source IP address and
4510 	 * destination IP address of IP header of outer tunnel headers.
4511 	 * Note: For non-tunneled packets, this value is not applicable.
4512 	 */
4513 	#define RX_PKT_CMPL_RSS_HASH_TYPE_ENUM_3 UINT32_C(0x3)
4514 	#define RX_PKT_CMPL_RSS_HASH_TYPE_LAST \
4515 		RX_PKT_CMPL_RSS_HASH_TYPE_ENUM_3
4516 	/*
4517 	 * This value indicates the offset in bytes from the beginning of the
4518 	 * packet where the inner payload starts. This value is valid for TCP,
4519 	 * UDP, FCoE, and RoCE packets.
4520 	 *
4521 	 * A value of zero indicates that header is 256B into the packet.
4522 	 */
4523 	uint8_t	payload_offset;
4524 	/* unused2 is 8 b */
4525 	uint8_t	unused1;
4526 	/*
4527 	 * This value is the RSS hash value calculated for the packet
4528 	 * based on the mode bits and key value in the VNIC.
4529 	 */
4530 	uint32_t	rss_hash;
4531 } __rte_packed;
4532 
4533 /* Last 16 bytes of rx_pkt_cmpl. */
4534 /* rx_pkt_cmpl_hi (size:128b/16B) */
4535 struct rx_pkt_cmpl_hi {
4536 	uint32_t	flags2;
4537 	/*
4538 	 * This indicates that the ip checksum was calculated for the
4539 	 * inner packet and that the ip_cs_error field indicates if there
4540 	 * was an error.
4541 	 */
4542 	#define RX_PKT_CMPL_FLAGS2_IP_CS_CALC                 UINT32_C(0x1)
4543 	/*
4544 	 * This indicates that the TCP, UDP or ICMP checksum was
4545 	 * calculated for the inner packet and that the l4_cs_error field
4546 	 * indicates if there was an error.
4547 	 */
4548 	#define RX_PKT_CMPL_FLAGS2_L4_CS_CALC                 UINT32_C(0x2)
4549 	/*
4550 	 * This indicates that the ip checksum was calculated for the
4551 	 * tunnel header and that the t_ip_cs_error field indicates if there
4552 	 * was an error.
4553 	 */
4554 	#define RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC               UINT32_C(0x4)
4555 	/*
4556 	 * This indicates that the UDP checksum was
4557 	 * calculated for the tunnel packet and that the t_l4_cs_error field
4558 	 * indicates if there was an error.
4559 	 */
4560 	#define RX_PKT_CMPL_FLAGS2_T_L4_CS_CALC               UINT32_C(0x8)
4561 	/* This value indicates what format the metadata field is. */
4562 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_MASK           UINT32_C(0xf0)
4563 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_SFT            4
4564 	/* No metadata information. Value is zero. */
4565 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_NONE \
4566 		(UINT32_C(0x0) << 4)
4567 	/*
4568 	 * The metadata field contains the VLAN tag and TPID value.
4569 	 * - metadata[11:0] contains the vlan VID value.
4570 	 * - metadata[12] contains the vlan DE value.
4571 	 * - metadata[15:13] contains the vlan PRI value.
4572 	 * - metadata[31:16] contains the vlan TPID value.
4573 	 */
4574 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN \
4575 		(UINT32_C(0x1) << 4)
4576 	/*
4577 	 * If ext_meta_format is equal to 1, the metadata field
4578 	 * contains the lower 16b of the tunnel ID value, justified
4579 	 * to LSB
4580 	 * - VXLAN = VNI[23:0] -> VXLAN Network ID
4581 	 * - Geneve (NGE) = VNI[23:0] a-> Virtual Network Identifier.
4582 	 * - NVGRE = TNI[23:0] -> Tenant Network ID
4583 	 * - GRE = KEY[31:0] -> key field with bit mask. zero if K = 0
4584 	 * - IPV4 = 0 (not populated)
4585 	 * - IPV6 = Flow Label[19:0]
4586 	 * - PPPoE = sessionID[15:0]
4587 	 * - MPLs = Outer label[19:0]
4588 	 * - UPAR = Selected[31:0] with bit mask
4589 	 */
4590 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_TUNNEL_ID \
4591 		(UINT32_C(0x2) << 4)
4592 	/*
4593 	 * if ext_meta_format is equal to 1, metadata field contains
4594 	 * 16b metadata from the prepended header (chdr_data).
4595 	 */
4596 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_CHDR_DATA \
4597 		(UINT32_C(0x3) << 4)
4598 	/*
4599 	 * If ext_meta_format is equal to 1, the metadata field contains
4600 	 * the outer_l3_offset, inner_l2_offset, inner_l3_offset and
4601 	 * inner_l4_size.
4602 	 * - metadata[8:0] contains the outer_l3_offset.
4603 	 * - metadata[17:9] contains the inner_l2_offset.
4604 	 * - metadata[26:18] contains the inner_l3_offset.
4605 	 * - metadata[31:27] contains the inner_l4_size.
4606 	 */
4607 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET \
4608 		(UINT32_C(0x4) << 4)
4609 	#define RX_PKT_CMPL_FLAGS2_META_FORMAT_LAST \
4610 		RX_PKT_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET
4611 	/*
4612 	 * This field indicates the IP type for the inner-most IP header.
4613 	 * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
4614 	 * This value is only valid if itype indicates a packet
4615 	 * with an IP header.
4616 	 */
4617 	#define RX_PKT_CMPL_FLAGS2_IP_TYPE                    UINT32_C(0x100)
4618 	/*
4619 	 * This indicates that the complete 1's complement checksum was
4620 	 * calculated for the packet.
4621 	 */
4622 	#define RX_PKT_CMPL_FLAGS2_COMPLETE_CHECKSUM_CALC     UINT32_C(0x200)
4623 	/*
4624 	 * The combination of this value and meta_format indicated what
4625 	 * format the metadata field is.
4626 	 */
4627 	#define RX_PKT_CMPL_FLAGS2_EXT_META_FORMAT_MASK       UINT32_C(0xc00)
4628 	#define RX_PKT_CMPL_FLAGS2_EXT_META_FORMAT_SFT        10
4629 	/*
4630 	 * This value is the complete 1's complement checksum calculated from
4631 	 * the start of the outer L3 header to the end of the packet (not
4632 	 * including the ethernet crc). It is valid when the
4633 	 * 'complete_checksum_calc' flag is set.
4634 	 */
4635 	#define RX_PKT_CMPL_FLAGS2_COMPLETE_CHECKSUM_MASK \
4636 		UINT32_C(0xffff0000)
4637 	#define RX_PKT_CMPL_FLAGS2_COMPLETE_CHECKSUM_SFT      16
4638 	/*
4639 	 * This is data from the CFA block as indicated by the meta_format
4640 	 * field.
4641 	 */
4642 	uint32_t	metadata;
4643 	/* When meta_format=1, this value is the VLAN VID. */
4644 	#define RX_PKT_CMPL_METADATA_VID_MASK UINT32_C(0xfff)
4645 	#define RX_PKT_CMPL_METADATA_VID_SFT  0
4646 	/* When meta_format=1, this value is the VLAN DE. */
4647 	#define RX_PKT_CMPL_METADATA_DE       UINT32_C(0x1000)
4648 	/* When meta_format=1, this value is the VLAN PRI. */
4649 	#define RX_PKT_CMPL_METADATA_PRI_MASK UINT32_C(0xe000)
4650 	#define RX_PKT_CMPL_METADATA_PRI_SFT  13
4651 	/* When meta_format=1, this value is the VLAN TPID. */
4652 	#define RX_PKT_CMPL_METADATA_TPID_MASK UINT32_C(0xffff0000)
4653 	#define RX_PKT_CMPL_METADATA_TPID_SFT 16
4654 	uint16_t	errors_v2;
4655 	/*
4656 	 * This value is written by the NIC such that it will be different
4657 	 * for each pass through the completion queue. The even passes
4658 	 * will write 1. The odd passes will write 0.
4659 	 */
4660 	#define RX_PKT_CMPL_V2 \
4661 		UINT32_C(0x1)
4662 	#define RX_PKT_CMPL_ERRORS_MASK \
4663 		UINT32_C(0xfffe)
4664 	#define RX_PKT_CMPL_ERRORS_SFT                               1
4665 	/*
4666 	 * This error indicates that there was some sort of problem with
4667 	 * the BDs for the packet that was found after part of the
4668 	 * packet was already placed. The packet should be treated as
4669 	 * invalid.
4670 	 */
4671 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_MASK \
4672 		UINT32_C(0xe)
4673 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_SFT                   1
4674 	/* No buffer error */
4675 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
4676 		(UINT32_C(0x0) << 1)
4677 	/*
4678 	 * Did Not Fit:
4679 	 * Packet did not fit into packet buffer provided.
4680 	 * For regular placement, this means the packet did not fit
4681 	 * in the buffer provided. For HDS and jumbo placement, this
4682 	 * means that the packet could not be placed into 7 physical
4683 	 * buffers or less.
4684 	 */
4685 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_DID_NOT_FIT \
4686 		(UINT32_C(0x1) << 1)
4687 	/*
4688 	 * Not On Chip:
4689 	 * All BDs needed for the packet were not on-chip when
4690 	 * the packet arrived.
4691 	 */
4692 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
4693 		(UINT32_C(0x2) << 1)
4694 	/*
4695 	 * Bad Format:
4696 	 * BDs were not formatted correctly.
4697 	 */
4698 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
4699 		(UINT32_C(0x3) << 1)
4700 	/*
4701 	 * Flush:
4702 	 * There was a bad_format error on the previous operation
4703 	 */
4704 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
4705 		(UINT32_C(0x5) << 1)
4706 	#define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_LAST \
4707 		RX_PKT_CMPL_ERRORS_BUFFER_ERROR_FLUSH
4708 	/*
4709 	 * This indicates that there was an error in the IP header
4710 	 * checksum.
4711 	 */
4712 	#define RX_PKT_CMPL_ERRORS_IP_CS_ERROR \
4713 		UINT32_C(0x10)
4714 	/*
4715 	 * This indicates that there was an error in the TCP, UDP
4716 	 * or ICMP checksum.
4717 	 */
4718 	#define RX_PKT_CMPL_ERRORS_L4_CS_ERROR \
4719 		UINT32_C(0x20)
4720 	/*
4721 	 * This indicates that there was an error in the tunnel
4722 	 * IP header checksum.
4723 	 */
4724 	#define RX_PKT_CMPL_ERRORS_T_IP_CS_ERROR \
4725 		UINT32_C(0x40)
4726 	/*
4727 	 * This indicates that there was an error in the tunnel
4728 	 * UDP checksum.
4729 	 */
4730 	#define RX_PKT_CMPL_ERRORS_T_L4_CS_ERROR \
4731 		UINT32_C(0x80)
4732 	/*
4733 	 * This indicates that there was a CRC error on either an FCoE
4734 	 * or RoCE packet. The itype indicates the packet type.
4735 	 */
4736 	#define RX_PKT_CMPL_ERRORS_CRC_ERROR \
4737 		UINT32_C(0x100)
4738 	/*
4739 	 * This indicates that there was an error in the tunnel
4740 	 * portion of the packet when this
4741 	 * field is non-zero.
4742 	 */
4743 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_MASK \
4744 		UINT32_C(0xe00)
4745 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_SFT                    9
4746 	/*
4747 	 * No additional error occurred on the tunnel portion
4748 	 * or the packet of the packet does not have a tunnel.
4749 	 */
4750 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_NO_ERROR \
4751 		(UINT32_C(0x0) << 9)
4752 	/*
4753 	 * Indicates that IP header version does not match
4754 	 * expectation from L2 Ethertype for IPv4 and IPv6
4755 	 * in the tunnel header.
4756 	 */
4757 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_VERSION \
4758 		(UINT32_C(0x1) << 9)
4759 	/*
4760 	 * Indicates that header length is out of range in the
4761 	 * tunnel header. Valid for
4762 	 * IPv4.
4763 	 */
4764 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_HDR_LEN \
4765 		(UINT32_C(0x2) << 9)
4766 	/*
4767 	 * Indicates that the physical packet is shorter than that
4768 	 * claimed by the PPPoE header length for a tunnel PPPoE
4769 	 * packet.
4770 	 */
4771 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_TUNNEL_TOTAL_ERROR \
4772 		(UINT32_C(0x3) << 9)
4773 	/*
4774 	 * Indicates that physical packet is shorter than that claimed
4775 	 * by the tunnel l3 header length. Valid for IPv4, or IPv6
4776 	 * tunnel packet packets.
4777 	 */
4778 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_IP_TOTAL_ERROR \
4779 		(UINT32_C(0x4) << 9)
4780 	/*
4781 	 * Indicates that the physical packet is shorter than that
4782 	 * claimed by the tunnel UDP header length for a tunnel
4783 	 * UDP packet that is not fragmented.
4784 	 */
4785 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_UDP_TOTAL_ERROR \
4786 		(UINT32_C(0x5) << 9)
4787 	/*
4788 	 * indicates that the IPv4 TTL or IPv6 hop limit check
4789 	 * have failed (e.g. TTL = 0) in the tunnel header. Valid
4790 	 * for IPv4, and IPv6.
4791 	 */
4792 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL \
4793 		(UINT32_C(0x6) << 9)
4794 	#define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_LAST \
4795 		RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL
4796 	/*
4797 	 * This indicates that there was an error in the inner
4798 	 * portion of the packet when this
4799 	 * field is non-zero.
4800 	 */
4801 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_MASK \
4802 		UINT32_C(0xf000)
4803 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_SFT                      12
4804 	/*
4805 	 * No additional error occurred on the tunnel portion
4806 	 * or the packet of the packet does not have a tunnel.
4807 	 */
4808 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_NO_ERROR \
4809 		(UINT32_C(0x0) << 12)
4810 	/*
4811 	 * Indicates that IP header version does not match
4812 	 * expectation from L2 Ethertype for IPv4 and IPv6 or that
4813 	 * option other than VFT was parsed on
4814 	 * FCoE packet.
4815 	 */
4816 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_VERSION \
4817 		(UINT32_C(0x1) << 12)
4818 	/*
4819 	 * indicates that header length is out of range. Valid for
4820 	 * IPv4 and RoCE
4821 	 */
4822 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_HDR_LEN \
4823 		(UINT32_C(0x2) << 12)
4824 	/*
4825 	 * indicates that the IPv4 TTL or IPv6 hop limit check
4826 	 * have failed (e.g. TTL = 0). Valid for IPv4, and IPv6
4827 	 */
4828 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_TTL \
4829 		(UINT32_C(0x3) << 12)
4830 	/*
4831 	 * Indicates that physical packet is shorter than that
4832 	 * claimed by the l3 header length. Valid for IPv4,
4833 	 * IPv6 packet or RoCE packets.
4834 	 */
4835 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_IP_TOTAL_ERROR \
4836 		(UINT32_C(0x4) << 12)
4837 	/*
4838 	 * Indicates that the physical packet is shorter than that
4839 	 * claimed by the UDP header length for a UDP packet that is
4840 	 * not fragmented.
4841 	 */
4842 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_UDP_TOTAL_ERROR \
4843 		(UINT32_C(0x5) << 12)
4844 	/*
4845 	 * Indicates that TCP header length > IP payload. Valid for
4846 	 * TCP packets only.
4847 	 */
4848 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN \
4849 		(UINT32_C(0x6) << 12)
4850 	/* Indicates that TCP header length < 5. Valid for TCP. */
4851 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN_TOO_SMALL \
4852 		(UINT32_C(0x7) << 12)
4853 	/*
4854 	 * Indicates that TCP option headers result in a TCP header
4855 	 * size that does not match data offset in TCP header. Valid
4856 	 * for TCP.
4857 	 */
4858 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN \
4859 		(UINT32_C(0x8) << 12)
4860 	#define RX_PKT_CMPL_ERRORS_PKT_ERROR_LAST \
4861 		RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN
4862 	/*
4863 	 * This field identifies the CFA action rule that was used for this
4864 	 * packet.
4865 	 */
4866 	uint16_t	cfa_code;
4867 	uint32_t	reorder;
4868 	/*
4869 	 * This value holds the reordering sequence number for the packet.
4870 	 * If the reordering sequence is not valid, then this value is zero.
4871 	 * The reordering domain for the packet is in the bottom 8 to 10b of
4872 	 * the rss_hash value. The bottom 20b of this value contain the
4873 	 * ordering domain value for the packet.
4874 	 */
4875 	#define RX_PKT_CMPL_REORDER_MASK UINT32_C(0xffffff)
4876 	#define RX_PKT_CMPL_REORDER_SFT 0
4877 } __rte_packed;
4878 
4879 /* rx_pkt_v2_cmpl (size:128b/16B) */
4880 struct rx_pkt_v2_cmpl {
4881 	uint16_t	flags_type;
4882 	/*
4883 	 * This field indicates the exact type of the completion.
4884 	 * By convention, the LSB identifies the length of the
4885 	 * record in 16B units. Even values indicate 16B
4886 	 * records. Odd values indicate 32B
4887 	 * records.
4888 	 */
4889 	#define RX_PKT_V2_CMPL_TYPE_MASK                      UINT32_C(0x3f)
4890 	#define RX_PKT_V2_CMPL_TYPE_SFT                       0
4891 	/*
4892 	 * RX L2 V2 completion:
4893 	 * Completion of and L2 RX packet. Length = 32B
4894 	 * This is the new version of the RX_L2 completion used in SR2
4895 	 * and later chips.
4896 	 */
4897 	#define RX_PKT_V2_CMPL_TYPE_RX_L2_V2                    UINT32_C(0xf)
4898 	#define RX_PKT_V2_CMPL_TYPE_LAST \
4899 		RX_PKT_V2_CMPL_TYPE_RX_L2_V2
4900 	#define RX_PKT_V2_CMPL_FLAGS_MASK                     UINT32_C(0xffc0)
4901 	#define RX_PKT_V2_CMPL_FLAGS_SFT                      6
4902 	/*
4903 	 * When this bit is '1', it indicates a packet that has an
4904 	 * error of some type. Type of error is indicated in
4905 	 * error_flags.
4906 	 */
4907 	#define RX_PKT_V2_CMPL_FLAGS_ERROR                     UINT32_C(0x40)
4908 	/* This field indicates how the packet was placed in the buffer. */
4909 	#define RX_PKT_V2_CMPL_FLAGS_PLACEMENT_MASK            UINT32_C(0x380)
4910 	#define RX_PKT_V2_CMPL_FLAGS_PLACEMENT_SFT             7
4911 	/*
4912 	 * Normal:
4913 	 * Packet was placed using normal algorithm.
4914 	 */
4915 	#define RX_PKT_V2_CMPL_FLAGS_PLACEMENT_NORMAL \
4916 		(UINT32_C(0x0) << 7)
4917 	/*
4918 	 * Jumbo:
4919 	 * Packet was placed using jumbo algorithm.
4920 	 */
4921 	#define RX_PKT_V2_CMPL_FLAGS_PLACEMENT_JUMBO \
4922 		(UINT32_C(0x1) << 7)
4923 	/*
4924 	 * Header/Data Separation:
4925 	 * Packet was placed using Header/Data separation algorithm.
4926 	 * The separation location is indicated by the itype field.
4927 	 */
4928 	#define RX_PKT_V2_CMPL_FLAGS_PLACEMENT_HDS \
4929 		(UINT32_C(0x2) << 7)
4930 	/*
4931 	 * Truncation:
4932 	 * Packet was placed using truncation algorithm. The
4933 	 * placed (truncated) length is indicated in the payload_offset
4934 	 * field. The original length is indicated in the len field.
4935 	 */
4936 	#define RX_PKT_V2_CMPL_FLAGS_PLACEMENT_TRUNCATION \
4937 		(UINT32_C(0x3) << 7)
4938 	#define RX_PKT_V2_CMPL_FLAGS_PLACEMENT_LAST \
4939 		RX_PKT_V2_CMPL_FLAGS_PLACEMENT_TRUNCATION
4940 	/* This bit is '1' if the RSS field in this completion is valid. */
4941 	#define RX_PKT_V2_CMPL_FLAGS_RSS_VALID                 UINT32_C(0x400)
4942 	/*
4943 	 * This bit is '1' if metadata has been added to the end of the
4944 	 * packet in host memory. Metadata starts at the first 32B boundary
4945 	 * after the end of the packet for regular and jumbo placement.
4946 	 * It starts at the first 32B boundary after the end of the header
4947 	 * for HDS placement. The length of the metadata is indicated in the
4948 	 * metadata itself.
4949 	 */
4950 	#define RX_PKT_V2_CMPL_FLAGS_PKT_METADATA_PRESENT      UINT32_C(0x800)
4951 	/*
4952 	 * This value indicates what the inner packet determined for the
4953 	 * packet was.
4954 	 */
4955 	#define RX_PKT_V2_CMPL_FLAGS_ITYPE_MASK                UINT32_C(0xf000)
4956 	#define RX_PKT_V2_CMPL_FLAGS_ITYPE_SFT                 12
4957 	/*
4958 	 * Not Known:
4959 	 * Indicates that the packet type was not known.
4960 	 */
4961 	#define RX_PKT_V2_CMPL_FLAGS_ITYPE_NOT_KNOWN \
4962 		(UINT32_C(0x0) << 12)
4963 	/*
4964 	 * IP Packet:
4965 	 * Indicates that the packet was an IP packet, but further
4966 	 * classification was not possible.
4967 	 */
4968 	#define RX_PKT_V2_CMPL_FLAGS_ITYPE_IP \
4969 		(UINT32_C(0x1) << 12)
4970 	/*
4971 	 * TCP Packet:
4972 	 * Indicates that the packet was IP and TCP.
4973 	 * This indicates that the payload_offset field is valid.
4974 	 */
4975 	#define RX_PKT_V2_CMPL_FLAGS_ITYPE_TCP \
4976 		(UINT32_C(0x2) << 12)
4977 	/*
4978 	 * UDP Packet:
4979 	 * Indicates that the packet was IP and UDP.
4980 	 * This indicates that the payload_offset field is valid.
4981 	 */
4982 	#define RX_PKT_V2_CMPL_FLAGS_ITYPE_UDP \
4983 		(UINT32_C(0x3) << 12)
4984 	/*
4985 	 * FCoE Packet:
4986 	 * Indicates that the packet was recognized as a FCoE.
4987 	 * This also indicates that the payload_offset field is valid.
4988 	 */
4989 	#define RX_PKT_V2_CMPL_FLAGS_ITYPE_FCOE \
4990 		(UINT32_C(0x4) << 12)
4991 	/*
4992 	 * RoCE Packet:
4993 	 * Indicates that the packet was recognized as a RoCE.
4994 	 * This also indicates that the payload_offset field is valid.
4995 	 */
4996 	#define RX_PKT_V2_CMPL_FLAGS_ITYPE_ROCE \
4997 		(UINT32_C(0x5) << 12)
4998 	/*
4999 	 * ICMP Packet:
5000 	 * Indicates that the packet was recognized as ICMP.
5001 	 * This indicates that the payload_offset field is valid.
5002 	 */
5003 	#define RX_PKT_V2_CMPL_FLAGS_ITYPE_ICMP \
5004 		(UINT32_C(0x7) << 12)
5005 	/*
5006 	 * PTP packet wo/timestamp:
5007 	 * Indicates that the packet was recognized as a PTP
5008 	 * packet.
5009 	 */
5010 	#define RX_PKT_V2_CMPL_FLAGS_ITYPE_PTP_WO_TIMESTAMP \
5011 		(UINT32_C(0x8) << 12)
5012 	/*
5013 	 * PTP packet w/timestamp:
5014 	 * Indicates that the packet was recognized as a PTP
5015 	 * packet and that a timestamp was taken for the packet.
5016 	 */
5017 	#define RX_PKT_V2_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP \
5018 		(UINT32_C(0x9) << 12)
5019 	#define RX_PKT_V2_CMPL_FLAGS_ITYPE_LAST \
5020 		RX_PKT_V2_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP
5021 	/*
5022 	 * This is the length of the data for the packet stored in the
5023 	 * buffer(s) identified by the opaque value. This includes
5024 	 * the packet BD and any associated buffer BDs. This does not include
5025 	 * the length of any data places in aggregation BDs.
5026 	 */
5027 	uint16_t	len;
5028 	/*
5029 	 * This is a copy of the opaque field from the RX BD this completion
5030 	 * corresponds to.
5031 	 */
5032 	uint32_t	opaque;
5033 	uint8_t	agg_bufs_v1;
5034 	/*
5035 	 * This value is written by the NIC such that it will be different
5036 	 * for each pass through the completion queue. The even passes
5037 	 * will write 1. The odd passes will write 0.
5038 	 */
5039 	#define RX_PKT_V2_CMPL_V1           UINT32_C(0x1)
5040 	/*
5041 	 * This value is the number of aggregation buffers that follow this
5042 	 * entry in the completion ring that are a part of this packet.
5043 	 * If the value is zero, then the packet is completely contained
5044 	 * in the buffer space provided for the packet in the RX ring.
5045 	 */
5046 	#define RX_PKT_V2_CMPL_AGG_BUFS_MASK UINT32_C(0x3e)
5047 	#define RX_PKT_V2_CMPL_AGG_BUFS_SFT 1
5048 	/* unused1 is 2 b */
5049 	#define RX_PKT_V2_CMPL_UNUSED1_MASK UINT32_C(0xc0)
5050 	#define RX_PKT_V2_CMPL_UNUSED1_SFT  6
5051 	/*
5052 	 * This is the RSS hash type for the packet. The value is packed
5053 	 * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
5054 	 * The value of tuple_extrac_op provides the information about
5055 	 * what fields the hash was computed on.
5056 	 * Note that 4-tuples values listed below are applicable
5057 	 * for layer 4 protocols supported and enabled for RSS in the hardware,
5058 	 * HWRM firmware, and drivers. For example, if RSS hash is supported and
5059 	 * enabled for TCP traffic only, then the values of tuple_extract_op
5060 	 * corresponding to 4-tuples are only valid for TCP traffic.
5061 	 */
5062 	uint8_t	rss_hash_type;
5063 	/*
5064 	 * The RSS hash was computed over source IP address,
5065 	 * destination IP address, source port, and destination port of inner
5066 	 * IP and TCP or UDP headers. Note: For non-tunneled packets,
5067 	 * the packet headers are considered inner packet headers for the RSS
5068 	 * hash computation purpose.
5069 	 */
5070 	#define RX_PKT_V2_CMPL_RSS_HASH_TYPE_ENUM_0 UINT32_C(0x0)
5071 	/*
5072 	 * The RSS hash was computed over source IP address and destination
5073 	 * IP address of inner IP header. Note: For non-tunneled packets,
5074 	 * the packet headers are considered inner packet headers for the RSS
5075 	 * hash computation purpose.
5076 	 */
5077 	#define RX_PKT_V2_CMPL_RSS_HASH_TYPE_ENUM_1 UINT32_C(0x1)
5078 	/*
5079 	 * The RSS hash was computed over source IP address,
5080 	 * destination IP address, source port, and destination port of
5081 	 * IP and TCP or UDP headers of outer tunnel headers.
5082 	 * Note: For non-tunneled packets, this value is not applicable.
5083 	 */
5084 	#define RX_PKT_V2_CMPL_RSS_HASH_TYPE_ENUM_2 UINT32_C(0x2)
5085 	/*
5086 	 * The RSS hash was computed over source IP address and
5087 	 * destination IP address of IP header of outer tunnel headers.
5088 	 * Note: For non-tunneled packets, this value is not applicable.
5089 	 */
5090 	#define RX_PKT_V2_CMPL_RSS_HASH_TYPE_ENUM_3 UINT32_C(0x3)
5091 	#define RX_PKT_V2_CMPL_RSS_HASH_TYPE_LAST \
5092 		RX_PKT_V2_CMPL_RSS_HASH_TYPE_ENUM_3
5093 	uint16_t	metadata1_payload_offset;
5094 	/*
5095 	 * This is data from the CFA as indicated by the meta_format field.
5096 	 * If truncation placement is not used, this value indicates the offset
5097 	 * in bytes from the beginning of the packet where the inner payload
5098 	 * starts. This value is valid for TCP, UDP, FCoE, and RoCE packets. If
5099 	 * truncation placement is used, this value represents the placed
5100 	 * (truncated) length of the packet.
5101 	 */
5102 	#define RX_PKT_V2_CMPL_PAYLOAD_OFFSET_MASK        UINT32_C(0x1ff)
5103 	#define RX_PKT_V2_CMPL_PAYLOAD_OFFSET_SFT         0
5104 	/* This is data from the CFA as indicated by the meta_format field. */
5105 	#define RX_PKT_V2_CMPL_METADATA1_MASK             UINT32_C(0xf000)
5106 	#define RX_PKT_V2_CMPL_METADATA1_SFT              12
5107 	/* When meta_format != 0, this value is the VLAN TPID_SEL. */
5108 	#define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_MASK     UINT32_C(0x7000)
5109 	#define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_SFT      12
5110 	/* 0x88a8 */
5111 	#define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_TPID88A8 \
5112 		(UINT32_C(0x0) << 12)
5113 	/* 0x8100 */
5114 	#define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_TPID8100 \
5115 		(UINT32_C(0x1) << 12)
5116 	/* 0x9100 */
5117 	#define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_TPID9100 \
5118 		(UINT32_C(0x2) << 12)
5119 	/* 0x9200 */
5120 	#define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_TPID9200 \
5121 		(UINT32_C(0x3) << 12)
5122 	/* 0x9300 */
5123 	#define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_TPID9300 \
5124 		(UINT32_C(0x4) << 12)
5125 	/* Value programmed in CFA VLANTPID register. */
5126 	#define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_TPIDCFG \
5127 		(UINT32_C(0x5) << 12)
5128 	#define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_LAST \
5129 		RX_PKT_V2_CMPL_METADATA1_TPID_SEL_TPIDCFG
5130 	/* When meta_format != 0, this value is the VLAN valid. */
5131 	#define RX_PKT_V2_CMPL_METADATA1_VALID             UINT32_C(0x8000)
5132 	/*
5133 	 * This value is the RSS hash value calculated for the packet
5134 	 * based on the mode bits and key value in the VNIC. When vee_cmpl_mode
5135 	 * is set in VNIC context, this is the lower 32b of the host address
5136 	 * from the first BD used to place the packet.
5137 	 */
5138 	uint32_t	rss_hash;
5139 } __rte_packed;
5140 
5141 /* Last 16 bytes of RX Packet V2 Completion Record */
5142 /* rx_pkt_v2_cmpl_hi (size:128b/16B) */
5143 struct rx_pkt_v2_cmpl_hi {
5144 	uint32_t	flags2;
5145 	/*
5146 	 * When this bit is '0', the cs_ok field has the following definition:-
5147 	 * ip_cs_ok[2:0] = The number of header groups with a valid IP checksum
5148 	 * in the delivered packet, counted from the outer-most header group to
5149 	 * the inner-most header group, stopping at the first error. -
5150 	 * l4_cs_ok[5:3] = The number of header groups with a valid L4 checksum
5151 	 * in the delivered packet, counted from the outer-most header group to
5152 	 * the inner-most header group, stopping at the first error. When this
5153 	 * bit is '1', the cs_ok field has the following definition: -
5154 	 * hdr_cnt[2:0] = The number of header groups that were parsed by the
5155 	 * chip and passed in the delivered packet. - ip_cs_all_ok[3] =This bit
5156 	 * will be '1' if all the parsed header groups with an IP checksum are
5157 	 * valid. - l4_cs_all_ok[4] = This bit will be '1' if all the parsed
5158 	 * header groups with an L4 checksum are valid.
5159 	 */
5160 	#define RX_PKT_V2_CMPL_HI_FLAGS2_CS_ALL_OK_MODE \
5161 		UINT32_C(0x8)
5162 	/* This value indicates what format the metadata field is. */
5163 	#define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_MASK \
5164 		UINT32_C(0xf0)
5165 	#define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_SFT            4
5166 	/* There is no metadata information. Values are zero. */
5167 	#define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_NONE \
5168 		(UINT32_C(0x0) << 4)
5169 	/*
5170 	 * The {metadata1, metadata0} fields contain the vtag
5171 	 * information: - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0],
5172 	 * de, vid[11:0]} The metadata2 field contains the table scope
5173 	 * and action record pointer. - metadata2[25:0] contains the
5174 	 * action record pointer. - metadata2[31:26] contains the table
5175 	 * scope.
5176 	 */
5177 	#define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_ACT_REC_PTR \
5178 		(UINT32_C(0x1) << 4)
5179 	/*
5180 	 * The {metadata1, metadata0} fields contain the vtag
5181 	 * information:
5182 	 * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0], de, vid[11:0]}
5183 	 * The metadata2 field contains the Tunnel ID
5184 	 * value, justified to LSB.
5185 	 * - VXLAN = VNI[23:0] -> VXLAN Network ID
5186 	 * - Geneve (NGE) = VNI[23:0] a-> Virtual Network Identifier
5187 	 * - NVGRE = TNI[23:0] -> Tenant Network ID
5188 	 * - GRE = KEY[31:0] -> key field with bit mask. zero if K=0
5189 	 * - IPv4 = 0 (not populated)
5190 	 * - IPv6 = Flow Label[19:0]
5191 	 * - PPPoE = sessionID[15:0]
5192 	 * - MPLs = Outer label[19:0]
5193 	 * - UPAR = Selected[31:0] with bit mask
5194 	 */
5195 	#define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_TUNNEL_ID \
5196 		(UINT32_C(0x2) << 4)
5197 	/*
5198 	 * The {metadata1, metadata0} fields contain the vtag
5199 	 * information:
5200 	 * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0],de, vid[11:0]}
5201 	 * The metadata2 field contains the 32b metadata from the prepended
5202 	 * header (chdr_data).
5203 	 */
5204 	#define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_CHDR_DATA \
5205 		(UINT32_C(0x3) << 4)
5206 	/*
5207 	 * The {metadata1, metadata0} fields contain the vtag
5208 	 * information:
5209 	 * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0], de, vid[11:0]}
5210 	 * The metadata2 field contains the outer_l3_offset,
5211 	 * inner_l2_offset, inner_l3_offset, and inner_l4_size.
5212 	 * - metadata2[8:0] contains the outer_l3_offset.
5213 	 * - metadata2[17:9] contains the inner_l2_offset.
5214 	 * - metadata2[26:18] contains the inner_l3_offset.
5215 	 * - metadata2[31:27] contains the inner_l4_size.
5216 	 */
5217 	#define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_HDR_OFFSET \
5218 		(UINT32_C(0x4) << 4)
5219 	#define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_LAST \
5220 		RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_HDR_OFFSET
5221 	/*
5222 	 * This field indicates the IP type for the inner-most IP header.
5223 	 * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
5224 	 * This value is only valid if itype indicates a packet
5225 	 * with an IP header.
5226 	 */
5227 	#define RX_PKT_V2_CMPL_HI_FLAGS2_IP_TYPE \
5228 		UINT32_C(0x100)
5229 	/*
5230 	 * This indicates that the complete 1's complement checksum was
5231 	 * calculated for the packet.
5232 	 */
5233 	#define RX_PKT_V2_CMPL_HI_FLAGS2_COMPLETE_CHECKSUM_CALC \
5234 		UINT32_C(0x200)
5235 	/*
5236 	 * This field indicates the status of IP and L4 CS calculations done
5237 	 * by the chip. The format of this field is indicated by the
5238 	 * cs_all_ok_mode bit.
5239 	 */
5240 	#define RX_PKT_V2_CMPL_HI_FLAGS2_CS_OK_MASK \
5241 		UINT32_C(0xfc00)
5242 	#define RX_PKT_V2_CMPL_HI_FLAGS2_CS_OK_SFT                  10
5243 	/*
5244 	 * This value is the complete 1's complement checksum calculated from
5245 	 * the start of the outer L3 header to the end of the packet (not
5246 	 * including the ethernet crc). It is valid when the
5247 	 * 'complete_checksum_calc' flag is set.
5248 	 */
5249 	#define RX_PKT_V2_CMPL_HI_FLAGS2_COMPLETE_CHECKSUM_MASK \
5250 		UINT32_C(0xffff0000)
5251 	#define RX_PKT_V2_CMPL_HI_FLAGS2_COMPLETE_CHECKSUM_SFT      16
5252 	/*
5253 	 * This is data from the CFA block as indicated by the meta_format
5254 	 * field.
5255 	 * - meta_format 0 - none - metadata2 = 0 - not valid/not stripped
5256 	 * - meta_format 1 - act_rec_ptr - metadata2 = {table_scope[5:0],
5257 	 *   act_rec_ptr[25:0]}
5258 	 * - meta_format 2 - tunnel_id - metadata2 = tunnel_id[31:0]
5259 	 * - meta_format 3 - chdr_data - metadata2 = updated_chdr_data[31:0]
5260 	 * - meta_format 4 - hdr_offsets - metadata2 = hdr_offsets[31:0]
5261 	 * When vee_cmpl_mode is set in VNIC context, this is the upper 32b
5262 	 * of the host address from the first BD used to place the packet.
5263 	 */
5264 	uint32_t	metadata2;
5265 	uint16_t	errors_v2;
5266 	/*
5267 	 * This value is written by the NIC such that it will be different
5268 	 * for each pass through the completion queue. The even passes
5269 	 * will write 1. The odd passes will write 0.
5270 	 */
5271 	#define RX_PKT_V2_CMPL_HI_V2 \
5272 		UINT32_C(0x1)
5273 	#define RX_PKT_V2_CMPL_HI_ERRORS_MASK \
5274 		UINT32_C(0xfffe)
5275 	#define RX_PKT_V2_CMPL_HI_ERRORS_SFT                               1
5276 	/*
5277 	 * This error indicates that there was some sort of problem with
5278 	 * the BDs for the packet that was found after part of the
5279 	 * packet was already placed. The packet should be treated as
5280 	 * invalid.
5281 	 */
5282 	#define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_MASK \
5283 		UINT32_C(0xe)
5284 	#define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_SFT                   1
5285 	/* No buffer error */
5286 	#define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_NO_BUFFER \
5287 		(UINT32_C(0x0) << 1)
5288 	/*
5289 	 * Did Not Fit: Packet did not fit into packet buffer provided.
5290 	 * For regular placement, this means the packet did not fit in
5291 	 * the buffer provided. For HDS and jumbo placement, this means
5292 	 * that the packet could not be placed into 8 physical buffers
5293 	 * (if fixed-size buffers are used), or that the packet could
5294 	 * not be placed in the number of physical buffers configured
5295 	 * for the VNIC (if variable-size buffers are used)
5296 	 */
5297 	#define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_DID_NOT_FIT \
5298 		(UINT32_C(0x1) << 1)
5299 	/*
5300 	 * Not On Chip: All BDs needed for the packet were not on-chip
5301 	 * when the packet arrived. For regular placement, this error is
5302 	 * not valid. For HDS and jumbo placement, this means that not
5303 	 * enough agg BDs were posted to place the packet.
5304 	 */
5305 	#define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
5306 		(UINT32_C(0x2) << 1)
5307 	/*
5308 	 * Bad Format:
5309 	 * BDs were not formatted correctly.
5310 	 */
5311 	#define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_BAD_FORMAT \
5312 		(UINT32_C(0x3) << 1)
5313 	/*
5314 	 * Flush:
5315 	 * There was a bad_format error on the previous operation
5316 	 */
5317 	#define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_FLUSH \
5318 		(UINT32_C(0x5) << 1)
5319 	#define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_LAST \
5320 		RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_FLUSH
5321 	/*
5322 	 * This indicates that there was an error in the outer tunnel
5323 	 * portion of the packet when this field is non-zero.
5324 	 */
5325 	#define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_MASK \
5326 		UINT32_C(0x70)
5327 	#define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_SFT                   4
5328 	/*
5329 	 * No additional error occurred on the outer tunnel portion
5330 	 * of the packet or the packet does not have a outer tunnel.
5331 	 */
5332 	#define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_NO_ERROR \
5333 		(UINT32_C(0x0) << 4)
5334 	/*
5335 	 * Indicates that IP header version does not match expectation
5336 	 * from L2 Ethertype for IPv4 and IPv6 in the outer tunnel header.
5337 	 */
5338 	#define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_L3_BAD_VERSION \
5339 		(UINT32_C(0x1) << 4)
5340 	/*
5341 	 * Indicates that header length is out of range in the outer
5342 	 * tunnel header. Valid for IPv4.
5343 	 */
5344 	#define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_L3_BAD_HDR_LEN \
5345 		(UINT32_C(0x2) << 4)
5346 	/*
5347 	 * Indicates that physical packet is shorter than that claimed
5348 	 * by the outer tunnel l3 header length. Valid for IPv4, or
5349 	 * IPv6 outer tunnel packets.
5350 	 */
5351 	#define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_IP_TOTAL_ERROR \
5352 		(UINT32_C(0x3) << 4)
5353 	/*
5354 	 * Indicates that the physical packet is shorter than that
5355 	 * claimed by the outer tunnel UDP header length for a outer
5356 	 * tunnel UDP packet that is not fragmented.
5357 	 */
5358 	#define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_UDP_TOTAL_ERROR \
5359 		(UINT32_C(0x4) << 4)
5360 	/*
5361 	 * Indicates that the IPv4 TTL or IPv6 hop limit check have
5362 	 * failed (e.g. TTL = 0) in the outer tunnel header. Valid for
5363 	 * IPv4, and IPv6.
5364 	 */
5365 	#define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_L3_BAD_TTL \
5366 		(UINT32_C(0x5) << 4)
5367 	/*
5368 	 * Indicates that the IP checksum failed its check in the outer
5369 	 * tunnel header.
5370 	 */
5371 	#define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_IP_CS_ERROR \
5372 		(UINT32_C(0x6) << 4)
5373 	/*
5374 	 * Indicates that the L4 checksum failed its check in the outer
5375 	 * tunnel header.
5376 	 */
5377 	#define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_L4_CS_ERROR \
5378 		(UINT32_C(0x7) << 4)
5379 	#define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_LAST \
5380 		RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_L4_CS_ERROR
5381 	/*
5382 	 * This indicates that there was a CRC error on either an FCoE
5383 	 * or RoCE packet. The itype indicates the packet type.
5384 	 */
5385 	#define RX_PKT_V2_CMPL_HI_ERRORS_CRC_ERROR \
5386 		UINT32_C(0x100)
5387 	/*
5388 	 * This indicates that there was an error in the tunnel portion
5389 	 * of the packet when this field is non-zero.
5390 	 */
5391 	#define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_MASK \
5392 		UINT32_C(0xe00)
5393 	#define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_SFT                    9
5394 	/*
5395 	 * No additional error occurred on the tunnel portion
5396 	 * of the packet or the packet does not have a tunnel.
5397 	 */
5398 	#define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_NO_ERROR \
5399 		(UINT32_C(0x0) << 9)
5400 	/*
5401 	 * Indicates that IP header version does not match expectation
5402 	 * from L2 Ethertype for IPv4 and IPv6 in the tunnel header.
5403 	 */
5404 	#define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_L3_BAD_VERSION \
5405 		(UINT32_C(0x1) << 9)
5406 	/*
5407 	 * Indicates that header length is out of range in the tunnel
5408 	 * header. Valid for IPv4.
5409 	 */
5410 	#define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_L3_BAD_HDR_LEN \
5411 		(UINT32_C(0x2) << 9)
5412 	/*
5413 	 * Indicates that physical packet is shorter than that claimed
5414 	 * by the tunnel l3 header length. Valid for IPv4, or IPv6 tunnel
5415 	 * packet packets.
5416 	 */
5417 	#define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_IP_TOTAL_ERROR \
5418 		(UINT32_C(0x3) << 9)
5419 	/*
5420 	 * Indicates that the physical packet is shorter than that claimed
5421 	 * by the tunnel UDP header length for a tunnel UDP packet that is
5422 	 * not fragmented.
5423 	 */
5424 	#define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_UDP_TOTAL_ERROR \
5425 		(UINT32_C(0x4) << 9)
5426 	/*
5427 	 * Indicates that the IPv4 TTL or IPv6 hop limit check have failed
5428 	 * (e.g. TTL = 0) in the tunnel header. Valid for IPv4, and IPv6.
5429 	 */
5430 	#define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL \
5431 		(UINT32_C(0x5) << 9)
5432 	/*
5433 	 * Indicates that the IP checksum failed its check in the tunnel
5434 	 * header.
5435 	 */
5436 	#define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_IP_CS_ERROR \
5437 		(UINT32_C(0x6) << 9)
5438 	/*
5439 	 * Indicates that the L4 checksum failed its check in the tunnel
5440 	 * header.
5441 	 */
5442 	#define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_L4_CS_ERROR \
5443 		(UINT32_C(0x7) << 9)
5444 	#define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_LAST \
5445 		RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_L4_CS_ERROR
5446 	/*
5447 	 * This indicates that there was an error in the inner
5448 	 * portion of the packet when this
5449 	 * field is non-zero.
5450 	 */
5451 	#define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_MASK \
5452 		UINT32_C(0xf000)
5453 	#define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_SFT                      12
5454 	/*
5455 	 * No additional error occurred on the tunnel portion
5456 	 * or the packet of the packet does not have a tunnel.
5457 	 */
5458 	#define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_NO_ERROR \
5459 		(UINT32_C(0x0) << 12)
5460 	/*
5461 	 * Indicates that IP header version does not match
5462 	 * expectation from L2 Ethertype for IPv4 and IPv6 or that
5463 	 * option other than VFT was parsed on
5464 	 * FCoE packet.
5465 	 */
5466 	#define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L3_BAD_VERSION \
5467 		(UINT32_C(0x1) << 12)
5468 	/*
5469 	 * indicates that header length is out of range. Valid for
5470 	 * IPv4 and RoCE
5471 	 */
5472 	#define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L3_BAD_HDR_LEN \
5473 		(UINT32_C(0x2) << 12)
5474 	/*
5475 	 * indicates that the IPv4 TTL or IPv6 hop limit check
5476 	 * have failed (e.g. TTL = 0). Valid for IPv4, and IPv6
5477 	 */
5478 	#define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L3_BAD_TTL \
5479 		(UINT32_C(0x3) << 12)
5480 	/*
5481 	 * Indicates that physical packet is shorter than that
5482 	 * claimed by the l3 header length. Valid for IPv4,
5483 	 * IPv6 packet or RoCE packets.
5484 	 */
5485 	#define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_IP_TOTAL_ERROR \
5486 		(UINT32_C(0x4) << 12)
5487 	/*
5488 	 * Indicates that the physical packet is shorter than that
5489 	 * claimed by the UDP header length for a UDP packet that is
5490 	 * not fragmented.
5491 	 */
5492 	#define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_UDP_TOTAL_ERROR \
5493 		(UINT32_C(0x5) << 12)
5494 	/*
5495 	 * Indicates that TCP header length > IP payload. Valid for
5496 	 * TCP packets only.
5497 	 */
5498 	#define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN \
5499 		(UINT32_C(0x6) << 12)
5500 	/* Indicates that TCP header length < 5. Valid for TCP. */
5501 	#define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN_TOO_SMALL \
5502 		(UINT32_C(0x7) << 12)
5503 	/*
5504 	 * Indicates that TCP option headers result in a TCP header
5505 	 * size that does not match data offset in TCP header. Valid
5506 	 * for TCP.
5507 	 */
5508 	#define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN \
5509 		(UINT32_C(0x8) << 12)
5510 	/*
5511 	 * Indicates that the IP checksum failed its check in the
5512 	 * inner header.
5513 	 */
5514 	#define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_IP_CS_ERROR \
5515 		(UINT32_C(0x9) << 12)
5516 	/*
5517 	 * Indicates that the L4 checksum failed its check in the
5518 	 * inner header.
5519 	 */
5520 	#define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L4_CS_ERROR \
5521 		(UINT32_C(0xa) << 12)
5522 	#define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_LAST \
5523 		RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L4_CS_ERROR
5524 	/*
5525 	 * This is data from the CFA block as indicated by the meta_format
5526 	 * field.
5527 	 */
5528 	uint16_t	metadata0;
5529 	/* When meta_format=1, this value is the VLAN VID. */
5530 	#define RX_PKT_V2_CMPL_HI_METADATA0_VID_MASK UINT32_C(0xfff)
5531 	#define RX_PKT_V2_CMPL_HI_METADATA0_VID_SFT 0
5532 	/* When meta_format=1, this value is the VLAN DE. */
5533 	#define RX_PKT_V2_CMPL_HI_METADATA0_DE      UINT32_C(0x1000)
5534 	/* When meta_format=1, this value is the VLAN PRI. */
5535 	#define RX_PKT_V2_CMPL_HI_METADATA0_PRI_MASK UINT32_C(0xe000)
5536 	#define RX_PKT_V2_CMPL_HI_METADATA0_PRI_SFT 13
5537 	/*
5538 	 * The timestamp field contains the 32b timestamp for the packet from
5539 	 * the MAC.
5540 	 */
5541 	uint32_t	timestamp;
5542 } __rte_packed;
5543 
5544 /* rx_pkt_v3_cmpl (size:128b/16B) */
5545 struct rx_pkt_v3_cmpl {
5546 	uint16_t	flags_type;
5547 	/*
5548 	 * This field indicates the exact type of the completion.
5549 	 * By convention, the LSB identifies the length of the
5550 	 * record in 16B units. Even values indicate 16B
5551 	 * records. Odd values indicate 32B
5552 	 * records.
5553 	 */
5554 	#define RX_PKT_V3_CMPL_TYPE_MASK                      UINT32_C(0x3f)
5555 	#define RX_PKT_V3_CMPL_TYPE_SFT                       0
5556 	/*
5557 	 * RX L2 V3 completion:
5558 	 * Completion of and L2 RX packet. Length = 32B
5559 	 * This is the new version of the RX_L2 completion used in Thor2
5560 	 * and later chips.
5561 	 */
5562 	#define RX_PKT_V3_CMPL_TYPE_RX_L2_V3                    UINT32_C(0x17)
5563 	#define RX_PKT_V3_CMPL_TYPE_LAST \
5564 		RX_PKT_V3_CMPL_TYPE_RX_L2_V3
5565 	#define RX_PKT_V3_CMPL_FLAGS_MASK                     UINT32_C(0xffc0)
5566 	#define RX_PKT_V3_CMPL_FLAGS_SFT                      6
5567 	/*
5568 	 * When this bit is '1', it indicates a packet that has an
5569 	 * error of some type. Type of error is indicated in
5570 	 * error_flags.
5571 	 */
5572 	#define RX_PKT_V3_CMPL_FLAGS_ERROR                     UINT32_C(0x40)
5573 	/* This field indicates how the packet was placed in the buffer. */
5574 	#define RX_PKT_V3_CMPL_FLAGS_PLACEMENT_MASK            UINT32_C(0x380)
5575 	#define RX_PKT_V3_CMPL_FLAGS_PLACEMENT_SFT             7
5576 	/*
5577 	 * Normal:
5578 	 * Packet was placed using normal algorithm.
5579 	 */
5580 	#define RX_PKT_V3_CMPL_FLAGS_PLACEMENT_NORMAL \
5581 		(UINT32_C(0x0) << 7)
5582 	/*
5583 	 * Jumbo:
5584 	 * Packet was placed using jumbo algorithm.
5585 	 */
5586 	#define RX_PKT_V3_CMPL_FLAGS_PLACEMENT_JUMBO \
5587 		(UINT32_C(0x1) << 7)
5588 	/*
5589 	 * Header/Data Separation:
5590 	 * Packet was placed using Header/Data separation algorithm.
5591 	 * The separation location is indicated by the itype field.
5592 	 */
5593 	#define RX_PKT_V3_CMPL_FLAGS_PLACEMENT_HDS \
5594 		(UINT32_C(0x2) << 7)
5595 	/*
5596 	 * Truncation:
5597 	 * Packet was placed using truncation algorithm. The
5598 	 * placed (truncated) length is indicated in the payload_offset
5599 	 * field. The original length is indicated in the len field.
5600 	 */
5601 	#define RX_PKT_V3_CMPL_FLAGS_PLACEMENT_TRUNCATION \
5602 		(UINT32_C(0x3) << 7)
5603 	#define RX_PKT_V3_CMPL_FLAGS_PLACEMENT_LAST \
5604 		RX_PKT_V3_CMPL_FLAGS_PLACEMENT_TRUNCATION
5605 	/* This bit is '1' if the RSS field in this completion is valid. */
5606 	#define RX_PKT_V3_CMPL_FLAGS_RSS_VALID                 UINT32_C(0x400)
5607 	/*
5608 	 * This bit is '1' if metadata has been added to the end of the
5609 	 * packet in host memory. Metadata starts at the first 32B boundary
5610 	 * after the end of the packet for regular and jumbo placement.
5611 	 * It starts at the first 32B boundary after the end of the header
5612 	 * for HDS placement. The length of the metadata is indicated in the
5613 	 * metadata itself.
5614 	 */
5615 	#define RX_PKT_V3_CMPL_FLAGS_PKT_METADATA_PRESENT      UINT32_C(0x800)
5616 	/*
5617 	 * This value indicates what the inner packet determined for the
5618 	 * packet was.
5619 	 */
5620 	#define RX_PKT_V3_CMPL_FLAGS_ITYPE_MASK                UINT32_C(0xf000)
5621 	#define RX_PKT_V3_CMPL_FLAGS_ITYPE_SFT                 12
5622 	/*
5623 	 * Not Known:
5624 	 * Indicates that the packet type was not known.
5625 	 */
5626 	#define RX_PKT_V3_CMPL_FLAGS_ITYPE_NOT_KNOWN \
5627 		(UINT32_C(0x0) << 12)
5628 	/*
5629 	 * IP Packet:
5630 	 * Indicates that the packet was an IP packet, but further
5631 	 * classification was not possible.
5632 	 */
5633 	#define RX_PKT_V3_CMPL_FLAGS_ITYPE_IP \
5634 		(UINT32_C(0x1) << 12)
5635 	/*
5636 	 * TCP Packet:
5637 	 * Indicates that the packet was IP and TCP.
5638 	 * This indicates that the payload_offset field is valid.
5639 	 */
5640 	#define RX_PKT_V3_CMPL_FLAGS_ITYPE_TCP \
5641 		(UINT32_C(0x2) << 12)
5642 	/*
5643 	 * UDP Packet:
5644 	 * Indicates that the packet was IP and UDP.
5645 	 * This indicates that the payload_offset field is valid.
5646 	 */
5647 	#define RX_PKT_V3_CMPL_FLAGS_ITYPE_UDP \
5648 		(UINT32_C(0x3) << 12)
5649 	/*
5650 	 * FCoE Packet:
5651 	 * Indicates that the packet was recognized as a FCoE.
5652 	 * This also indicates that the payload_offset field is valid.
5653 	 */
5654 	#define RX_PKT_V3_CMPL_FLAGS_ITYPE_FCOE \
5655 		(UINT32_C(0x4) << 12)
5656 	/*
5657 	 * RoCE Packet:
5658 	 * Indicates that the packet was recognized as a RoCE.
5659 	 * This also indicates that the payload_offset field is valid.
5660 	 */
5661 	#define RX_PKT_V3_CMPL_FLAGS_ITYPE_ROCE \
5662 		(UINT32_C(0x5) << 12)
5663 	/*
5664 	 * ICMP Packet:
5665 	 * Indicates that the packet was recognized as ICMP.
5666 	 * This indicates that the payload_offset field is valid.
5667 	 */
5668 	#define RX_PKT_V3_CMPL_FLAGS_ITYPE_ICMP \
5669 		(UINT32_C(0x7) << 12)
5670 	/*
5671 	 * PTP packet wo/timestamp:
5672 	 * Indicates that the packet was recognized as a PTP
5673 	 * packet.
5674 	 */
5675 	#define RX_PKT_V3_CMPL_FLAGS_ITYPE_PTP_WO_TIMESTAMP \
5676 		(UINT32_C(0x8) << 12)
5677 	/*
5678 	 * PTP packet w/timestamp:
5679 	 * Indicates that the packet was recognized as a PTP
5680 	 * packet and that a timestamp was taken for the packet.
5681 	 * The 4b sub-nanosecond portion of the timestamp is in
5682 	 * the payload_offset field.
5683 	 */
5684 	#define RX_PKT_V3_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP \
5685 		(UINT32_C(0x9) << 12)
5686 	#define RX_PKT_V3_CMPL_FLAGS_ITYPE_LAST \
5687 		RX_PKT_V3_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP
5688 	/*
5689 	 * This is the length of the data for the packet stored in the
5690 	 * buffer(s) identified by the opaque value. This includes
5691 	 * the packet BD and any associated buffer BDs. This does not include
5692 	 * the length of any data places in aggregation BDs.
5693 	 */
5694 	uint16_t	len;
5695 	/*
5696 	 * This is a copy of the opaque field from the RX BD this completion
5697 	 * corresponds to.
5698 	 */
5699 	uint32_t	opaque;
5700 	uint16_t	rss_hash_type_agg_bufs_v1;
5701 	/*
5702 	 * This value is written by the NIC such that it will be different
5703 	 * for each pass through the completion queue. The even passes
5704 	 * will write 1. The odd passes will write 0.
5705 	 */
5706 	#define RX_PKT_V3_CMPL_V1                   UINT32_C(0x1)
5707 	/*
5708 	 * This value is the number of aggregation buffers that follow this
5709 	 * entry in the completion ring that are a part of this packet.
5710 	 * If the value is zero, then the packet is completely contained
5711 	 * in the buffer space provided for the packet in the RX ring.
5712 	 */
5713 	#define RX_PKT_V3_CMPL_AGG_BUFS_MASK        UINT32_C(0x3e)
5714 	#define RX_PKT_V3_CMPL_AGG_BUFS_SFT         1
5715 	/* unused1 is 1 b */
5716 	#define RX_PKT_V3_CMPL_UNUSED1              UINT32_C(0x40)
5717 	/*
5718 	 * This is the RSS hash type for the packet. The value is packed
5719 	 * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
5720 	 * The value of tuple_extrac_op provides the information about
5721 	 * what fields the hash was computed on.
5722 	 * Note that 4-tuples values listed below are applicable
5723 	 * for layer 4 protocols supported and enabled for RSS in the
5724 	 * hardware, HWRM firmware, and drivers. For example, if RSS hash
5725 	 * is supported and enabled for TCP traffic only, then the values of
5726 	 * tuple_extract_op corresponding to 4-tuples are only valid for
5727 	 * TCP traffic.
5728 	 */
5729 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_MASK   UINT32_C(0xff80)
5730 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_SFT    7
5731 	/*
5732 	 * The RSS hash was computed over source IP address,
5733 	 * destination IP address, source port, and destination port of
5734 	 * inner IP and TCP or UDP headers.
5735 	 */
5736 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_ENUM_0   (UINT32_C(0x0) << 7)
5737 	/*
5738 	 * The RSS hash was computed over source IP address and
5739 	 * destination IP address of inner IP header.
5740 	 */
5741 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_ENUM_1   (UINT32_C(0x1) << 7)
5742 	/*
5743 	 * The RSS hash was computed over source IP address,
5744 	 * destination IP address, source port, and destination port of
5745 	 * IP and TCP or UDP headers of outer tunnel headers.
5746 	 * Note: For non-tunneled packets, this value is not applicable.
5747 	 */
5748 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_ENUM_2   (UINT32_C(0x2) << 7)
5749 	/*
5750 	 * The RSS hash was computed over source IP address and
5751 	 * destination IP address of IP header of outer tunnel headers.
5752 	 * Note: For non-tunneled packets, this value is not applicable.
5753 	 */
5754 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_ENUM_3   (UINT32_C(0x3) << 7)
5755 	/*
5756 	 * The RSS hash was computed over source IP address of the inner
5757 	 * IP header.
5758 	 */
5759 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_ENUM_4   (UINT32_C(0x4) << 7)
5760 	/*
5761 	 * The RSS hash was computed over destination IP address of the
5762 	 * inner IP header.
5763 	 */
5764 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_ENUM_5   (UINT32_C(0x5) << 7)
5765 	/*
5766 	 * The RSS hash was computed over source IP address of the outer
5767 	 * IP header.
5768 	 * Note: For non-tunneled packets, this value is not applicable.
5769 	 */
5770 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_ENUM_6   (UINT32_C(0x6) << 7)
5771 	/*
5772 	 * The RSS hash was computed over destination IP address of the
5773 	 * outer IP header.
5774 	 * Note: For non-tunneled packets, this value is not applicable.
5775 	 */
5776 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_ENUM_7   (UINT32_C(0x7) << 7)
5777 	/*
5778 	 * The RSS hash was computed over source IP address, destination
5779 	 * IP address, and flow label of the inner IP header.
5780 	 * Note: For packets without an inner IPv6 header, this value is not
5781 	 * this value is not applicable.
5782 	 */
5783 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_ENUM_8   (UINT32_C(0x8) << 7)
5784 	/*
5785 	 * The RSS hash was computed over the flow label of the inner
5786 	 * IP header.
5787 	 * Note: For packets without an inner IPv6 header, this value
5788 	 * is not applicable.
5789 	 */
5790 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_ENUM_9   (UINT32_C(0x9) << 7)
5791 	/*
5792 	 * The RSS hash was computed over source IP address, destination
5793 	 * IP address, and flow label of the outer IP header.
5794 	 * Note: For packets without an outer IPv6 header, this value is not
5795 	 * applicable.
5796 	 */
5797 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_ENUM_10  (UINT32_C(0xa) << 7)
5798 	/*
5799 	 * The RSS hash was computed over the flow label of the outer
5800 	 * IP header.
5801 	 * Note: For packets without an outer IPv6 header, this value
5802 	 * is not applicable.
5803 	 */
5804 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_ENUM_11  (UINT32_C(0xb) << 7)
5805 	#define RX_PKT_V3_CMPL_RSS_HASH_TYPE_LAST \
5806 		RX_PKT_V3_CMPL_RSS_HASH_TYPE_ENUM_11
5807 	uint16_t	metadata1_payload_offset;
5808 	/*
5809 	 * If truncation placement is not used, this value indicates the offset
5810 	 * in bytes from the beginning of the packet where the inner payload
5811 	 * starts. This value is valid for TCP, UDP, FCoE, and RoCE packets.
5812 	 * For PTP packets with timestamp (as indicated by the flags_itype
5813 	 * field), this field contains the 4b sub-nanosecond portion of the
5814 	 * timestamp.
5815 	 *
5816 	 * If truncation placement is used, this value represents the placed
5817 	 * (truncated) length of the packet.
5818 	 */
5819 	#define RX_PKT_V3_CMPL_PAYLOAD_OFFSET_MASK        UINT32_C(0x1ff)
5820 	#define RX_PKT_V3_CMPL_PAYLOAD_OFFSET_SFT         0
5821 	/* This is data from the CFA as indicated by the meta_format field. */
5822 	#define RX_PKT_V3_CMPL_METADATA1_MASK             UINT32_C(0xf000)
5823 	#define RX_PKT_V3_CMPL_METADATA1_SFT              12
5824 	/* When meta_format != 0, this value is the VLAN TPID_SEL. */
5825 	#define RX_PKT_V3_CMPL_METADATA1_TPID_SEL_MASK     UINT32_C(0x7000)
5826 	#define RX_PKT_V3_CMPL_METADATA1_TPID_SEL_SFT      12
5827 	/* 0x88a8 */
5828 	#define RX_PKT_V3_CMPL_METADATA1_TPID_SEL_TPID88A8 \
5829 		(UINT32_C(0x0) << 12)
5830 	/* 0x8100 */
5831 	#define RX_PKT_V3_CMPL_METADATA1_TPID_SEL_TPID8100 \
5832 		(UINT32_C(0x1) << 12)
5833 	/* 0x9100 */
5834 	#define RX_PKT_V3_CMPL_METADATA1_TPID_SEL_TPID9100 \
5835 		(UINT32_C(0x2) << 12)
5836 	/* 0x9200 */
5837 	#define RX_PKT_V3_CMPL_METADATA1_TPID_SEL_TPID9200 \
5838 		(UINT32_C(0x3) << 12)
5839 	/* 0x9300 */
5840 	#define RX_PKT_V3_CMPL_METADATA1_TPID_SEL_TPID9300 \
5841 		(UINT32_C(0x4) << 12)
5842 	/* Value programmed in CFA VLANTPID register. */
5843 	#define RX_PKT_V3_CMPL_METADATA1_TPID_SEL_TPIDCFG \
5844 		(UINT32_C(0x5) << 12)
5845 	#define RX_PKT_V3_CMPL_METADATA1_TPID_SEL_LAST \
5846 		RX_PKT_V3_CMPL_METADATA1_TPID_SEL_TPIDCFG
5847 	/* When meta_format != 0, this value is the VLAN valid. */
5848 	#define RX_PKT_V3_CMPL_METADATA1_VALID             UINT32_C(0x8000)
5849 	/*
5850 	 * This value is the RSS hash value calculated for the packet
5851 	 * based on the mode bits and key value in the VNIC. When hairpin_en
5852 	 * is set in VNIC context, this is the lower 32b of the host address
5853 	 * from the first BD used to place the packet.
5854 	 */
5855 	uint32_t	rss_hash;
5856 } __rte_packed;
5857 
5858 /* Last 16 bytes of RX Packet V3 Completion Record */
5859 /* rx_pkt_v3_cmpl_hi (size:128b/16B) */
5860 struct rx_pkt_v3_cmpl_hi {
5861 	uint32_t	flags2;
5862 	/*
5863 	 * This indicates that the ip checksum was calculated for the inner
5864 	 * packet and that the ip_cs_error field indicates if there was an
5865 	 * error.
5866 	 */
5867 	#define RX_PKT_V3_CMPL_HI_FLAGS2_IP_CS_CALC \
5868 		UINT32_C(0x1)
5869 	/*
5870 	 * This indicates that the TCP, UDP or ICMP checksum was calculated
5871 	 * for the inner packet and that the l4_cs_error field indicates if
5872 	 * there was an error.
5873 	 */
5874 	#define RX_PKT_V3_CMPL_HI_FLAGS2_L4_CS_CALC \
5875 		UINT32_C(0x2)
5876 	/*
5877 	 * This indicates that the ip checksum was calculated for the tunnel
5878 	 * header and that the t_ip_cs_error field indicates if there was an
5879 	 * error.
5880 	 */
5881 	#define RX_PKT_V3_CMPL_HI_FLAGS2_T_IP_CS_CALC \
5882 		UINT32_C(0x4)
5883 	/*
5884 	 * This indicates that the UDP checksum was calculated for the tunnel
5885 	 * packet and that the t_l4_cs_error field indicates if there was an
5886 	 * error.
5887 	 */
5888 	#define RX_PKT_V3_CMPL_HI_FLAGS2_T_L4_CS_CALC \
5889 		UINT32_C(0x8)
5890 	/* This value indicates what format the metadata field is. */
5891 	#define RX_PKT_V3_CMPL_HI_FLAGS2_META_FORMAT_MASK \
5892 		UINT32_C(0xf0)
5893 	#define RX_PKT_V3_CMPL_HI_FLAGS2_META_FORMAT_SFT            4
5894 	/* There is no metadata information. Values are zero. */
5895 	#define RX_PKT_V3_CMPL_HI_FLAGS2_META_FORMAT_NONE \
5896 		(UINT32_C(0x0) << 4)
5897 	/*
5898 	 * The {metadata1, metadata0} fields contain the vtag
5899 	 * information: - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0],
5900 	 * de, vid[11:0]} The metadata2 field contains the table scope
5901 	 * and action record pointer. - metadata2[25:0] contains the
5902 	 * action record pointer. - metadata2[31:26] contains the table
5903 	 * scope.
5904 	 */
5905 	#define RX_PKT_V3_CMPL_HI_FLAGS2_META_FORMAT_ACT_REC_PTR \
5906 		(UINT32_C(0x1) << 4)
5907 	/*
5908 	 * The {metadata1, metadata0} fields contain the vtag
5909 	 * information:
5910 	 * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0], de, vid[11:0]}
5911 	 * The metadata2 field contains the Tunnel ID
5912 	 * value, justified to LSB.
5913 	 * - VXLAN = VNI[23:0] -> VXLAN Network ID
5914 	 * - Geneve (NGE) = VNI[23:0] a-> Virtual Network Identifier
5915 	 * - NVGRE = TNI[23:0] -> Tenant Network ID
5916 	 * - GRE = KEY[31:0] -> key field with bit mask. zero if K=0
5917 	 * - IPv4 = 0 (not populated)
5918 	 * - IPv6 = Flow Label[19:0]
5919 	 * - PPPoE = sessionID[15:0]
5920 	 * - MPLs = Outer label[19:0]
5921 	 * - UPAR = Selected[31:0] with bit mask
5922 	 */
5923 	#define RX_PKT_V3_CMPL_HI_FLAGS2_META_FORMAT_TUNNEL_ID \
5924 		(UINT32_C(0x2) << 4)
5925 	/*
5926 	 * The {metadata1, metadata0} fields contain the vtag
5927 	 * information:
5928 	 * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0],de, vid[11:0]}
5929 	 * The metadata2 field contains the 32b metadata from the prepended
5930 	 * header (chdr_data).
5931 	 */
5932 	#define RX_PKT_V3_CMPL_HI_FLAGS2_META_FORMAT_CHDR_DATA \
5933 		(UINT32_C(0x3) << 4)
5934 	/*
5935 	 * The {metadata1, metadata0} fields contain the vtag
5936 	 * information:
5937 	 * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0], de, vid[11:0]}
5938 	 * The metadata2 field contains the outer_l3_offset,
5939 	 * inner_l2_offset, inner_l3_offset, and inner_l4_size.
5940 	 * - metadata2[8:0] contains the outer_l3_offset.
5941 	 * - metadata2[17:9] contains the inner_l2_offset.
5942 	 * - metadata2[26:18] contains the inner_l3_offset.
5943 	 * - metadata2[31:27] contains the inner_l4_size.
5944 	 */
5945 	#define RX_PKT_V3_CMPL_HI_FLAGS2_META_FORMAT_HDR_OFFSET \
5946 		(UINT32_C(0x4) << 4)
5947 	#define RX_PKT_V3_CMPL_HI_FLAGS2_META_FORMAT_LAST \
5948 		RX_PKT_V3_CMPL_HI_FLAGS2_META_FORMAT_HDR_OFFSET
5949 	/*
5950 	 * This field indicates the IP type for the inner-most IP header.
5951 	 * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
5952 	 * This value is only valid if itype indicates a packet
5953 	 * with an IP header.
5954 	 */
5955 	#define RX_PKT_V3_CMPL_HI_FLAGS2_IP_TYPE \
5956 		UINT32_C(0x100)
5957 	/*
5958 	 * This indicates that the complete 1's complement checksum was
5959 	 * calculated for the packet.
5960 	 */
5961 	#define RX_PKT_V3_CMPL_HI_FLAGS2_COMPLETE_CHECKSUM_CALC \
5962 		UINT32_C(0x200)
5963 	/*
5964 	 * This field indicates the status of IP and L4 CS calculations done
5965 	 * by the chip. The format of this field is indicated by the
5966 	 * cs_all_ok_mode bit.
5967 	 */
5968 	#define RX_PKT_V3_CMPL_HI_FLAGS2_T_IP_TYPE \
5969 		UINT32_C(0x400)
5970 	/* Indicates that the Tunnel IP type was IPv4 */
5971 	#define RX_PKT_V3_CMPL_HI_FLAGS2_T_IP_TYPE_IPV4 \
5972 		(UINT32_C(0x0) << 10)
5973 	/* Indicates that the Tunnel IP type was IPv6 */
5974 	#define RX_PKT_V3_CMPL_HI_FLAGS2_T_IP_TYPE_IPV6 \
5975 		(UINT32_C(0x1) << 10)
5976 	#define RX_PKT_V3_CMPL_HI_FLAGS2_T_IP_TYPE_LAST \
5977 		RX_PKT_V3_CMPL_HI_FLAGS2_T_IP_TYPE_IPV6
5978 	/*
5979 	 * This value is the complete 1's complement checksum calculated from
5980 	 * the start of the outer L3 header to the end of the packet (not
5981 	 * including the ethernet crc). It is valid when the
5982 	 * 'complete_checksum_calc' flag is set.
5983 	 */
5984 	#define RX_PKT_V3_CMPL_HI_FLAGS2_COMPLETE_CHECKSUM_MASK \
5985 		UINT32_C(0xffff0000)
5986 	#define RX_PKT_V3_CMPL_HI_FLAGS2_COMPLETE_CHECKSUM_SFT      16
5987 	/*
5988 	 * This is data from the CFA block as indicated by the meta_format
5989 	 * field.
5990 	 * - meta_format 0 - none - metadata2 = 0 - not valid/not stripped
5991 	 * - meta_format 1 - act_rec_ptr - metadata2 = {table_scope[5:0],
5992 	 *   act_rec_ptr[25:0]}
5993 	 * - meta_format 2 - tunnel_id - metadata2 = tunnel_id[31:0]
5994 	 * - meta_format 3 - chdr_data - metadata2 = updated_chdr_data[31:0]
5995 	 * - meta_format 4 - hdr_offsets - metadata2 = hdr_offsets[31:0]
5996 	 */
5997 	uint32_t	metadata2;
5998 	uint16_t	errors_v2;
5999 	/*
6000 	 * This value is written by the NIC such that it will be different
6001 	 * for each pass through the completion queue. The even passes
6002 	 * will write 1. The odd passes will write 0.
6003 	 */
6004 	#define RX_PKT_V3_CMPL_HI_V2 \
6005 		UINT32_C(0x1)
6006 	#define RX_PKT_V3_CMPL_HI_ERRORS_MASK \
6007 		UINT32_C(0xfffe)
6008 	#define RX_PKT_V3_CMPL_HI_ERRORS_SFT                               1
6009 	/*
6010 	 * This error indicates that there was some sort of problem with
6011 	 * the BDs for the packet that was found after part of the
6012 	 * packet was already placed. The packet should be treated as
6013 	 * invalid.
6014 	 */
6015 	#define RX_PKT_V3_CMPL_HI_ERRORS_BUFFER_ERROR_MASK \
6016 		UINT32_C(0xe)
6017 	#define RX_PKT_V3_CMPL_HI_ERRORS_BUFFER_ERROR_SFT                   1
6018 	/* No buffer error */
6019 	#define RX_PKT_V3_CMPL_HI_ERRORS_BUFFER_ERROR_NO_BUFFER \
6020 		(UINT32_C(0x0) << 1)
6021 	/*
6022 	 * Did Not Fit: Packet did not fit into packet buffer provided.
6023 	 * For regular placement, this means the packet did not fit in
6024 	 * the buffer provided. For HDS and jumbo placement, this means
6025 	 * that the packet could not be placed into 8 physical buffers.
6026 	 */
6027 	#define RX_PKT_V3_CMPL_HI_ERRORS_BUFFER_ERROR_DID_NOT_FIT \
6028 		(UINT32_C(0x1) << 1)
6029 	/*
6030 	 * Not On Chip: All BDs needed for the packet were not on-chip
6031 	 * when the packet arrived. For regular placement, this error is
6032 	 * not valid. For HDS and jumbo placement, this means that not
6033 	 * enough agg BDs were posted to place the packet.
6034 	 */
6035 	#define RX_PKT_V3_CMPL_HI_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
6036 		(UINT32_C(0x2) << 1)
6037 	/*
6038 	 * Bad Format:
6039 	 * BDs were not formatted correctly.
6040 	 */
6041 	#define RX_PKT_V3_CMPL_HI_ERRORS_BUFFER_ERROR_BAD_FORMAT \
6042 		(UINT32_C(0x3) << 1)
6043 	/*
6044 	 * Flush:
6045 	 * There was a bad_format error on the previous operation
6046 	 */
6047 	#define RX_PKT_V3_CMPL_HI_ERRORS_BUFFER_ERROR_FLUSH \
6048 		(UINT32_C(0x5) << 1)
6049 	#define RX_PKT_V3_CMPL_HI_ERRORS_BUFFER_ERROR_LAST \
6050 		RX_PKT_V3_CMPL_HI_ERRORS_BUFFER_ERROR_FLUSH
6051 	/* This indicates that there was an error in the IP header checksum. */
6052 	#define RX_PKT_V3_CMPL_HI_ERRORS_IP_CS_ERROR \
6053 		UINT32_C(0x10)
6054 	/*
6055 	 * This indicates that there was an error in the TCP, UDP or ICMP
6056 	 * checksum.
6057 	 */
6058 	#define RX_PKT_V3_CMPL_HI_ERRORS_L4_CS_ERROR \
6059 		UINT32_C(0x20)
6060 	/*
6061 	 * This indicates that there was an error in the tunnel IP header
6062 	 * checksum.
6063 	 */
6064 	#define RX_PKT_V3_CMPL_HI_ERRORS_T_IP_CS_ERROR \
6065 		UINT32_C(0x40)
6066 	/* This indicates that there was an error in the tunnel UDP checksum. */
6067 	#define RX_PKT_V3_CMPL_HI_ERRORS_T_L4_CS_ERROR \
6068 		UINT32_C(0x80)
6069 	/*
6070 	 * This indicates that there was a CRC error on either an FCoE
6071 	 * or RoCE packet. The itype indicates the packet type.
6072 	 */
6073 	#define RX_PKT_V3_CMPL_HI_ERRORS_CRC_ERROR \
6074 		UINT32_C(0x100)
6075 	/*
6076 	 * This indicates that there was an error in the tunnel portion
6077 	 * of the packet when this field is non-zero.
6078 	 */
6079 	#define RX_PKT_V3_CMPL_HI_ERRORS_T_PKT_ERROR_MASK \
6080 		UINT32_C(0xe00)
6081 	#define RX_PKT_V3_CMPL_HI_ERRORS_T_PKT_ERROR_SFT                    9
6082 	/*
6083 	 * No additional error occurred on the tunnel portion
6084 	 * of the packet or the packet does not have a tunnel.
6085 	 */
6086 	#define RX_PKT_V3_CMPL_HI_ERRORS_T_PKT_ERROR_NO_ERROR \
6087 		(UINT32_C(0x0) << 9)
6088 	/*
6089 	 * Indicates that IP header version does not match expectation
6090 	 * from L2 Ethertype for IPv4 and IPv6 in the tunnel header.
6091 	 */
6092 	#define RX_PKT_V3_CMPL_HI_ERRORS_T_PKT_ERROR_T_L3_BAD_VERSION \
6093 		(UINT32_C(0x1) << 9)
6094 	/*
6095 	 * Indicates that header length is out of range in the tunnel
6096 	 * header. Valid for IPv4.
6097 	 */
6098 	#define RX_PKT_V3_CMPL_HI_ERRORS_T_PKT_ERROR_T_L3_BAD_HDR_LEN \
6099 		(UINT32_C(0x2) << 9)
6100 	/*
6101 	 * Indicates that physical packet is shorter than that claimed
6102 	 * by the tunnel l3 header length. Valid for IPv4, or IPv6 tunnel
6103 	 * packet packets.
6104 	 */
6105 	#define RX_PKT_V3_CMPL_HI_ERRORS_T_PKT_ERROR_T_IP_TOTAL_ERROR \
6106 		(UINT32_C(0x3) << 9)
6107 	/*
6108 	 * Indicates that the physical packet is shorter than that claimed
6109 	 * by the tunnel UDP header length for a tunnel UDP packet that is
6110 	 * not fragmented.
6111 	 */
6112 	#define RX_PKT_V3_CMPL_HI_ERRORS_T_PKT_ERROR_T_UDP_TOTAL_ERROR \
6113 		(UINT32_C(0x4) << 9)
6114 	/*
6115 	 * Indicates that the IPv4 TTL or IPv6 hop limit check have failed
6116 	 * (e.g. TTL = 0) in the tunnel header. Valid for IPv4, and IPv6.
6117 	 */
6118 	#define RX_PKT_V3_CMPL_HI_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL \
6119 		(UINT32_C(0x5) << 9)
6120 	/*
6121 	 * Indicates that the IP checksum failed its check in the tunnel
6122 	 * header.
6123 	 */
6124 	#define RX_PKT_V3_CMPL_HI_ERRORS_T_PKT_ERROR_T_IP_CS_ERROR \
6125 		(UINT32_C(0x6) << 9)
6126 	/*
6127 	 * Indicates that the L4 checksum failed its check in the tunnel
6128 	 * header.
6129 	 */
6130 	#define RX_PKT_V3_CMPL_HI_ERRORS_T_PKT_ERROR_T_L4_CS_ERROR \
6131 		(UINT32_C(0x7) << 9)
6132 	#define RX_PKT_V3_CMPL_HI_ERRORS_T_PKT_ERROR_LAST \
6133 		RX_PKT_V3_CMPL_HI_ERRORS_T_PKT_ERROR_T_L4_CS_ERROR
6134 	/*
6135 	 * This indicates that there was an error in the inner
6136 	 * portion of the packet when this
6137 	 * field is non-zero.
6138 	 */
6139 	#define RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_MASK \
6140 		UINT32_C(0xf000)
6141 	#define RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_SFT                      12
6142 	/*
6143 	 * No additional error occurred on the tunnel portion
6144 	 * or the packet of the packet does not have a tunnel.
6145 	 */
6146 	#define RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_NO_ERROR \
6147 		(UINT32_C(0x0) << 12)
6148 	/*
6149 	 * Indicates that IP header version does not match
6150 	 * expectation from L2 Ethertype for IPv4 and IPv6 or that
6151 	 * option other than VFT was parsed on
6152 	 * FCoE packet.
6153 	 */
6154 	#define RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_L3_BAD_VERSION \
6155 		(UINT32_C(0x1) << 12)
6156 	/*
6157 	 * indicates that header length is out of range. Valid for
6158 	 * IPv4 and RoCE
6159 	 */
6160 	#define RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_L3_BAD_HDR_LEN \
6161 		(UINT32_C(0x2) << 12)
6162 	/*
6163 	 * indicates that the IPv4 TTL or IPv6 hop limit check
6164 	 * have failed (e.g. TTL = 0). Valid for IPv4, and IPv6
6165 	 */
6166 	#define RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_L3_BAD_TTL \
6167 		(UINT32_C(0x3) << 12)
6168 	/*
6169 	 * Indicates that physical packet is shorter than that
6170 	 * claimed by the l3 header length. Valid for IPv4,
6171 	 * IPv6 packet or RoCE packets.
6172 	 */
6173 	#define RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_IP_TOTAL_ERROR \
6174 		(UINT32_C(0x4) << 12)
6175 	/*
6176 	 * Indicates that the physical packet is shorter than that
6177 	 * claimed by the UDP header length for a UDP packet that is
6178 	 * not fragmented.
6179 	 */
6180 	#define RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_UDP_TOTAL_ERROR \
6181 		(UINT32_C(0x5) << 12)
6182 	/*
6183 	 * Indicates that TCP header length > IP payload. Valid for
6184 	 * TCP packets only.
6185 	 */
6186 	#define RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN \
6187 		(UINT32_C(0x6) << 12)
6188 	/* Indicates that TCP header length < 5. Valid for TCP. */
6189 	#define RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN_TOO_SMALL \
6190 		(UINT32_C(0x7) << 12)
6191 	/*
6192 	 * Indicates that TCP option headers result in a TCP header
6193 	 * size that does not match data offset in TCP header. Valid
6194 	 * for TCP.
6195 	 */
6196 	#define RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN \
6197 		(UINT32_C(0x8) << 12)
6198 	/*
6199 	 * Indicates that the IP checksum failed its check in the
6200 	 * inner header.
6201 	 */
6202 	#define RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_IP_CS_ERROR \
6203 		(UINT32_C(0x9) << 12)
6204 	/*
6205 	 * Indicates that the L4 checksum failed its check in the
6206 	 * inner header.
6207 	 */
6208 	#define RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_L4_CS_ERROR \
6209 		(UINT32_C(0xa) << 12)
6210 	#define RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_LAST \
6211 		RX_PKT_V3_CMPL_HI_ERRORS_PKT_ERROR_L4_CS_ERROR
6212 	/*
6213 	 * This is data from the CFA block as indicated by the meta_format
6214 	 * field.
6215 	 */
6216 	uint16_t	metadata0;
6217 	/* When meta_format=1, this value is the VLAN VID. */
6218 	#define RX_PKT_V3_CMPL_HI_METADATA0_VID_MASK UINT32_C(0xfff)
6219 	#define RX_PKT_V3_CMPL_HI_METADATA0_VID_SFT 0
6220 	/* When meta_format=1, this value is the VLAN DE. */
6221 	#define RX_PKT_V3_CMPL_HI_METADATA0_DE      UINT32_C(0x1000)
6222 	/* When meta_format=1, this value is the VLAN PRI. */
6223 	#define RX_PKT_V3_CMPL_HI_METADATA0_PRI_MASK UINT32_C(0xe000)
6224 	#define RX_PKT_V3_CMPL_HI_METADATA0_PRI_SFT 13
6225 	/*
6226 	 * The timestamp field contains the 32b timestamp for the packet from
6227 	 * the MAC.
6228 	 *
6229 	 * When hairpin_en is set in VNIC context, this is the upper 32b of the
6230 	 * host address from the first BD used to place the packet.
6231 	 */
6232 	uint32_t	timestamp;
6233 } __rte_packed;
6234 
6235 /* rx_pkt_compress_cmpl (size:128b/16B) */
6236 struct rx_pkt_compress_cmpl {
6237 	uint16_t	flags_type;
6238 	/*
6239 	 * This field indicates the exact type of the completion.
6240 	 * By convention, the LSB identifies the length of the
6241 	 * record in 16B units. Even values indicate 16B
6242 	 * records. Odd values indicate 32B
6243 	 * records.
6244 	 */
6245 	#define RX_PKT_COMPRESS_CMPL_TYPE_MASK                   UINT32_C(0x3f)
6246 	#define RX_PKT_COMPRESS_CMPL_TYPE_SFT                    0
6247 	/*
6248 	 * RX L2 completion:
6249 	 * This is the compressed version of Rx Completion for performance
6250 	 * applications. Length = 16B
6251 	 * This version of the completion record is used in Thor2 and later
6252 	 * chips.
6253 	 */
6254 	#define RX_PKT_COMPRESS_CMPL_TYPE_RX_L2_COMPRESS \
6255 		UINT32_C(0x10)
6256 	#define RX_PKT_COMPRESS_CMPL_TYPE_LAST \
6257 		RX_PKT_COMPRESS_CMPL_TYPE_RX_L2_COMPRESS
6258 	#define RX_PKT_COMPRESS_CMPL_FLAGS_MASK \
6259 		UINT32_C(0xffc0)
6260 	#define RX_PKT_COMPRESS_CMPL_FLAGS_SFT                   6
6261 	/*
6262 	 * When this bit is '1', it indicates a packet that has an
6263 	 * error of some type. Type of error is indicated in
6264 	 * error_flags.
6265 	 */
6266 	#define RX_PKT_COMPRESS_CMPL_FLAGS_ERROR \
6267 		UINT32_C(0x40)
6268 	/*
6269 	 * This field indicates the status of IP and L4 CS calculations done
6270 	 * by the chip. The format of this field is indicated by the
6271 	 * cs_all_ok_mode bit.
6272 	 */
6273 	#define RX_PKT_COMPRESS_CMPL_FLAGS_T_IP_TYPE \
6274 		UINT32_C(0x100)
6275 	/* Indicates that the Tunnel IP type was IPv4 */
6276 	#define RX_PKT_COMPRESS_CMPL_FLAGS_T_IP_TYPE_IPV4 \
6277 		(UINT32_C(0x0) << 8)
6278 	/* Indicates that the Tunnel IP type was IPv6 */
6279 	#define RX_PKT_COMPRESS_CMPL_FLAGS_T_IP_TYPE_IPV6 \
6280 		(UINT32_C(0x1) << 8)
6281 	#define RX_PKT_COMPRESS_CMPL_FLAGS_T_IP_TYPE_LAST \
6282 		RX_PKT_COMPRESS_CMPL_FLAGS_T_IP_TYPE_IPV6
6283 	/*
6284 	 * This field indicates the IP type for the inner-most IP header.
6285 	 * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
6286 	 * This value is only valid if itype indicates a packet
6287 	 * with an IP header.
6288 	 */
6289 	#define RX_PKT_COMPRESS_CMPL_FLAGS_IP_TYPE \
6290 		UINT32_C(0x200)
6291 	/* This bit is '1' if the RSS field in this completion is valid. */
6292 	#define RX_PKT_COMPRESS_CMPL_FLAGS_RSS_VALID \
6293 		UINT32_C(0x400)
6294 	/*
6295 	 * This value indicates what the inner packet determined for the
6296 	 * packet was.
6297 	 */
6298 	#define RX_PKT_COMPRESS_CMPL_FLAGS_ITYPE_MASK \
6299 		UINT32_C(0xf000)
6300 	#define RX_PKT_COMPRESS_CMPL_FLAGS_ITYPE_SFT              12
6301 	/*
6302 	 * Not Known:
6303 	 * Indicates that the packet type was not known.
6304 	 */
6305 	#define RX_PKT_COMPRESS_CMPL_FLAGS_ITYPE_NOT_KNOWN \
6306 		(UINT32_C(0x0) << 12)
6307 	/*
6308 	 * IP Packet:
6309 	 * Indicates that the packet was an IP packet, but further
6310 	 * classification was not possible.
6311 	 */
6312 	#define RX_PKT_COMPRESS_CMPL_FLAGS_ITYPE_IP \
6313 		(UINT32_C(0x1) << 12)
6314 	/*
6315 	 * TCP Packet:
6316 	 * Indicates that the packet was IP and TCP.
6317 	 * This indicates that the payload_offset field is valid.
6318 	 */
6319 	#define RX_PKT_COMPRESS_CMPL_FLAGS_ITYPE_TCP \
6320 		(UINT32_C(0x2) << 12)
6321 	/*
6322 	 * UDP Packet:
6323 	 * Indicates that the packet was IP and UDP.
6324 	 * This indicates that the payload_offset field is valid.
6325 	 */
6326 	#define RX_PKT_COMPRESS_CMPL_FLAGS_ITYPE_UDP \
6327 		(UINT32_C(0x3) << 12)
6328 	/*
6329 	 * FCoE Packet:
6330 	 * Indicates that the packet was recognized as a FCoE.
6331 	 * This also indicates that the payload_offset field is valid.
6332 	 */
6333 	#define RX_PKT_COMPRESS_CMPL_FLAGS_ITYPE_FCOE \
6334 		(UINT32_C(0x4) << 12)
6335 	/*
6336 	 * RoCE Packet:
6337 	 * Indicates that the packet was recognized as a RoCE.
6338 	 * This also indicates that the payload_offset field is valid.
6339 	 */
6340 	#define RX_PKT_COMPRESS_CMPL_FLAGS_ITYPE_ROCE \
6341 		(UINT32_C(0x5) << 12)
6342 	/*
6343 	 * ICMP Packet:
6344 	 * Indicates that the packet was recognized as ICMP.
6345 	 * This indicates that the payload_offset field is valid.
6346 	 */
6347 	#define RX_PKT_COMPRESS_CMPL_FLAGS_ITYPE_ICMP \
6348 		(UINT32_C(0x7) << 12)
6349 	/*
6350 	 * PTP packet wo/timestamp:
6351 	 * Indicates that the packet was recognized as a PTP
6352 	 * packet.
6353 	 */
6354 	#define RX_PKT_COMPRESS_CMPL_FLAGS_ITYPE_PTP_WO_TIMESTAMP \
6355 		(UINT32_C(0x8) << 12)
6356 	/*
6357 	 * PTP packet w/timestamp:
6358 	 * Indicates that the packet was recognized as a PTP
6359 	 * packet and that a timestamp was taken for the packet.
6360 	 * The 4b sub-nanosecond portion of the timestamp is in
6361 	 * the payload_offset field.
6362 	 */
6363 	#define RX_PKT_COMPRESS_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP \
6364 		(UINT32_C(0x9) << 12)
6365 	#define RX_PKT_COMPRESS_CMPL_FLAGS_ITYPE_LAST \
6366 		RX_PKT_COMPRESS_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP
6367 	/*
6368 	 * This is the length of the data for the packet stored in the
6369 	 * buffer(s) identified by the opaque value. This includes
6370 	 * the packet BD and any associated buffer BDs. This does not include
6371 	 * the length of any data places in aggregation BDs.
6372 	 */
6373 	uint16_t	len;
6374 	/*
6375 	 * This value is the RSS hash value calculated for the packet
6376 	 * based on the mode bits and key value in the VNIC. When hairpin_en
6377 	 * is set in VNIC context, this is the lower 32b of the host address
6378 	 * from the first BD used to place the packet.
6379 	 */
6380 	uint32_t	rss_hash;
6381 	uint16_t	metadata1_cs_error_calc_v1;
6382 	/*
6383 	 * This value is written by the NIC such that it will be different
6384 	 * for each pass through the completion queue. The even passes
6385 	 * will write 1. The odd passes will write 0.
6386 	 */
6387 	#define RX_PKT_COMPRESS_CMPL_V1 \
6388 		UINT32_C(0x1)
6389 	/* unused is 3 b */
6390 	#define RX_PKT_COMPRESS_CMPL_UNUSED_MASK \
6391 		UINT32_C(0xe)
6392 	#define RX_PKT_COMPRESS_CMPL_UNUSED_SFT                      1
6393 	#define RX_PKT_COMPRESS_CMPL_CS_ERROR_CALC_MASK \
6394 		UINT32_C(0xff0)
6395 	#define RX_PKT_COMPRESS_CMPL_CS_ERROR_CALC_SFT               4
6396 	/* This indicates that there was an error in the IP header checksum. */
6397 	#define RX_PKT_COMPRESS_CMPL_CS_ERROR_CALC_IP_CS_ERROR \
6398 		UINT32_C(0x10)
6399 	/*
6400 	 * This indicates that there was an error in the TCP, UDP or ICMP
6401 	 * checksum.
6402 	 */
6403 	#define RX_PKT_COMPRESS_CMPL_CS_ERROR_CALC_L4_CS_ERROR \
6404 		UINT32_C(0x20)
6405 	/*
6406 	 * This indicates that there was an error in the tunnel IP header
6407 	 * checksum.
6408 	 */
6409 	#define RX_PKT_COMPRESS_CMPL_CS_ERROR_CALC_T_IP_CS_ERROR \
6410 		UINT32_C(0x40)
6411 	/* This indicates that there was an error in the tunnel UDP checksum. */
6412 	#define RX_PKT_COMPRESS_CMPL_CS_ERROR_CALC_T_L4_CS_ERROR \
6413 		UINT32_C(0x80)
6414 	/*
6415 	 * This indicates that the ip checksum was calculated for the inner
6416 	 * packet and that the ip_cs_error field indicates if there was an
6417 	 * error.
6418 	 */
6419 	#define RX_PKT_COMPRESS_CMPL_CS_ERROR_CALC_IP_CS_CALC \
6420 		UINT32_C(0x100)
6421 	/*
6422 	 * This indicates that the TCP, UDP or ICMP checksum was calculated
6423 	 * for the inner packet and that the l4_cs_error field indicates if
6424 	 * there was an error.
6425 	 */
6426 	#define RX_PKT_COMPRESS_CMPL_CS_ERROR_CALC_L4_CS_CALC \
6427 		UINT32_C(0x200)
6428 	/*
6429 	 * This indicates that the ip checksum was calculated for the tunnel
6430 	 * header and that the t_ip_cs_error field indicates if there was an
6431 	 * error.
6432 	 */
6433 	#define RX_PKT_COMPRESS_CMPL_CS_ERROR_CALC_T_IP_CS_CALC \
6434 		UINT32_C(0x400)
6435 	/*
6436 	 * This indicates that the UDP checksum was calculated for the tunnel
6437 	 * packet and that the t_l4_cs_error field indicates if there was an
6438 	 * error.
6439 	 */
6440 	#define RX_PKT_COMPRESS_CMPL_CS_ERROR_CALC_T_L4_CS_CALC \
6441 		UINT32_C(0x800)
6442 	/* This is data from the CFA as indicated by the meta_format field. */
6443 	#define RX_PKT_COMPRESS_CMPL_METADATA1_MASK \
6444 		UINT32_C(0xf000)
6445 	#define RX_PKT_COMPRESS_CMPL_METADATA1_SFT                   12
6446 	/* When meta_format != 0, this value is the VLAN TPID_SEL. */
6447 	#define RX_PKT_COMPRESS_CMPL_METADATA1_TPID_SEL_MASK \
6448 		UINT32_C(0x7000)
6449 	#define RX_PKT_COMPRESS_CMPL_METADATA1_TPID_SEL_SFT           12
6450 	/* 0x88a8 */
6451 	#define RX_PKT_COMPRESS_CMPL_METADATA1_TPID_SEL_TPID88A8 \
6452 		(UINT32_C(0x0) << 12)
6453 	/* 0x8100 */
6454 	#define RX_PKT_COMPRESS_CMPL_METADATA1_TPID_SEL_TPID8100 \
6455 		(UINT32_C(0x1) << 12)
6456 	/* 0x9100 */
6457 	#define RX_PKT_COMPRESS_CMPL_METADATA1_TPID_SEL_TPID9100 \
6458 		(UINT32_C(0x2) << 12)
6459 	/* 0x9200 */
6460 	#define RX_PKT_COMPRESS_CMPL_METADATA1_TPID_SEL_TPID9200 \
6461 		(UINT32_C(0x3) << 12)
6462 	/* 0x9300 */
6463 	#define RX_PKT_COMPRESS_CMPL_METADATA1_TPID_SEL_TPID9300 \
6464 		(UINT32_C(0x4) << 12)
6465 	/* Value programmed in CFA VLANTPID register. */
6466 	#define RX_PKT_COMPRESS_CMPL_METADATA1_TPID_SEL_TPIDCFG \
6467 		(UINT32_C(0x5) << 12)
6468 	#define RX_PKT_COMPRESS_CMPL_METADATA1_TPID_SEL_LAST \
6469 		RX_PKT_COMPRESS_CMPL_METADATA1_TPID_SEL_TPIDCFG
6470 	/* When meta_format != 0, this value is the VLAN valid. */
6471 	#define RX_PKT_COMPRESS_CMPL_METADATA1_VALID \
6472 		UINT32_C(0x8000)
6473 	/* This is data from the CFA as indicated by the meta_format field. */
6474 	uint16_t	vlanc_tcid;
6475 	/* When meta_format!=0, this value is the VLAN VID. */
6476 	#define RX_PKT_COMPRESS_CMPL_VLANC_TCID_VID_MASK UINT32_C(0xfff)
6477 	#define RX_PKT_COMPRESS_CMPL_VLANC_TCID_VID_SFT 0
6478 	/* When meta_format!=0, this value is the VLAN DE. */
6479 	#define RX_PKT_COMPRESS_CMPL_VLANC_TCID_DE      UINT32_C(0x1000)
6480 	/* When meta_format!=0, this value is the VLAN PRI. */
6481 	#define RX_PKT_COMPRESS_CMPL_VLANC_TCID_PRI_MASK UINT32_C(0xe000)
6482 	#define RX_PKT_COMPRESS_CMPL_VLANC_TCID_PRI_SFT 13
6483 	uint32_t	errors_agg_bufs_opaque;
6484 	/* Lower 16bits of the Opaque field provided in the Rx BD. */
6485 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_OPAQUE_MASK \
6486 		UINT32_C(0xffff)
6487 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_OPAQUE_SFT \
6488 		0
6489 	/*
6490 	 * This value is the number of aggregation buffers that follow this
6491 	 * entry in the completion ring that are a part of this packet.
6492 	 * If the value is zero, then the packet is completely contained
6493 	 * in the buffer space provided for the packet in the RX ring.
6494 	 */
6495 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_AGG_BUFS_MASK \
6496 		UINT32_C(0x1f0000)
6497 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_AGG_BUFS_SFT \
6498 		16
6499 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_MASK \
6500 		UINT32_C(0x1fe00000)
6501 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_SFT \
6502 		21
6503 	/*
6504 	 * This indicates that there was an error in the inner
6505 	 * portion of the packet when this
6506 	 * field is non-zero.
6507 	 */
6508 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_PKT_ERROR_MASK \
6509 		UINT32_C(0x1e00000)
6510 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_PKT_ERROR_SFT \
6511 		21
6512 	/*
6513 	 * No additional error occurred on the tunnel portion
6514 	 * or the packet of the packet does not have a tunnel.
6515 	 */
6516 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_PKT_ERROR_NO_ERROR \
6517 		(UINT32_C(0x0) << 21)
6518 	/*
6519 	 * Indicates that IP header version does not match
6520 	 * expectation from L2 Ethertype for IPv4 and IPv6 or that
6521 	 * option other than VFT was parsed on
6522 	 * FCoE packet.
6523 	 */
6524 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_PKT_ERROR_L3_BAD_VERSION \
6525 		(UINT32_C(0x1) << 21)
6526 	/*
6527 	 * indicates that header length is out of range. Valid for
6528 	 * IPv4 and RoCE
6529 	 */
6530 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_PKT_ERROR_L3_BAD_HDR_LEN \
6531 		(UINT32_C(0x2) << 21)
6532 	/*
6533 	 * indicates that the IPv4 TTL or IPv6 hop limit check
6534 	 * have failed (e.g. TTL = 0). Valid for IPv4, and IPv6
6535 	 */
6536 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_PKT_ERROR_L3_BAD_TTL \
6537 		(UINT32_C(0x3) << 21)
6538 	/*
6539 	 * Indicates that physical packet is shorter than that
6540 	 * claimed by the l3 header length. Valid for IPv4,
6541 	 * IPv6 packet or RoCE packets.
6542 	 */
6543 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_PKT_ERROR_IP_TOTAL_ERROR \
6544 		(UINT32_C(0x4) << 21)
6545 	/*
6546 	 * Indicates that the physical packet is shorter than that
6547 	 * claimed by the UDP header length for a UDP packet that is
6548 	 * not fragmented.
6549 	 */
6550 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_PKT_ERROR_UDP_TOTAL_ERROR \
6551 		(UINT32_C(0x5) << 21)
6552 	/*
6553 	 * Indicates that TCP header length > IP payload. Valid for
6554 	 * TCP packets only.
6555 	 */
6556 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN \
6557 		(UINT32_C(0x6) << 21)
6558 	/* Indicates that TCP header length < 5. Valid for TCP. */
6559 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN_TOO_SMALL \
6560 		(UINT32_C(0x7) << 21)
6561 	/*
6562 	 * Indicates that TCP option headers result in a TCP header
6563 	 * size that does not match data offset in TCP header. Valid
6564 	 * for TCP.
6565 	 */
6566 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN \
6567 		(UINT32_C(0x8) << 21)
6568 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_PKT_ERROR_LAST \
6569 		RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN
6570 	/*
6571 	 * This indicates that there was an error in the tunnel portion
6572 	 * of the packet when this field is non-zero.
6573 	 */
6574 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_T_PKT_ERROR_MASK \
6575 		UINT32_C(0xe000000)
6576 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_T_PKT_ERROR_SFT \
6577 		25
6578 	/*
6579 	 * No additional error occurred on the tunnel portion
6580 	 * of the packet or the packet does not have a tunnel.
6581 	 */
6582 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_T_PKT_ERROR_NO_ERROR \
6583 		(UINT32_C(0x0) << 25)
6584 	/*
6585 	 * Indicates that IP header version does not match expectation
6586 	 * from L2 Ethertype for IPv4 and IPv6 in the tunnel header.
6587 	 */
6588 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_T_PKT_ERROR_T_L3_BAD_VERSION \
6589 		(UINT32_C(0x1) << 25)
6590 	/*
6591 	 * Indicates that header length is out of range in the tunnel
6592 	 * header. Valid for IPv4.
6593 	 */
6594 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_T_PKT_ERROR_T_L3_BAD_HDR_LEN \
6595 		(UINT32_C(0x2) << 25)
6596 	/*
6597 	 * Indicates that physical packet is shorter than that claimed
6598 	 * by the tunnel l3 header length. Valid for IPv4, or IPv6 tunnel
6599 	 * packet packets.
6600 	 */
6601 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_T_PKT_ERROR_T_IP_TOTAL_ERROR \
6602 		(UINT32_C(0x3) << 25)
6603 	/*
6604 	 * Indicates that the physical packet is shorter than that claimed
6605 	 * by the tunnel UDP header length for a tunnel UDP packet that is
6606 	 * not fragmented.
6607 	 */
6608 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_T_PKT_ERROR_T_UDP_TOTAL_ERROR \
6609 		(UINT32_C(0x4) << 25)
6610 	/*
6611 	 * Indicates that the IPv4 TTL or IPv6 hop limit check have failed
6612 	 * (e.g. TTL = 0) in the tunnel header. Valid for IPv4, and IPv6.
6613 	 */
6614 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL \
6615 		(UINT32_C(0x5) << 25)
6616 	/*
6617 	 * Indicates that the IP checksum failed its check in the tunnel
6618 	 * header.
6619 	 */
6620 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_T_PKT_ERROR_T_IP_CS_ERROR \
6621 		(UINT32_C(0x6) << 25)
6622 	/*
6623 	 * Indicates that the L4 checksum failed its check in the tunnel
6624 	 * header.
6625 	 */
6626 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_T_PKT_ERROR_T_L4_CS_ERROR \
6627 		(UINT32_C(0x7) << 25)
6628 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_T_PKT_ERROR_LAST \
6629 		RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_T_PKT_ERROR_T_L4_CS_ERROR
6630 	/*
6631 	 * This indicates that there was a CRC error on either an FCoE
6632 	 * or RoCE packet. The itype indicates the packet type.
6633 	 */
6634 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_ERRORS_CRC_ERROR \
6635 		UINT32_C(0x10000000)
6636 	/* unused1 is 3 b */
6637 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_UNUSED1_MASK \
6638 		UINT32_C(0xe0000000)
6639 	#define RX_PKT_COMPRESS_CMPL_ERRORS_AGG_BUFS_OPAQUE_UNUSED1_SFT \
6640 		29
6641 } __rte_packed;
6642 
6643 /*
6644  * This TPA completion structure is used on devices where the
6645  * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
6646  */
6647 /* rx_tpa_start_cmpl (size:128b/16B) */
6648 struct rx_tpa_start_cmpl {
6649 	uint16_t	flags_type;
6650 	/*
6651 	 * This field indicates the exact type of the completion.
6652 	 * By convention, the LSB identifies the length of the
6653 	 * record in 16B units. Even values indicate 16B
6654 	 * records. Odd values indicate 32B
6655 	 * records.
6656 	 */
6657 	#define RX_TPA_START_CMPL_TYPE_MASK                UINT32_C(0x3f)
6658 	#define RX_TPA_START_CMPL_TYPE_SFT                 0
6659 	/*
6660 	 * RX L2 TPA Start Completion:
6661 	 * Completion at the beginning of a TPA operation.
6662 	 * Length = 32B
6663 	 */
6664 	#define RX_TPA_START_CMPL_TYPE_RX_TPA_START          UINT32_C(0x13)
6665 	#define RX_TPA_START_CMPL_TYPE_LAST \
6666 		RX_TPA_START_CMPL_TYPE_RX_TPA_START
6667 	#define RX_TPA_START_CMPL_FLAGS_MASK               UINT32_C(0xffc0)
6668 	#define RX_TPA_START_CMPL_FLAGS_SFT                6
6669 	/* This bit will always be '0' for TPA start completions. */
6670 	#define RX_TPA_START_CMPL_FLAGS_ERROR               UINT32_C(0x40)
6671 	/* This field indicates how the packet was placed in the buffer. */
6672 	#define RX_TPA_START_CMPL_FLAGS_PLACEMENT_MASK      UINT32_C(0x380)
6673 	#define RX_TPA_START_CMPL_FLAGS_PLACEMENT_SFT       7
6674 	/*
6675 	 * Jumbo:
6676 	 * TPA Packet was placed using jumbo algorithm. This means
6677 	 * that the first buffer will be filled with data before
6678 	 * moving to aggregation buffers. Each aggregation buffer
6679 	 * will be filled before moving to the next aggregation
6680 	 * buffer.
6681 	 */
6682 	#define RX_TPA_START_CMPL_FLAGS_PLACEMENT_JUMBO \
6683 		(UINT32_C(0x1) << 7)
6684 	/*
6685 	 * Header/Data Separation:
6686 	 * Packet was placed using Header/Data separation algorithm.
6687 	 * The separation location is indicated by the itype field.
6688 	 */
6689 	#define RX_TPA_START_CMPL_FLAGS_PLACEMENT_HDS \
6690 		(UINT32_C(0x2) << 7)
6691 	/*
6692 	 * GRO/Jumbo:
6693 	 * Packet will be placed using GRO/Jumbo where the first
6694 	 * packet is filled with data. Subsequent packets will be
6695 	 * placed such that any one packet does not span two
6696 	 * aggregation buffers unless it starts at the beginning of
6697 	 * an aggregation buffer.
6698 	 */
6699 	#define RX_TPA_START_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
6700 		(UINT32_C(0x5) << 7)
6701 	/*
6702 	 * GRO/Header-Data Separation:
6703 	 * Packet will be placed using GRO/HDS where the header
6704 	 * is in the first packet.
6705 	 * Payload of each packet will be
6706 	 * placed such that any one packet does not span two
6707 	 * aggregation buffers unless it starts at the beginning of
6708 	 * an aggregation buffer.
6709 	 */
6710 	#define RX_TPA_START_CMPL_FLAGS_PLACEMENT_GRO_HDS \
6711 		(UINT32_C(0x6) << 7)
6712 	#define RX_TPA_START_CMPL_FLAGS_PLACEMENT_LAST \
6713 		RX_TPA_START_CMPL_FLAGS_PLACEMENT_GRO_HDS
6714 	/* This bit is '1' if the RSS field in this completion is valid. */
6715 	#define RX_TPA_START_CMPL_FLAGS_RSS_VALID           UINT32_C(0x400)
6716 	/* unused is 1 b */
6717 	#define RX_TPA_START_CMPL_FLAGS_UNUSED              UINT32_C(0x800)
6718 	/*
6719 	 * This value indicates what the inner packet determined for the
6720 	 * packet was.
6721 	 */
6722 	#define RX_TPA_START_CMPL_FLAGS_ITYPE_MASK          UINT32_C(0xf000)
6723 	#define RX_TPA_START_CMPL_FLAGS_ITYPE_SFT           12
6724 	/*
6725 	 * TCP Packet:
6726 	 * Indicates that the packet was IP and TCP.
6727 	 */
6728 	#define RX_TPA_START_CMPL_FLAGS_ITYPE_TCP \
6729 		(UINT32_C(0x2) << 12)
6730 	#define RX_TPA_START_CMPL_FLAGS_ITYPE_LAST \
6731 		RX_TPA_START_CMPL_FLAGS_ITYPE_TCP
6732 	/*
6733 	 * This value indicates the amount of packet data written to the
6734 	 * buffer the opaque field in this completion corresponds to.
6735 	 */
6736 	uint16_t	len;
6737 	/*
6738 	 * This is a copy of the opaque field from the RX BD this completion
6739 	 * corresponds to.
6740 	 */
6741 	uint32_t	opaque;
6742 	/*
6743 	 * This value is written by the NIC such that it will be different
6744 	 * for each pass through the completion queue. The even passes
6745 	 * will write 1. The odd passes will write 0.
6746 	 */
6747 	uint8_t	v1;
6748 	/*
6749 	 * This value is written by the NIC such that it will be different
6750 	 * for each pass through the completion queue. The even passes
6751 	 * will write 1. The odd passes will write 0.
6752 	 */
6753 	#define RX_TPA_START_CMPL_V1 UINT32_C(0x1)
6754 	#define RX_TPA_START_CMPL_LAST RX_TPA_START_CMPL_V1
6755 	/*
6756 	 * This is the RSS hash type for the packet. The value is packed
6757 	 * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
6758 	 *
6759 	 * The value of tuple_extrac_op provides the information about
6760 	 * what fields the hash was computed on.
6761 	 * * 0: The RSS hash was computed over source IP address,
6762 	 * destination IP address, source port, and destination port of inner
6763 	 * IP and TCP or UDP headers. Note: For non-tunneled packets,
6764 	 * the packet headers are considered inner packet headers for the RSS
6765 	 * hash computation purpose.
6766 	 * * 1: The RSS hash was computed over source IP address and destination
6767 	 * IP address of inner IP header. Note: For non-tunneled packets,
6768 	 * the packet headers are considered inner packet headers for the RSS
6769 	 * hash computation purpose.
6770 	 * * 2: The RSS hash was computed over source IP address,
6771 	 * destination IP address, source port, and destination port of
6772 	 * IP and TCP or UDP headers of outer tunnel headers.
6773 	 * Note: For non-tunneled packets, this value is not applicable.
6774 	 * * 3: The RSS hash was computed over source IP address and
6775 	 * destination IP address of IP header of outer tunnel headers.
6776 	 * Note: For non-tunneled packets, this value is not applicable.
6777 	 *
6778 	 * Note that 4-tuples values listed above are applicable
6779 	 * for layer 4 protocols supported and enabled for RSS in the hardware,
6780 	 * HWRM firmware, and drivers. For example, if RSS hash is supported and
6781 	 * enabled for TCP traffic only, then the values of tuple_extract_op
6782 	 * corresponding to 4-tuples are only valid for TCP traffic.
6783 	 */
6784 	uint8_t	rss_hash_type;
6785 	/*
6786 	 * This is the aggregation ID that the completion is associated
6787 	 * with. Use this number to correlate the TPA start completion
6788 	 * with the TPA end completion.
6789 	 */
6790 	uint16_t	agg_id;
6791 	/* unused2 is 9 b */
6792 	#define RX_TPA_START_CMPL_UNUSED2_MASK UINT32_C(0x1ff)
6793 	#define RX_TPA_START_CMPL_UNUSED2_SFT 0
6794 	/*
6795 	 * This is the aggregation ID that the completion is associated
6796 	 * with. Use this number to correlate the TPA start completion
6797 	 * with the TPA end completion.
6798 	 */
6799 	#define RX_TPA_START_CMPL_AGG_ID_MASK UINT32_C(0xfe00)
6800 	#define RX_TPA_START_CMPL_AGG_ID_SFT  9
6801 	/*
6802 	 * This value is the RSS hash value calculated for the packet
6803 	 * based on the mode bits and key value in the VNIC.
6804 	 */
6805 	uint32_t	rss_hash;
6806 } __rte_packed;
6807 
6808 /*
6809  * Last 16 bytes of rx_tpa_start_cmpl.
6810  *
6811  * This TPA completion structure is used on devices where the
6812  * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
6813  */
6814 /* rx_tpa_start_cmpl_hi (size:128b/16B) */
6815 struct rx_tpa_start_cmpl_hi {
6816 	uint32_t	flags2;
6817 	/*
6818 	 * This indicates that the ip checksum was calculated for the
6819 	 * inner packet and that the sum passed for all segments
6820 	 * included in the aggregation.
6821 	 */
6822 	#define RX_TPA_START_CMPL_FLAGS2_IP_CS_CALC       UINT32_C(0x1)
6823 	/*
6824 	 * This indicates that the TCP, UDP or ICMP checksum was
6825 	 * calculated for the inner packet and that the sum passed
6826 	 * for all segments included in the aggregation.
6827 	 */
6828 	#define RX_TPA_START_CMPL_FLAGS2_L4_CS_CALC       UINT32_C(0x2)
6829 	/*
6830 	 * This indicates that the ip checksum was calculated for the
6831 	 * tunnel header and that the sum passed for all segments
6832 	 * included in the aggregation.
6833 	 */
6834 	#define RX_TPA_START_CMPL_FLAGS2_T_IP_CS_CALC     UINT32_C(0x4)
6835 	/*
6836 	 * This indicates that the UDP checksum was
6837 	 * calculated for the tunnel packet and that the sum passed for
6838 	 * all segments included in the aggregation.
6839 	 */
6840 	#define RX_TPA_START_CMPL_FLAGS2_T_L4_CS_CALC     UINT32_C(0x8)
6841 	/* This value indicates what format the metadata field is. */
6842 	#define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_MASK UINT32_C(0xf0)
6843 	#define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_SFT  4
6844 	/* No metadata information. Value is zero. */
6845 	#define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_NONE \
6846 		(UINT32_C(0x0) << 4)
6847 	/*
6848 	 * The metadata field contains the VLAN tag and TPID value.
6849 	 * - metadata[11:0] contains the vlan VID value.
6850 	 * - metadata[12] contains the vlan DE value.
6851 	 * - metadata[15:13] contains the vlan PRI value.
6852 	 * - metadata[31:16] contains the vlan TPID value.
6853 	 */
6854 	#define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_VLAN \
6855 		(UINT32_C(0x1) << 4)
6856 	#define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_LAST \
6857 		RX_TPA_START_CMPL_FLAGS2_META_FORMAT_VLAN
6858 	/*
6859 	 * This field indicates the IP type for the inner-most IP header.
6860 	 * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
6861 	 */
6862 	#define RX_TPA_START_CMPL_FLAGS2_IP_TYPE          UINT32_C(0x100)
6863 	/*
6864 	 * This is data from the CFA block as indicated by the meta_format
6865 	 * field.
6866 	 */
6867 	uint32_t	metadata;
6868 	/* When meta_format=1, this value is the VLAN VID. */
6869 	#define RX_TPA_START_CMPL_METADATA_VID_MASK UINT32_C(0xfff)
6870 	#define RX_TPA_START_CMPL_METADATA_VID_SFT  0
6871 	/* When meta_format=1, this value is the VLAN DE. */
6872 	#define RX_TPA_START_CMPL_METADATA_DE       UINT32_C(0x1000)
6873 	/* When meta_format=1, this value is the VLAN PRI. */
6874 	#define RX_TPA_START_CMPL_METADATA_PRI_MASK UINT32_C(0xe000)
6875 	#define RX_TPA_START_CMPL_METADATA_PRI_SFT  13
6876 	/* When meta_format=1, this value is the VLAN TPID. */
6877 	#define RX_TPA_START_CMPL_METADATA_TPID_MASK UINT32_C(0xffff0000)
6878 	#define RX_TPA_START_CMPL_METADATA_TPID_SFT 16
6879 	uint16_t	v2;
6880 	/*
6881 	 * This value is written by the NIC such that it will be different
6882 	 * for each pass through the completion queue. The even passes
6883 	 * will write 1. The odd passes will write 0.
6884 	 */
6885 	#define RX_TPA_START_CMPL_V2     UINT32_C(0x1)
6886 	/*
6887 	 * This field identifies the CFA action rule that was used for this
6888 	 * packet.
6889 	 */
6890 	uint16_t	cfa_code;
6891 	/*
6892 	 * This is the size in bytes of the inner most L4 header.
6893 	 * This can be subtracted from the payload_offset to determine
6894 	 * the start of the inner most L4 header.
6895 	 */
6896 	uint32_t	inner_l4_size_inner_l3_offset_inner_l2_offset_outer_l3_offset;
6897 	/*
6898 	 * This is the offset from the beginning of the packet in bytes for
6899 	 * the outer L3 header. If there is no outer L3 header, then this
6900 	 * value is zero.
6901 	 */
6902 	#define RX_TPA_START_CMPL_OUTER_L3_OFFSET_MASK UINT32_C(0x1ff)
6903 	#define RX_TPA_START_CMPL_OUTER_L3_OFFSET_SFT 0
6904 	/*
6905 	 * This is the offset from the beginning of the packet in bytes for
6906 	 * the inner most L2 header.
6907 	 */
6908 	#define RX_TPA_START_CMPL_INNER_L2_OFFSET_MASK UINT32_C(0x3fe00)
6909 	#define RX_TPA_START_CMPL_INNER_L2_OFFSET_SFT 9
6910 	/*
6911 	 * This is the offset from the beginning of the packet in bytes for
6912 	 * the inner most L3 header.
6913 	 */
6914 	#define RX_TPA_START_CMPL_INNER_L3_OFFSET_MASK UINT32_C(0x7fc0000)
6915 	#define RX_TPA_START_CMPL_INNER_L3_OFFSET_SFT 18
6916 	/*
6917 	 * This is the size in bytes of the inner most L4 header.
6918 	 * This can be subtracted from the payload_offset to determine
6919 	 * the start of the inner most L4 header.
6920 	 */
6921 	#define RX_TPA_START_CMPL_INNER_L4_SIZE_MASK  UINT32_C(0xf8000000)
6922 	#define RX_TPA_START_CMPL_INNER_L4_SIZE_SFT   27
6923 } __rte_packed;
6924 
6925 /*
6926  * This TPA completion structure is used on devices where the
6927  * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
6928  * RX L2 TPA Start V2 Completion Record (32 bytes split to 2 16-byte
6929  * struct)
6930  */
6931 /* rx_tpa_start_v2_cmpl (size:128b/16B) */
6932 struct rx_tpa_start_v2_cmpl {
6933 	uint16_t	flags_type;
6934 	/*
6935 	 * This field indicates the exact type of the completion.
6936 	 * By convention, the LSB identifies the length of the
6937 	 * record in 16B units. Even values indicate 16B
6938 	 * records. Odd values indicate 32B
6939 	 * records.
6940 	 */
6941 	#define RX_TPA_START_V2_CMPL_TYPE_MASK \
6942 		UINT32_C(0x3f)
6943 	#define RX_TPA_START_V2_CMPL_TYPE_SFT                       0
6944 	/*
6945 	 * RX L2 TPA Start V2 Completion:
6946 	 * Completion at the beginning of a TPA operation.
6947 	 * Length = 32B
6948 	 * This is the new version of the RX_TPA_START completion used
6949 	 * in SR2 and later chips.
6950 	 */
6951 	#define RX_TPA_START_V2_CMPL_TYPE_RX_TPA_START_V2 \
6952 		UINT32_C(0xd)
6953 	#define RX_TPA_START_V2_CMPL_TYPE_LAST \
6954 		RX_TPA_START_V2_CMPL_TYPE_RX_TPA_START_V2
6955 	#define RX_TPA_START_V2_CMPL_FLAGS_MASK \
6956 		UINT32_C(0xffc0)
6957 	#define RX_TPA_START_V2_CMPL_FLAGS_SFT                      6
6958 	/*
6959 	 * When this bit is '1', it indicates a packet that has an error
6960 	 * of some type. Type of error is indicated in error_flags.
6961 	 */
6962 	#define RX_TPA_START_V2_CMPL_FLAGS_ERROR \
6963 		UINT32_C(0x40)
6964 	/* This field indicates how the packet was placed in the buffer. */
6965 	#define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_MASK \
6966 		UINT32_C(0x380)
6967 	#define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_SFT             7
6968 	/*
6969 	 * Jumbo:
6970 	 * TPA Packet was placed using jumbo algorithm. This means
6971 	 * that the first buffer will be filled with data before
6972 	 * moving to aggregation buffers. Each aggregation buffer
6973 	 * will be filled before moving to the next aggregation
6974 	 * buffer.
6975 	 */
6976 	#define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_JUMBO \
6977 		(UINT32_C(0x1) << 7)
6978 	/*
6979 	 * Header/Data Separation:
6980 	 * Packet was placed using Header/Data separation algorithm.
6981 	 * The separation location is indicated by the itype field.
6982 	 */
6983 	#define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_HDS \
6984 		(UINT32_C(0x2) << 7)
6985 	/*
6986 	 * IOC/Jumbo:
6987 	 * Packet will be placed using In-Order Completion/Jumbo where
6988 	 * the first packet of the aggregation is placed using Jumbo
6989 	 * Placement. Subsequent packets will be placed such that each
6990 	 * packet starts at the beginning of an aggregation buffer.
6991 	 */
6992 	#define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_IOC_JUMBO \
6993 		(UINT32_C(0x4) << 7)
6994 	/*
6995 	 * GRO/Jumbo:
6996 	 * Packet will be placed using GRO/Jumbo where the first
6997 	 * packet is filled with data. Subsequent packets will be
6998 	 * placed such that any one packet does not span two
6999 	 * aggregation buffers unless it starts at the beginning of
7000 	 * an aggregation buffer.
7001 	 */
7002 	#define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
7003 		(UINT32_C(0x5) << 7)
7004 	/*
7005 	 * GRO/Header-Data Separation:
7006 	 * Packet will be placed using GRO/HDS where the header
7007 	 * is in the first packet.
7008 	 * Payload of each packet will be
7009 	 * placed such that any one packet does not span two
7010 	 * aggregation buffers unless it starts at the beginning of
7011 	 * an aggregation buffer.
7012 	 */
7013 	#define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_GRO_HDS \
7014 		(UINT32_C(0x6) << 7)
7015 	/*
7016 	 * IOC/Header-Data Separation:
7017 	 * Packet will be placed using In-Order Completion/HDS where
7018 	 * the header is in the first packet buffer. Payload of each
7019 	 * packet will be placed such that each packet starts at the
7020 	 * beginning of an aggregation buffer.
7021 	 */
7022 	#define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_IOC_HDS \
7023 		(UINT32_C(0x7) << 7)
7024 	#define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_LAST \
7025 		RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_IOC_HDS
7026 	/* This bit is '1' if the RSS field in this completion is valid. */
7027 	#define RX_TPA_START_V2_CMPL_FLAGS_RSS_VALID \
7028 		UINT32_C(0x400)
7029 	/*
7030 	 * This bit is '1' if metadata has been added to the end of the
7031 	 * packet in host memory. Metadata starts at the first 32B boundary
7032 	 * after the end of the packet for regular and jumbo placement. It
7033 	 * starts at the first 32B boundary after the end of the header for
7034 	 * HDS placement. The length of the metadata is indicated in the
7035 	 * metadata itself.
7036 	 */
7037 	#define RX_TPA_START_V2_CMPL_FLAGS_PKT_METADATA_PRESENT \
7038 		UINT32_C(0x800)
7039 	/*
7040 	 * This value indicates what the inner packet determined for the
7041 	 * packet was.
7042 	 */
7043 	#define RX_TPA_START_V2_CMPL_FLAGS_ITYPE_MASK \
7044 		UINT32_C(0xf000)
7045 	#define RX_TPA_START_V2_CMPL_FLAGS_ITYPE_SFT                 12
7046 	/*
7047 	 * TCP Packet:
7048 	 * Indicates that the packet was IP and TCP.
7049 	 */
7050 	#define RX_TPA_START_V2_CMPL_FLAGS_ITYPE_TCP \
7051 		(UINT32_C(0x2) << 12)
7052 	#define RX_TPA_START_V2_CMPL_FLAGS_ITYPE_LAST \
7053 		RX_TPA_START_V2_CMPL_FLAGS_ITYPE_TCP
7054 	/*
7055 	 * This value indicates the amount of packet data written to the
7056 	 * buffer the opaque field in this completion corresponds to.
7057 	 */
7058 	uint16_t	len;
7059 	/*
7060 	 * This is a copy of the opaque field from the RX BD this completion
7061 	 * corresponds to. If the VNIC is configured to not use an Rx BD for
7062 	 * the TPA Start completion, then this is a copy of the opaque field
7063 	 * from the first BD used to place the TPA Start packet.
7064 	 */
7065 	uint32_t	opaque;
7066 	/*
7067 	 * This value is written by the NIC such that it will be different
7068 	 * for each pass through the completion queue. The even passes
7069 	 * will write 1. The odd passes will write 0.
7070 	 */
7071 	uint8_t	v1;
7072 	/*
7073 	 * This value is written by the NIC such that it will be different
7074 	 * for each pass through the completion queue. The even passes
7075 	 * will write 1. The odd passes will write 0.
7076 	 */
7077 	#define RX_TPA_START_V2_CMPL_V1 UINT32_C(0x1)
7078 	#define RX_TPA_START_V2_CMPL_LAST RX_TPA_START_V2_CMPL_V1
7079 	/*
7080 	 * This is the RSS hash type for the packet. The value is packed
7081 	 * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
7082 	 *
7083 	 * The value of tuple_extrac_op provides the information about
7084 	 * what fields the hash was computed on.
7085 	 * * 0: The RSS hash was computed over source IP address,
7086 	 * destination IP address, source port, and destination port of inner
7087 	 * IP and TCP or UDP headers. Note: For non-tunneled packets,
7088 	 * the packet headers are considered inner packet headers for the RSS
7089 	 * hash computation purpose.
7090 	 * * 1: The RSS hash was computed over source IP address and destination
7091 	 * IP address of inner IP header. Note: For non-tunneled packets,
7092 	 * the packet headers are considered inner packet headers for the RSS
7093 	 * hash computation purpose.
7094 	 * * 2: The RSS hash was computed over source IP address,
7095 	 * destination IP address, source port, and destination port of
7096 	 * IP and TCP or UDP headers of outer tunnel headers.
7097 	 * Note: For non-tunneled packets, this value is not applicable.
7098 	 * * 3: The RSS hash was computed over source IP address and
7099 	 * destination IP address of IP header of outer tunnel headers.
7100 	 * Note: For non-tunneled packets, this value is not applicable.
7101 	 *
7102 	 * Note that 4-tuples values listed above are applicable
7103 	 * for layer 4 protocols supported and enabled for RSS in the hardware,
7104 	 * HWRM firmware, and drivers. For example, if RSS hash is supported and
7105 	 * enabled for TCP traffic only, then the values of tuple_extract_op
7106 	 * corresponding to 4-tuples are only valid for TCP traffic.
7107 	 */
7108 	uint8_t	rss_hash_type;
7109 	/*
7110 	 * This is the aggregation ID that the completion is associated
7111 	 * with. Use this number to correlate the TPA start completion
7112 	 * with the TPA end completion.
7113 	 */
7114 	uint16_t	agg_id;
7115 	/*
7116 	 * This is the aggregation ID that the completion is associated
7117 	 * with. Use this number to correlate the TPA start completion
7118 	 * with the TPA end completion.
7119 	 */
7120 	#define RX_TPA_START_V2_CMPL_AGG_ID_MASK                UINT32_C(0xfff)
7121 	#define RX_TPA_START_V2_CMPL_AGG_ID_SFT                 0
7122 	#define RX_TPA_START_V2_CMPL_METADATA1_MASK \
7123 		UINT32_C(0xf000)
7124 	#define RX_TPA_START_V2_CMPL_METADATA1_SFT              12
7125 	/* When meta_format != 0, this value is the VLAN TPID_SEL. */
7126 	#define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_MASK \
7127 		UINT32_C(0x7000)
7128 	#define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_SFT      12
7129 	/* 0x88a8 */
7130 	#define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_TPID88A8 \
7131 		(UINT32_C(0x0) << 12)
7132 	/* 0x8100 */
7133 	#define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_TPID8100 \
7134 		(UINT32_C(0x1) << 12)
7135 	/* 0x9100 */
7136 	#define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_TPID9100 \
7137 		(UINT32_C(0x2) << 12)
7138 	/* 0x9200 */
7139 	#define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_TPID9200 \
7140 		(UINT32_C(0x3) << 12)
7141 	/* 0x9300 */
7142 	#define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_TPID9300 \
7143 		(UINT32_C(0x4) << 12)
7144 	/* Value programmed in CFA VLANTPID register. */
7145 	#define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_TPIDCFG \
7146 		(UINT32_C(0x5) << 12)
7147 	#define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_LAST \
7148 		RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_TPIDCFG
7149 	/* When meta_format != 0, this value is the VLAN valid. */
7150 	#define RX_TPA_START_V2_CMPL_METADATA1_VALID \
7151 		UINT32_C(0x8000)
7152 	/*
7153 	 * This value is the RSS hash value calculated for the packet
7154 	 * based on the mode bits and key value in the VNIC.
7155 	 * When vee_cmpl_mode is set in VNIC context, this is the lower
7156 	 * 32b of the host address from the first BD used to place the packet.
7157 	 */
7158 	uint32_t	rss_hash;
7159 } __rte_packed;
7160 
7161 /*
7162  * Last 16 bytes of RX L2 TPA Start V2 Completion Record
7163  *
7164  * This TPA completion structure is used on devices where the
7165  * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
7166  */
7167 /* rx_tpa_start_v2_cmpl_hi (size:128b/16B) */
7168 struct rx_tpa_start_v2_cmpl_hi {
7169 	uint32_t	flags2;
7170 	/* This indicates that the aggregation was done using GRO rules. */
7171 	#define RX_TPA_START_V2_CMPL_FLAGS2_AGG_GRO \
7172 		UINT32_C(0x4)
7173 	/*
7174 	 * When this bit is '0', the cs_ok field has the following definition:-
7175 	 * ip_cs_ok[2:0] = The number of header groups with a valid IP checksum
7176 	 * in the delivered packet, counted from the outer-most header group to
7177 	 * the inner-most header group, stopping at the first error. -
7178 	 * l4_cs_ok[5:3] = The number of header groups with a valid L4 checksum
7179 	 * in the delivered packet, counted from the outer-most header group to
7180 	 * the inner-most header group, stopping at the first error. When this
7181 	 * bit is '1', the cs_ok field has the following definition: -
7182 	 * hdr_cnt[2:0] = The number of header groups that were parsed by the
7183 	 * chip and passed in the delivered packet. - ip_cs_all_ok[3] =This bit
7184 	 * will be '1' if all the parsed header groups with an IP checksum are
7185 	 * valid. - l4_cs_all_ok[4] = This bit will be '1' if all the parsed
7186 	 * header groups with an L4 checksum are valid.
7187 	 */
7188 	#define RX_TPA_START_V2_CMPL_FLAGS2_CS_ALL_OK_MODE \
7189 		UINT32_C(0x8)
7190 	/* This value indicates what format the metadata field is. */
7191 	#define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_MASK \
7192 		UINT32_C(0xf0)
7193 	#define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_SFT            4
7194 	/* There is no metadata information. Values are zero. */
7195 	#define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_NONE \
7196 		(UINT32_C(0x0) << 4)
7197 	/*
7198 	 * The {metadata1, metadata0} fields contain the vtag
7199 	 * information: - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0],
7200 	 * de, vid[11:0]} The metadata2 field contains the table scope
7201 	 * and action record pointer. - metadata2[25:0] contains the
7202 	 * action record pointer. - metadata2[31:26] contains the table
7203 	 * scope.
7204 	 */
7205 	#define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_ACT_REC_PTR \
7206 		(UINT32_C(0x1) << 4)
7207 	/*
7208 	 * The {metadata1, metadata0} fields contain the vtag
7209 	 * information:
7210 	 * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0], de, vid[11:0]}
7211 	 * The metadata2 field contains the Tunnel ID
7212 	 * value, justified to LSB.
7213 	 * - VXLAN = VNI[23:0] -> VXLAN Network ID
7214 	 * - Geneve (NGE) = VNI[23:0] a-> Virtual Network Identifier
7215 	 * - NVGRE = TNI[23:0] -> Tenant Network ID
7216 	 * - GRE = KEY[31:0] -> key field with bit mask. zero if K=0
7217 	 * - IPv4 = 0 (not populated)
7218 	 * - IPv6 = Flow Label[19:0]
7219 	 * - PPPoE = sessionID[15:0]
7220 	 * - MPLs = Outer label[19:0]
7221 	 * - UPAR = Selected[31:0] with bit mask
7222 	 */
7223 	#define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_TUNNEL_ID \
7224 		(UINT32_C(0x2) << 4)
7225 	/*
7226 	 * The {metadata1, metadata0} fields contain the vtag
7227 	 * information:
7228 	 * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0],de, vid[11:0]}
7229 	 * The metadata2 field contains the 32b metadata from the prepended
7230 	 * header (chdr_data).
7231 	 */
7232 	#define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_CHDR_DATA \
7233 		(UINT32_C(0x3) << 4)
7234 	/*
7235 	 * The {metadata1, metadata0} fields contain the vtag
7236 	 * information:
7237 	 * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0], de, vid[11:0]}
7238 	 * The metadata2 field contains the outer_l3_offset,
7239 	 * inner_l2_offset, inner_l3_offset, and inner_l4_size.
7240 	 * - metadata2[8:0] contains the outer_l3_offset.
7241 	 * - metadata2[17:9] contains the inner_l2_offset.
7242 	 * - metadata2[26:18] contains the inner_l3_offset.
7243 	 * - metadata2[31:27] contains the inner_l4_size.
7244 	 */
7245 	#define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET \
7246 		(UINT32_C(0x4) << 4)
7247 	#define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_LAST \
7248 		RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET
7249 	/*
7250 	 * This field indicates the IP type for the inner-most IP header.
7251 	 * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
7252 	 * This value is only valid if itype indicates a packet
7253 	 * with an IP header.
7254 	 */
7255 	#define RX_TPA_START_V2_CMPL_FLAGS2_IP_TYPE \
7256 		UINT32_C(0x100)
7257 	/*
7258 	 * This indicates that the complete 1's complement checksum was
7259 	 * calculated for the packet in the affregation.
7260 	 */
7261 	#define RX_TPA_START_V2_CMPL_FLAGS2_COMPLETE_CHECKSUM_CALC \
7262 		UINT32_C(0x200)
7263 	/*
7264 	 * This field indicates the status of IP and L4 CS calculations done
7265 	 * by the chip. The format of this field is indicated by the
7266 	 * cs_all_ok_mode bit.
7267 	 * CS status for TPA packets is always valid. This means that "all_ok"
7268 	 * status will always be set. The ok count status will be set
7269 	 * appropriately for the packet header, such that all existing CS
7270 	 * values are ok.
7271 	 */
7272 	#define RX_TPA_START_V2_CMPL_FLAGS2_CS_OK_MASK \
7273 		UINT32_C(0xfc00)
7274 	#define RX_TPA_START_V2_CMPL_FLAGS2_CS_OK_SFT                  10
7275 	/*
7276 	 * This value is the complete 1's complement checksum calculated from
7277 	 * the start of the outer L3 header to the end of the packet (not
7278 	 * including the ethernet crc). It is valid when the
7279 	 * 'complete_checksum_calc' flag is set. For TPA Start completions,
7280 	 * the complete checksum is calculated for the first packet in the
7281 	 * aggregation only.
7282 	 */
7283 	#define RX_TPA_START_V2_CMPL_FLAGS2_COMPLETE_CHECKSUM_MASK \
7284 		UINT32_C(0xffff0000)
7285 	#define RX_TPA_START_V2_CMPL_FLAGS2_COMPLETE_CHECKSUM_SFT      16
7286 	/*
7287 	 * This is data from the CFA block as indicated by the meta_format
7288 	 * field.
7289 	 * - meta_format 0 - none - metadata2 = 0 - not valid/not stripped
7290 	 * - meta_format 1 - act_rec_ptr - metadata2 = {table_scope[5:0],
7291 	 *   act_rec_ptr[25:0]}
7292 	 * - meta_format 2 - tunnel_id - metadata2 = tunnel_id[31:0]
7293 	 * - meta_format 3 - chdr_data - metadata2 = updated_chdr_data[31:0]
7294 	 * - meta_format 4 - hdr_offsets - metadata2 = hdr_offsets[31:0]
7295 	 * When vee_cmpl_mode is set in VNIC context, this is the upper 32b
7296 	 * of the host address from the first BD used to place the packet.
7297 	 */
7298 	uint32_t	metadata2;
7299 	uint16_t	errors_v2;
7300 	/*
7301 	 * This value is written by the NIC such that it will be different
7302 	 * for each pass through the completion queue. The even passes
7303 	 * will write 1. The odd passes will write 0.
7304 	 */
7305 	#define RX_TPA_START_V2_CMPL_V2 \
7306 		UINT32_C(0x1)
7307 	#define RX_TPA_START_V2_CMPL_ERRORS_MASK \
7308 		UINT32_C(0xfffe)
7309 	#define RX_TPA_START_V2_CMPL_ERRORS_SFT                     1
7310 	/*
7311 	 * This error indicates that there was some sort of problem with
7312 	 * the BDs for the packetThe packet should be treated as
7313 	 * invalid.
7314 	 */
7315 	#define RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_MASK \
7316 		UINT32_C(0xe)
7317 	#define RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_SFT         1
7318 	/* No buffer error */
7319 	#define RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
7320 		(UINT32_C(0x0) << 1)
7321 	/*
7322 	 * Did Not Fit:
7323 	 * Packet did not fit into packet buffer provided. This means
7324 	 * that the TPA Start packet was too big to be placed into the
7325 	 * per-packet maximum number of physical buffers configured for
7326 	 * the VNIC, or that it was too big to be placed into the
7327 	 * per-aggregation maximum number of physical buffers configured
7328 	 * for the VNIC. This error only occurs when the VNIC is
7329 	 * configured for variable size receive buffers.
7330 	 */
7331 	#define RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_DID_NOT_FIT \
7332 		(UINT32_C(0x1) << 1)
7333 	/*
7334 	 * Bad Format:
7335 	 * BDs were not formatted correctly.
7336 	 */
7337 	#define RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
7338 		(UINT32_C(0x3) << 1)
7339 	/*
7340 	 * Flush:
7341 	 * There was a bad_format error on the previous operation
7342 	 */
7343 	#define RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
7344 		(UINT32_C(0x5) << 1)
7345 	#define RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_LAST \
7346 		RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_FLUSH
7347 	/*
7348 	 * This is data from the CFA block as indicated by the meta_format
7349 	 * field.
7350 	 */
7351 	uint16_t	metadata0;
7352 	/* When meta_format != 0, this value is the VLAN VID. */
7353 	#define RX_TPA_START_V2_CMPL_METADATA0_VID_MASK UINT32_C(0xfff)
7354 	#define RX_TPA_START_V2_CMPL_METADATA0_VID_SFT 0
7355 	/* When meta_format != 0, this value is the VLAN DE. */
7356 	#define RX_TPA_START_V2_CMPL_METADATA0_DE      UINT32_C(0x1000)
7357 	/* When meta_format != 0, this value is the VLAN PRI. */
7358 	#define RX_TPA_START_V2_CMPL_METADATA0_PRI_MASK UINT32_C(0xe000)
7359 	#define RX_TPA_START_V2_CMPL_METADATA0_PRI_SFT 13
7360 	/*
7361 	 * This field contains the outer_l3_offset, inner_l2_offset,
7362 	 * inner_l3_offset, and inner_l4_size.
7363 	 *
7364 	 * hdr_offsets[8:0] contains the outer_l3_offset.
7365 	 * hdr_offsets[17:9] contains the inner_l2_offset.
7366 	 * hdr_offsets[26:18] contains the inner_l3_offset.
7367 	 * hdr_offsets[31:27] contains the inner_l4_size.
7368 	 */
7369 	uint32_t	hdr_offsets;
7370 } __rte_packed;
7371 
7372 /*
7373  * This TPA completion structure is used on devices where the
7374  * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
7375  * RX L2 TPA Start V3 Completion Record (32 bytes split to 2 16-byte
7376  * struct)
7377  */
7378 /* rx_tpa_start_v3_cmpl (size:128b/16B) */
7379 struct rx_tpa_start_v3_cmpl {
7380 	uint16_t	flags_type;
7381 	/*
7382 	 * This field indicates the exact type of the completion.
7383 	 * By convention, the LSB identifies the length of the
7384 	 * record in 16B units. Even values indicate 16B
7385 	 * records. Odd values indicate 32B
7386 	 * records.
7387 	 */
7388 	#define RX_TPA_START_V3_CMPL_TYPE_MASK \
7389 		UINT32_C(0x3f)
7390 	#define RX_TPA_START_V3_CMPL_TYPE_SFT                       0
7391 	/*
7392 	 * RX L2 TPA Start V3 completion:
7393 	 * Completion at the beginning of a TPA operation.
7394 	 * Length = 32B
7395 	 * This is the new version of the RX_TPA_START completion used
7396 	 * in Thor2 and later chips.
7397 	 */
7398 	#define RX_TPA_START_V3_CMPL_TYPE_RX_TPA_START_V3 \
7399 		UINT32_C(0x19)
7400 	#define RX_TPA_START_V3_CMPL_TYPE_LAST \
7401 		RX_TPA_START_V3_CMPL_TYPE_RX_TPA_START_V3
7402 	#define RX_TPA_START_V3_CMPL_FLAGS_MASK \
7403 		UINT32_C(0xffc0)
7404 	#define RX_TPA_START_V3_CMPL_FLAGS_SFT                      6
7405 	/*
7406 	 * When this bit is '1', it indicates a packet that has an error
7407 	 * of some type. Type of error is indicated in error_flags.
7408 	 */
7409 	#define RX_TPA_START_V3_CMPL_FLAGS_ERROR \
7410 		UINT32_C(0x40)
7411 	/* This field indicates how the packet was placed in the buffer. */
7412 	#define RX_TPA_START_V3_CMPL_FLAGS_PLACEMENT_MASK \
7413 		UINT32_C(0x380)
7414 	#define RX_TPA_START_V3_CMPL_FLAGS_PLACEMENT_SFT             7
7415 	/*
7416 	 * Jumbo:
7417 	 * TPA Packet was placed using jumbo algorithm. This means
7418 	 * that the first buffer will be filled with data before
7419 	 * moving to aggregation buffers. Each aggregation buffer
7420 	 * will be filled before moving to the next aggregation
7421 	 * buffer.
7422 	 */
7423 	#define RX_TPA_START_V3_CMPL_FLAGS_PLACEMENT_JUMBO \
7424 		(UINT32_C(0x1) << 7)
7425 	/*
7426 	 * Header/Data Separation:
7427 	 * Packet was placed using Header/Data separation algorithm.
7428 	 * The separation location is indicated by the itype field.
7429 	 */
7430 	#define RX_TPA_START_V3_CMPL_FLAGS_PLACEMENT_HDS \
7431 		(UINT32_C(0x2) << 7)
7432 	/*
7433 	 * IOC/Jumbo:
7434 	 * Packet will be placed using In-Order Completion/Jumbo where
7435 	 * the first packet of the aggregation is placed using Jumbo
7436 	 * Placement. Subsequent packets will be placed such that each
7437 	 * packet starts at the beginning of an aggregation buffer.
7438 	 */
7439 	#define RX_TPA_START_V3_CMPL_FLAGS_PLACEMENT_IOC_JUMBO \
7440 		(UINT32_C(0x4) << 7)
7441 	/*
7442 	 * GRO/Jumbo:
7443 	 * Packet will be placed using GRO/Jumbo where the first
7444 	 * packet is filled with data. Subsequent packets will be
7445 	 * placed such that any one packet does not span two
7446 	 * aggregation buffers unless it starts at the beginning of
7447 	 * an aggregation buffer.
7448 	 */
7449 	#define RX_TPA_START_V3_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
7450 		(UINT32_C(0x5) << 7)
7451 	/*
7452 	 * GRO/Header-Data Separation:
7453 	 * Packet will be placed using GRO/HDS where the header
7454 	 * is in the first packet.
7455 	 * Payload of each packet will be
7456 	 * placed such that any one packet does not span two
7457 	 * aggregation buffers unless it starts at the beginning of
7458 	 * an aggregation buffer.
7459 	 */
7460 	#define RX_TPA_START_V3_CMPL_FLAGS_PLACEMENT_GRO_HDS \
7461 		(UINT32_C(0x6) << 7)
7462 	/*
7463 	 * IOC/Header-Data Separation:
7464 	 * Packet will be placed using In-Order Completion/HDS where
7465 	 * the header is in the first packet buffer. Payload of each
7466 	 * packet will be placed such that each packet starts at the
7467 	 * beginning of an aggregation buffer.
7468 	 */
7469 	#define RX_TPA_START_V3_CMPL_FLAGS_PLACEMENT_IOC_HDS \
7470 		(UINT32_C(0x7) << 7)
7471 	#define RX_TPA_START_V3_CMPL_FLAGS_PLACEMENT_LAST \
7472 		RX_TPA_START_V3_CMPL_FLAGS_PLACEMENT_IOC_HDS
7473 	/* This bit is '1' if the RSS field in this completion is valid. */
7474 	#define RX_TPA_START_V3_CMPL_FLAGS_RSS_VALID \
7475 		UINT32_C(0x400)
7476 	/*
7477 	 * This bit is '1' if metadata has been added to the end of the
7478 	 * packet in host memory. Metadata starts at the first 32B boundary
7479 	 * after the end of the packet for regular and jumbo placement. It
7480 	 * starts at the first 32B boundary after the end of the header for
7481 	 * HDS placement. The length of the metadata is indicated in the
7482 	 * metadata itself.
7483 	 */
7484 	#define RX_TPA_START_V3_CMPL_FLAGS_PKT_METADATA_PRESENT \
7485 		UINT32_C(0x800)
7486 	/*
7487 	 * This value indicates what the inner packet determined for the
7488 	 * packet was.
7489 	 */
7490 	#define RX_TPA_START_V3_CMPL_FLAGS_ITYPE_MASK \
7491 		UINT32_C(0xf000)
7492 	#define RX_TPA_START_V3_CMPL_FLAGS_ITYPE_SFT                 12
7493 	/*
7494 	 * TCP Packet:
7495 	 * Indicates that the packet was IP and TCP.
7496 	 */
7497 	#define RX_TPA_START_V3_CMPL_FLAGS_ITYPE_TCP \
7498 		(UINT32_C(0x2) << 12)
7499 	#define RX_TPA_START_V3_CMPL_FLAGS_ITYPE_LAST \
7500 		RX_TPA_START_V3_CMPL_FLAGS_ITYPE_TCP
7501 	/*
7502 	 * This value indicates the amount of packet data written to the
7503 	 * buffer the opaque field in this completion corresponds to.
7504 	 */
7505 	uint16_t	len;
7506 	/*
7507 	 * This is a copy of the opaque field from the RX BD this completion
7508 	 * corresponds to. If the VNIC is configured to not use an Rx BD for
7509 	 * the TPA Start completion, then this is a copy of the opaque field
7510 	 * from the first BD used to place the TPA Start packet.
7511 	 */
7512 	uint32_t	opaque;
7513 	uint16_t	rss_hash_type_v1;
7514 	/*
7515 	 * This value is written by the NIC such that it will be different
7516 	 * for each pass through the completion queue. The even passes
7517 	 * will write 1. The odd passes will write 0.
7518 	 */
7519 	#define RX_TPA_START_V3_CMPL_V1                UINT32_C(0x1)
7520 	/* unused1 is 6 b. */
7521 	#define RX_TPA_START_V3_CMPL_UNUSED1_MASK      UINT32_C(0x7e)
7522 	#define RX_TPA_START_V3_CMPL_UNUSED1_SFT       1
7523 	/*
7524 	 * This is the RSS hash type for the packet. The value is packed
7525 	 * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
7526 	 *
7527 	 * The value of tuple_extrac_op provides the information about
7528 	 * what fields the hash was computed on.
7529 	 * * 0: The RSS hash was computed over source IP address,
7530 	 * destination IP address, source port, and destination port of inner
7531 	 * IP and TCP or UDP headers.
7532 	 * * 1: The RSS hash was computed over source IP address and
7533 	 * destination IP address of inner IP header.
7534 	 * * 2: The RSS hash was computed over source IP address,
7535 	 * destination IP address, source port, and destination port of
7536 	 * IP and TCP or UDP headers of outer tunnel headers.
7537 	 * Note: For non-tunneled packets, this value is not applicable.
7538 	 * * 3: The RSS hash was computed over source IP address and
7539 	 * destination IP address of IP header of outer tunnel headers.
7540 	 * Note: For non-tunneled packets, this value is not applicable.
7541 	 * * 4: The RSS hash was computed over source IP address of the inner
7542 	 * IP header.
7543 	 * * 5: The RSS hash was computed over destination IP address of the
7544 	 * inner IP header.
7545 	 * * 6: The RSS hash was computed over source IP address of the outer
7546 	 * IP header. Note: For non-tunneled packets, this value is not
7547 	 * applicable
7548 	 * * 7: The RSS hash was computed over destination IP address of the
7549 	 * outer IP header.
7550 	 * Note: For non-tunneled packets, this value is not applicable.
7551 	 * * 8: The RSS hash was computed over source IP address, destination
7552 	 * IP address, and flow label of the inner IP header.
7553 	 * Note: For packets without an inner IPv6 header, this value is not
7554 	 * applicable.
7555 	 * * 9: The RSS hash was computed over the flow label of the inner
7556 	 * IP header.
7557 	 * Note: For packets without an inner IPv6 header, this value
7558 	 * is not applicable.
7559 	 * * 10: The RSS hash was computed over source IP address, destination
7560 	 * IP address, and flow label of the outer IP header.
7561 	 * Note: For packets without an outer IPv6 header, this value is not
7562 	 * applicable.
7563 	 * * 11: The RSS hash was computed over the flow label of the outer
7564 	 * IP header. Note: For packets without an outer IPv6 header, this
7565 	 * value is not applicable.
7566 	 *
7567 	 * Note that 4-tuples values listed above are applicable
7568 	 * for layer 4 protocols supported and enabled for RSS in the hardware,
7569 	 * HWRM firmware, and drivers. For example, if RSS hash is supported
7570 	 * and enabled for TCP traffic only, then the values of
7571 	 * tuple_extract_op corresponding to 4-tuples are only valid for TCP
7572 	 * traffic
7573 	 */
7574 	#define RX_TPA_START_V3_CMPL_RSS_HASH_TYPE_MASK UINT32_C(0xff80)
7575 	#define RX_TPA_START_V3_CMPL_RSS_HASH_TYPE_SFT 7
7576 	/*
7577 	 * This is the aggregation ID that the completion is associated
7578 	 * with. Use this number to correlate the TPA start completion
7579 	 * with the TPA end completion.
7580 	 */
7581 	uint16_t	agg_id;
7582 	/*
7583 	 * This is the aggregation ID that the completion is associated
7584 	 * with. Use this number to correlate the TPA start completion
7585 	 * with the TPA end completion.
7586 	 */
7587 	#define RX_TPA_START_V3_CMPL_AGG_ID_MASK                UINT32_C(0xfff)
7588 	#define RX_TPA_START_V3_CMPL_AGG_ID_SFT                 0
7589 	#define RX_TPA_START_V3_CMPL_METADATA1_MASK \
7590 		UINT32_C(0xf000)
7591 	#define RX_TPA_START_V3_CMPL_METADATA1_SFT              12
7592 	/* When meta_format != 0, this value is the VLAN TPID_SEL. */
7593 	#define RX_TPA_START_V3_CMPL_METADATA1_TPID_SEL_MASK \
7594 		UINT32_C(0x7000)
7595 	#define RX_TPA_START_V3_CMPL_METADATA1_TPID_SEL_SFT      12
7596 	/* 0x88a8 */
7597 	#define RX_TPA_START_V3_CMPL_METADATA1_TPID_SEL_TPID88A8 \
7598 		(UINT32_C(0x0) << 12)
7599 	/* 0x8100 */
7600 	#define RX_TPA_START_V3_CMPL_METADATA1_TPID_SEL_TPID8100 \
7601 		(UINT32_C(0x1) << 12)
7602 	/* 0x9100 */
7603 	#define RX_TPA_START_V3_CMPL_METADATA1_TPID_SEL_TPID9100 \
7604 		(UINT32_C(0x2) << 12)
7605 	/* 0x9200 */
7606 	#define RX_TPA_START_V3_CMPL_METADATA1_TPID_SEL_TPID9200 \
7607 		(UINT32_C(0x3) << 12)
7608 	/* 0x9300 */
7609 	#define RX_TPA_START_V3_CMPL_METADATA1_TPID_SEL_TPID9300 \
7610 		(UINT32_C(0x4) << 12)
7611 	/* Value programmed in CFA VLANTPID register. */
7612 	#define RX_TPA_START_V3_CMPL_METADATA1_TPID_SEL_TPIDCFG \
7613 		(UINT32_C(0x5) << 12)
7614 	#define RX_TPA_START_V3_CMPL_METADATA1_TPID_SEL_LAST \
7615 		RX_TPA_START_V3_CMPL_METADATA1_TPID_SEL_TPIDCFG
7616 	/* When meta_format != 0, this value is the VLAN valid. */
7617 	#define RX_TPA_START_V3_CMPL_METADATA1_VALID \
7618 		UINT32_C(0x8000)
7619 	/*
7620 	 * This value is the RSS hash value calculated for the packet
7621 	 * based on the mode bits and key value in the VNIC.
7622 	 * When vee_cmpl_mode is set in VNIC context, this is the lower
7623 	 * 32b of the host address from the first BD used to place the packet.
7624 	 */
7625 	uint32_t	rss_hash;
7626 } __rte_packed;
7627 
7628 /*
7629  * Last 16 bytes of RX L2 TPA Start V3 Completion Record
7630  *
7631  * This TPA completion structure is used on devices where the
7632  * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
7633  */
7634 /* rx_tpa_start_v3_cmpl_hi (size:128b/16B) */
7635 struct rx_tpa_start_v3_cmpl_hi {
7636 	uint32_t	flags2;
7637 	/*
7638 	 * This indicates that the ip checksum was calculated for the inner
7639 	 * packet and that the ip_cs_error field indicates if there was an
7640 	 * error.
7641 	 */
7642 	#define RX_TPA_START_V3_CMPL_FLAGS2_IP_CS_CALC \
7643 		UINT32_C(0x1)
7644 	/*
7645 	 * This indicates that the TCP, UDP or ICMP checksum was calculated
7646 	 * for the inner packet and that the l4_cs_error field indicates if
7647 	 * there was an error.
7648 	 */
7649 	#define RX_TPA_START_V3_CMPL_FLAGS2_L4_CS_CALC \
7650 		UINT32_C(0x2)
7651 	/*
7652 	 * This indicates that the ip checksum was calculated for the tunnel
7653 	 * header and that the t_ip_cs_error field indicates if there was an
7654 	 * error.
7655 	 */
7656 	#define RX_TPA_START_V3_CMPL_FLAGS2_T_IP_CS_CALC \
7657 		UINT32_C(0x4)
7658 	/*
7659 	 * This indicates that the UDP checksum was calculated for the tunnel
7660 	 * packet and that the t_l4_cs_error field indicates if there was an
7661 	 * error.
7662 	 */
7663 	#define RX_TPA_START_V3_CMPL_FLAGS2_T_L4_CS_CALC \
7664 		UINT32_C(0x8)
7665 	/* This value indicates what format the metadata field is. */
7666 	#define RX_TPA_START_V3_CMPL_FLAGS2_META_FORMAT_MASK \
7667 		UINT32_C(0xf0)
7668 	#define RX_TPA_START_V3_CMPL_FLAGS2_META_FORMAT_SFT            4
7669 	/* There is no metadata information. Values are zero. */
7670 	#define RX_TPA_START_V3_CMPL_FLAGS2_META_FORMAT_NONE \
7671 		(UINT32_C(0x0) << 4)
7672 	/*
7673 	 * The {metadata1, metadata0} fields contain the vtag
7674 	 * information: - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0],
7675 	 * de, vid[11:0]} The metadata2 field contains the table scope
7676 	 * and action record pointer. - metadata2[25:0] contains the
7677 	 * action record pointer. - metadata2[31:26] contains the table
7678 	 * scope.
7679 	 */
7680 	#define RX_TPA_START_V3_CMPL_FLAGS2_META_FORMAT_ACT_REC_PTR \
7681 		(UINT32_C(0x1) << 4)
7682 	/*
7683 	 * The {metadata1, metadata0} fields contain the vtag
7684 	 * information:
7685 	 * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0], de, vid[11:0]}
7686 	 * The metadata2 field contains the Tunnel ID
7687 	 * value, justified to LSB.
7688 	 * - VXLAN = VNI[23:0] -> VXLAN Network ID
7689 	 * - Geneve (NGE) = VNI[23:0] a-> Virtual Network Identifier
7690 	 * - NVGRE = TNI[23:0] -> Tenant Network ID
7691 	 * - GRE = KEY[31:0] -> key field with bit mask. zero if K=0
7692 	 * - IPv4 = 0 (not populated)
7693 	 * - IPv6 = Flow Label[19:0]
7694 	 * - PPPoE = sessionID[15:0]
7695 	 * - MPLs = Outer label[19:0]
7696 	 * - UPAR = Selected[31:0] with bit mask
7697 	 */
7698 	#define RX_TPA_START_V3_CMPL_FLAGS2_META_FORMAT_TUNNEL_ID \
7699 		(UINT32_C(0x2) << 4)
7700 	/*
7701 	 * The {metadata1, metadata0} fields contain the vtag
7702 	 * information:
7703 	 * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0],de, vid[11:0]}
7704 	 * The metadata2 field contains the 32b metadata from the prepended
7705 	 * header (chdr_data).
7706 	 */
7707 	#define RX_TPA_START_V3_CMPL_FLAGS2_META_FORMAT_CHDR_DATA \
7708 		(UINT32_C(0x3) << 4)
7709 	/*
7710 	 * The {metadata1, metadata0} fields contain the vtag
7711 	 * information:
7712 	 * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0], de, vid[11:0]}
7713 	 * The metadata2 field contains the outer_l3_offset,
7714 	 * inner_l2_offset, inner_l3_offset, and inner_l4_size.
7715 	 * - metadata2[8:0] contains the outer_l3_offset.
7716 	 * - metadata2[17:9] contains the inner_l2_offset.
7717 	 * - metadata2[26:18] contains the inner_l3_offset.
7718 	 * - metadata2[31:27] contains the inner_l4_size.
7719 	 */
7720 	#define RX_TPA_START_V3_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET \
7721 		(UINT32_C(0x4) << 4)
7722 	#define RX_TPA_START_V3_CMPL_FLAGS2_META_FORMAT_LAST \
7723 		RX_TPA_START_V3_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET
7724 	/*
7725 	 * This field indicates the IP type for the inner-most IP header.
7726 	 * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
7727 	 * This value is only valid if itype indicates a packet
7728 	 * with an IP header.
7729 	 */
7730 	#define RX_TPA_START_V3_CMPL_FLAGS2_IP_TYPE \
7731 		UINT32_C(0x100)
7732 	/*
7733 	 * This indicates that the complete 1's complement checksum was
7734 	 * calculated for the packet.
7735 	 */
7736 	#define RX_TPA_START_V3_CMPL_FLAGS2_COMPLETE_CHECKSUM_CALC \
7737 		UINT32_C(0x200)
7738 	/*
7739 	 * This field indicates the status of IP and L4 CS calculations done
7740 	 * by the chip. The format of this field is indicated by the
7741 	 * cs_all_ok_mode bit.
7742 	 */
7743 	#define RX_TPA_START_V3_CMPL_FLAGS2_T_IP_TYPE \
7744 		UINT32_C(0x400)
7745 	/* Indicates that the Tunnel IP type was IPv4 */
7746 	#define RX_TPA_START_V3_CMPL_FLAGS2_T_IP_TYPE_IPV4 \
7747 		(UINT32_C(0x0) << 10)
7748 	/* Indicates that the Tunnel IP type was IPv6 */
7749 	#define RX_TPA_START_V3_CMPL_FLAGS2_T_IP_TYPE_IPV6 \
7750 		(UINT32_C(0x1) << 10)
7751 	#define RX_TPA_START_V3_CMPL_FLAGS2_T_IP_TYPE_LAST \
7752 		RX_TPA_START_V3_CMPL_FLAGS2_T_IP_TYPE_IPV6
7753 	/* This indicates that the aggregation was done using GRO rules. */
7754 	#define RX_TPA_START_V3_CMPL_FLAGS2_AGG_GRO \
7755 		UINT32_C(0x800)
7756 	/*
7757 	 * This value is the complete 1's complement checksum calculated from
7758 	 * the start of the outer L3 header to the end of the packet (not
7759 	 * including the ethernet crc). It is valid when the
7760 	 * 'complete_checksum_calc' flag is set. For TPA Start completions,
7761 	 * the complete checksum is calculated for the first packet in the
7762 	 * aggregation only.
7763 	 */
7764 	#define RX_TPA_START_V3_CMPL_FLAGS2_COMPLETE_CHECKSUM_MASK \
7765 		UINT32_C(0xffff0000)
7766 	#define RX_TPA_START_V3_CMPL_FLAGS2_COMPLETE_CHECKSUM_SFT      16
7767 	/*
7768 	 * This is data from the CFA block as indicated by the meta_format
7769 	 * field.
7770 	 * - meta_format 0 - none - metadata2 = 0 - not valid/not stripped
7771 	 * - meta_format 1 - act_rec_ptr - metadata2 = {table_scope[5:0],
7772 	 *   act_rec_ptr[25:0]}
7773 	 * - meta_format 2 - tunnel_id - metadata2 = tunnel_id[31:0]
7774 	 * - meta_format 3 - chdr_data - metadata2 = updated_chdr_data[31:0]
7775 	 * - meta_format 4 - hdr_offsets - metadata2 = hdr_offsets[31:0]
7776 	 * When vee_cmpl_mode is set in VNIC context, this is the upper 32b
7777 	 * of the host address from the first BD used to place the packet.
7778 	 */
7779 	uint32_t	metadata2;
7780 	uint16_t	errors_v2;
7781 	/*
7782 	 * This value is written by the NIC such that it will be different
7783 	 * for each pass through the completion queue. The even passes
7784 	 * will write 1. The odd passes will write 0.
7785 	 */
7786 	#define RX_TPA_START_V3_CMPL_V2 \
7787 		UINT32_C(0x1)
7788 	#define RX_TPA_START_V3_CMPL_ERRORS_MASK \
7789 		UINT32_C(0xfffe)
7790 	#define RX_TPA_START_V3_CMPL_ERRORS_SFT                     1
7791 	/*
7792 	 * This error indicates that there was some sort of problem with
7793 	 * the BDs for the packetThe packet should be treated as
7794 	 * invalid.
7795 	 */
7796 	#define RX_TPA_START_V3_CMPL_ERRORS_BUFFER_ERROR_MASK \
7797 		UINT32_C(0xe)
7798 	#define RX_TPA_START_V3_CMPL_ERRORS_BUFFER_ERROR_SFT         1
7799 	/* No buffer error */
7800 	#define RX_TPA_START_V3_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
7801 		(UINT32_C(0x0) << 1)
7802 	/*
7803 	 * Did Not Fit:
7804 	 * Packet did not fit into packet buffer provided. This means
7805 	 * that the TPA Start packet was too big to be placed into the
7806 	 * per-packet maximum number of physical buffers configured for
7807 	 * the VNIC, or that it was too big to be placed into the
7808 	 * per-aggregation maximum number of physical buffers configured
7809 	 * for the VNIC. This error only occurs when the VNIC is
7810 	 * configured for variable size receive buffers.
7811 	 */
7812 	#define RX_TPA_START_V3_CMPL_ERRORS_BUFFER_ERROR_DID_NOT_FIT \
7813 		(UINT32_C(0x1) << 1)
7814 	/*
7815 	 * Bad Format:
7816 	 * BDs were not formatted correctly.
7817 	 */
7818 	#define RX_TPA_START_V3_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
7819 		(UINT32_C(0x3) << 1)
7820 	/*
7821 	 * Flush:
7822 	 * There was a bad_format error on the previous operation
7823 	 */
7824 	#define RX_TPA_START_V3_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
7825 		(UINT32_C(0x5) << 1)
7826 	#define RX_TPA_START_V3_CMPL_ERRORS_BUFFER_ERROR_LAST \
7827 		RX_TPA_START_V3_CMPL_ERRORS_BUFFER_ERROR_FLUSH
7828 	/*
7829 	 * This is data from the CFA block as indicated by the meta_format
7830 	 * field.
7831 	 */
7832 	uint16_t	metadata0;
7833 	/* When meta_format != 0, this value is the VLAN VID. */
7834 	#define RX_TPA_START_V3_CMPL_METADATA0_VID_MASK UINT32_C(0xfff)
7835 	#define RX_TPA_START_V3_CMPL_METADATA0_VID_SFT 0
7836 	/* When meta_format != 0, this value is the VLAN DE. */
7837 	#define RX_TPA_START_V3_CMPL_METADATA0_DE      UINT32_C(0x1000)
7838 	/* When meta_format != 0, this value is the VLAN PRI. */
7839 	#define RX_TPA_START_V3_CMPL_METADATA0_PRI_MASK UINT32_C(0xe000)
7840 	#define RX_TPA_START_V3_CMPL_METADATA0_PRI_SFT 13
7841 	/*
7842 	 * This field contains the outer_l3_offset, inner_l2_offset,
7843 	 * inner_l3_offset, and inner_l4_size.
7844 	 *
7845 	 * hdr_offsets[8:0] contains the outer_l3_offset.
7846 	 * hdr_offsets[17:9] contains the inner_l2_offset.
7847 	 * hdr_offsets[26:18] contains the inner_l3_offset.
7848 	 * hdr_offsets[31:27] contains the inner_l4_size.
7849 	 */
7850 	uint32_t	hdr_offsets;
7851 } __rte_packed;
7852 
7853 /*
7854  * This TPA completion structure is used on devices where the
7855  * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
7856  */
7857 /* rx_tpa_end_cmpl (size:128b/16B) */
7858 struct rx_tpa_end_cmpl {
7859 	uint16_t	flags_type;
7860 	/*
7861 	 * This field indicates the exact type of the completion.
7862 	 * By convention, the LSB identifies the length of the
7863 	 * record in 16B units. Even values indicate 16B
7864 	 * records. Odd values indicate 32B
7865 	 * records.
7866 	 */
7867 	#define RX_TPA_END_CMPL_TYPE_MASK                      UINT32_C(0x3f)
7868 	#define RX_TPA_END_CMPL_TYPE_SFT                       0
7869 	/*
7870 	 * RX L2 TPA End Completion:
7871 	 * Completion at the end of a TPA operation.
7872 	 * Length = 32B
7873 	 */
7874 	#define RX_TPA_END_CMPL_TYPE_RX_TPA_END                  UINT32_C(0x15)
7875 	#define RX_TPA_END_CMPL_TYPE_LAST \
7876 		RX_TPA_END_CMPL_TYPE_RX_TPA_END
7877 	#define RX_TPA_END_CMPL_FLAGS_MASK                     UINT32_C(0xffc0)
7878 	#define RX_TPA_END_CMPL_FLAGS_SFT                      6
7879 	/*
7880 	 * When this bit is '1', it indicates a packet that has an
7881 	 * error of some type. Type of error is indicated in
7882 	 * error_flags.
7883 	 */
7884 	#define RX_TPA_END_CMPL_FLAGS_ERROR                     UINT32_C(0x40)
7885 	/* This field indicates how the packet was placed in the buffer. */
7886 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_MASK            UINT32_C(0x380)
7887 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_SFT             7
7888 	/*
7889 	 * Jumbo:
7890 	 * TPA Packet was placed using jumbo algorithm. This means
7891 	 * that the first buffer will be filled with data before
7892 	 * moving to aggregation buffers. Each aggregation buffer
7893 	 * will be filled before moving to the next aggregation
7894 	 * buffer.
7895 	 */
7896 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_JUMBO \
7897 		(UINT32_C(0x1) << 7)
7898 	/*
7899 	 * Header/Data Separation:
7900 	 * Packet was placed using Header/Data separation algorithm.
7901 	 * The separation location is indicated by the itype field.
7902 	 */
7903 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_HDS \
7904 		(UINT32_C(0x2) << 7)
7905 	/*
7906 	 * IOC/Jumbo:
7907 	 * Packet will be placed using In-Order Completion/Jumbo where
7908 	 * the first packet of the aggregation is placed using Jumbo
7909 	 * Placement. Subsequent packets will be placed such that each
7910 	 * packet starts at the beginning of an aggregation buffer.
7911 	 */
7912 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_IOC_JUMBO \
7913 		(UINT32_C(0x4) << 7)
7914 	/*
7915 	 * GRO/Jumbo:
7916 	 * Packet will be placed using GRO/Jumbo where the first
7917 	 * packet is filled with data. Subsequent packets will be
7918 	 * placed such that any one packet does not span two
7919 	 * aggregation buffers unless it starts at the beginning of
7920 	 * an aggregation buffer.
7921 	 */
7922 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
7923 		(UINT32_C(0x5) << 7)
7924 	/*
7925 	 * GRO/Header-Data Separation:
7926 	 * Packet will be placed using GRO/HDS where the header
7927 	 * is in the first packet.
7928 	 * Payload of each packet will be
7929 	 * placed such that any one packet does not span two
7930 	 * aggregation buffers unless it starts at the beginning of
7931 	 * an aggregation buffer.
7932 	 */
7933 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_GRO_HDS \
7934 		(UINT32_C(0x6) << 7)
7935 	/*
7936 	 * IOC/Header-Data Separation:
7937 	 * Packet will be placed using In-Order Completion/HDS where
7938 	 * the header is in the first packet buffer. Payload of each
7939 	 * packet will be placed such that each packet starts at the
7940 	 * beginning of an aggregation buffer.
7941 	 */
7942 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_IOC_HDS \
7943 		(UINT32_C(0x7) << 7)
7944 	#define RX_TPA_END_CMPL_FLAGS_PLACEMENT_LAST \
7945 		RX_TPA_END_CMPL_FLAGS_PLACEMENT_IOC_HDS
7946 	/* When set, this bit indicates that the timestamp field is valid. */
7947 	#define RX_TPA_END_CMPL_FLAGS_TIMESTAMP_VALID           UINT32_C(0x400)
7948 	/*
7949 	 * This bit is '1' if metadata has been added to the end of the
7950 	 * packet in host memory. Metadata starts at the first 32B boundary
7951 	 * after the end of the packet for regular and jumbo placement.
7952 	 * It starts at the first 32B boundary after the end of the header
7953 	 * for HDS placement. The length of the metadata is indicated in the
7954 	 * metadata itself.
7955 	 */
7956 	#define RX_TPA_END_CMPL_FLAGS_PKT_METADATA_PRESENT      UINT32_C(0x800)
7957 	/*
7958 	 * This value indicates what the inner packet determined for the
7959 	 * packet was.
7960 	 * - 2 TCP Packet
7961 	 *     Indicates that the packet was IP and TCP. This indicates
7962 	 *     that the ip_cs field is valid and that the tcp_udp_cs
7963 	 *     field is valid and contains the TCP checksum.
7964 	 *     This also indicates that the payload_offset field is valid.
7965 	 */
7966 	#define RX_TPA_END_CMPL_FLAGS_ITYPE_MASK \
7967 		UINT32_C(0xf000)
7968 	#define RX_TPA_END_CMPL_FLAGS_ITYPE_SFT                 12
7969 	/*
7970 	 * This value is zero for TPA End completions.
7971 	 * There is no data in the buffer that corresponds to the opaque
7972 	 * value in this completion.
7973 	 */
7974 	uint16_t	len;
7975 	/*
7976 	 * This is a copy of the opaque field from the RX BD this completion
7977 	 * corresponds to.
7978 	 */
7979 	uint32_t	opaque;
7980 	/*
7981 	 * This value is written by the NIC such that it will be different
7982 	 * for each pass through the completion queue. The even passes
7983 	 * will write 1. The odd passes will write 0.
7984 	 */
7985 	uint8_t	agg_bufs_v1;
7986 	/*
7987 	 * This value is written by the NIC such that it will be different
7988 	 * for each pass through the completion queue. The even passes
7989 	 * will write 1. The odd passes will write 0.
7990 	 */
7991 	#define RX_TPA_END_CMPL_V1           UINT32_C(0x1)
7992 	/*
7993 	 * This value is the number of aggregation buffers that follow this
7994 	 * entry in the completion ring that are a part of this aggregation
7995 	 * packet.
7996 	 * If the value is zero, then the packet is completely contained
7997 	 * in the buffer space provided in the aggregation start completion.
7998 	 */
7999 	#define RX_TPA_END_CMPL_AGG_BUFS_MASK UINT32_C(0x7e)
8000 	#define RX_TPA_END_CMPL_AGG_BUFS_SFT 1
8001 	/* This value is the number of segments in the TPA operation. */
8002 	uint8_t	tpa_segs;
8003 	/*
8004 	 * This value indicates the offset in bytes from the beginning of the
8005 	 * packet where the inner payload starts. This value is valid for TCP,
8006 	 * UDP, FCoE, and RoCE packets.
8007 	 *
8008 	 * A value of zero indicates an offset of 256 bytes.
8009 	 */
8010 	uint8_t	payload_offset;
8011 	uint8_t	agg_id;
8012 	/* unused2 is 1 b */
8013 	#define RX_TPA_END_CMPL_UNUSED2     UINT32_C(0x1)
8014 	/*
8015 	 * This is the aggregation ID that the completion is associated
8016 	 * with. Use this number to correlate the TPA start completion
8017 	 * with the TPA end completion.
8018 	 */
8019 	#define RX_TPA_END_CMPL_AGG_ID_MASK UINT32_C(0xfe)
8020 	#define RX_TPA_END_CMPL_AGG_ID_SFT  1
8021 	/*
8022 	 * For non-GRO packets, this value is the
8023 	 * timestamp delta between earliest and latest timestamp values for
8024 	 * TPA packet. If packets were not time stamped, then delta will be
8025 	 * zero.
8026 	 *
8027 	 * For GRO packets, this field is zero except for the following
8028 	 * sub-fields.
8029 	 * - tsdelta[31]
8030 	 *     Timestamp present indication. When '0', no Timestamp
8031 	 *     option is in the packet. When '1', then a Timestamp
8032 	 *     option is present in the packet.
8033 	 */
8034 	uint32_t	tsdelta;
8035 } __rte_packed;
8036 
8037 /*
8038  * Last 16 bytes of rx_tpa_end_cmpl.
8039  *
8040  * This TPA completion structure is used on devices where the
8041  * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
8042  */
8043 /* rx_tpa_end_cmpl_hi (size:128b/16B) */
8044 struct rx_tpa_end_cmpl_hi {
8045 	uint32_t	tpa_dup_acks;
8046 	/*
8047 	 * This value is the number of duplicate ACKs that have been
8048 	 * received as part of the TPA operation.
8049 	 */
8050 	#define RX_TPA_END_CMPL_TPA_DUP_ACKS_MASK UINT32_C(0xf)
8051 	#define RX_TPA_END_CMPL_TPA_DUP_ACKS_SFT 0
8052 	/*
8053 	 * This value is the valid when TPA completion is active. It
8054 	 * indicates the length of the longest segment of the TPA operation
8055 	 * for LRO mode and the length of the first segment in GRO mode.
8056 	 *
8057 	 * This value may be used by GRO software to re-construct the original
8058 	 * packet stream from the TPA packet. This is the length of all
8059 	 * but the last segment for GRO. In LRO mode this value may be used
8060 	 * to indicate MSS size to the stack.
8061 	 */
8062 	uint16_t	tpa_seg_len;
8063 	/*
8064 	 * The lower 16b of the timestamp of the last packet added to the
8065 	 * aggregation. Only valid when flags.timestamp_valid is set.
8066 	 */
8067 	uint16_t	timestamp_lower;
8068 	uint16_t	errors_v2;
8069 	/*
8070 	 * This value is written by the NIC such that it will be different
8071 	 * for each pass through the completion queue. The even passes
8072 	 * will write 1. The odd passes will write 0.
8073 	 */
8074 	#define RX_TPA_END_CMPL_V2                             UINT32_C(0x1)
8075 	#define RX_TPA_END_CMPL_ERRORS_MASK                    UINT32_C(0xfffe)
8076 	#define RX_TPA_END_CMPL_ERRORS_SFT                     1
8077 	/*
8078 	 * This error indicates that there was some sort of problem with
8079 	 * the BDs for the packet that was found after part of the
8080 	 * packet was already placed. The packet should be treated as
8081 	 * invalid.
8082 	 */
8083 	#define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_MASK        UINT32_C(0xe)
8084 	#define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_SFT         1
8085 	/*
8086 	 * This error occurs when there is a fatal HW problem in
8087 	 * the chip only. It indicates that there were not
8088 	 * BDs on chip but that there was adequate reservation.
8089 	 * provided by the TPA block.
8090 	 */
8091 	#define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
8092 		(UINT32_C(0x2) << 1)
8093 	/*
8094 	 * This error occurs when TPA block was not configured to
8095 	 * reserve adequate BDs for TPA operations on this RX
8096 	 * ring. All data for the TPA operation was not placed.
8097 	 *
8098 	 * This error can also be generated when the number of
8099 	 * segments is not programmed correctly in TPA and the
8100 	 * 33 total aggregation buffers allowed for the TPA
8101 	 * operation has been exceeded.
8102 	 */
8103 	#define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_RSV_ERROR \
8104 		(UINT32_C(0x4) << 1)
8105 	#define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_LAST \
8106 		RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_RSV_ERROR
8107 	/*
8108 	 * The upper 16b of the timestamp of the last packet added to the
8109 	 * aggregation. Only valid when flags.timestamp_valid is set.
8110 	 */
8111 	uint16_t	timestamp_upper;
8112 	/*
8113 	 * This is the opaque value that was completed for the TPA start
8114 	 * completion that corresponds to this TPA end completion.
8115 	 */
8116 	uint32_t	start_opaque;
8117 } __rte_packed;
8118 
8119 /*
8120  * This TPA completion structure is used on devices where the
8121  * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
8122  */
8123 /* rx_tpa_v2_start_cmpl (size:128b/16B) */
8124 struct rx_tpa_v2_start_cmpl {
8125 	uint16_t	flags_type;
8126 	/*
8127 	 * This field indicates the exact type of the completion.
8128 	 * By convention, the LSB identifies the length of the
8129 	 * record in 16B units. Even values indicate 16B
8130 	 * records. Odd values indicate 32B
8131 	 * records.
8132 	 */
8133 	#define RX_TPA_V2_START_CMPL_TYPE_MASK \
8134 		UINT32_C(0x3f)
8135 	#define RX_TPA_V2_START_CMPL_TYPE_SFT                       0
8136 	/*
8137 	 * RX L2 TPA Start Completion:
8138 	 * Completion at the beginning of a TPA operation.
8139 	 * Length = 32B
8140 	 */
8141 	#define RX_TPA_V2_START_CMPL_TYPE_RX_TPA_START \
8142 		UINT32_C(0x13)
8143 	#define RX_TPA_V2_START_CMPL_TYPE_LAST \
8144 		RX_TPA_V2_START_CMPL_TYPE_RX_TPA_START
8145 	#define RX_TPA_V2_START_CMPL_FLAGS_MASK \
8146 		UINT32_C(0xffc0)
8147 	#define RX_TPA_V2_START_CMPL_FLAGS_SFT                      6
8148 	/* This bit will always be '0' for TPA start completions. */
8149 	#define RX_TPA_V2_START_CMPL_FLAGS_ERROR \
8150 		UINT32_C(0x40)
8151 	/* This field indicates how the packet was placed in the buffer. */
8152 	#define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_MASK \
8153 		UINT32_C(0x380)
8154 	#define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_SFT             7
8155 	/*
8156 	 * Jumbo:
8157 	 * TPA Packet was placed using jumbo algorithm. This means
8158 	 * that the first buffer will be filled with data before
8159 	 * moving to aggregation buffers. Each aggregation buffer
8160 	 * will be filled before moving to the next aggregation
8161 	 * buffer.
8162 	 */
8163 	#define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_JUMBO \
8164 		(UINT32_C(0x1) << 7)
8165 	/*
8166 	 * Header/Data Separation:
8167 	 * Packet was placed using Header/Data separation algorithm.
8168 	 * The separation location is indicated by the itype field.
8169 	 */
8170 	#define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_HDS \
8171 		(UINT32_C(0x2) << 7)
8172 	/*
8173 	 * GRO/Jumbo:
8174 	 * Packet will be placed using GRO/Jumbo where the first
8175 	 * packet is filled with data. Subsequent packets will be
8176 	 * placed such that any one packet does not span two
8177 	 * aggregation buffers unless it starts at the beginning of
8178 	 * an aggregation buffer.
8179 	 */
8180 	#define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
8181 		(UINT32_C(0x5) << 7)
8182 	/*
8183 	 * GRO/Header-Data Separation:
8184 	 * Packet will be placed using GRO/HDS where the header
8185 	 * is in the first packet.
8186 	 * Payload of each packet will be
8187 	 * placed such that any one packet does not span two
8188 	 * aggregation buffers unless it starts at the beginning of
8189 	 * an aggregation buffer.
8190 	 */
8191 	#define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_GRO_HDS \
8192 		(UINT32_C(0x6) << 7)
8193 	#define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_LAST \
8194 		RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_GRO_HDS
8195 	/* This bit is '1' if the RSS field in this completion is valid. */
8196 	#define RX_TPA_V2_START_CMPL_FLAGS_RSS_VALID \
8197 		UINT32_C(0x400)
8198 	/*
8199 	 * For devices that support timestamps, when this bit is cleared the
8200 	 * `inner_l4_size_inner_l3_offset_inner_l2_offset_outer_l3_offset`
8201 	 * field contains the 32b timestamp for
8202 	 * the packet from the MAC. When this bit is set, the
8203 	 * `inner_l4_size_inner_l3_offset_inner_l2_offset_outer_l3_offset`
8204 	 * field contains the outer_l3_offset, inner_l2_offset,
8205 	 * inner_l3_offset, and inner_l4_size.
8206 	 */
8207 	#define RX_TPA_V2_START_CMPL_FLAGS_TIMESTAMP_FLD_FORMAT \
8208 		UINT32_C(0x800)
8209 	/*
8210 	 * This value indicates what the inner packet determined for the
8211 	 * packet was.
8212 	 */
8213 	#define RX_TPA_V2_START_CMPL_FLAGS_ITYPE_MASK \
8214 		UINT32_C(0xf000)
8215 	#define RX_TPA_V2_START_CMPL_FLAGS_ITYPE_SFT                 12
8216 	/*
8217 	 * TCP Packet:
8218 	 * Indicates that the packet was IP and TCP.
8219 	 */
8220 	#define RX_TPA_V2_START_CMPL_FLAGS_ITYPE_TCP \
8221 		(UINT32_C(0x2) << 12)
8222 	#define RX_TPA_V2_START_CMPL_FLAGS_ITYPE_LAST \
8223 		RX_TPA_V2_START_CMPL_FLAGS_ITYPE_TCP
8224 	/*
8225 	 * This value indicates the amount of packet data written to the
8226 	 * buffer the opaque field in this completion corresponds to.
8227 	 */
8228 	uint16_t	len;
8229 	/*
8230 	 * This is a copy of the opaque field from the RX BD this completion
8231 	 * corresponds to.
8232 	 */
8233 	uint32_t	opaque;
8234 	/*
8235 	 * This value is written by the NIC such that it will be different
8236 	 * for each pass through the completion queue. The even passes
8237 	 * will write 1. The odd passes will write 0.
8238 	 */
8239 	uint8_t	v1;
8240 	/*
8241 	 * This value is written by the NIC such that it will be different
8242 	 * for each pass through the completion queue. The even passes
8243 	 * will write 1. The odd passes will write 0.
8244 	 */
8245 	#define RX_TPA_V2_START_CMPL_V1 UINT32_C(0x1)
8246 	#define RX_TPA_V2_START_CMPL_LAST RX_TPA_V2_START_CMPL_V1
8247 	/*
8248 	 * This is the RSS hash type for the packet. The value is packed
8249 	 * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
8250 	 *
8251 	 * The value of tuple_extrac_op provides the information about
8252 	 * what fields the hash was computed on.
8253 	 * * 0: The RSS hash was computed over source IP address,
8254 	 * destination IP address, source port, and destination port of inner
8255 	 * IP and TCP or UDP headers. Note: For non-tunneled packets,
8256 	 * the packet headers are considered inner packet headers for the RSS
8257 	 * hash computation purpose.
8258 	 * * 1: The RSS hash was computed over source IP address and destination
8259 	 * IP address of inner IP header. Note: For non-tunneled packets,
8260 	 * the packet headers are considered inner packet headers for the RSS
8261 	 * hash computation purpose.
8262 	 * * 2: The RSS hash was computed over source IP address,
8263 	 * destination IP address, source port, and destination port of
8264 	 * IP and TCP or UDP headers of outer tunnel headers.
8265 	 * Note: For non-tunneled packets, this value is not applicable.
8266 	 * * 3: The RSS hash was computed over source IP address and
8267 	 * destination IP address of IP header of outer tunnel headers.
8268 	 * Note: For non-tunneled packets, this value is not applicable.
8269 	 *
8270 	 * Note that 4-tuples values listed above are applicable
8271 	 * for layer 4 protocols supported and enabled for RSS in the hardware,
8272 	 * HWRM firmware, and drivers. For example, if RSS hash is supported and
8273 	 * enabled for TCP traffic only, then the values of tuple_extract_op
8274 	 * corresponding to 4-tuples are only valid for TCP traffic.
8275 	 */
8276 	uint8_t	rss_hash_type;
8277 	/*
8278 	 * This is the aggregation ID that the completion is associated
8279 	 * with. Use this number to correlate the TPA start completion
8280 	 * with the TPA end completion.
8281 	 */
8282 	uint16_t	agg_id;
8283 	/*
8284 	 * This value is the RSS hash value calculated for the packet
8285 	 * based on the mode bits and key value in the VNIC.
8286 	 */
8287 	uint32_t	rss_hash;
8288 } __rte_packed;
8289 
8290 /*
8291  * Last 16 bytes of rx_tpa_v2_start_cmpl.
8292  *
8293  * This TPA completion structure is used on devices where the
8294  * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
8295  */
8296 /* rx_tpa_v2_start_cmpl_hi (size:128b/16B) */
8297 struct rx_tpa_v2_start_cmpl_hi {
8298 	uint32_t	flags2;
8299 	/*
8300 	 * This indicates that the ip checksum was calculated for the
8301 	 * inner packet and that the sum passed for all segments
8302 	 * included in the aggregation.
8303 	 */
8304 	#define RX_TPA_V2_START_CMPL_FLAGS2_IP_CS_CALC \
8305 		UINT32_C(0x1)
8306 	/*
8307 	 * This indicates that the TCP, UDP or ICMP checksum was
8308 	 * calculated for the inner packet and that the sum passed
8309 	 * for all segments included in the aggregation.
8310 	 */
8311 	#define RX_TPA_V2_START_CMPL_FLAGS2_L4_CS_CALC \
8312 		UINT32_C(0x2)
8313 	/*
8314 	 * This indicates that the ip checksum was calculated for the
8315 	 * tunnel header and that the sum passed for all segments
8316 	 * included in the aggregation.
8317 	 */
8318 	#define RX_TPA_V2_START_CMPL_FLAGS2_T_IP_CS_CALC \
8319 		UINT32_C(0x4)
8320 	/*
8321 	 * This indicates that the UDP checksum was
8322 	 * calculated for the tunnel packet and that the sum passed for
8323 	 * all segments included in the aggregation.
8324 	 */
8325 	#define RX_TPA_V2_START_CMPL_FLAGS2_T_L4_CS_CALC \
8326 		UINT32_C(0x8)
8327 	/* This value indicates what format the metadata field is. */
8328 	#define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_MASK \
8329 		UINT32_C(0xf0)
8330 	#define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_SFT            4
8331 	/* No metadata informtaion. Value is zero. */
8332 	#define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_NONE \
8333 		(UINT32_C(0x0) << 4)
8334 	/*
8335 	 * The metadata field contains the VLAN tag and TPID value.
8336 	 * - metadata[11:0] contains the vlan VID value.
8337 	 * - metadata[12] contains the vlan DE value.
8338 	 * - metadata[15:13] contains the vlan PRI value.
8339 	 * - metadata[31:16] contains the vlan TPID value.
8340 	 */
8341 	#define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_VLAN \
8342 		(UINT32_C(0x1) << 4)
8343 	/*
8344 	 * If ext_meta_format is equal to 1, the metadata field
8345 	 * contains the lower 16b of the tunnel ID value, justified
8346 	 * to LSB
8347 	 * - VXLAN = VNI[23:0] -> VXLAN Network ID
8348 	 * - Geneve (NGE) = VNI[23:0] a-> Virtual Network Identifier.
8349 	 * - NVGRE = TNI[23:0] -> Tenant Network ID
8350 	 * - GRE = KEY[31:0 -> key fieled with bit mask. zero if K = 0
8351 	 * - IPV4 = 0 (not populated)
8352 	 * - IPV6 = Flow Label[19:0]
8353 	 * - PPPoE = sessionID[15:0]
8354 	 * - MPLs = Outer label[19:0]
8355 	 * - UPAR = Selected[31:0] with bit mask
8356 	 */
8357 	#define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_TUNNEL_ID \
8358 		(UINT32_C(0x2) << 4)
8359 	/*
8360 	 * if ext_meta_format is equal to 1, metadata field contains
8361 	 * 16b metadata from the prepended header (chdr_data).
8362 	 */
8363 	#define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_CHDR_DATA \
8364 		(UINT32_C(0x3) << 4)
8365 	/*
8366 	 * If ext_meta_format is equal to 1, the metadata field contains
8367 	 * the outer_l3_offset, inner_l2_offset, inner_l3_offset and
8368 	 * inner_l4_size.
8369 	 * - metadata[8:0] contains the outer_l3_offset.
8370 	 * - metadata[17:9] contains the inner_l2_offset.
8371 	 * - metadata[26:18] contains the inner_l3_offset.
8372 	 * - metadata[31:27] contains the inner_l4_size.
8373 	 */
8374 	#define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET \
8375 		(UINT32_C(0x4) << 4)
8376 	#define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_LAST \
8377 		RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET
8378 	/*
8379 	 * This field indicates the IP type for the inner-most IP header.
8380 	 * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
8381 	 */
8382 	#define RX_TPA_V2_START_CMPL_FLAGS2_IP_TYPE \
8383 		UINT32_C(0x100)
8384 	/*
8385 	 * This indicates that the complete 1's complement checksum was
8386 	 * calculated for the packet.
8387 	 */
8388 	#define RX_TPA_V2_START_CMPL_FLAGS2_COMPLETE_CHECKSUM_CALC \
8389 		UINT32_C(0x200)
8390 	/*
8391 	 * The combination of this value and meta_format indicated what
8392 	 * format the metadata field is.
8393 	 */
8394 	#define RX_TPA_V2_START_CMPL_FLAGS2_EXT_META_FORMAT_MASK \
8395 		UINT32_C(0xc00)
8396 	#define RX_TPA_V2_START_CMPL_FLAGS2_EXT_META_FORMAT_SFT        10
8397 	/*
8398 	 * This value is the complete 1's complement checksum calculated from
8399 	 * the start of the outer L3 header to the end of the packet (not
8400 	 * including the ethernet crc). It is valid when the
8401 	 * 'complete_checksum_calc' flag is set. For TPA Start completions,
8402 	 * the complete checksum is calculated for the first packet in the
8403 	 * aggregation only.
8404 	 */
8405 	#define RX_TPA_V2_START_CMPL_FLAGS2_COMPLETE_CHECKSUM_MASK \
8406 		UINT32_C(0xffff0000)
8407 	#define RX_TPA_V2_START_CMPL_FLAGS2_COMPLETE_CHECKSUM_SFT      16
8408 	/*
8409 	 * This is data from the CFA block as indicated by the meta_format
8410 	 * field.
8411 	 */
8412 	uint32_t	metadata;
8413 	/* When {ext_meta_format,meta_format}=1, this value is the VLAN VID. */
8414 	#define RX_TPA_V2_START_CMPL_METADATA_VID_MASK UINT32_C(0xfff)
8415 	#define RX_TPA_V2_START_CMPL_METADATA_VID_SFT  0
8416 	/* When {ext_meta_format,meta_format}=1, this value is the VLAN DE. */
8417 	#define RX_TPA_V2_START_CMPL_METADATA_DE       UINT32_C(0x1000)
8418 	/* When {ext_meta_format,meta_format}=1, this value is the VLAN PRI. */
8419 	#define RX_TPA_V2_START_CMPL_METADATA_PRI_MASK UINT32_C(0xe000)
8420 	#define RX_TPA_V2_START_CMPL_METADATA_PRI_SFT  13
8421 	/* When {ext_meta_format,meta_format}=1, this value is the VLAN TPID. */
8422 	#define RX_TPA_V2_START_CMPL_METADATA_TPID_MASK UINT32_C(0xffff0000)
8423 	#define RX_TPA_V2_START_CMPL_METADATA_TPID_SFT 16
8424 	uint16_t	errors_v2;
8425 	/*
8426 	 * This value is written by the NIC such that it will be different
8427 	 * for each pass through the completion queue. The even passes
8428 	 * will write 1. The odd passes will write 0.
8429 	 */
8430 	#define RX_TPA_V2_START_CMPL_V2 \
8431 		UINT32_C(0x1)
8432 	#define RX_TPA_V2_START_CMPL_ERRORS_MASK \
8433 		UINT32_C(0xfffe)
8434 	#define RX_TPA_V2_START_CMPL_ERRORS_SFT                    1
8435 	/*
8436 	 * This error indicates that there was some sort of problem with
8437 	 * the BDs for the packet that was found after part of the
8438 	 * packet was already placed. The packet should be treated as
8439 	 * invalid.
8440 	 */
8441 	#define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_MASK \
8442 		UINT32_C(0xe)
8443 	#define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_SFT        1
8444 	/* No buffer error */
8445 	#define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
8446 		(UINT32_C(0x0) << 1)
8447 	/*
8448 	 * Bad Format:
8449 	 * BDs were not formatted correctly.
8450 	 */
8451 	#define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
8452 		(UINT32_C(0x3) << 1)
8453 	/*
8454 	 * Flush:
8455 	 * There was a bad_format error on the previous operation
8456 	 */
8457 	#define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
8458 		(UINT32_C(0x5) << 1)
8459 	#define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_LAST \
8460 		RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_FLUSH
8461 	/*
8462 	 * This field identifies the CFA action rule that was used for this
8463 	 * packet.
8464 	 */
8465 	uint16_t	cfa_code;
8466 	/*
8467 	 * For devices that support timestamps this field is overridden
8468 	 * with the timestamp value. When `flags.timestamp_fld_format` is
8469 	 * cleared, this field contains the 32b timestamp for the packet from the
8470 	 * MAC.
8471 	 *
8472 	 * When `flags.timestamp_fld_format` is set, this field contains the
8473 	 * outer_l3_offset, inner_l2_offset, inner_l3_offset, and inner_l4_size
8474 	 * as defined below.
8475 	 */
8476 	uint32_t	inner_l4_size_inner_l3_offset_inner_l2_offset_outer_l3_offset;
8477 	/*
8478 	 * This is the offset from the beginning of the packet in bytes for
8479 	 * the outer L3 header. If there is no outer L3 header, then this
8480 	 * value is zero.
8481 	 */
8482 	#define RX_TPA_V2_START_CMPL_OUTER_L3_OFFSET_MASK UINT32_C(0x1ff)
8483 	#define RX_TPA_V2_START_CMPL_OUTER_L3_OFFSET_SFT 0
8484 	/*
8485 	 * This is the offset from the beginning of the packet in bytes for
8486 	 * the inner most L2 header.
8487 	 */
8488 	#define RX_TPA_V2_START_CMPL_INNER_L2_OFFSET_MASK UINT32_C(0x3fe00)
8489 	#define RX_TPA_V2_START_CMPL_INNER_L2_OFFSET_SFT 9
8490 	/*
8491 	 * This is the offset from the beginning of the packet in bytes for
8492 	 * the inner most L3 header.
8493 	 */
8494 	#define RX_TPA_V2_START_CMPL_INNER_L3_OFFSET_MASK UINT32_C(0x7fc0000)
8495 	#define RX_TPA_V2_START_CMPL_INNER_L3_OFFSET_SFT 18
8496 	/*
8497 	 * This is the size in bytes of the inner most L4 header.
8498 	 * This can be subtracted from the payload_offset to determine
8499 	 * the start of the inner most L4 header.
8500 	 */
8501 	#define RX_TPA_V2_START_CMPL_INNER_L4_SIZE_MASK  UINT32_C(0xf8000000)
8502 	#define RX_TPA_V2_START_CMPL_INNER_L4_SIZE_SFT   27
8503 } __rte_packed;
8504 
8505 /*
8506  * This TPA completion structure is used on devices where the
8507  * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
8508  */
8509 /* rx_tpa_v2_end_cmpl (size:128b/16B) */
8510 struct rx_tpa_v2_end_cmpl {
8511 	uint16_t	flags_type;
8512 	/*
8513 	 * This field indicates the exact type of the completion.
8514 	 * By convention, the LSB identifies the length of the
8515 	 * record in 16B units. Even values indicate 16B
8516 	 * records. Odd values indicate 32B
8517 	 * records.
8518 	 */
8519 	#define RX_TPA_V2_END_CMPL_TYPE_MASK \
8520 		UINT32_C(0x3f)
8521 	#define RX_TPA_V2_END_CMPL_TYPE_SFT                       0
8522 	/*
8523 	 * RX L2 TPA End Completion:
8524 	 * Completion at the end of a TPA operation.
8525 	 * Length = 32B
8526 	 */
8527 	#define RX_TPA_V2_END_CMPL_TYPE_RX_TPA_END \
8528 		UINT32_C(0x15)
8529 	#define RX_TPA_V2_END_CMPL_TYPE_LAST \
8530 		RX_TPA_V2_END_CMPL_TYPE_RX_TPA_END
8531 	#define RX_TPA_V2_END_CMPL_FLAGS_MASK \
8532 		UINT32_C(0xffc0)
8533 	#define RX_TPA_V2_END_CMPL_FLAGS_SFT                      6
8534 	/*
8535 	 * When this bit is '1', it indicates a packet that has an
8536 	 * error of some type. Type of error is indicated in
8537 	 * error_flags.
8538 	 */
8539 	#define RX_TPA_V2_END_CMPL_FLAGS_ERROR \
8540 		UINT32_C(0x40)
8541 	/* This field indicates how the packet was placed in the buffer. */
8542 	#define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_MASK \
8543 		UINT32_C(0x380)
8544 	#define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_SFT             7
8545 	/*
8546 	 * Jumbo:
8547 	 * TPA Packet was placed using jumbo algorithm. This means
8548 	 * that the first buffer will be filled with data before
8549 	 * moving to aggregation buffers. Each aggregation buffer
8550 	 * will be filled before moving to the next aggregation
8551 	 * buffer.
8552 	 */
8553 	#define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_JUMBO \
8554 		(UINT32_C(0x1) << 7)
8555 	/*
8556 	 * Header/Data Separation:
8557 	 * Packet was placed using Header/Data separation algorithm.
8558 	 * The separation location is indicated by the itype field.
8559 	 */
8560 	#define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_HDS \
8561 		(UINT32_C(0x2) << 7)
8562 	/*
8563 	 * GRO/Jumbo:
8564 	 * Packet will be placed using GRO/Jumbo where the first
8565 	 * packet is filled with data. Subsequent packets will be
8566 	 * placed such that any one packet does not span two
8567 	 * aggregation buffers unless it starts at the beginning of
8568 	 * an aggregation buffer.
8569 	 */
8570 	#define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
8571 		(UINT32_C(0x5) << 7)
8572 	/*
8573 	 * GRO/Header-Data Separation:
8574 	 * Packet will be placed using GRO/HDS where the header
8575 	 * is in the first packet.
8576 	 * Payload of each packet will be
8577 	 * placed such that any one packet does not span two
8578 	 * aggregation buffers unless it starts at the beginning of
8579 	 * an aggregation buffer.
8580 	 */
8581 	#define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_GRO_HDS \
8582 		(UINT32_C(0x6) << 7)
8583 	/*
8584 	 * IOC/Header-Data Separation:
8585 	 * Packet will be placed using In-Order Completion/HDS where
8586 	 * the header is in the first packet buffer. Payload of each
8587 	 * packet will be placed such that each packet starts at the
8588 	 * beginning of an aggregation buffer.
8589 	 */
8590 	#define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_IOC_HDS \
8591 		(UINT32_C(0x7) << 7)
8592 	#define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_LAST \
8593 		RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_IOC_HDS
8594 	/* unused is 1 b */
8595 	#define RX_TPA_V2_END_CMPL_FLAGS_UNUSED \
8596 		UINT32_C(0x400)
8597 	/*
8598 	 * This bit is '1' if metadata has been added to the end of the
8599 	 * packet in host memory. Metadata starts at the first 32B boundary
8600 	 * after the end of the packet for regular and jumbo placement.
8601 	 * It starts at the first 32B boundary after the end of the header
8602 	 * for HDS placement. The length of the metadata is indicated in the
8603 	 * metadata itself.
8604 	 */
8605 	#define RX_TPA_V2_END_CMPL_FLAGS_PKT_METADATA_PRESENT \
8606 		UINT32_C(0x800)
8607 	/*
8608 	 * This value indicates what the inner packet determined for the
8609 	 * packet was.
8610 	 * - 2 TCP Packet
8611 	 *     Indicates that the packet was IP and TCP. This indicates
8612 	 *     that the ip_cs field is valid and that the tcp_udp_cs
8613 	 *     field is valid and contains the TCP checksum.
8614 	 *     This also indicates that the payload_offset field is valid.
8615 	 */
8616 	#define RX_TPA_V2_END_CMPL_FLAGS_ITYPE_MASK \
8617 		UINT32_C(0xf000)
8618 	#define RX_TPA_V2_END_CMPL_FLAGS_ITYPE_SFT                 12
8619 	/*
8620 	 * This value is zero for TPA End completions.
8621 	 * There is no data in the buffer that corresponds to the opaque
8622 	 * value in this completion.
8623 	 */
8624 	uint16_t	len;
8625 	/*
8626 	 * This is a copy of the opaque field from the RX BD this completion
8627 	 * corresponds to.
8628 	 */
8629 	uint32_t	opaque;
8630 	uint8_t	v1;
8631 	/*
8632 	 * This value is written by the NIC such that it will be different
8633 	 * for each pass through the completion queue. The even passes
8634 	 * will write 1. The odd passes will write 0.
8635 	 */
8636 	#define RX_TPA_V2_END_CMPL_V1     UINT32_C(0x1)
8637 	/* This value is the number of segments in the TPA operation. */
8638 	uint8_t	tpa_segs;
8639 	/*
8640 	 * This is the aggregation ID that the completion is associated
8641 	 * with. Use this number to correlate the TPA start completion
8642 	 * with the TPA end completion.
8643 	 */
8644 	uint16_t	agg_id;
8645 	/*
8646 	 * For non-GRO packets, this value is the
8647 	 * timestamp delta between earliest and latest timestamp values for
8648 	 * TPA packet. If packets were not time stamped, then delta will be
8649 	 * zero.
8650 	 *
8651 	 * For GRO packets, this field is zero except for the following
8652 	 * sub-fields.
8653 	 * - tsdelta[31]
8654 	 *     Timestamp present indication. When '0', no Timestamp
8655 	 *     option is in the packet. When '1', then a Timestamp
8656 	 *     option is present in the packet.
8657 	 */
8658 	uint32_t	tsdelta;
8659 } __rte_packed;
8660 
8661 /*
8662  * Last 16 bytes of rx_tpa_v2_end_cmpl.
8663  *
8664  * This TPA completion structure is used on devices where the
8665  * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
8666  */
8667 /* rx_tpa_v2_end_cmpl_hi (size:128b/16B) */
8668 struct rx_tpa_v2_end_cmpl_hi {
8669 	/*
8670 	 * This value is the number of duplicate ACKs that have been
8671 	 * received as part of the TPA operation.
8672 	 */
8673 	uint16_t	tpa_dup_acks;
8674 	/*
8675 	 * This value is the number of duplicate ACKs that have been
8676 	 * received as part of the TPA operation.
8677 	 */
8678 	#define RX_TPA_V2_END_CMPL_TPA_DUP_ACKS_MASK UINT32_C(0xf)
8679 	#define RX_TPA_V2_END_CMPL_TPA_DUP_ACKS_SFT 0
8680 	/*
8681 	 * This value indicated the offset in bytes from the beginning of
8682 	 * the packet where the inner payload starts. This value is valid
8683 	 * for TCP, UDP, FCoE and RoCE packets
8684 	 */
8685 	uint8_t	payload_offset;
8686 	/*
8687 	 * The value is the total number of aggregation buffers that were
8688 	 * used in the TPA operation. All TPA aggregation buffer completions
8689 	 * precede the TPA End completion. If the value is zero, then the
8690 	 * aggregation is completely contained in the buffer space provided
8691 	 * in the aggregation start completion.
8692 	 * Note that the field is simply provided as a cross check.
8693 	 */
8694 	uint8_t	tpa_agg_bufs;
8695 	/*
8696 	 * This value is the valid when TPA completion is active. It
8697 	 * indicates the length of the longest segment of the TPA operation
8698 	 * for LRO mode and the length of the first segment in GRO mode.
8699 	 *
8700 	 * This value may be used by GRO software to re-construct the original
8701 	 * packet stream from the TPA packet. This is the length of all
8702 	 * but the last segment for GRO. In LRO mode this value may be used
8703 	 * to indicate MSS size to the stack.
8704 	 */
8705 	uint16_t	tpa_seg_len;
8706 	uint16_t	unused_1;
8707 	uint16_t	errors_v2;
8708 	/*
8709 	 * This value is written by the NIC such that it will be different
8710 	 * for each pass through the completion queue. The even passes
8711 	 * will write 1. The odd passes will write 0.
8712 	 */
8713 	#define RX_TPA_V2_END_CMPL_V2                             UINT32_C(0x1)
8714 	#define RX_TPA_V2_END_CMPL_ERRORS_MASK \
8715 		UINT32_C(0xfffe)
8716 	#define RX_TPA_V2_END_CMPL_ERRORS_SFT                     1
8717 	/*
8718 	 * This error indicates that there was some sort of problem with
8719 	 * the BDs for the packet that was found after part of the
8720 	 * packet was already placed. The packet should be treated as
8721 	 * invalid.
8722 	 */
8723 	#define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_MASK \
8724 		UINT32_C(0xe)
8725 	#define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_SFT         1
8726 	/* No buffer error */
8727 	#define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
8728 		(UINT32_C(0x0) << 1)
8729 	/*
8730 	 * This error occurs when there is a fatal HW problem in
8731 	 * the chip only. It indicates that there were not
8732 	 * BDs on chip but that there was adequate reservation.
8733 	 * provided by the TPA block.
8734 	 */
8735 	#define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
8736 		(UINT32_C(0x2) << 1)
8737 	/*
8738 	 * Bad Format:
8739 	 * BDs were not formatted correctly.
8740 	 */
8741 	#define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
8742 		(UINT32_C(0x3) << 1)
8743 	/*
8744 	 * This error occurs when TPA block was not configured to
8745 	 * reserve adequate BDs for TPA operations on this RX
8746 	 * ring. All data for the TPA operation was not placed.
8747 	 *
8748 	 * This error can also be generated when the number of
8749 	 * segments is not programmed correctly in TPA and the
8750 	 * 33 total aggregation buffers allowed for the TPA
8751 	 * operation has been exceeded.
8752 	 */
8753 	#define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_RSV_ERROR \
8754 		(UINT32_C(0x4) << 1)
8755 	/*
8756 	 * Flush:
8757 	 * There was a bad_format error on the previous operation
8758 	 */
8759 	#define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
8760 		(UINT32_C(0x5) << 1)
8761 	#define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_LAST \
8762 		RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_FLUSH
8763 	uint16_t	unused_2;
8764 	/*
8765 	 * This is the opaque value that was completed for the TPA start
8766 	 * completion that corresponds to this TPA end completion.
8767 	 */
8768 	uint32_t	start_opaque;
8769 } __rte_packed;
8770 
8771 /*
8772  * This TPA completion structure is used on devices where the
8773  * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
8774  */
8775 /* rx_tpa_v2_abuf_cmpl (size:128b/16B) */
8776 struct rx_tpa_v2_abuf_cmpl {
8777 	uint16_t	type;
8778 	/*
8779 	 * This field indicates the exact type of the completion.
8780 	 * By convention, the LSB identifies the length of the
8781 	 * record in 16B units. Even values indicate 16B
8782 	 * records. Odd values indicate 32B
8783 	 * records.
8784 	 */
8785 	#define RX_TPA_V2_ABUF_CMPL_TYPE_MASK      UINT32_C(0x3f)
8786 	#define RX_TPA_V2_ABUF_CMPL_TYPE_SFT       0
8787 	/*
8788 	 * RX TPA Aggregation Buffer completion:
8789 	 * Completion of an L2 aggregation buffer in support of
8790 	 * TPA packet completion. Length = 16B
8791 	 */
8792 	#define RX_TPA_V2_ABUF_CMPL_TYPE_RX_TPA_AGG  UINT32_C(0x16)
8793 	#define RX_TPA_V2_ABUF_CMPL_TYPE_LAST \
8794 		RX_TPA_V2_ABUF_CMPL_TYPE_RX_TPA_AGG
8795 	/*
8796 	 * This is the length of the data for the packet stored in this
8797 	 * aggregation buffer identified by the opaque value. This does not
8798 	 * include the length of any
8799 	 * data placed in other aggregation BDs or in the packet or buffer
8800 	 * BDs. This length does not include any space added due to
8801 	 * hdr_offset register during HDS placement mode.
8802 	 */
8803 	uint16_t	len;
8804 	/*
8805 	 * This is a copy of the opaque field from the RX BD this aggregation
8806 	 * buffer corresponds to.
8807 	 */
8808 	uint32_t	opaque;
8809 	uint16_t	v;
8810 	/*
8811 	 * This value is written by the NIC such that it will be different
8812 	 * for each pass through the completion queue. The even passes
8813 	 * will write 1. The odd passes will write 0.
8814 	 */
8815 	#define RX_TPA_V2_ABUF_CMPL_V     UINT32_C(0x1)
8816 	/*
8817 	 * This is the aggregation ID that the completion is associated with. Use
8818 	 * this number to correlate the TPA agg completion with the TPA start
8819 	 * completion and the TPA end completion.
8820 	 */
8821 	uint16_t	agg_id;
8822 	uint32_t	unused_1;
8823 } __rte_packed;
8824 
8825 /* rx_abuf_cmpl (size:128b/16B) */
8826 struct rx_abuf_cmpl {
8827 	uint16_t	type;
8828 	/*
8829 	 * This field indicates the exact type of the completion.
8830 	 * By convention, the LSB identifies the length of the
8831 	 * record in 16B units. Even values indicate 16B
8832 	 * records. Odd values indicate 32B
8833 	 * records.
8834 	 */
8835 	#define RX_ABUF_CMPL_TYPE_MASK  UINT32_C(0x3f)
8836 	#define RX_ABUF_CMPL_TYPE_SFT   0
8837 	/*
8838 	 * RX Aggregation Buffer completion:
8839 	 * Completion of an L2 aggregation buffer in support of
8840 	 * TPA, HDS, or Jumbo packet completion. Length = 16B
8841 	 */
8842 	#define RX_ABUF_CMPL_TYPE_RX_AGG  UINT32_C(0x12)
8843 	#define RX_ABUF_CMPL_TYPE_LAST   RX_ABUF_CMPL_TYPE_RX_AGG
8844 	/*
8845 	 * This is the length of the data for the packet stored in this
8846 	 * aggregation buffer identified by the opaque value. This does not
8847 	 * include the length of any
8848 	 * data placed in other aggregation BDs or in the packet or buffer
8849 	 * BDs. This length does not include any space added due to
8850 	 * hdr_offset register during HDS placement mode.
8851 	 */
8852 	uint16_t	len;
8853 	/*
8854 	 * This is a copy of the opaque field from the RX BD this aggregation
8855 	 * buffer corresponds to.
8856 	 */
8857 	uint32_t	opaque;
8858 	uint32_t	v;
8859 	/*
8860 	 * This value is written by the NIC such that it will be different
8861 	 * for each pass through the completion queue. The even passes
8862 	 * will write 1. The odd passes will write 0.
8863 	 */
8864 	#define RX_ABUF_CMPL_V     UINT32_C(0x1)
8865 	/* unused3 is 32 b */
8866 	uint32_t	unused_2;
8867 } __rte_packed;
8868 
8869 /* VEE FLUSH Completion Record (16 bytes) */
8870 /* vee_flush (size:128b/16B) */
8871 struct vee_flush {
8872 	uint32_t	downstream_path_type;
8873 	/*
8874 	 * This field indicates the exact type of the completion.
8875 	 * By convention, the LSB identifies the length of the
8876 	 * record in 16B units. Even values indicate 16B
8877 	 * records. Odd values indicate 32B
8878 	 * records.
8879 	 */
8880 	#define VEE_FLUSH_TYPE_MASK           UINT32_C(0x3f)
8881 	#define VEE_FLUSH_TYPE_SFT            0
8882 	/*
8883 	 * VEE Flush Completion:
8884 	 * This completion is inserted manually by the Primate and processed
8885 	 * by the VEE hardware to ensure that all completions on a VEE
8886 	 * function have been processed by the VEE hardware before FLR
8887 	 * process is completed.
8888 	 */
8889 	#define VEE_FLUSH_TYPE_VEE_FLUSH        UINT32_C(0x1c)
8890 	#define VEE_FLUSH_TYPE_LAST            VEE_FLUSH_TYPE_VEE_FLUSH
8891 	/* downstream_path is 1 b */
8892 	#define VEE_FLUSH_DOWNSTREAM_PATH     UINT32_C(0x40)
8893 	/* This completion is associated with VEE Transmit */
8894 	#define VEE_FLUSH_DOWNSTREAM_PATH_TX    (UINT32_C(0x0) << 6)
8895 	/* This completion is associated with VEE Receive */
8896 	#define VEE_FLUSH_DOWNSTREAM_PATH_RX    (UINT32_C(0x1) << 6)
8897 	#define VEE_FLUSH_DOWNSTREAM_PATH_LAST VEE_FLUSH_DOWNSTREAM_PATH_RX
8898 	/*
8899 	 * This is an opaque value that is passed through the completion
8900 	 * to the VEE handler SW and is used to indicate what VEE VQ or
8901 	 * function has completed FLR processing.
8902 	 */
8903 	uint32_t	opaque;
8904 	uint32_t	v;
8905 	/*
8906 	 * This value is written by the NIC such that it will be different
8907 	 * for each pass through the completion queue. The even passes will
8908 	 * write 1. The odd passes will write 0.
8909 	 */
8910 	#define VEE_FLUSH_V     UINT32_C(0x1)
8911 	/* unused3 is 32 b */
8912 	uint32_t	unused_3;
8913 } __rte_packed;
8914 
8915 /* eject_cmpl (size:128b/16B) */
8916 struct eject_cmpl {
8917 	uint16_t	type;
8918 	/*
8919 	 * This field indicates the exact type of the completion.
8920 	 * By convention, the LSB identifies the length of the
8921 	 * record in 16B units. Even values indicate 16B
8922 	 * records. Odd values indicate 32B
8923 	 * records.
8924 	 */
8925 	#define EJECT_CMPL_TYPE_MASK       UINT32_C(0x3f)
8926 	#define EJECT_CMPL_TYPE_SFT        0
8927 	/*
8928 	 * Statistics Ejection Completion:
8929 	 * Completion of statistics data ejection buffer.
8930 	 * Length = 16B
8931 	 */
8932 	#define EJECT_CMPL_TYPE_STAT_EJECT   UINT32_C(0x1a)
8933 	#define EJECT_CMPL_TYPE_LAST        EJECT_CMPL_TYPE_STAT_EJECT
8934 	#define EJECT_CMPL_FLAGS_MASK      UINT32_C(0xffc0)
8935 	#define EJECT_CMPL_FLAGS_SFT       6
8936 	/*
8937 	 * When this bit is '1', it indicates a packet that has an
8938 	 * error of some type. Type of error is indicated in
8939 	 * error_flags.
8940 	 */
8941 	#define EJECT_CMPL_FLAGS_ERROR      UINT32_C(0x40)
8942 	/*
8943 	 * This is the length of the statistics data stored in this
8944 	 * buffer.
8945 	 */
8946 	uint16_t	len;
8947 	/*
8948 	 * This is a copy of the opaque field from the RX BD this ejection
8949 	 * buffer corresponds to.
8950 	 */
8951 	uint32_t	opaque;
8952 	uint16_t	v;
8953 	/*
8954 	 * This value is written by the NIC such that it will be different
8955 	 * for each pass through the completion queue. The even passes
8956 	 * will write 1. The odd passes will write 0.
8957 	 */
8958 	#define EJECT_CMPL_V                              UINT32_C(0x1)
8959 	#define EJECT_CMPL_ERRORS_MASK                    UINT32_C(0xfffe)
8960 	#define EJECT_CMPL_ERRORS_SFT                     1
8961 	/*
8962 	 * This error indicates that there was some sort of problem with
8963 	 * the BDs for statistics ejection. The statistics ejection should
8964 	 * be treated as invalid
8965 	 */
8966 	#define EJECT_CMPL_ERRORS_BUFFER_ERROR_MASK        UINT32_C(0xe)
8967 	#define EJECT_CMPL_ERRORS_BUFFER_ERROR_SFT         1
8968 	/* No buffer error */
8969 	#define EJECT_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
8970 		(UINT32_C(0x0) << 1)
8971 	/*
8972 	 * Did Not Fit:
8973 	 * Statistics did not fit into aggregation buffer provided.
8974 	 */
8975 	#define EJECT_CMPL_ERRORS_BUFFER_ERROR_DID_NOT_FIT \
8976 		(UINT32_C(0x1) << 1)
8977 	/*
8978 	 * Bad Format:
8979 	 * BDs were not formatted correctly.
8980 	 */
8981 	#define EJECT_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
8982 		(UINT32_C(0x3) << 1)
8983 	/*
8984 	 * Flush:
8985 	 * There was a bad_format error on the previous operation
8986 	 */
8987 	#define EJECT_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
8988 		(UINT32_C(0x5) << 1)
8989 	#define EJECT_CMPL_ERRORS_BUFFER_ERROR_LAST \
8990 		EJECT_CMPL_ERRORS_BUFFER_ERROR_FLUSH
8991 	/* reserved16 is 16 b */
8992 	uint16_t	reserved16;
8993 	/* unused3 is 32 b */
8994 	uint32_t	unused_2;
8995 } __rte_packed;
8996 
8997 /* hwrm_cmpl (size:128b/16B) */
8998 struct hwrm_cmpl {
8999 	uint16_t	type;
9000 	/*
9001 	 * This field indicates the exact type of the completion.
9002 	 * By convention, the LSB identifies the length of the
9003 	 * record in 16B units. Even values indicate 16B
9004 	 * records. Odd values indicate 32B
9005 	 * records.
9006 	 */
9007 	#define HWRM_CMPL_TYPE_MASK     UINT32_C(0x3f)
9008 	#define HWRM_CMPL_TYPE_SFT      0
9009 	/*
9010 	 * HWRM Command Completion:
9011 	 * Completion of an HWRM command.
9012 	 */
9013 	#define HWRM_CMPL_TYPE_HWRM_DONE  UINT32_C(0x20)
9014 	#define HWRM_CMPL_TYPE_LAST      HWRM_CMPL_TYPE_HWRM_DONE
9015 	/* This is the sequence_id of the HWRM command that has completed. */
9016 	uint16_t	sequence_id;
9017 	/* unused2 is 32 b */
9018 	uint32_t	unused_1;
9019 	uint32_t	v;
9020 	/*
9021 	 * This value is written by the NIC such that it will be different
9022 	 * for each pass through the completion queue. The even passes
9023 	 * will write 1. The odd passes will write 0.
9024 	 */
9025 	#define HWRM_CMPL_V     UINT32_C(0x1)
9026 	/* unused4 is 32 b */
9027 	uint32_t	unused_3;
9028 } __rte_packed;
9029 
9030 /* hwrm_fwd_req_cmpl (size:128b/16B) */
9031 struct hwrm_fwd_req_cmpl {
9032 	/*
9033 	 * This field indicates the exact type of the completion.
9034 	 * By convention, the LSB identifies the length of the
9035 	 * record in 16B units. Even values indicate 16B
9036 	 * records. Odd values indicate 32B
9037 	 * records.
9038 	 */
9039 	uint16_t	req_len_type;
9040 	/*
9041 	 * This field indicates the exact type of the completion.
9042 	 * By convention, the LSB identifies the length of the
9043 	 * record in 16B units. Even values indicate 16B
9044 	 * records. Odd values indicate 32B
9045 	 * records.
9046 	 */
9047 	#define HWRM_FWD_REQ_CMPL_TYPE_MASK        UINT32_C(0x3f)
9048 	#define HWRM_FWD_REQ_CMPL_TYPE_SFT         0
9049 	/* Forwarded HWRM Request */
9050 	#define HWRM_FWD_REQ_CMPL_TYPE_HWRM_FWD_REQ  UINT32_C(0x22)
9051 	#define HWRM_FWD_REQ_CMPL_TYPE_LAST \
9052 		HWRM_FWD_REQ_CMPL_TYPE_HWRM_FWD_REQ
9053 	/* Length of forwarded request in bytes. */
9054 	#define HWRM_FWD_REQ_CMPL_REQ_LEN_MASK     UINT32_C(0xffc0)
9055 	#define HWRM_FWD_REQ_CMPL_REQ_LEN_SFT      6
9056 	/*
9057 	 * Source ID of this request.
9058 	 * Typically used in forwarding requests and responses.
9059 	 * 0x0 - 0xFFF8 - Used for function ids
9060 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors
9061 	 * 0xFFFF - HWRM
9062 	 */
9063 	uint16_t	source_id;
9064 	/* unused1 is 32 b */
9065 	uint32_t	unused0;
9066 	/* Address of forwarded request. */
9067 	uint32_t	req_buf_addr_v[2];
9068 	/*
9069 	 * This value is written by the NIC such that it will be different
9070 	 * for each pass through the completion queue. The even passes
9071 	 * will write 1. The odd passes will write 0.
9072 	 */
9073 	#define HWRM_FWD_REQ_CMPL_V                UINT32_C(0x1)
9074 	/* Address of forwarded request. */
9075 	#define HWRM_FWD_REQ_CMPL_REQ_BUF_ADDR_MASK UINT32_C(0xfffffffe)
9076 	#define HWRM_FWD_REQ_CMPL_REQ_BUF_ADDR_SFT 1
9077 } __rte_packed;
9078 
9079 /* hwrm_fwd_resp_cmpl (size:128b/16B) */
9080 struct hwrm_fwd_resp_cmpl {
9081 	uint16_t	type;
9082 	/*
9083 	 * This field indicates the exact type of the completion.
9084 	 * By convention, the LSB identifies the length of the
9085 	 * record in 16B units. Even values indicate 16B
9086 	 * records. Odd values indicate 32B
9087 	 * records.
9088 	 */
9089 	#define HWRM_FWD_RESP_CMPL_TYPE_MASK         UINT32_C(0x3f)
9090 	#define HWRM_FWD_RESP_CMPL_TYPE_SFT          0
9091 	/* Forwarded HWRM Response */
9092 	#define HWRM_FWD_RESP_CMPL_TYPE_HWRM_FWD_RESP  UINT32_C(0x24)
9093 	#define HWRM_FWD_RESP_CMPL_TYPE_LAST \
9094 		HWRM_FWD_RESP_CMPL_TYPE_HWRM_FWD_RESP
9095 	/*
9096 	 * Source ID of this response.
9097 	 * Typically used in forwarding requests and responses.
9098 	 * 0x0 - 0xFFF8 - Used for function ids
9099 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors
9100 	 * 0xFFFF - HWRM
9101 	 */
9102 	uint16_t	source_id;
9103 	/* Length of forwarded response in bytes. */
9104 	uint16_t	resp_len;
9105 	/* unused2 is 16 b */
9106 	uint16_t	unused_1;
9107 	/* Address of forwarded request. */
9108 	uint32_t	resp_buf_addr_v[2];
9109 	/*
9110 	 * This value is written by the NIC such that it will be different
9111 	 * for each pass through the completion queue. The even passes
9112 	 * will write 1. The odd passes will write 0.
9113 	 */
9114 	#define HWRM_FWD_RESP_CMPL_V                 UINT32_C(0x1)
9115 	/* Address of forwarded request. */
9116 	#define HWRM_FWD_RESP_CMPL_RESP_BUF_ADDR_MASK UINT32_C(0xfffffffe)
9117 	#define HWRM_FWD_RESP_CMPL_RESP_BUF_ADDR_SFT 1
9118 } __rte_packed;
9119 
9120 /* hwrm_async_event_cmpl (size:128b/16B) */
9121 struct hwrm_async_event_cmpl {
9122 	uint16_t	type;
9123 	/*
9124 	 * This field indicates the exact type of the completion.
9125 	 * By convention, the LSB identifies the length of the
9126 	 * record in 16B units. Even values indicate 16B
9127 	 * records. Odd values indicate 32B
9128 	 * records.
9129 	 */
9130 	#define HWRM_ASYNC_EVENT_CMPL_TYPE_MASK            UINT32_C(0x3f)
9131 	#define HWRM_ASYNC_EVENT_CMPL_TYPE_SFT             0
9132 	/* HWRM Asynchronous Event Information */
9133 	#define HWRM_ASYNC_EVENT_CMPL_TYPE_HWRM_ASYNC_EVENT  UINT32_C(0x2e)
9134 	#define HWRM_ASYNC_EVENT_CMPL_TYPE_LAST \
9135 		HWRM_ASYNC_EVENT_CMPL_TYPE_HWRM_ASYNC_EVENT
9136 	/* Identifiers of events. */
9137 	uint16_t	event_id;
9138 	/* Link status changed */
9139 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE \
9140 		UINT32_C(0x0)
9141 	/* Link MTU changed */
9142 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_MTU_CHANGE \
9143 		UINT32_C(0x1)
9144 	/* Link speed changed */
9145 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CHANGE \
9146 		UINT32_C(0x2)
9147 	/* DCB Configuration changed */
9148 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DCB_CONFIG_CHANGE \
9149 		UINT32_C(0x3)
9150 	/* Port connection not allowed */
9151 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_CONN_NOT_ALLOWED \
9152 		UINT32_C(0x4)
9153 	/* Link speed configuration was not allowed */
9154 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_NOT_ALLOWED \
9155 		UINT32_C(0x5)
9156 	/* Link speed configuration change */
9157 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_CHANGE \
9158 		UINT32_C(0x6)
9159 	/* Port PHY configuration change */
9160 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_PHY_CFG_CHANGE \
9161 		UINT32_C(0x7)
9162 	/* Reset notification to clients */
9163 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY \
9164 		UINT32_C(0x8)
9165 	/* Master function selection event */
9166 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_ERROR_RECOVERY \
9167 		UINT32_C(0x9)
9168 	/*
9169 	 * An event signifying that a ring has been disabled by
9170 	 * hw due to error.
9171 	 */
9172 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_RING_MONITOR_MSG \
9173 		UINT32_C(0xa)
9174 	/* Function driver unloaded */
9175 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_DRVR_UNLOAD \
9176 		UINT32_C(0x10)
9177 	/* Function driver loaded */
9178 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_DRVR_LOAD \
9179 		UINT32_C(0x11)
9180 	/* Function FLR related processing has completed */
9181 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_FLR_PROC_CMPLT \
9182 		UINT32_C(0x12)
9183 	/* PF driver unloaded */
9184 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_UNLOAD \
9185 		UINT32_C(0x20)
9186 	/* PF driver loaded */
9187 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_LOAD \
9188 		UINT32_C(0x21)
9189 	/* VF Function Level Reset (FLR) */
9190 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_FLR \
9191 		UINT32_C(0x30)
9192 	/* VF MAC Address Change */
9193 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_MAC_ADDR_CHANGE \
9194 		UINT32_C(0x31)
9195 	/* PF-VF communication channel status change. */
9196 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_VF_COMM_STATUS_CHANGE \
9197 		UINT32_C(0x32)
9198 	/* VF Configuration Change */
9199 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_CFG_CHANGE \
9200 		UINT32_C(0x33)
9201 	/* LLFC/PFC Configuration Change */
9202 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LLFC_PFC_CHANGE \
9203 		UINT32_C(0x34)
9204 	/* Default VNIC Configuration Change */
9205 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEFAULT_VNIC_CHANGE \
9206 		UINT32_C(0x35)
9207 	/* HW flow aged */
9208 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_HW_FLOW_AGED \
9209 		UINT32_C(0x36)
9210 	/*
9211 	 * A debug notification being posted to the driver. These
9212 	 * notifications are purely for diagnostic purpose and should not be
9213 	 * used for functional purpose. The driver is not supposed to act
9214 	 * on these messages except to log/record it.
9215 	 */
9216 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEBUG_NOTIFICATION \
9217 		UINT32_C(0x37)
9218 	/*
9219 	 * An EEM flow cached memory flush for all flows request event being
9220 	 * posted to the PF driver.
9221 	 */
9222 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_EEM_CACHE_FLUSH_REQ \
9223 		UINT32_C(0x38)
9224 	/*
9225 	 * An EEM flow cache memory flush completion event being posted to the
9226 	 * firmware by the PF driver. This is indication that host EEM flush
9227 	 * has completed by the PF.
9228 	 */
9229 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_EEM_CACHE_FLUSH_DONE \
9230 		UINT32_C(0x39)
9231 	/*
9232 	 * A tcp flag action change event being posted to the PF or trusted VF
9233 	 * driver by the firmware. The PF or trusted VF driver should query
9234 	 * the firmware for the new TCP flag action update after receiving
9235 	 * this async event.
9236 	 */
9237 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_TCP_FLAG_ACTION_CHANGE \
9238 		UINT32_C(0x3a)
9239 	/*
9240 	 * An EEM flow active event being posted to the PF or trusted VF driver
9241 	 * by the firmware. The PF or trusted VF driver should update the
9242 	 * flow's aging timer after receiving this async event.
9243 	 */
9244 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_EEM_FLOW_ACTIVE \
9245 		UINT32_C(0x3b)
9246 	/*
9247 	 * A eem cfg change event being posted to the trusted VF driver by the
9248 	 * firmware if the parent PF EEM configuration changed.
9249 	 */
9250 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_EEM_CFG_CHANGE \
9251 		UINT32_C(0x3c)
9252 	/*
9253 	 * Deprecated.
9254 	 * TFLIB unique default VNIC Configuration Change
9255 	 */
9256 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_TFLIB_DEFAULT_VNIC_CHANGE \
9257 		UINT32_C(0x3d)
9258 	/*
9259 	 * Deprecated.
9260 	 * TFLIB unique link status changed
9261 	 */
9262 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_TFLIB_LINK_STATUS_CHANGE \
9263 		UINT32_C(0x3e)
9264 	/*
9265 	 * An event signifying completion for HWRM_FW_STATE_QUIESCE
9266 	 * (completion, timeout, or error)
9267 	 */
9268 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_QUIESCE_DONE \
9269 		UINT32_C(0x3f)
9270 	/*
9271 	 * An event signifying a HWRM command is in progress and its
9272 	 * response will be deferred. This event is used on crypto controllers
9273 	 * only.
9274 	 */
9275 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEFERRED_RESPONSE \
9276 		UINT32_C(0x40)
9277 	/*
9278 	 * An event signifying that a PFC WatchDog configuration
9279 	 * has changed on any port / cos.
9280 	 */
9281 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PFC_WATCHDOG_CFG_CHANGE \
9282 		UINT32_C(0x41)
9283 	/*
9284 	 * An echo request from the firmware. An echo response is expected by
9285 	 * the firmware.
9286 	 */
9287 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_ECHO_REQUEST \
9288 		UINT32_C(0x42)
9289 	/*
9290 	 * An event from firmware indicating who has been selected as the
9291 	 * PHC Master or secondary. Also indicates the last time a failover
9292 	 * happens. Event will also be sent when PHC rolls over.
9293 	 */
9294 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PHC_UPDATE \
9295 		UINT32_C(0x43)
9296 	/*
9297 	 * An event from firmware showing the last PPS timestamp that has been
9298 	 * latched.
9299 	 */
9300 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PPS_TIMESTAMP \
9301 		UINT32_C(0x44)
9302 	/*
9303 	 * An event from firmware indicating that an error has occurred.
9304 	 * The driver should log the event so that an administrator can be
9305 	 * aware that a problem has occurred that may need attention.
9306 	 */
9307 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_ERROR_REPORT \
9308 		UINT32_C(0x45)
9309 	/*
9310 	 * An event from firmware indicating that the programmed pacing
9311 	 * threshold for the doorbell global FIFO has been crossed. The driver
9312 	 * needs to take appropriate action to pace the doorbells when this
9313 	 * event is received from the firmware.
9314 	 */
9315 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DOORBELL_PACING_THRESHOLD \
9316 		UINT32_C(0x46)
9317 	/* Maximum Registrable event id. */
9318 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_MAX_RGTR_EVENT_ID \
9319 		UINT32_C(0x47)
9320 	/*
9321 	 * A trace log message. This contains firmware trace logs string
9322 	 * embedded in the asynchronous message. This is an experimental
9323 	 * event, not meant for production use at this time.
9324 	 */
9325 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FW_TRACE_MSG \
9326 		UINT32_C(0xfe)
9327 	/* HWRM Error */
9328 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_HWRM_ERROR \
9329 		UINT32_C(0xff)
9330 	#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LAST \
9331 		HWRM_ASYNC_EVENT_CMPL_EVENT_ID_HWRM_ERROR
9332 	/* Event specific data */
9333 	uint32_t	event_data2;
9334 	uint8_t	opaque_v;
9335 	/*
9336 	 * This value is written by the NIC such that it will be different
9337 	 * for each pass through the completion queue. The even passes
9338 	 * will write 1. The odd passes will write 0.
9339 	 */
9340 	#define HWRM_ASYNC_EVENT_CMPL_V          UINT32_C(0x1)
9341 	/* opaque is 7 b */
9342 	#define HWRM_ASYNC_EVENT_CMPL_OPAQUE_MASK UINT32_C(0xfe)
9343 	#define HWRM_ASYNC_EVENT_CMPL_OPAQUE_SFT 1
9344 	/* 8-lsb timestamp from POR (100-msec resolution) */
9345 	uint8_t	timestamp_lo;
9346 	/* 16-lsb timestamp from POR (100-msec resolution) */
9347 	uint16_t	timestamp_hi;
9348 	/* Event specific data */
9349 	uint32_t	event_data1;
9350 } __rte_packed;
9351 
9352 /* hwrm_async_event_cmpl_link_status_change (size:128b/16B) */
9353 struct hwrm_async_event_cmpl_link_status_change {
9354 	uint16_t	type;
9355 	/*
9356 	 * This field indicates the exact type of the completion.
9357 	 * By convention, the LSB identifies the length of the
9358 	 * record in 16B units. Even values indicate 16B
9359 	 * records. Odd values indicate 32B
9360 	 * records.
9361 	 */
9362 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_MASK \
9363 		UINT32_C(0x3f)
9364 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_SFT             0
9365 	/* HWRM Asynchronous Event Information */
9366 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_HWRM_ASYNC_EVENT \
9367 		UINT32_C(0x2e)
9368 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_LAST \
9369 		HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_HWRM_ASYNC_EVENT
9370 	/* Identifiers of events. */
9371 	uint16_t	event_id;
9372 	/* Link status changed */
9373 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_ID_LINK_STATUS_CHANGE \
9374 		UINT32_C(0x0)
9375 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_ID_LAST \
9376 		HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_ID_LINK_STATUS_CHANGE
9377 	/* Event specific data */
9378 	uint32_t	event_data2;
9379 	uint8_t	opaque_v;
9380 	/*
9381 	 * This value is written by the NIC such that it will be different
9382 	 * for each pass through the completion queue. The even passes
9383 	 * will write 1. The odd passes will write 0.
9384 	 */
9385 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_V \
9386 		UINT32_C(0x1)
9387 	/* opaque is 7 b */
9388 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_OPAQUE_MASK \
9389 		UINT32_C(0xfe)
9390 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_OPAQUE_SFT 1
9391 	/* 8-lsb timestamp from POR (100-msec resolution) */
9392 	uint8_t	timestamp_lo;
9393 	/* 16-lsb timestamp from POR (100-msec resolution) */
9394 	uint16_t	timestamp_hi;
9395 	/* Event specific data */
9396 	uint32_t	event_data1;
9397 	/* Indicates link status change */
9398 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE \
9399 		UINT32_C(0x1)
9400 	/*
9401 	 * If this bit set to 0, then it indicates that the link
9402 	 * was up and it went down.
9403 	 */
9404 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE_DOWN \
9405 		UINT32_C(0x0)
9406 	/*
9407 	 * If this bit is set to 1, then it indicates that the link
9408 	 * was down and it went up.
9409 	 */
9410 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE_UP \
9411 		UINT32_C(0x1)
9412 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE_LAST \
9413 		HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE_UP
9414 	/* Indicates the physical port this link status change occur */
9415 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PORT_MASK \
9416 		UINT32_C(0xe)
9417 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PORT_SFT \
9418 		1
9419 	/* PORT ID */
9420 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PORT_ID_MASK \
9421 		UINT32_C(0xffff0)
9422 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PORT_ID_SFT \
9423 		4
9424 	/* Indicates the physical function this event occurred on. */
9425 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PF_ID_MASK \
9426 		UINT32_C(0xff00000)
9427 	#define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PF_ID_SFT \
9428 		20
9429 } __rte_packed;
9430 
9431 /* hwrm_async_event_cmpl_link_mtu_change (size:128b/16B) */
9432 struct hwrm_async_event_cmpl_link_mtu_change {
9433 	uint16_t	type;
9434 	/*
9435 	 * This field indicates the exact type of the completion.
9436 	 * By convention, the LSB identifies the length of the
9437 	 * record in 16B units. Even values indicate 16B
9438 	 * records. Odd values indicate 32B
9439 	 * records.
9440 	 */
9441 	#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_MASK \
9442 		UINT32_C(0x3f)
9443 	#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_SFT             0
9444 	/* HWRM Asynchronous Event Information */
9445 	#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_HWRM_ASYNC_EVENT \
9446 		UINT32_C(0x2e)
9447 	#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_LAST \
9448 		HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_HWRM_ASYNC_EVENT
9449 	/* Identifiers of events. */
9450 	uint16_t	event_id;
9451 	/* Link MTU changed */
9452 	#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_ID_LINK_MTU_CHANGE \
9453 		UINT32_C(0x1)
9454 	#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_ID_LAST \
9455 		HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_ID_LINK_MTU_CHANGE
9456 	/* Event specific data */
9457 	uint32_t	event_data2;
9458 	uint8_t	opaque_v;
9459 	/*
9460 	 * This value is written by the NIC such that it will be different
9461 	 * for each pass through the completion queue. The even passes
9462 	 * will write 1. The odd passes will write 0.
9463 	 */
9464 	#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_V          UINT32_C(0x1)
9465 	/* opaque is 7 b */
9466 	#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_OPAQUE_MASK \
9467 		UINT32_C(0xfe)
9468 	#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_OPAQUE_SFT 1
9469 	/* 8-lsb timestamp from POR (100-msec resolution) */
9470 	uint8_t	timestamp_lo;
9471 	/* 16-lsb timestamp from POR (100-msec resolution) */
9472 	uint16_t	timestamp_hi;
9473 	/* Event specific data */
9474 	uint32_t	event_data1;
9475 	/* The new MTU of the link in bytes. */
9476 	#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_DATA1_NEW_MTU_MASK \
9477 		UINT32_C(0xffff)
9478 	#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_DATA1_NEW_MTU_SFT 0
9479 } __rte_packed;
9480 
9481 /* hwrm_async_event_cmpl_link_speed_change (size:128b/16B) */
9482 struct hwrm_async_event_cmpl_link_speed_change {
9483 	uint16_t	type;
9484 	/*
9485 	 * This field indicates the exact type of the completion.
9486 	 * By convention, the LSB identifies the length of the
9487 	 * record in 16B units. Even values indicate 16B
9488 	 * records. Odd values indicate 32B
9489 	 * records.
9490 	 */
9491 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_MASK \
9492 		UINT32_C(0x3f)
9493 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_SFT             0
9494 	/* HWRM Asynchronous Event Information */
9495 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_HWRM_ASYNC_EVENT \
9496 		UINT32_C(0x2e)
9497 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_LAST \
9498 		HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_HWRM_ASYNC_EVENT
9499 	/* Identifiers of events. */
9500 	uint16_t	event_id;
9501 	/* Link speed changed */
9502 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_ID_LINK_SPEED_CHANGE \
9503 		UINT32_C(0x2)
9504 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_ID_LAST \
9505 		HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_ID_LINK_SPEED_CHANGE
9506 	/* Event specific data */
9507 	uint32_t	event_data2;
9508 	uint8_t	opaque_v;
9509 	/*
9510 	 * This value is written by the NIC such that it will be different
9511 	 * for each pass through the completion queue. The even passes
9512 	 * will write 1. The odd passes will write 0.
9513 	 */
9514 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_V \
9515 		UINT32_C(0x1)
9516 	/* opaque is 7 b */
9517 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_OPAQUE_MASK \
9518 		UINT32_C(0xfe)
9519 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_OPAQUE_SFT 1
9520 	/* 8-lsb timestamp from POR (100-msec resolution) */
9521 	uint8_t	timestamp_lo;
9522 	/* 16-lsb timestamp from POR (100-msec resolution) */
9523 	uint16_t	timestamp_hi;
9524 	/* Event specific data */
9525 	uint32_t	event_data1;
9526 	/*
9527 	 * When this bit is '1', the link was forced to the
9528 	 * force_link_speed value.
9529 	 */
9530 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_FORCE \
9531 		UINT32_C(0x1)
9532 	/* The new link speed in 100 Mbps units. */
9533 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_MASK \
9534 		UINT32_C(0xfffe)
9535 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_SFT \
9536 		1
9537 	/* 100Mb link speed */
9538 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_100MB \
9539 		(UINT32_C(0x1) << 1)
9540 	/* 1Gb link speed */
9541 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_1GB \
9542 		(UINT32_C(0xa) << 1)
9543 	/* 2Gb link speed */
9544 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_2GB \
9545 		(UINT32_C(0x14) << 1)
9546 	/* 25Gb link speed */
9547 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_2_5GB \
9548 		(UINT32_C(0x19) << 1)
9549 	/* 10Gb link speed */
9550 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_10GB \
9551 		(UINT32_C(0x64) << 1)
9552 	/* 20Mb link speed */
9553 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_20GB \
9554 		(UINT32_C(0xc8) << 1)
9555 	/* 25Gb link speed */
9556 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_25GB \
9557 		(UINT32_C(0xfa) << 1)
9558 	/* 40Gb link speed */
9559 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_40GB \
9560 		(UINT32_C(0x190) << 1)
9561 	/* 50Gb link speed */
9562 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_50GB \
9563 		(UINT32_C(0x1f4) << 1)
9564 	/* 100Gb link speed */
9565 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_100GB \
9566 		(UINT32_C(0x3e8) << 1)
9567 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_LAST \
9568 		HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_100GB
9569 	/* PORT ID */
9570 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_PORT_ID_MASK \
9571 		UINT32_C(0xffff0000)
9572 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_PORT_ID_SFT \
9573 		16
9574 } __rte_packed;
9575 
9576 /* hwrm_async_event_cmpl_dcb_config_change (size:128b/16B) */
9577 struct hwrm_async_event_cmpl_dcb_config_change {
9578 	uint16_t	type;
9579 	/*
9580 	 * This field indicates the exact type of the completion.
9581 	 * By convention, the LSB identifies the length of the
9582 	 * record in 16B units. Even values indicate 16B
9583 	 * records. Odd values indicate 32B
9584 	 * records.
9585 	 */
9586 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_MASK \
9587 		UINT32_C(0x3f)
9588 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_SFT             0
9589 	/* HWRM Asynchronous Event Information */
9590 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
9591 		UINT32_C(0x2e)
9592 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_LAST \
9593 		HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_HWRM_ASYNC_EVENT
9594 	/* Identifiers of events. */
9595 	uint16_t	event_id;
9596 	/* DCB Configuration changed */
9597 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_ID_DCB_CONFIG_CHANGE \
9598 		UINT32_C(0x3)
9599 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_ID_LAST \
9600 		HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_ID_DCB_CONFIG_CHANGE
9601 	/* Event specific data */
9602 	uint32_t	event_data2;
9603 	/* ETS configuration change */
9604 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA2_ETS \
9605 		UINT32_C(0x1)
9606 	/* PFC configuration change */
9607 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA2_PFC \
9608 		UINT32_C(0x2)
9609 	/* APP configuration change */
9610 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA2_APP \
9611 		UINT32_C(0x4)
9612 	/* DSCP configuration change */
9613 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA2_DSCP \
9614 		UINT32_C(0x8)
9615 	uint8_t	opaque_v;
9616 	/*
9617 	 * This value is written by the NIC such that it will be different
9618 	 * for each pass through the completion queue. The even passes
9619 	 * will write 1. The odd passes will write 0.
9620 	 */
9621 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_V \
9622 		UINT32_C(0x1)
9623 	/* opaque is 7 b */
9624 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_OPAQUE_MASK \
9625 		UINT32_C(0xfe)
9626 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_OPAQUE_SFT 1
9627 	/* 8-lsb timestamp from POR (100-msec resolution) */
9628 	uint8_t	timestamp_lo;
9629 	/* 16-lsb timestamp from POR (100-msec resolution) */
9630 	uint16_t	timestamp_hi;
9631 	/* Event specific data */
9632 	uint32_t	event_data1;
9633 	/* PORT ID */
9634 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_PORT_ID_MASK \
9635 		UINT32_C(0xffff)
9636 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_PORT_ID_SFT \
9637 		0
9638 	/* Priority recommended for RoCE traffic */
9639 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_MASK \
9640 		UINT32_C(0xff0000)
9641 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_SFT \
9642 		16
9643 	/* none is 255 */
9644 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_NONE \
9645 		(UINT32_C(0xff) << 16)
9646 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_LAST \
9647 		HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_NONE
9648 	/* Priority recommended for L2 traffic */
9649 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_MASK \
9650 		UINT32_C(0xff000000)
9651 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_SFT \
9652 		24
9653 	/* none is 255 */
9654 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_NONE \
9655 		(UINT32_C(0xff) << 24)
9656 	#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_LAST \
9657 		HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_NONE
9658 } __rte_packed;
9659 
9660 /* hwrm_async_event_cmpl_port_conn_not_allowed (size:128b/16B) */
9661 struct hwrm_async_event_cmpl_port_conn_not_allowed {
9662 	uint16_t	type;
9663 	/*
9664 	 * This field indicates the exact type of the completion.
9665 	 * By convention, the LSB identifies the length of the
9666 	 * record in 16B units. Even values indicate 16B
9667 	 * records. Odd values indicate 32B
9668 	 * records.
9669 	 */
9670 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_MASK \
9671 		UINT32_C(0x3f)
9672 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_SFT \
9673 		0
9674 	/* HWRM Asynchronous Event Information */
9675 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT \
9676 		UINT32_C(0x2e)
9677 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_LAST \
9678 		HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT
9679 	/* Identifiers of events. */
9680 	uint16_t	event_id;
9681 	/* Port connection not allowed */
9682 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_ID_PORT_CONN_NOT_ALLOWED \
9683 		UINT32_C(0x4)
9684 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_ID_LAST \
9685 		HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_ID_PORT_CONN_NOT_ALLOWED
9686 	/* Event specific data */
9687 	uint32_t	event_data2;
9688 	uint8_t	opaque_v;
9689 	/*
9690 	 * This value is written by the NIC such that it will be different
9691 	 * for each pass through the completion queue. The even passes
9692 	 * will write 1. The odd passes will write 0.
9693 	 */
9694 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_V \
9695 		UINT32_C(0x1)
9696 	/* opaque is 7 b */
9697 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_OPAQUE_MASK \
9698 		UINT32_C(0xfe)
9699 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_OPAQUE_SFT 1
9700 	/* 8-lsb timestamp from POR (100-msec resolution) */
9701 	uint8_t	timestamp_lo;
9702 	/* 16-lsb timestamp from POR (100-msec resolution) */
9703 	uint16_t	timestamp_hi;
9704 	/* Event specific data */
9705 	uint32_t	event_data1;
9706 	/* PORT ID */
9707 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_PORT_ID_MASK \
9708 		UINT32_C(0xffff)
9709 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_PORT_ID_SFT \
9710 		0
9711 	/*
9712 	 * This value indicates the current port level enforcement policy
9713 	 * for the optics module when there is an optical module mismatch
9714 	 * and port is not connected.
9715 	 */
9716 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_MASK \
9717 		UINT32_C(0xff0000)
9718 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_SFT \
9719 		16
9720 	/* No enforcement */
9721 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_NONE \
9722 		(UINT32_C(0x0) << 16)
9723 	/* Disable Transmit side Laser. */
9724 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_DISABLETX \
9725 		(UINT32_C(0x1) << 16)
9726 	/* Raise a warning message. */
9727 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_WARNINGMSG \
9728 		(UINT32_C(0x2) << 16)
9729 	/* Power down the module. */
9730 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_PWRDOWN \
9731 		(UINT32_C(0x3) << 16)
9732 	#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_LAST \
9733 		HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_PWRDOWN
9734 } __rte_packed;
9735 
9736 /* hwrm_async_event_cmpl_link_speed_cfg_not_allowed (size:128b/16B) */
9737 struct hwrm_async_event_cmpl_link_speed_cfg_not_allowed {
9738 	uint16_t	type;
9739 	/*
9740 	 * This field indicates the exact type of the completion.
9741 	 * By convention, the LSB identifies the length of the
9742 	 * record in 16B units. Even values indicate 16B
9743 	 * records. Odd values indicate 32B
9744 	 * records.
9745 	 */
9746 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_MASK \
9747 		UINT32_C(0x3f)
9748 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_SFT \
9749 		0
9750 	/* HWRM Asynchronous Event Information */
9751 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT \
9752 		UINT32_C(0x2e)
9753 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_LAST \
9754 		HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT
9755 	/* Identifiers of events. */
9756 	uint16_t	event_id;
9757 	/* Link speed configuration was not allowed */
9758 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_ID_LINK_SPEED_CFG_NOT_ALLOWED \
9759 		UINT32_C(0x5)
9760 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_ID_LAST \
9761 		HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_ID_LINK_SPEED_CFG_NOT_ALLOWED
9762 	/* Event specific data */
9763 	uint32_t	event_data2;
9764 	uint8_t	opaque_v;
9765 	/*
9766 	 * This value is written by the NIC such that it will be different
9767 	 * for each pass through the completion queue. The even passes
9768 	 * will write 1. The odd passes will write 0.
9769 	 */
9770 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_V \
9771 		UINT32_C(0x1)
9772 	/* opaque is 7 b */
9773 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_OPAQUE_MASK \
9774 		UINT32_C(0xfe)
9775 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_OPAQUE_SFT 1
9776 	/* 8-lsb timestamp from POR (100-msec resolution) */
9777 	uint8_t	timestamp_lo;
9778 	/* 16-lsb timestamp from POR (100-msec resolution) */
9779 	uint16_t	timestamp_hi;
9780 	/* Event specific data */
9781 	uint32_t	event_data1;
9782 	/* PORT ID */
9783 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_DATA1_PORT_ID_MASK \
9784 		UINT32_C(0xffff)
9785 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_DATA1_PORT_ID_SFT \
9786 		0
9787 } __rte_packed;
9788 
9789 /* hwrm_async_event_cmpl_link_speed_cfg_change (size:128b/16B) */
9790 struct hwrm_async_event_cmpl_link_speed_cfg_change {
9791 	uint16_t	type;
9792 	/*
9793 	 * This field indicates the exact type of the completion.
9794 	 * By convention, the LSB identifies the length of the
9795 	 * record in 16B units. Even values indicate 16B
9796 	 * records. Odd values indicate 32B
9797 	 * records.
9798 	 */
9799 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_MASK \
9800 		UINT32_C(0x3f)
9801 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_SFT \
9802 		0
9803 	/* HWRM Asynchronous Event Information */
9804 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
9805 		UINT32_C(0x2e)
9806 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_LAST \
9807 		HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT
9808 	/* Identifiers of events. */
9809 	uint16_t	event_id;
9810 	/* Link speed configuration change */
9811 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LINK_SPEED_CFG_CHANGE \
9812 		UINT32_C(0x6)
9813 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LAST \
9814 		HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LINK_SPEED_CFG_CHANGE
9815 	/* Event specific data */
9816 	uint32_t	event_data2;
9817 	uint8_t	opaque_v;
9818 	/*
9819 	 * This value is written by the NIC such that it will be different
9820 	 * for each pass through the completion queue. The even passes
9821 	 * will write 1. The odd passes will write 0.
9822 	 */
9823 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_V \
9824 		UINT32_C(0x1)
9825 	/* opaque is 7 b */
9826 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_OPAQUE_MASK \
9827 		UINT32_C(0xfe)
9828 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_OPAQUE_SFT 1
9829 	/* 8-lsb timestamp from POR (100-msec resolution) */
9830 	uint8_t	timestamp_lo;
9831 	/* 16-lsb timestamp from POR (100-msec resolution) */
9832 	uint16_t	timestamp_hi;
9833 	/* Event specific data */
9834 	uint32_t	event_data1;
9835 	/* PORT ID */
9836 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_PORT_ID_MASK \
9837 		UINT32_C(0xffff)
9838 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_PORT_ID_SFT \
9839 		0
9840 	/*
9841 	 * If set to 1, it indicates that the supported link speeds
9842 	 * configuration on the port has changed.
9843 	 * If set to 0, then there is no change in supported link speeds
9844 	 * configuration.
9845 	 */
9846 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_SUPPORTED_LINK_SPEEDS_CHANGE \
9847 		UINT32_C(0x10000)
9848 	/*
9849 	 * If set to 1, it indicates that the link speed configuration
9850 	 * on the port has become illegal or invalid.
9851 	 * If set to 0, then the link speed configuration on the port is
9852 	 * legal or valid.
9853 	 */
9854 	#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_ILLEGAL_LINK_SPEED_CFG \
9855 		UINT32_C(0x20000)
9856 } __rte_packed;
9857 
9858 /* hwrm_async_event_cmpl_port_phy_cfg_change (size:128b/16B) */
9859 struct hwrm_async_event_cmpl_port_phy_cfg_change {
9860 	uint16_t	type;
9861 	/*
9862 	 * This field indicates the exact type of the completion.
9863 	 * By convention, the LSB identifies the length of the
9864 	 * record in 16B units. Even values indicate 16B
9865 	 * records. Odd values indicate 32B
9866 	 * records.
9867 	 */
9868 	#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_MASK \
9869 		UINT32_C(0x3f)
9870 	#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_SFT \
9871 		0
9872 	/* HWRM Asynchronous Event Information */
9873 	#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
9874 		UINT32_C(0x2e)
9875 	#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_LAST \
9876 		HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT
9877 	/* Identifiers of events. */
9878 	uint16_t	event_id;
9879 	/* Port PHY configuration change */
9880 	#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_PORT_PHY_CFG_CHANGE \
9881 		UINT32_C(0x7)
9882 	#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_LAST \
9883 		HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_PORT_PHY_CFG_CHANGE
9884 	/* Event specific data */
9885 	uint32_t	event_data2;
9886 	uint8_t	opaque_v;
9887 	/*
9888 	 * This value is written by the NIC such that it will be different
9889 	 * for each pass through the completion queue. The even passes
9890 	 * will write 1. The odd passes will write 0.
9891 	 */
9892 	#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_V \
9893 		UINT32_C(0x1)
9894 	/* opaque is 7 b */
9895 	#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_OPAQUE_MASK \
9896 		UINT32_C(0xfe)
9897 	#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_OPAQUE_SFT 1
9898 	/* 8-lsb timestamp from POR (100-msec resolution) */
9899 	uint8_t	timestamp_lo;
9900 	/* 16-lsb timestamp from POR (100-msec resolution) */
9901 	uint16_t	timestamp_hi;
9902 	/* Event specific data */
9903 	uint32_t	event_data1;
9904 	/* PORT ID */
9905 	#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PORT_ID_MASK \
9906 		UINT32_C(0xffff)
9907 	#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PORT_ID_SFT \
9908 		0
9909 	/*
9910 	 * If set to 1, it indicates that the FEC
9911 	 * configuration on the port has changed.
9912 	 * If set to 0, then there is no change in FEC configuration.
9913 	 */
9914 	#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_FEC_CFG_CHANGE \
9915 		UINT32_C(0x10000)
9916 	/*
9917 	 * If set to 1, it indicates that the EEE configuration
9918 	 * on the port has changed.
9919 	 * If set to 0, then there is no change in EEE configuration
9920 	 * on the port.
9921 	 */
9922 	#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_EEE_CFG_CHANGE \
9923 		UINT32_C(0x20000)
9924 	/*
9925 	 * If set to 1, it indicates that the pause configuration
9926 	 * on the PHY has changed.
9927 	 * If set to 0, then there is no change in the pause
9928 	 * configuration on the PHY.
9929 	 */
9930 	#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PAUSE_CFG_CHANGE \
9931 		UINT32_C(0x40000)
9932 } __rte_packed;
9933 
9934 /* hwrm_async_event_cmpl_reset_notify (size:128b/16B) */
9935 struct hwrm_async_event_cmpl_reset_notify {
9936 	uint16_t	type;
9937 	/*
9938 	 * This field indicates the exact type of the completion.
9939 	 * By convention, the LSB identifies the length of the
9940 	 * record in 16B units. Even values indicate 16B
9941 	 * records. Odd values indicate 32B
9942 	 * records.
9943 	 */
9944 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_MASK \
9945 		UINT32_C(0x3f)
9946 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_SFT             0
9947 	/* HWRM Asynchronous Event Information */
9948 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_HWRM_ASYNC_EVENT \
9949 		UINT32_C(0x2e)
9950 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_LAST \
9951 		HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_HWRM_ASYNC_EVENT
9952 	/* Identifiers of events. */
9953 	uint16_t	event_id;
9954 	/* Notify clients of imminent reset. */
9955 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_ID_RESET_NOTIFY \
9956 		UINT32_C(0x8)
9957 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_ID_LAST \
9958 		HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_ID_RESET_NOTIFY
9959 	/* Event specific data. The data is for internal debug use only. */
9960 	uint32_t	event_data2;
9961 	/*
9962 	 * These bits indicate the status as being reported by the firmware.
9963 	 * This value is exactly the same as status code in fw_status register.
9964 	 * If the status code is equal to 0x8000, then the reset is initiated
9965 	 * by the Host using the FW_RESET command when the FW is in a healthy
9966 	 * state. If the status code is not equal to 0x8000, then the reset is
9967 	 * initiated by the FW to recover from the error or FATAL state.
9968 	 */
9969 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA2_FW_STATUS_CODE_MASK \
9970 		UINT32_C(0xffff)
9971 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA2_FW_STATUS_CODE_SFT \
9972 		0
9973 	uint8_t	opaque_v;
9974 	/*
9975 	 * This value is written by the NIC such that it will be different
9976 	 * for each pass through the completion queue. The even passes
9977 	 * will write 1. The odd passes will write 0.
9978 	 */
9979 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_V          UINT32_C(0x1)
9980 	/* opaque is 7 b */
9981 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_OPAQUE_MASK UINT32_C(0xfe)
9982 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_OPAQUE_SFT 1
9983 	/*
9984 	 * 8-lsb timestamp (100-msec resolution)
9985 	 * The Minimum time required for the Firmware readiness after sending
9986 	 * this notification to the driver instances.
9987 	 */
9988 	uint8_t	timestamp_lo;
9989 	/*
9990 	 * 16-lsb timestamp (100-msec resolution)
9991 	 * The Maximum Firmware Reset bail out value in the order of 100
9992 	 * milliseconds. The driver instances will use this value to reinitiate
9993 	 * the registration process again if the core firmware didn’t set the
9994 	 * state bit.
9995 	 */
9996 	uint16_t	timestamp_hi;
9997 	/* Event specific data */
9998 	uint32_t	event_data1;
9999 	/* Indicates driver action requested */
10000 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_MASK \
10001 		UINT32_C(0xff)
10002 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_SFT \
10003 		0
10004 	/*
10005 	 * If set to 1, it indicates that the l2 client should
10006 	 * stop sending in band traffic to Nitro.
10007 	 * if set to 0, there is no change in L2 client behavior.
10008 	 */
10009 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_DRIVER_STOP_TX_QUEUE \
10010 		UINT32_C(0x1)
10011 	/*
10012 	 * If set to 1, it indicates that the L2 client should
10013 	 * bring down the interface.
10014 	 * If set to 0, then there is no change in L2 client behavior.
10015 	 */
10016 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_DRIVER_IFDOWN \
10017 		UINT32_C(0x2)
10018 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_LAST \
10019 		HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_DRIVER_IFDOWN
10020 	/* Indicates reason for reset. */
10021 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_MASK \
10022 		UINT32_C(0xff00)
10023 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_SFT \
10024 		8
10025 	/* A management client has requested reset. */
10026 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_MANAGEMENT_RESET_REQUEST \
10027 		(UINT32_C(0x1) << 8)
10028 	/* A fatal firmware exception has occurred. */
10029 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_EXCEPTION_FATAL \
10030 		(UINT32_C(0x2) << 8)
10031 	/* A non-fatal firmware exception has occurred. */
10032 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_EXCEPTION_NON_FATAL \
10033 		(UINT32_C(0x3) << 8)
10034 	/* Fast reset */
10035 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FAST_RESET \
10036 		(UINT32_C(0x4) << 8)
10037 	/*
10038 	 * Reset was a result of a firmware activation. That is, the
10039 	 * fw_activation flag was set in a FW_RESET operation.
10040 	 */
10041 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_ACTIVATION \
10042 		(UINT32_C(0x5) << 8)
10043 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_LAST \
10044 		HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_ACTIVATION
10045 	/*
10046 	 * Minimum time before driver should attempt access - units 100ms
10047 	 * ticks.
10048 	 * Range 0-65535
10049 	 */
10050 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DELAY_IN_100MS_TICKS_MASK \
10051 		UINT32_C(0xffff0000)
10052 	#define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DELAY_IN_100MS_TICKS_SFT \
10053 		16
10054 } __rte_packed;
10055 
10056 /* hwrm_async_event_cmpl_error_recovery (size:128b/16B) */
10057 struct hwrm_async_event_cmpl_error_recovery {
10058 	uint16_t	type;
10059 	/*
10060 	 * This field indicates the exact type of the completion.
10061 	 * By convention, the LSB identifies the length of the
10062 	 * record in 16B units. Even values indicate 16B
10063 	 * records. Odd values indicate 32B
10064 	 * records.
10065 	 */
10066 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_TYPE_MASK \
10067 		UINT32_C(0x3f)
10068 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_TYPE_SFT             0
10069 	/* HWRM Asynchronous Event Information */
10070 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_TYPE_HWRM_ASYNC_EVENT \
10071 		UINT32_C(0x2e)
10072 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_TYPE_LAST \
10073 		HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_TYPE_HWRM_ASYNC_EVENT
10074 	/* Identifiers of events. */
10075 	uint16_t	event_id;
10076 	/*
10077 	 * This async notification message can be used for selecting or
10078 	 * deselecting master function for error recovery,
10079 	 * and to communicate to all the functions whether error recovery
10080 	 * was enabled/disabled.
10081 	 */
10082 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_ID_ERROR_RECOVERY \
10083 		UINT32_C(0x9)
10084 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_ID_LAST \
10085 		HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_ID_ERROR_RECOVERY
10086 	/* Event specific data */
10087 	uint32_t	event_data2;
10088 	uint8_t	opaque_v;
10089 	/*
10090 	 * This value is written by the NIC such that it will be different
10091 	 * for each pass through the completion queue. The even passes
10092 	 * will write 1. The odd passes will write 0.
10093 	 */
10094 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_V          UINT32_C(0x1)
10095 	/* opaque is 7 b */
10096 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_OPAQUE_MASK UINT32_C(0xfe)
10097 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_OPAQUE_SFT 1
10098 	/* 8-lsb timestamp (100-msec resolution) */
10099 	uint8_t	timestamp_lo;
10100 	/* 16-lsb timestamp (100-msec resolution) */
10101 	uint16_t	timestamp_hi;
10102 	/* Event specific data */
10103 	uint32_t	event_data1;
10104 	/* Indicates driver action requested */
10105 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_MASK \
10106 		UINT32_C(0xff)
10107 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_SFT \
10108 		0
10109 	/*
10110 	 * If set to 1, this function is selected as Master function.
10111 	 * This function has responsibility to do 'chip reset' when it
10112 	 * detects a fatal error. If set to 0, master function functionality
10113 	 * is disabled on this function.
10114 	 */
10115 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_MASTER_FUNC \
10116 		UINT32_C(0x1)
10117 	/*
10118 	 * If set to 1, error recovery is enabled.
10119 	 * If set to 0, error recovery is disabled.
10120 	 */
10121 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_RECOVERY_ENABLED \
10122 		UINT32_C(0x2)
10123 } __rte_packed;
10124 
10125 /* hwrm_async_event_cmpl_ring_monitor_msg (size:128b/16B) */
10126 struct hwrm_async_event_cmpl_ring_monitor_msg {
10127 	uint16_t	type;
10128 	/*
10129 	 * This field indicates the exact type of the completion.
10130 	 * By convention, the LSB identifies the length of the
10131 	 * record in 16B units. Even values indicate 16B
10132 	 * records. Odd values indicate 32B
10133 	 * records.
10134 	 */
10135 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_TYPE_MASK \
10136 		UINT32_C(0x3f)
10137 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_TYPE_SFT             0
10138 	/* HWRM Asynchronous Event Information */
10139 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_TYPE_HWRM_ASYNC_EVENT \
10140 		UINT32_C(0x2e)
10141 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_TYPE_LAST \
10142 		HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_TYPE_HWRM_ASYNC_EVENT
10143 	/* Identifiers of events. */
10144 	uint16_t	event_id;
10145 	/* Ring Monitor Message. */
10146 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_ID_RING_MONITOR_MSG \
10147 		UINT32_C(0xa)
10148 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_ID_LAST \
10149 		HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_ID_RING_MONITOR_MSG
10150 	/* Event specific data */
10151 	uint32_t	event_data2;
10152 	/* Type of Ring disabled. */
10153 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_DATA2_DISABLE_RING_TYPE_MASK \
10154 		UINT32_C(0xff)
10155 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_DATA2_DISABLE_RING_TYPE_SFT \
10156 		0
10157 	/* tx ring disabled. */
10158 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_DATA2_DISABLE_RING_TYPE_TX \
10159 		UINT32_C(0x0)
10160 	/* rx ring disabled. */
10161 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_DATA2_DISABLE_RING_TYPE_RX \
10162 		UINT32_C(0x1)
10163 	/* cmpl ring disabled. */
10164 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_DATA2_DISABLE_RING_TYPE_CMPL \
10165 		UINT32_C(0x2)
10166 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_DATA2_DISABLE_RING_TYPE_LAST \
10167 		HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_DATA2_DISABLE_RING_TYPE_CMPL
10168 	uint8_t	opaque_v;
10169 	/*
10170 	 * This value is written by the NIC such that it will be different
10171 	 * for each pass through the completion queue. The even passes
10172 	 * will write 1. The odd passes will write 0.
10173 	 */
10174 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_V          UINT32_C(0x1)
10175 	/* opaque is 7 b */
10176 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_OPAQUE_MASK \
10177 		UINT32_C(0xfe)
10178 	#define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_OPAQUE_SFT 1
10179 	/* 8-lsb timestamp from POR (100-msec resolution) */
10180 	uint8_t	timestamp_lo;
10181 	/* 16-lsb timestamp from POR (100-msec resolution) */
10182 	uint16_t	timestamp_hi;
10183 	/*
10184 	 * Event specific data. If ring_type_disabled indicates a tx, rx or cmpl
10185 	 * then this field will indicate the ring id.
10186 	 */
10187 	uint32_t	event_data1;
10188 } __rte_packed;
10189 
10190 /* hwrm_async_event_cmpl_func_drvr_unload (size:128b/16B) */
10191 struct hwrm_async_event_cmpl_func_drvr_unload {
10192 	uint16_t	type;
10193 	/*
10194 	 * This field indicates the exact type of the completion.
10195 	 * By convention, the LSB identifies the length of the
10196 	 * record in 16B units. Even values indicate 16B
10197 	 * records. Odd values indicate 32B
10198 	 * records.
10199 	 */
10200 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_MASK \
10201 		UINT32_C(0x3f)
10202 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_SFT             0
10203 	/* HWRM Asynchronous Event Information */
10204 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT \
10205 		UINT32_C(0x2e)
10206 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_LAST \
10207 		HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT
10208 	/* Identifiers of events. */
10209 	uint16_t	event_id;
10210 	/* Function driver unloaded */
10211 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_ID_FUNC_DRVR_UNLOAD \
10212 		UINT32_C(0x10)
10213 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_ID_LAST \
10214 		HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_ID_FUNC_DRVR_UNLOAD
10215 	/* Event specific data */
10216 	uint32_t	event_data2;
10217 	uint8_t	opaque_v;
10218 	/*
10219 	 * This value is written by the NIC such that it will be different
10220 	 * for each pass through the completion queue. The even passes
10221 	 * will write 1. The odd passes will write 0.
10222 	 */
10223 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_V          UINT32_C(0x1)
10224 	/* opaque is 7 b */
10225 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_OPAQUE_MASK \
10226 		UINT32_C(0xfe)
10227 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_OPAQUE_SFT 1
10228 	/* 8-lsb timestamp from POR (100-msec resolution) */
10229 	uint8_t	timestamp_lo;
10230 	/* 16-lsb timestamp from POR (100-msec resolution) */
10231 	uint16_t	timestamp_hi;
10232 	/* Event specific data */
10233 	uint32_t	event_data1;
10234 	/* Function ID */
10235 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_MASK \
10236 		UINT32_C(0xffff)
10237 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_SFT \
10238 		0
10239 } __rte_packed;
10240 
10241 /* hwrm_async_event_cmpl_func_drvr_load (size:128b/16B) */
10242 struct hwrm_async_event_cmpl_func_drvr_load {
10243 	uint16_t	type;
10244 	/*
10245 	 * This field indicates the exact type of the completion.
10246 	 * By convention, the LSB identifies the length of the
10247 	 * record in 16B units. Even values indicate 16B
10248 	 * records. Odd values indicate 32B
10249 	 * records.
10250 	 */
10251 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_MASK \
10252 		UINT32_C(0x3f)
10253 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_SFT             0
10254 	/* HWRM Asynchronous Event Information */
10255 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT \
10256 		UINT32_C(0x2e)
10257 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_LAST \
10258 		HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT
10259 	/* Identifiers of events. */
10260 	uint16_t	event_id;
10261 	/* Function driver loaded */
10262 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_ID_FUNC_DRVR_LOAD \
10263 		UINT32_C(0x11)
10264 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_ID_LAST \
10265 		HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_ID_FUNC_DRVR_LOAD
10266 	/* Event specific data */
10267 	uint32_t	event_data2;
10268 	uint8_t	opaque_v;
10269 	/*
10270 	 * This value is written by the NIC such that it will be different
10271 	 * for each pass through the completion queue. The even passes
10272 	 * will write 1. The odd passes will write 0.
10273 	 */
10274 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_V          UINT32_C(0x1)
10275 	/* opaque is 7 b */
10276 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_OPAQUE_MASK UINT32_C(0xfe)
10277 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_OPAQUE_SFT 1
10278 	/* 8-lsb timestamp from POR (100-msec resolution) */
10279 	uint8_t	timestamp_lo;
10280 	/* 16-lsb timestamp from POR (100-msec resolution) */
10281 	uint16_t	timestamp_hi;
10282 	/* Event specific data */
10283 	uint32_t	event_data1;
10284 	/* Function ID */
10285 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_DATA1_FUNC_ID_MASK \
10286 		UINT32_C(0xffff)
10287 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_DATA1_FUNC_ID_SFT 0
10288 } __rte_packed;
10289 
10290 /* hwrm_async_event_cmpl_func_flr_proc_cmplt (size:128b/16B) */
10291 struct hwrm_async_event_cmpl_func_flr_proc_cmplt {
10292 	uint16_t	type;
10293 	/*
10294 	 * This field indicates the exact type of the completion.
10295 	 * By convention, the LSB identifies the length of the
10296 	 * record in 16B units. Even values indicate 16B
10297 	 * records. Odd values indicate 32B
10298 	 * records.
10299 	 */
10300 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_MASK \
10301 		UINT32_C(0x3f)
10302 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_SFT \
10303 		0
10304 	/* HWRM Asynchronous Event Information */
10305 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_HWRM_ASYNC_EVENT \
10306 		UINT32_C(0x2e)
10307 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_LAST \
10308 		HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_HWRM_ASYNC_EVENT
10309 	/* Identifiers of events. */
10310 	uint16_t	event_id;
10311 	/* Function FLR related processing has completed */
10312 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_ID_FUNC_FLR_PROC_CMPLT \
10313 		UINT32_C(0x12)
10314 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_ID_LAST \
10315 		HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_ID_FUNC_FLR_PROC_CMPLT
10316 	/* Event specific data */
10317 	uint32_t	event_data2;
10318 	uint8_t	opaque_v;
10319 	/*
10320 	 * This value is written by the NIC such that it will be different
10321 	 * for each pass through the completion queue. The even passes
10322 	 * will write 1. The odd passes will write 0.
10323 	 */
10324 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_V \
10325 		UINT32_C(0x1)
10326 	/* opaque is 7 b */
10327 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_OPAQUE_MASK \
10328 		UINT32_C(0xfe)
10329 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_OPAQUE_SFT 1
10330 	/* 8-lsb timestamp from POR (100-msec resolution) */
10331 	uint8_t	timestamp_lo;
10332 	/* 16-lsb timestamp from POR (100-msec resolution) */
10333 	uint16_t	timestamp_hi;
10334 	/* Event specific data */
10335 	uint32_t	event_data1;
10336 	/* Function ID */
10337 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_DATA1_FUNC_ID_MASK \
10338 		UINT32_C(0xffff)
10339 	#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_DATA1_FUNC_ID_SFT \
10340 		0
10341 } __rte_packed;
10342 
10343 /* hwrm_async_event_cmpl_pf_drvr_unload (size:128b/16B) */
10344 struct hwrm_async_event_cmpl_pf_drvr_unload {
10345 	uint16_t	type;
10346 	/*
10347 	 * This field indicates the exact type of the completion.
10348 	 * By convention, the LSB identifies the length of the
10349 	 * record in 16B units. Even values indicate 16B
10350 	 * records. Odd values indicate 32B
10351 	 * records.
10352 	 */
10353 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_MASK \
10354 		UINT32_C(0x3f)
10355 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_SFT             0
10356 	/* HWRM Asynchronous Event Information */
10357 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT \
10358 		UINT32_C(0x2e)
10359 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_LAST \
10360 		HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT
10361 	/* Identifiers of events. */
10362 	uint16_t	event_id;
10363 	/* PF driver unloaded */
10364 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_PF_DRVR_UNLOAD \
10365 		UINT32_C(0x20)
10366 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_LAST \
10367 		HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_PF_DRVR_UNLOAD
10368 	/* Event specific data */
10369 	uint32_t	event_data2;
10370 	uint8_t	opaque_v;
10371 	/*
10372 	 * This value is written by the NIC such that it will be different
10373 	 * for each pass through the completion queue. The even passes
10374 	 * will write 1. The odd passes will write 0.
10375 	 */
10376 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_V          UINT32_C(0x1)
10377 	/* opaque is 7 b */
10378 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_OPAQUE_MASK UINT32_C(0xfe)
10379 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_OPAQUE_SFT 1
10380 	/* 8-lsb timestamp from POR (100-msec resolution) */
10381 	uint8_t	timestamp_lo;
10382 	/* 16-lsb timestamp from POR (100-msec resolution) */
10383 	uint16_t	timestamp_hi;
10384 	/* Event specific data */
10385 	uint32_t	event_data1;
10386 	/* PF ID */
10387 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_MASK \
10388 		UINT32_C(0xffff)
10389 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_SFT 0
10390 	/* Indicates the physical port this pf belongs to */
10391 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_PORT_MASK \
10392 		UINT32_C(0x70000)
10393 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_PORT_SFT    16
10394 } __rte_packed;
10395 
10396 /* hwrm_async_event_cmpl_pf_drvr_load (size:128b/16B) */
10397 struct hwrm_async_event_cmpl_pf_drvr_load {
10398 	uint16_t	type;
10399 	/*
10400 	 * This field indicates the exact type of the completion.
10401 	 * By convention, the LSB identifies the length of the
10402 	 * record in 16B units. Even values indicate 16B
10403 	 * records. Odd values indicate 32B
10404 	 * records.
10405 	 */
10406 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_MASK \
10407 		UINT32_C(0x3f)
10408 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_SFT             0
10409 	/* HWRM Asynchronous Event Information */
10410 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT \
10411 		UINT32_C(0x2e)
10412 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_LAST \
10413 		HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT
10414 	/* Identifiers of events. */
10415 	uint16_t	event_id;
10416 	/* PF driver loaded */
10417 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_ID_PF_DRVR_LOAD \
10418 		UINT32_C(0x21)
10419 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_ID_LAST \
10420 		HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_ID_PF_DRVR_LOAD
10421 	/* Event specific data */
10422 	uint32_t	event_data2;
10423 	uint8_t	opaque_v;
10424 	/*
10425 	 * This value is written by the NIC such that it will be different
10426 	 * for each pass through the completion queue. The even passes
10427 	 * will write 1. The odd passes will write 0.
10428 	 */
10429 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_V          UINT32_C(0x1)
10430 	/* opaque is 7 b */
10431 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_OPAQUE_MASK UINT32_C(0xfe)
10432 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_OPAQUE_SFT 1
10433 	/* 8-lsb timestamp from POR (100-msec resolution) */
10434 	uint8_t	timestamp_lo;
10435 	/* 16-lsb timestamp from POR (100-msec resolution) */
10436 	uint16_t	timestamp_hi;
10437 	/* Event specific data */
10438 	uint32_t	event_data1;
10439 	/* PF ID */
10440 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_FUNC_ID_MASK \
10441 		UINT32_C(0xffff)
10442 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_FUNC_ID_SFT 0
10443 	/* Indicates the physical port this pf belongs to */
10444 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_PORT_MASK \
10445 		UINT32_C(0x70000)
10446 	#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_PORT_SFT    16
10447 } __rte_packed;
10448 
10449 /* hwrm_async_event_cmpl_vf_flr (size:128b/16B) */
10450 struct hwrm_async_event_cmpl_vf_flr {
10451 	uint16_t	type;
10452 	/*
10453 	 * This field indicates the exact type of the completion.
10454 	 * By convention, the LSB identifies the length of the
10455 	 * record in 16B units. Even values indicate 16B
10456 	 * records. Odd values indicate 32B
10457 	 * records.
10458 	 */
10459 	#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_MASK \
10460 		UINT32_C(0x3f)
10461 	#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_SFT             0
10462 	/* HWRM Asynchronous Event Information */
10463 	#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_HWRM_ASYNC_EVENT \
10464 		UINT32_C(0x2e)
10465 	#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_LAST \
10466 		HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_HWRM_ASYNC_EVENT
10467 	/* Identifiers of events. */
10468 	uint16_t	event_id;
10469 	/* VF Function Level Reset (FLR) */
10470 	#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_ID_VF_FLR UINT32_C(0x30)
10471 	#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_ID_LAST \
10472 		HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_ID_VF_FLR
10473 	/* Event specific data */
10474 	uint32_t	event_data2;
10475 	uint8_t	opaque_v;
10476 	/*
10477 	 * This value is written by the NIC such that it will be different
10478 	 * for each pass through the completion queue. The even passes
10479 	 * will write 1. The odd passes will write 0.
10480 	 */
10481 	#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_V          UINT32_C(0x1)
10482 	/* opaque is 7 b */
10483 	#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_OPAQUE_MASK UINT32_C(0xfe)
10484 	#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_OPAQUE_SFT 1
10485 	/* 8-lsb timestamp from POR (100-msec resolution) */
10486 	uint8_t	timestamp_lo;
10487 	/* 16-lsb timestamp from POR (100-msec resolution) */
10488 	uint16_t	timestamp_hi;
10489 	/* Event specific data */
10490 	uint32_t	event_data1;
10491 	/* VF ID */
10492 	#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_VF_ID_MASK \
10493 		UINT32_C(0xffff)
10494 	#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_VF_ID_SFT 0
10495 	/* Indicates the physical function this event occurred on. */
10496 	#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_PF_ID_MASK \
10497 		UINT32_C(0xff0000)
10498 	#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_PF_ID_SFT 16
10499 } __rte_packed;
10500 
10501 /* hwrm_async_event_cmpl_vf_mac_addr_change (size:128b/16B) */
10502 struct hwrm_async_event_cmpl_vf_mac_addr_change {
10503 	uint16_t	type;
10504 	/*
10505 	 * This field indicates the exact type of the completion.
10506 	 * By convention, the LSB identifies the length of the
10507 	 * record in 16B units. Even values indicate 16B
10508 	 * records. Odd values indicate 32B
10509 	 * records.
10510 	 */
10511 	#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_MASK \
10512 		UINT32_C(0x3f)
10513 	#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_SFT             0
10514 	/* HWRM Asynchronous Event Information */
10515 	#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_HWRM_ASYNC_EVENT \
10516 		UINT32_C(0x2e)
10517 	#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_LAST \
10518 		HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_HWRM_ASYNC_EVENT
10519 	/* Identifiers of events. */
10520 	uint16_t	event_id;
10521 	/* VF MAC Address Change */
10522 	#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_ID_VF_MAC_ADDR_CHANGE \
10523 		UINT32_C(0x31)
10524 	#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_ID_LAST \
10525 		HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_ID_VF_MAC_ADDR_CHANGE
10526 	/* Event specific data */
10527 	uint32_t	event_data2;
10528 	uint8_t	opaque_v;
10529 	/*
10530 	 * This value is written by the NIC such that it will be different
10531 	 * for each pass through the completion queue. The even passes
10532 	 * will write 1. The odd passes will write 0.
10533 	 */
10534 	#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_V \
10535 		UINT32_C(0x1)
10536 	/* opaque is 7 b */
10537 	#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_OPAQUE_MASK \
10538 		UINT32_C(0xfe)
10539 	#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_OPAQUE_SFT 1
10540 	/* 8-lsb timestamp from POR (100-msec resolution) */
10541 	uint8_t	timestamp_lo;
10542 	/* 16-lsb timestamp from POR (100-msec resolution) */
10543 	uint16_t	timestamp_hi;
10544 	/* Event specific data */
10545 	uint32_t	event_data1;
10546 	/* VF ID */
10547 	#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_DATA1_VF_ID_MASK \
10548 		UINT32_C(0xffff)
10549 	#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_DATA1_VF_ID_SFT \
10550 		0
10551 } __rte_packed;
10552 
10553 /* hwrm_async_event_cmpl_pf_vf_comm_status_change (size:128b/16B) */
10554 struct hwrm_async_event_cmpl_pf_vf_comm_status_change {
10555 	uint16_t	type;
10556 	/*
10557 	 * This field indicates the exact type of the completion.
10558 	 * By convention, the LSB identifies the length of the
10559 	 * record in 16B units. Even values indicate 16B
10560 	 * records. Odd values indicate 32B
10561 	 * records.
10562 	 */
10563 	#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_MASK \
10564 		UINT32_C(0x3f)
10565 	#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_SFT \
10566 		0
10567 	/* HWRM Asynchronous Event Information */
10568 	#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_HWRM_ASYNC_EVENT \
10569 		UINT32_C(0x2e)
10570 	#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_LAST \
10571 		HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_HWRM_ASYNC_EVENT
10572 	/* Identifiers of events. */
10573 	uint16_t	event_id;
10574 	/* PF-VF communication channel status change. */
10575 	#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_ID_PF_VF_COMM_STATUS_CHANGE \
10576 		UINT32_C(0x32)
10577 	#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_ID_LAST \
10578 		HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_ID_PF_VF_COMM_STATUS_CHANGE
10579 	/* Event specific data */
10580 	uint32_t	event_data2;
10581 	uint8_t	opaque_v;
10582 	/*
10583 	 * This value is written by the NIC such that it will be different
10584 	 * for each pass through the completion queue. The even passes
10585 	 * will write 1. The odd passes will write 0.
10586 	 */
10587 	#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_V \
10588 		UINT32_C(0x1)
10589 	/* opaque is 7 b */
10590 	#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_OPAQUE_MASK \
10591 		UINT32_C(0xfe)
10592 	#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_OPAQUE_SFT 1
10593 	/* 8-lsb timestamp from POR (100-msec resolution) */
10594 	uint8_t	timestamp_lo;
10595 	/* 16-lsb timestamp from POR (100-msec resolution) */
10596 	uint16_t	timestamp_hi;
10597 	/* Event specific data */
10598 	uint32_t	event_data1;
10599 	/*
10600 	 * If this bit is set to 1, then it indicates that the PF-VF
10601 	 * communication was lost and it is established.
10602 	 * If this bit set to 0, then it indicates that the PF-VF
10603 	 * communication was established and it is lost.
10604 	 */
10605 	#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_DATA1_COMM_ESTABLISHED \
10606 		UINT32_C(0x1)
10607 } __rte_packed;
10608 
10609 /* hwrm_async_event_cmpl_vf_cfg_change (size:128b/16B) */
10610 struct hwrm_async_event_cmpl_vf_cfg_change {
10611 	uint16_t	type;
10612 	/*
10613 	 * This field indicates the exact type of the completion.
10614 	 * By convention, the LSB identifies the length of the
10615 	 * record in 16B units. Even values indicate 16B
10616 	 * records. Odd values indicate 32B
10617 	 * records.
10618 	 */
10619 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_MASK \
10620 		UINT32_C(0x3f)
10621 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_SFT             0
10622 	/* HWRM Asynchronous Event Information */
10623 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
10624 		UINT32_C(0x2e)
10625 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_LAST \
10626 		HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT
10627 	/* Identifiers of events. */
10628 	uint16_t	event_id;
10629 	/* VF Configuration Change */
10630 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_VF_CFG_CHANGE \
10631 		UINT32_C(0x33)
10632 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_LAST \
10633 		HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_VF_CFG_CHANGE
10634 	/* Event specific data */
10635 	uint32_t	event_data2;
10636 	/*
10637 	 * This value indicates the VF ID of the VF whose configuration
10638 	 * is changing if this async. event is sent to the parent PF.
10639 	 * The firmware supports sending this to the parent PF if the
10640 	 * `hwrm_func_qcaps.vf_cfg_async_for_pf_supported` value is 1.
10641 	 * This value is undefined when the async. event is sent to the
10642 	 * VF.
10643 	 */
10644 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA2_VF_ID_MASK \
10645 		UINT32_C(0xffff)
10646 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA2_VF_ID_SFT 0
10647 	uint8_t	opaque_v;
10648 	/*
10649 	 * This value is written by the NIC such that it will be different
10650 	 * for each pass through the completion queue. The even passes
10651 	 * will write 1. The odd passes will write 0.
10652 	 */
10653 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_V          UINT32_C(0x1)
10654 	/* opaque is 7 b */
10655 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_OPAQUE_MASK UINT32_C(0xfe)
10656 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_OPAQUE_SFT 1
10657 	/* 8-lsb timestamp from POR (100-msec resolution) */
10658 	uint8_t	timestamp_lo;
10659 	/* 16-lsb timestamp from POR (100-msec resolution) */
10660 	uint16_t	timestamp_hi;
10661 	/*
10662 	 * Each flag provided in this field indicates a specific VF
10663 	 * configuration change. At least one of these flags shall be set to 1
10664 	 * when an asynchronous event completion of this type is provided
10665 	 * by the HWRM.
10666 	 */
10667 	uint32_t	event_data1;
10668 	/*
10669 	 * If this bit is set to 1, then the value of MTU
10670 	 * was changed on this VF.
10671 	 * If set to 0, then this bit should be ignored.
10672 	 */
10673 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_MTU_CHANGE \
10674 		UINT32_C(0x1)
10675 	/*
10676 	 * If this bit is set to 1, then the value of MRU
10677 	 * was changed on this VF.
10678 	 * If set to 0, then this bit should be ignored.
10679 	 */
10680 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_MRU_CHANGE \
10681 		UINT32_C(0x2)
10682 	/*
10683 	 * If this bit is set to 1, then the value of default MAC
10684 	 * address was changed on this VF.
10685 	 * If set to 0, then this bit should be ignored.
10686 	 */
10687 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_DFLT_MAC_ADDR_CHANGE \
10688 		UINT32_C(0x4)
10689 	/*
10690 	 * If this bit is set to 1, then the value of default VLAN
10691 	 * was changed on this VF.
10692 	 * If set to 0, then this bit should be ignored.
10693 	 */
10694 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_DFLT_VLAN_CHANGE \
10695 		UINT32_C(0x8)
10696 	/*
10697 	 * If this bit is set to 1, then the value of trusted VF enable
10698 	 * was changed on this VF.
10699 	 * If set to 0, then this bit should be ignored.
10700 	 */
10701 	#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_TRUSTED_VF_CFG_CHANGE \
10702 		UINT32_C(0x10)
10703 } __rte_packed;
10704 
10705 /* hwrm_async_event_cmpl_llfc_pfc_change (size:128b/16B) */
10706 struct hwrm_async_event_cmpl_llfc_pfc_change {
10707 	uint16_t	type;
10708 	/*
10709 	 * This field indicates the exact type of the completion.
10710 	 * By convention, the LSB identifies the length of the
10711 	 * record in 16B units. Even values indicate 16B
10712 	 * records. Odd values indicate 32B
10713 	 * records.
10714 	 */
10715 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_MASK \
10716 		UINT32_C(0x3f)
10717 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_SFT             0
10718 	/* HWRM Asynchronous Event Information */
10719 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_HWRM_ASYNC_EVENT \
10720 		UINT32_C(0x2e)
10721 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_LAST \
10722 		HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_HWRM_ASYNC_EVENT
10723 	/* unused1 is 10 b */
10724 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_UNUSED1_MASK \
10725 		UINT32_C(0xffc0)
10726 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_UNUSED1_SFT          6
10727 	/* Identifiers of events. */
10728 	uint16_t	event_id;
10729 	/* LLFC/PFC Configuration Change */
10730 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_ID_LLFC_PFC_CHANGE \
10731 		UINT32_C(0x34)
10732 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_ID_LAST \
10733 		HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_ID_LLFC_PFC_CHANGE
10734 	/* Event specific data */
10735 	uint32_t	event_data2;
10736 	uint8_t	opaque_v;
10737 	/*
10738 	 * This value is written by the NIC such that it will be different
10739 	 * for each pass through the completion queue. The even passes
10740 	 * will write 1. The odd passes will write 0.
10741 	 */
10742 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_V          UINT32_C(0x1)
10743 	/* opaque is 7 b */
10744 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_OPAQUE_MASK \
10745 		UINT32_C(0xfe)
10746 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_OPAQUE_SFT 1
10747 	/* 8-lsb timestamp from POR (100-msec resolution) */
10748 	uint8_t	timestamp_lo;
10749 	/* 16-lsb timestamp from POR (100-msec resolution) */
10750 	uint16_t	timestamp_hi;
10751 	/* Event specific data */
10752 	uint32_t	event_data1;
10753 	/* Indicates llfc pfc status change */
10754 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_MASK \
10755 		UINT32_C(0x3)
10756 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_SFT \
10757 		0
10758 	/*
10759 	 * If this field set to 1, then it indicates that llfc is
10760 	 * enabled.
10761 	 */
10762 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_LLFC \
10763 		UINT32_C(0x1)
10764 	/*
10765 	 * If this field is set to 2, then it indicates that pfc
10766 	 * is enabled.
10767 	 */
10768 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_PFC \
10769 		UINT32_C(0x2)
10770 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_LAST \
10771 		HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_PFC
10772 	/* Indicates the physical port this llfc pfc change occur */
10773 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_MASK \
10774 		UINT32_C(0x1c)
10775 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_SFT \
10776 		2
10777 	/* PORT ID */
10778 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_ID_MASK \
10779 		UINT32_C(0x1fffe0)
10780 	#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_ID_SFT \
10781 		5
10782 } __rte_packed;
10783 
10784 /* hwrm_async_event_cmpl_default_vnic_change (size:128b/16B) */
10785 struct hwrm_async_event_cmpl_default_vnic_change {
10786 	uint16_t	type;
10787 	/*
10788 	 * This field indicates the exact type of the completion.
10789 	 * By convention, the LSB identifies the length of the
10790 	 * record in 16B units. Even values indicate 16B
10791 	 * records. Odd values indicate 32B
10792 	 * records.
10793 	 */
10794 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_MASK \
10795 		UINT32_C(0x3f)
10796 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_SFT \
10797 		0
10798 	/* HWRM Asynchronous Event Information */
10799 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_HWRM_ASYNC_EVENT \
10800 		UINT32_C(0x2e)
10801 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_LAST \
10802 		HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_HWRM_ASYNC_EVENT
10803 	/* unused1 is 10 b */
10804 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_UNUSED1_MASK \
10805 		UINT32_C(0xffc0)
10806 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_UNUSED1_SFT \
10807 		6
10808 	/* Identifiers of events. */
10809 	uint16_t	event_id;
10810 	/* Notification of a default vnic allocation or free */
10811 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_ALLOC_FREE_NOTIFICATION \
10812 		UINT32_C(0x35)
10813 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_LAST \
10814 		HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_ALLOC_FREE_NOTIFICATION
10815 	/* Event specific data */
10816 	uint32_t	event_data2;
10817 	uint8_t	opaque_v;
10818 	/*
10819 	 * This value is written by the NIC such that it will be different
10820 	 * for each pass through the completion queue. The even passes
10821 	 * will write 1. The odd passes will write 0.
10822 	 */
10823 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_V \
10824 		UINT32_C(0x1)
10825 	/* opaque is 7 b */
10826 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_OPAQUE_MASK \
10827 		UINT32_C(0xfe)
10828 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_OPAQUE_SFT 1
10829 	/* 8-lsb timestamp from POR (100-msec resolution) */
10830 	uint8_t	timestamp_lo;
10831 	/* 16-lsb timestamp from POR (100-msec resolution) */
10832 	uint16_t	timestamp_hi;
10833 	/* Event specific data */
10834 	uint32_t	event_data1;
10835 	/* Indicates default vnic configuration change */
10836 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_MASK \
10837 		UINT32_C(0x3)
10838 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_SFT \
10839 		0
10840 	/*
10841 	 * If this field is set to 1, then it indicates that
10842 	 * a default VNIC has been allocate.
10843 	 */
10844 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_ALLOC \
10845 		UINT32_C(0x1)
10846 	/*
10847 	 * If this field is set to 2, then it indicates that
10848 	 * a default VNIC has been freed.
10849 	 */
10850 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_FREE \
10851 		UINT32_C(0x2)
10852 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_LAST \
10853 		HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_FREE
10854 	/* Indicates the physical function this event occurred on. */
10855 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_PF_ID_MASK \
10856 		UINT32_C(0x3fc)
10857 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_PF_ID_SFT \
10858 		2
10859 	/* Indicates the virtual function this event occurred on */
10860 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_VF_ID_MASK \
10861 		UINT32_C(0x3fffc00)
10862 	#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_VF_ID_SFT \
10863 		10
10864 } __rte_packed;
10865 
10866 /* hwrm_async_event_cmpl_hw_flow_aged (size:128b/16B) */
10867 struct hwrm_async_event_cmpl_hw_flow_aged {
10868 	uint16_t	type;
10869 	/*
10870 	 * This field indicates the exact type of the completion.
10871 	 * By convention, the LSB identifies the length of the
10872 	 * record in 16B units. Even values indicate 16B
10873 	 * records. Odd values indicate 32B
10874 	 * records.
10875 	 */
10876 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_TYPE_MASK \
10877 		UINT32_C(0x3f)
10878 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_TYPE_SFT             0
10879 	/* HWRM Asynchronous Event Information */
10880 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_TYPE_HWRM_ASYNC_EVENT \
10881 		UINT32_C(0x2e)
10882 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_TYPE_LAST \
10883 		HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_TYPE_HWRM_ASYNC_EVENT
10884 	/* Identifiers of events. */
10885 	uint16_t	event_id;
10886 	/* Notification of a hw flow aged */
10887 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_ID_HW_FLOW_AGED \
10888 		UINT32_C(0x36)
10889 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_ID_LAST \
10890 		HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_ID_HW_FLOW_AGED
10891 	/* Event specific data */
10892 	uint32_t	event_data2;
10893 	uint8_t	opaque_v;
10894 	/*
10895 	 * This value is written by the NIC such that it will be different
10896 	 * for each pass through the completion queue. The even passes
10897 	 * will write 1. The odd passes will write 0.
10898 	 */
10899 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_V          UINT32_C(0x1)
10900 	/* opaque is 7 b */
10901 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_OPAQUE_MASK UINT32_C(0xfe)
10902 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_OPAQUE_SFT 1
10903 	/* 8-lsb timestamp from POR (100-msec resolution) */
10904 	uint8_t	timestamp_lo;
10905 	/* 16-lsb timestamp from POR (100-msec resolution) */
10906 	uint16_t	timestamp_hi;
10907 	/* Event specific data */
10908 	uint32_t	event_data1;
10909 	/* Indicates flow ID this event occurred on. */
10910 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_DATA1_FLOW_ID_MASK \
10911 		UINT32_C(0x7fffffff)
10912 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_DATA1_FLOW_ID_SFT \
10913 		0
10914 	/* Indicates flow direction this event occurred on. */
10915 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_DATA1_FLOW_DIRECTION \
10916 		UINT32_C(0x80000000)
10917 	/*
10918 	 * If this bit set to 0, then it indicates that the aged
10919 	 * event was rx flow.
10920 	 */
10921 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_DATA1_FLOW_DIRECTION_RX \
10922 		(UINT32_C(0x0) << 31)
10923 	/*
10924 	 * If this bit is set to 1, then it indicates that the aged
10925 	 * event was tx flow.
10926 	 */
10927 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_DATA1_FLOW_DIRECTION_TX \
10928 		(UINT32_C(0x1) << 31)
10929 	#define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_DATA1_FLOW_DIRECTION_LAST \
10930 		HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_DATA1_FLOW_DIRECTION_TX
10931 } __rte_packed;
10932 
10933 /* hwrm_async_event_cmpl_eem_cache_flush_req (size:128b/16B) */
10934 struct hwrm_async_event_cmpl_eem_cache_flush_req {
10935 	uint16_t	type;
10936 	/*
10937 	 * This field indicates the exact type of the completion.
10938 	 * By convention, the LSB identifies the length of the
10939 	 * record in 16B units. Even values indicate 16B
10940 	 * records. Odd values indicate 32B
10941 	 * records.
10942 	 */
10943 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_TYPE_MASK \
10944 		UINT32_C(0x3f)
10945 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_TYPE_SFT \
10946 		0
10947 	/* HWRM Asynchronous Event Information */
10948 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_TYPE_HWRM_ASYNC_EVENT \
10949 		UINT32_C(0x2e)
10950 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_TYPE_LAST \
10951 		HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_TYPE_HWRM_ASYNC_EVENT
10952 	/* Identifiers of events. */
10953 	uint16_t	event_id;
10954 	/* Notification of a eem_cache_flush request */
10955 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_EVENT_ID_EEM_CACHE_FLUSH_REQ \
10956 		UINT32_C(0x38)
10957 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_EVENT_ID_LAST \
10958 		HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_EVENT_ID_EEM_CACHE_FLUSH_REQ
10959 	/* Event specific data */
10960 	uint32_t	event_data2;
10961 	uint8_t	opaque_v;
10962 	/*
10963 	 * This value is written by the NIC such that it will be different
10964 	 * for each pass through the completion queue. The even passes
10965 	 * will write 1. The odd passes will write 0.
10966 	 */
10967 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_V \
10968 		UINT32_C(0x1)
10969 	/* opaque is 7 b */
10970 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_OPAQUE_MASK \
10971 		UINT32_C(0xfe)
10972 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_OPAQUE_SFT 1
10973 	/* 8-lsb timestamp from POR (100-msec resolution) */
10974 	uint8_t	timestamp_lo;
10975 	/* 16-lsb timestamp from POR (100-msec resolution) */
10976 	uint16_t	timestamp_hi;
10977 	/* Event specific data */
10978 	uint32_t	event_data1;
10979 } __rte_packed;
10980 
10981 /* hwrm_async_event_cmpl_eem_cache_flush_done (size:128b/16B) */
10982 struct hwrm_async_event_cmpl_eem_cache_flush_done {
10983 	uint16_t	type;
10984 	/*
10985 	 * This field indicates the exact type of the completion.
10986 	 * By convention, the LSB identifies the length of the
10987 	 * record in 16B units. Even values indicate 16B
10988 	 * records. Odd values indicate 32B
10989 	 * records.
10990 	 */
10991 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_TYPE_MASK \
10992 		UINT32_C(0x3f)
10993 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_TYPE_SFT \
10994 		0
10995 	/* HWRM Asynchronous Event Information */
10996 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_TYPE_HWRM_ASYNC_EVENT \
10997 		UINT32_C(0x2e)
10998 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_TYPE_LAST \
10999 		HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_TYPE_HWRM_ASYNC_EVENT
11000 	/* Identifiers of events. */
11001 	uint16_t	event_id;
11002 	/*
11003 	 * Notification of a host eem_cache_flush has completed. This event
11004 	 * is generated by the host driver.
11005 	 */
11006 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_EVENT_ID_EEM_CACHE_FLUSH_DONE \
11007 		UINT32_C(0x39)
11008 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_EVENT_ID_LAST \
11009 		HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_EVENT_ID_EEM_CACHE_FLUSH_DONE
11010 	/* Event specific data */
11011 	uint32_t	event_data2;
11012 	uint8_t	opaque_v;
11013 	/*
11014 	 * This value is written by the NIC such that it will be different
11015 	 * for each pass through the completion queue. The even passes
11016 	 * will write 1. The odd passes will write 0.
11017 	 */
11018 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_V \
11019 		UINT32_C(0x1)
11020 	/* opaque is 7 b */
11021 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_OPAQUE_MASK \
11022 		UINT32_C(0xfe)
11023 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_OPAQUE_SFT 1
11024 	/* 8-lsb timestamp from POR (100-msec resolution) */
11025 	uint8_t	timestamp_lo;
11026 	/* 16-lsb timestamp from POR (100-msec resolution) */
11027 	uint16_t	timestamp_hi;
11028 	/* Event specific data */
11029 	uint32_t	event_data1;
11030 	/* Indicates function ID that this event occurred on. */
11031 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_EVENT_DATA1_FID_MASK \
11032 		UINT32_C(0xffff)
11033 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_EVENT_DATA1_FID_SFT \
11034 		0
11035 } __rte_packed;
11036 
11037 /* hwrm_async_event_cmpl_tcp_flag_action_change (size:128b/16B) */
11038 struct hwrm_async_event_cmpl_tcp_flag_action_change {
11039 	uint16_t	type;
11040 	/*
11041 	 * This field indicates the exact type of the completion.
11042 	 * By convention, the LSB identifies the length of the
11043 	 * record in 16B units. Even values indicate 16B
11044 	 * records. Odd values indicate 32B
11045 	 * records.
11046 	 */
11047 	#define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_TYPE_MASK \
11048 		UINT32_C(0x3f)
11049 	#define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_TYPE_SFT \
11050 		0
11051 	/* HWRM Asynchronous Event Information */
11052 	#define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_TYPE_HWRM_ASYNC_EVENT \
11053 		UINT32_C(0x2e)
11054 	#define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_TYPE_LAST \
11055 		HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_TYPE_HWRM_ASYNC_EVENT
11056 	/* Identifiers of events. */
11057 	uint16_t	event_id;
11058 	/* Notification of tcp flag action change */
11059 	#define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_EVENT_ID_TCP_FLAG_ACTION_CHANGE \
11060 		UINT32_C(0x3a)
11061 	#define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_EVENT_ID_LAST \
11062 		HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_EVENT_ID_TCP_FLAG_ACTION_CHANGE
11063 	/* Event specific data */
11064 	uint32_t	event_data2;
11065 	uint8_t	opaque_v;
11066 	/*
11067 	 * This value is written by the NIC such that it will be different
11068 	 * for each pass through the completion queue. The even passes
11069 	 * will write 1. The odd passes will write 0.
11070 	 */
11071 	#define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_V \
11072 		UINT32_C(0x1)
11073 	/* opaque is 7 b */
11074 	#define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_OPAQUE_MASK \
11075 		UINT32_C(0xfe)
11076 	#define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_OPAQUE_SFT 1
11077 	/* 8-lsb timestamp from POR (100-msec resolution) */
11078 	uint8_t	timestamp_lo;
11079 	/* 16-lsb timestamp from POR (100-msec resolution) */
11080 	uint16_t	timestamp_hi;
11081 	/* Event specific data */
11082 	uint32_t	event_data1;
11083 } __rte_packed;
11084 
11085 /* hwrm_async_event_cmpl_eem_flow_active (size:128b/16B) */
11086 struct hwrm_async_event_cmpl_eem_flow_active {
11087 	uint16_t	type;
11088 	/*
11089 	 * This field indicates the exact type of the completion.
11090 	 * By convention, the LSB identifies the length of the
11091 	 * record in 16B units. Even values indicate 16B
11092 	 * records. Odd values indicate 32B
11093 	 * records.
11094 	 */
11095 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_TYPE_MASK \
11096 		UINT32_C(0x3f)
11097 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_TYPE_SFT             0
11098 	/* HWRM Asynchronous Event Information */
11099 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_TYPE_HWRM_ASYNC_EVENT \
11100 		UINT32_C(0x2e)
11101 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_TYPE_LAST \
11102 		HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_TYPE_HWRM_ASYNC_EVENT
11103 	/* Identifiers of events. */
11104 	uint16_t	event_id;
11105 	/* Notification of an active eem flow */
11106 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_ID_EEM_FLOW_ACTIVE \
11107 		UINT32_C(0x3b)
11108 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_ID_LAST \
11109 		HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_ID_EEM_FLOW_ACTIVE
11110 	/* Event specific data */
11111 	uint32_t	event_data2;
11112 	/* Indicates the 2nd global id this event occurred on. */
11113 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA2_GLOBAL_ID_2_MASK \
11114 		UINT32_C(0x3fffffff)
11115 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA2_GLOBAL_ID_2_SFT \
11116 		0
11117 	/*
11118 	 * Indicates flow direction of the flow identified by
11119 	 * the global_id_2.
11120 	 */
11121 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA2_FLOW_DIRECTION \
11122 		UINT32_C(0x40000000)
11123 	/* If this bit is set to 0, then it indicates that this rx flow. */
11124 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA2_FLOW_DIRECTION_RX \
11125 		(UINT32_C(0x0) << 30)
11126 	/* If this bit is set to 1, then it indicates that this tx flow. */
11127 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA2_FLOW_DIRECTION_TX \
11128 		(UINT32_C(0x1) << 30)
11129 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA2_FLOW_DIRECTION_LAST \
11130 		HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA2_FLOW_DIRECTION_TX
11131 	uint8_t	opaque_v;
11132 	/*
11133 	 * This value is written by the NIC such that it will be different
11134 	 * for each pass through the completion queue. The even passes
11135 	 * will write 1. The odd passes will write 0.
11136 	 */
11137 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_V          UINT32_C(0x1)
11138 	/* opaque is 7 b */
11139 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_OPAQUE_MASK \
11140 		UINT32_C(0xfe)
11141 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_OPAQUE_SFT 1
11142 	/* 8-lsb timestamp from POR (100-msec resolution) */
11143 	uint8_t	timestamp_lo;
11144 	/* 16-lsb timestamp from POR (100-msec resolution) */
11145 	uint16_t	timestamp_hi;
11146 	/* Event specific data */
11147 	uint32_t	event_data1;
11148 	/* Indicates the 1st global id this event occurred on. */
11149 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_GLOBAL_ID_1_MASK \
11150 		UINT32_C(0x3fffffff)
11151 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_GLOBAL_ID_1_SFT \
11152 		0
11153 	/*
11154 	 * Indicates flow direction of the flow identified by the
11155 	 * global_id_1.
11156 	 */
11157 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_FLOW_DIRECTION \
11158 		UINT32_C(0x40000000)
11159 	/* If this bit is set to 0, then it indicates that this is rx flow. */
11160 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_FLOW_DIRECTION_RX \
11161 		(UINT32_C(0x0) << 30)
11162 	/* If this bit is set to 1, then it indicates that this is tx flow. */
11163 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_FLOW_DIRECTION_TX \
11164 		(UINT32_C(0x1) << 30)
11165 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_FLOW_DIRECTION_LAST \
11166 		HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_FLOW_DIRECTION_TX
11167 	/*
11168 	 * Indicates EEM flow aging mode this event occurred on. If
11169 	 * this bit is set to 0, the event_data1 is the EEM global
11170 	 * ID. If this bit is set to 1, the event_data1 is the number
11171 	 * of global ID in the context memory.
11172 	 */
11173 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_MODE \
11174 		UINT32_C(0x80000000)
11175 	/* EEM flow aging mode 0. */
11176 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_MODE_0 \
11177 		(UINT32_C(0x0) << 31)
11178 	/* EEM flow aging mode 1. */
11179 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_MODE_1 \
11180 		(UINT32_C(0x1) << 31)
11181 	#define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_MODE_LAST \
11182 		HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_MODE_1
11183 } __rte_packed;
11184 
11185 /* hwrm_async_event_cmpl_eem_cfg_change (size:128b/16B) */
11186 struct hwrm_async_event_cmpl_eem_cfg_change {
11187 	uint16_t	type;
11188 	/*
11189 	 * This field indicates the exact type of the completion.
11190 	 * By convention, the LSB identifies the length of the
11191 	 * record in 16B units. Even values indicate 16B
11192 	 * records. Odd values indicate 32B
11193 	 * records.
11194 	 */
11195 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_TYPE_MASK \
11196 		UINT32_C(0x3f)
11197 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_TYPE_SFT             0
11198 	/* HWRM Asynchronous Event Information */
11199 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
11200 		UINT32_C(0x2e)
11201 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_TYPE_LAST \
11202 		HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT
11203 	/* Identifiers of events. */
11204 	uint16_t	event_id;
11205 	/* Notification of EEM configuration change */
11206 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_EVENT_ID_EEM_CFG_CHANGE \
11207 		UINT32_C(0x3c)
11208 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_EVENT_ID_LAST \
11209 		HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_EVENT_ID_EEM_CFG_CHANGE
11210 	/* Event specific data */
11211 	uint32_t	event_data2;
11212 	uint8_t	opaque_v;
11213 	/*
11214 	 * This value is written by the NIC such that it will be different
11215 	 * for each pass through the completion queue. The even passes
11216 	 * will write 1. The odd passes will write 0.
11217 	 */
11218 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_V          UINT32_C(0x1)
11219 	/* opaque is 7 b */
11220 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_OPAQUE_MASK UINT32_C(0xfe)
11221 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_OPAQUE_SFT 1
11222 	/* 8-lsb timestamp from POR (100-msec resolution) */
11223 	uint8_t	timestamp_lo;
11224 	/* 16-lsb timestamp from POR (100-msec resolution) */
11225 	uint16_t	timestamp_hi;
11226 	/* Event specific data */
11227 	uint32_t	event_data1;
11228 	/*
11229 	 * Value of 1 to indicate EEM TX configuration is enabled. Value of
11230 	 * 0 to indicate the EEM TX configuration is disabled.
11231 	 */
11232 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_EVENT_DATA1_EEM_TX_ENABLE \
11233 		UINT32_C(0x1)
11234 	/*
11235 	 * Value of 1 to indicate EEM RX configuration is enabled. Value of 0
11236 	 * to indicate the EEM RX configuration is disabled.
11237 	 */
11238 	#define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_EVENT_DATA1_EEM_RX_ENABLE \
11239 		UINT32_C(0x2)
11240 } __rte_packed;
11241 
11242 /* hwrm_async_event_cmpl_quiesce_done (size:128b/16B) */
11243 struct hwrm_async_event_cmpl_quiesce_done {
11244 	uint16_t	type;
11245 	/*
11246 	 * This field indicates the exact type of the completion.
11247 	 * By convention, the LSB identifies the length of the
11248 	 * record in 16B units. Even values indicate 16B
11249 	 * records. Odd values indicate 32B
11250 	 * records.
11251 	 */
11252 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_TYPE_MASK \
11253 		UINT32_C(0x3f)
11254 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_TYPE_SFT             0
11255 	/* HWRM Asynchronous Event Information */
11256 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_TYPE_HWRM_ASYNC_EVENT \
11257 		UINT32_C(0x2e)
11258 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_TYPE_LAST \
11259 		HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_TYPE_HWRM_ASYNC_EVENT
11260 	/* Identifiers of events. */
11261 	uint16_t	event_id;
11262 	/* An event signifying completion of HWRM_FW_STATE_QUIESCE */
11263 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_ID_QUIESCE_DONE \
11264 		UINT32_C(0x3f)
11265 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_ID_LAST \
11266 		HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_ID_QUIESCE_DONE
11267 	/* Event specific data */
11268 	uint32_t	event_data2;
11269 	/* Status of HWRM_FW_STATE_QUIESCE completion */
11270 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_QUIESCE_STATUS_MASK \
11271 		UINT32_C(0xff)
11272 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_QUIESCE_STATUS_SFT \
11273 		0
11274 	/*
11275 	 * The quiesce operation started by HWRM_FW_STATE_QUIESCE
11276 	 * completed successfully.
11277 	 */
11278 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_QUIESCE_STATUS_SUCCESS \
11279 		UINT32_C(0x0)
11280 	/*
11281 	 * The quiesce operation started by HWRM_FW_STATE_QUIESCE timed
11282 	 * out.
11283 	 */
11284 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_QUIESCE_STATUS_TIMEOUT \
11285 		UINT32_C(0x1)
11286 	/*
11287 	 * The quiesce operation started by HWRM_FW_STATE_QUIESCE
11288 	 * encountered an error.
11289 	 */
11290 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_QUIESCE_STATUS_ERROR \
11291 		UINT32_C(0x2)
11292 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_QUIESCE_STATUS_LAST \
11293 		HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_QUIESCE_STATUS_ERROR
11294 	/* opaque is 8 b */
11295 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_OPAQUE_MASK \
11296 		UINT32_C(0xff00)
11297 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_OPAQUE_SFT \
11298 		8
11299 	/*
11300 	 * Additional information about internal hardware state related to
11301 	 * idle/quiesce state.  QUIESCE may succeed per quiesce_status
11302 	 * regardless of idle_state_flags.  If QUIESCE fails, the host may
11303 	 * inspect idle_state_flags to determine whether a retry is warranted.
11304 	 */
11305 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_IDLE_STATE_FLAGS_MASK \
11306 		UINT32_C(0xff0000)
11307 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_IDLE_STATE_FLAGS_SFT \
11308 		16
11309 	/*
11310 	 * Failure to quiesce is caused by host not updating the NQ consumer
11311 	 * index.
11312 	 */
11313 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_IDLE_STATE_FLAGS_INCOMPLETE_NQ \
11314 		UINT32_C(0x10000)
11315 	/* Flag 1 indicating partial non-idle state. */
11316 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_IDLE_STATE_FLAGS_IDLE_STATUS_1 \
11317 		UINT32_C(0x20000)
11318 	/* Flag 2 indicating partial non-idle state. */
11319 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_IDLE_STATE_FLAGS_IDLE_STATUS_2 \
11320 		UINT32_C(0x40000)
11321 	/* Flag 3 indicating partial non-idle state. */
11322 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_IDLE_STATE_FLAGS_IDLE_STATUS_3 \
11323 		UINT32_C(0x80000)
11324 	uint8_t	opaque_v;
11325 	/*
11326 	 * This value is written by the NIC such that it will be different
11327 	 * for each pass through the completion queue. The even passes
11328 	 * will write 1. The odd passes will write 0.
11329 	 */
11330 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_V          UINT32_C(0x1)
11331 	/* opaque is 7 b */
11332 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_OPAQUE_MASK UINT32_C(0xfe)
11333 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_OPAQUE_SFT 1
11334 	/* 8-lsb timestamp from POR (100-msec resolution) */
11335 	uint8_t	timestamp_lo;
11336 	/* 16-lsb timestamp from POR (100-msec resolution) */
11337 	uint16_t	timestamp_hi;
11338 	/* Event specific data */
11339 	uint32_t	event_data1;
11340 	/* Time stamp for error event */
11341 	#define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA1_TIMESTAMP \
11342 		UINT32_C(0x1)
11343 } __rte_packed;
11344 
11345 /* hwrm_async_event_cmpl_deferred_response (size:128b/16B) */
11346 struct hwrm_async_event_cmpl_deferred_response {
11347 	uint16_t	type;
11348 	/*
11349 	 * This field indicates the exact type of the completion.
11350 	 * By convention, the LSB identifies the length of the
11351 	 * record in 16B units. Even values indicate 16B
11352 	 * records. Odd values indicate 32B
11353 	 * records.
11354 	 */
11355 	#define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_TYPE_MASK \
11356 		UINT32_C(0x3f)
11357 	#define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_TYPE_SFT             0
11358 	/* HWRM Asynchronous Event Information */
11359 	#define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_TYPE_HWRM_ASYNC_EVENT \
11360 		UINT32_C(0x2e)
11361 	#define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_TYPE_LAST \
11362 		HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_TYPE_HWRM_ASYNC_EVENT
11363 	/* Identifiers of events. */
11364 	uint16_t	event_id;
11365 	/*
11366 	 * An event signifying a HWRM command is in progress and its
11367 	 * response will be deferred
11368 	 */
11369 	#define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_EVENT_ID_DEFERRED_RESPONSE \
11370 		UINT32_C(0x40)
11371 	#define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_EVENT_ID_LAST \
11372 		HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_EVENT_ID_DEFERRED_RESPONSE
11373 	/* Event specific data */
11374 	uint32_t	event_data2;
11375 	/*
11376 	 * The PF's mailbox is clear to issue another command.
11377 	 * A command with this seq_id is still in progress
11378 	 * and will return a regular HWRM completion when done.
11379 	 * 'event_data1' field, if non-zero, contains the estimated
11380 	 * execution time for the command.
11381 	 */
11382 	#define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_EVENT_DATA2_SEQ_ID_MASK \
11383 		UINT32_C(0xffff)
11384 	#define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_EVENT_DATA2_SEQ_ID_SFT \
11385 		0
11386 	uint8_t	opaque_v;
11387 	/*
11388 	 * This value is written by the NIC such that it will be different
11389 	 * for each pass through the completion queue. The even passes
11390 	 * will write 1. The odd passes will write 0.
11391 	 */
11392 	#define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_V \
11393 		UINT32_C(0x1)
11394 	/* opaque is 7 b */
11395 	#define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_OPAQUE_MASK \
11396 		UINT32_C(0xfe)
11397 	#define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_OPAQUE_SFT 1
11398 	/* 8-lsb timestamp from POR (100-msec resolution) */
11399 	uint8_t	timestamp_lo;
11400 	/* 16-lsb timestamp from POR (100-msec resolution) */
11401 	uint16_t	timestamp_hi;
11402 	/* Estimated remaining time of command execution in ms (if not zero) */
11403 	uint32_t	event_data1;
11404 } __rte_packed;
11405 
11406 /* hwrm_async_event_cmpl_pfc_watchdog_cfg_change (size:128b/16B) */
11407 struct hwrm_async_event_cmpl_pfc_watchdog_cfg_change {
11408 	uint16_t	type;
11409 	/*
11410 	 * This field indicates the exact type of the completion.
11411 	 * By convention, the LSB identifies the length of the
11412 	 * record in 16B units. Even values indicate 16B
11413 	 * records. Odd values indicate 32B
11414 	 * records.
11415 	 */
11416 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_TYPE_MASK \
11417 		UINT32_C(0x3f)
11418 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_TYPE_SFT \
11419 		0
11420 	/* HWRM Asynchronous Event Information */
11421 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
11422 		UINT32_C(0x2e)
11423 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_TYPE_LAST \
11424 		HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT
11425 	/* Identifiers of events. */
11426 	uint16_t	event_id;
11427 	/* PFC watchdog configuration change for given port/cos */
11428 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_ID_PFC_WATCHDOG_CFG_CHANGE \
11429 		UINT32_C(0x41)
11430 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_ID_LAST \
11431 		HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_ID_PFC_WATCHDOG_CFG_CHANGE
11432 	/* Event specific data */
11433 	uint32_t	event_data2;
11434 	uint8_t	opaque_v;
11435 	/*
11436 	 * This value is written by the NIC such that it will be different
11437 	 * for each pass through the completion queue. The even passes
11438 	 * will write 1. The odd passes will write 0.
11439 	 */
11440 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_V \
11441 		UINT32_C(0x1)
11442 	/* opaque is 7 b */
11443 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_OPAQUE_MASK \
11444 		UINT32_C(0xfe)
11445 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_OPAQUE_SFT 1
11446 	/* 8-lsb timestamp from POR (100-msec resolution) */
11447 	uint8_t	timestamp_lo;
11448 	/* 16-lsb timestamp from POR (100-msec resolution) */
11449 	uint16_t	timestamp_hi;
11450 	/* Event specific data */
11451 	uint32_t	event_data1;
11452 	/*
11453 	 * 1 in bit position X indicates PFC watchdog should
11454 	 * be on for COSX
11455 	 */
11456 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_MASK \
11457 		UINT32_C(0xff)
11458 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_SFT \
11459 		0
11460 	/* 1 means PFC WD for COS0 is on, 0 - off. */
11461 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS0 \
11462 		UINT32_C(0x1)
11463 	/* 1 means PFC WD for COS1 is on, 0 - off. */
11464 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS1 \
11465 		UINT32_C(0x2)
11466 	/* 1 means PFC WD for COS2 is on, 0 - off. */
11467 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS2 \
11468 		UINT32_C(0x4)
11469 	/* 1 means PFC WD for COS3 is on, 0 - off. */
11470 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS3 \
11471 		UINT32_C(0x8)
11472 	/* 1 means PFC WD for COS4 is on, 0 - off. */
11473 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS4 \
11474 		UINT32_C(0x10)
11475 	/* 1 means PFC WD for COS5 is on, 0 - off. */
11476 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS5 \
11477 		UINT32_C(0x20)
11478 	/* 1 means PFC WD for COS6 is on, 0 - off. */
11479 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS6 \
11480 		UINT32_C(0x40)
11481 	/* 1 means PFC WD for COS7 is on, 0 - off. */
11482 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS7 \
11483 		UINT32_C(0x80)
11484 	/* PORT ID */
11485 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PORT_ID_MASK \
11486 		UINT32_C(0xffff00)
11487 	#define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PORT_ID_SFT \
11488 		8
11489 } __rte_packed;
11490 
11491 /* hwrm_async_event_cmpl_echo_request (size:128b/16B) */
11492 struct hwrm_async_event_cmpl_echo_request {
11493 	uint16_t	type;
11494 	/*
11495 	 * This field indicates the exact type of the completion.
11496 	 * By convention, the LSB identifies the length of the
11497 	 * record in 16B units. Even values indicate 16B
11498 	 * records. Odd values indicate 32B
11499 	 * records.
11500 	 */
11501 	#define HWRM_ASYNC_EVENT_CMPL_ECHO_REQUEST_TYPE_MASK \
11502 		UINT32_C(0x3f)
11503 	#define HWRM_ASYNC_EVENT_CMPL_ECHO_REQUEST_TYPE_SFT             0
11504 	/* HWRM Asynchronous Event Information */
11505 	#define HWRM_ASYNC_EVENT_CMPL_ECHO_REQUEST_TYPE_HWRM_ASYNC_EVENT \
11506 		UINT32_C(0x2e)
11507 	#define HWRM_ASYNC_EVENT_CMPL_ECHO_REQUEST_TYPE_LAST \
11508 		HWRM_ASYNC_EVENT_CMPL_ECHO_REQUEST_TYPE_HWRM_ASYNC_EVENT
11509 	/* Identifiers of events. */
11510 	uint16_t	event_id;
11511 	/*
11512 	 * An echo request from the firmware. An echo response is expected by
11513 	 * the firmware.
11514 	 */
11515 	#define HWRM_ASYNC_EVENT_CMPL_ECHO_REQUEST_EVENT_ID_ECHO_REQUEST \
11516 		UINT32_C(0x42)
11517 	#define HWRM_ASYNC_EVENT_CMPL_ECHO_REQUEST_EVENT_ID_LAST \
11518 		HWRM_ASYNC_EVENT_CMPL_ECHO_REQUEST_EVENT_ID_ECHO_REQUEST
11519 	/* Event specific data that should be provided in the echo response */
11520 	uint32_t	event_data2;
11521 	uint8_t	opaque_v;
11522 	/*
11523 	 * This value is written by the NIC such that it will be different
11524 	 * for each pass through the completion queue. The even passes
11525 	 * will write 1. The odd passes will write 0.
11526 	 */
11527 	#define HWRM_ASYNC_EVENT_CMPL_ECHO_REQUEST_V          UINT32_C(0x1)
11528 	/* opaque is 7 b */
11529 	#define HWRM_ASYNC_EVENT_CMPL_ECHO_REQUEST_OPAQUE_MASK UINT32_C(0xfe)
11530 	#define HWRM_ASYNC_EVENT_CMPL_ECHO_REQUEST_OPAQUE_SFT 1
11531 	/* 8-lsb timestamp from POR (100-msec resolution) */
11532 	uint8_t	timestamp_lo;
11533 	/* 16-lsb timestamp from POR (100-msec resolution) */
11534 	uint16_t	timestamp_hi;
11535 	/* Event specific data that should be provided in the echo response */
11536 	uint32_t	event_data1;
11537 } __rte_packed;
11538 
11539 /* hwrm_async_event_cmpl_phc_update (size:128b/16B) */
11540 struct hwrm_async_event_cmpl_phc_update {
11541 	uint16_t	type;
11542 	/*
11543 	 * This field indicates the exact type of the completion.
11544 	 * By convention, the LSB identifies the length of the
11545 	 * record in 16B units. Even values indicate 16B
11546 	 * records. Odd values indicate 32B
11547 	 * records.
11548 	 */
11549 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_TYPE_MASK \
11550 		UINT32_C(0x3f)
11551 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_TYPE_SFT             0
11552 	/* HWRM Asynchronous Event Information */
11553 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_TYPE_HWRM_ASYNC_EVENT \
11554 		UINT32_C(0x2e)
11555 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_TYPE_LAST \
11556 		HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_TYPE_HWRM_ASYNC_EVENT
11557 	/* Identifiers of events. */
11558 	uint16_t	event_id;
11559 	/*
11560 	 * This async event is used to notify driver of changes
11561 	 * in PHC master. Only one master function can configure
11562 	 * PHC.
11563 	 */
11564 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_ID_PHC_UPDATE \
11565 		UINT32_C(0x43)
11566 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_ID_LAST \
11567 		HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_ID_PHC_UPDATE
11568 	/* Event specific data */
11569 	uint32_t	event_data2;
11570 	/* This field provides the current master function. */
11571 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_DATA2_PHC_MASTER_FID_MASK \
11572 		UINT32_C(0xffff)
11573 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_DATA2_PHC_MASTER_FID_SFT \
11574 		0
11575 	/* This field provides the current secondary function. */
11576 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_DATA2_PHC_SEC_FID_MASK \
11577 		UINT32_C(0xffff0000)
11578 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_DATA2_PHC_SEC_FID_SFT \
11579 		16
11580 	uint8_t	opaque_v;
11581 	/*
11582 	 * This value is written by the NIC such that it will be different
11583 	 * for each pass through the completion queue. The even passes
11584 	 * will write 1. The odd passes will write 0.
11585 	 */
11586 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_V          UINT32_C(0x1)
11587 	/* opaque is 7 b */
11588 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_OPAQUE_MASK UINT32_C(0xfe)
11589 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_OPAQUE_SFT 1
11590 	/* 8-lsb timestamp (100-msec resolution) */
11591 	uint8_t	timestamp_lo;
11592 	/* 16-lsb timestamp (100-msec resolution) */
11593 	uint16_t	timestamp_hi;
11594 	/* Event specific data */
11595 	uint32_t	event_data1;
11596 	/* Indicates to the driver the type of PHC event. */
11597 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_DATA1_FLAGS_MASK \
11598 		UINT32_C(0xf)
11599 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_DATA1_FLAGS_SFT \
11600 		0
11601 	/*
11602 	 * Indicates PHC Master selection event. The master fid is
11603 	 * specified in event_data2.phc_master_fid.
11604 	 */
11605 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_DATA1_FLAGS_PHC_MASTER \
11606 		UINT32_C(0x1)
11607 	/*
11608 	 * Indicates PHC Secondary selection event. The secondary fid is
11609 	 * specified in event_data2.phc_sec_fid.
11610 	 */
11611 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_DATA1_FLAGS_PHC_SECONDARY \
11612 		UINT32_C(0x2)
11613 	/*
11614 	 * Indicates PHC failover event. Failover happens from
11615 	 * event_data2.phc_master_fid to event_data2.phc_sec_fid.
11616 	 */
11617 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_DATA1_FLAGS_PHC_FAILOVER \
11618 		UINT32_C(0x3)
11619 	/*
11620 	 * Indicates that the 64bit Real time clock upper 16bits
11621 	 * have been updated due to PHC rollover. The updated
11622 	 * upper 16bits is in event_data1.phc_time_msb
11623 	 */
11624 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_DATA1_FLAGS_PHC_RTC_UPDATE \
11625 		UINT32_C(0x4)
11626 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_DATA1_FLAGS_LAST \
11627 		HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_DATA1_FLAGS_PHC_RTC_UPDATE
11628 	/*
11629 	 * This field provides the upper 16bits of the 64bit real
11630 	 * time clock.
11631 	 */
11632 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_DATA1_PHC_TIME_MSB_MASK \
11633 		UINT32_C(0xffff0)
11634 	#define HWRM_ASYNC_EVENT_CMPL_PHC_UPDATE_EVENT_DATA1_PHC_TIME_MSB_SFT \
11635 		4
11636 } __rte_packed;
11637 
11638 /* hwrm_async_event_cmpl_pps_timestamp (size:128b/16B) */
11639 struct hwrm_async_event_cmpl_pps_timestamp {
11640 	uint16_t	type;
11641 	/*
11642 	 * This field indicates the exact type of the completion.
11643 	 * By convention, the LSB identifies the length of the
11644 	 * record in 16B units. Even values indicate 16B
11645 	 * records. Odd values indicate 32B
11646 	 * records.
11647 	 */
11648 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_TYPE_MASK \
11649 		UINT32_C(0x3f)
11650 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_TYPE_SFT             0
11651 	/* HWRM Asynchronous Event Information */
11652 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_TYPE_HWRM_ASYNC_EVENT \
11653 		UINT32_C(0x2e)
11654 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_TYPE_LAST \
11655 		HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_TYPE_HWRM_ASYNC_EVENT
11656 	/* Identifiers of events. */
11657 	uint16_t	event_id;
11658 	/*
11659 	 * This async notification message can be used to inform
11660 	 * driver of the latest PPS timestamp that has been latched.
11661 	 * When driver enables PPS event, Firmware will generate
11662 	 * PPS timestamps every second, Firmware informs driver
11663 	 * of this timestamp through the async event.
11664 	 */
11665 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_EVENT_ID_PPS_TIMESTAMP \
11666 		UINT32_C(0x44)
11667 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_EVENT_ID_LAST \
11668 		HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_EVENT_ID_PPS_TIMESTAMP
11669 	/* Event specific data */
11670 	uint32_t	event_data2;
11671 	/* Indicates the PPS event type */
11672 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_EVENT_DATA2_EVENT_TYPE \
11673 		UINT32_C(0x1)
11674 	/* This is an internal event. */
11675 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_EVENT_DATA2_EVENT_TYPE_INTERNAL \
11676 		UINT32_C(0x0)
11677 	/* This is an external event. */
11678 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_EVENT_DATA2_EVENT_TYPE_EXTERNAL \
11679 		UINT32_C(0x1)
11680 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_EVENT_DATA2_EVENT_TYPE_LAST \
11681 		HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_EVENT_DATA2_EVENT_TYPE_EXTERNAL
11682 	/*
11683 	 * Indicates the pin number on which the event is
11684 	 * received.
11685 	 */
11686 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_EVENT_DATA2_PIN_NUMBER_MASK \
11687 		UINT32_C(0xe)
11688 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_EVENT_DATA2_PIN_NUMBER_SFT \
11689 		1
11690 	/*
11691 	 * Contains bits[47:32] of the upper PPS timestamp.
11692 	 * Lower 32 bits are in event_data1. Together they
11693 	 * provide the 48 bit PPS timestamp.
11694 	 */
11695 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_EVENT_DATA2_PPS_TIMESTAMP_UPPER_MASK \
11696 		UINT32_C(0xffff0)
11697 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_EVENT_DATA2_PPS_TIMESTAMP_UPPER_SFT \
11698 		4
11699 	uint8_t	opaque_v;
11700 	/*
11701 	 * This value is written by the NIC such that it will be different
11702 	 * for each pass through the completion queue. The even passes
11703 	 * will write 1. The odd passes will write 0.
11704 	 */
11705 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_V          UINT32_C(0x1)
11706 	/* opaque is 7 b */
11707 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_OPAQUE_MASK UINT32_C(0xfe)
11708 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_OPAQUE_SFT 1
11709 	/* 8-lsb timestamp (100-msec resolution) */
11710 	uint8_t	timestamp_lo;
11711 	/* 16-lsb timestamp (100-msec resolution) */
11712 	uint16_t	timestamp_hi;
11713 	/* Contains the lower 32 bits of the PPS timestamp. */
11714 	uint32_t	event_data1;
11715 	/* Contains the lower 32 bit PPS timestamp */
11716 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_EVENT_DATA1_PPS_TIMESTAMP_LOWER_MASK \
11717 		UINT32_C(0xffffffff)
11718 	#define HWRM_ASYNC_EVENT_CMPL_PPS_TIMESTAMP_EVENT_DATA1_PPS_TIMESTAMP_LOWER_SFT \
11719 		0
11720 } __rte_packed;
11721 
11722 /* hwrm_async_event_cmpl_error_report (size:128b/16B) */
11723 struct hwrm_async_event_cmpl_error_report {
11724 	uint16_t	type;
11725 	/*
11726 	 * This field indicates the exact type of the completion.
11727 	 * By convention, the LSB identifies the length of the
11728 	 * record in 16B units. Even values indicate 16B
11729 	 * records. Odd values indicate 32B
11730 	 * records.
11731 	 */
11732 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_TYPE_MASK \
11733 		UINT32_C(0x3f)
11734 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_TYPE_SFT             0
11735 	/* HWRM Asynchronous Event Information */
11736 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_TYPE_HWRM_ASYNC_EVENT \
11737 		UINT32_C(0x2e)
11738 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_TYPE_LAST \
11739 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_TYPE_HWRM_ASYNC_EVENT
11740 	/* Identifiers of events. */
11741 	uint16_t	event_id;
11742 	/*
11743 	 * This async notification message is used to inform
11744 	 * the driver that an error has occurred which may need
11745 	 * the attention of the administrator.
11746 	 */
11747 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_EVENT_ID_ERROR_REPORT \
11748 		UINT32_C(0x45)
11749 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_EVENT_ID_LAST \
11750 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_EVENT_ID_ERROR_REPORT
11751 	/* Event specific data. */
11752 	uint32_t	event_data2;
11753 	uint8_t	opaque_v;
11754 	/*
11755 	 * This value is written by the NIC such that it will be different
11756 	 * for each pass through the completion queue. The even passes
11757 	 * will write 1. The odd passes will write 0.
11758 	 */
11759 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_V          UINT32_C(0x1)
11760 	/* opaque is 7 b */
11761 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_OPAQUE_MASK UINT32_C(0xfe)
11762 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_OPAQUE_SFT 1
11763 	/* 8-lsb timestamp (100-msec resolution) */
11764 	uint8_t	timestamp_lo;
11765 	/* 16-lsb timestamp (100-msec resolution) */
11766 	uint16_t	timestamp_hi;
11767 	/* Event specific data */
11768 	uint32_t	event_data1;
11769 	/*
11770 	 * Indicates the type of error being reported. See section on Error
11771 	 * Report event error_types for details on each error.
11772 	 */
11773 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_EVENT_DATA1_ERROR_TYPE_MASK \
11774 		UINT32_C(0xff)
11775 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_EVENT_DATA1_ERROR_TYPE_SFT 0
11776 } __rte_packed;
11777 
11778 /* hwrm_async_event_cmpl_doorbell_pacing_threshold (size:128b/16B) */
11779 struct hwrm_async_event_cmpl_doorbell_pacing_threshold {
11780 	uint16_t	type;
11781 	/*
11782 	 * This field indicates the exact type of the completion.
11783 	 * By convention, the LSB identifies the length of the
11784 	 * record in 16B units. Even values indicate 16B
11785 	 * records. Odd values indicate 32B
11786 	 * records.
11787 	 */
11788 	#define HWRM_ASYNC_EVENT_CMPL_DOORBELL_PACING_THRESHOLD_TYPE_MASK \
11789 		UINT32_C(0x3f)
11790 	#define HWRM_ASYNC_EVENT_CMPL_DOORBELL_PACING_THRESHOLD_TYPE_SFT \
11791 		0
11792 	/* HWRM Asynchronous Event Information */
11793 	#define HWRM_ASYNC_EVENT_CMPL_DOORBELL_PACING_THRESHOLD_TYPE_HWRM_ASYNC_EVENT \
11794 		UINT32_C(0x2e)
11795 	#define HWRM_ASYNC_EVENT_CMPL_DOORBELL_PACING_THRESHOLD_TYPE_LAST \
11796 		HWRM_ASYNC_EVENT_CMPL_DOORBELL_PACING_THRESHOLD_TYPE_HWRM_ASYNC_EVENT
11797 	/* Identifiers of events. */
11798 	uint16_t	event_id;
11799 	/*
11800 	 * This async notification message is used to inform the driver
11801 	 * that the programmable pacing threshold for the doorbell FIFO is
11802 	 * reached. The driver will take appropriate action to pace the
11803 	 * doorbells when this async event is received from the firmware.
11804 	 */
11805 	#define HWRM_ASYNC_EVENT_CMPL_DOORBELL_PACING_THRESHOLD_EVENT_ID_DOORBELL_PACING_THRESHOLD \
11806 		UINT32_C(0x46)
11807 	#define HWRM_ASYNC_EVENT_CMPL_DOORBELL_PACING_THRESHOLD_EVENT_ID_LAST \
11808 		HWRM_ASYNC_EVENT_CMPL_DOORBELL_PACING_THRESHOLD_EVENT_ID_DOORBELL_PACING_THRESHOLD
11809 	/* Event specific data. */
11810 	uint32_t	event_data2;
11811 	uint8_t	opaque_v;
11812 	/*
11813 	 * This value is written by the NIC such that it will be different
11814 	 * for each pass through the completion queue. The even passes
11815 	 * will write 1. The odd passes will write 0.
11816 	 */
11817 	#define HWRM_ASYNC_EVENT_CMPL_DOORBELL_PACING_THRESHOLD_V \
11818 		UINT32_C(0x1)
11819 	/* opaque is 7 b */
11820 	#define HWRM_ASYNC_EVENT_CMPL_DOORBELL_PACING_THRESHOLD_OPAQUE_MASK \
11821 		UINT32_C(0xfe)
11822 	#define HWRM_ASYNC_EVENT_CMPL_DOORBELL_PACING_THRESHOLD_OPAQUE_SFT 1
11823 	/* 8-lsb timestamp (100-msec resolution) */
11824 	uint8_t	timestamp_lo;
11825 	/* 16-lsb timestamp (100-msec resolution) */
11826 	uint16_t	timestamp_hi;
11827 	/* Event specific data */
11828 	uint32_t	event_data1;
11829 } __rte_packed;
11830 
11831 /* hwrm_async_event_cmpl_fw_trace_msg (size:128b/16B) */
11832 struct hwrm_async_event_cmpl_fw_trace_msg {
11833 	uint16_t	type;
11834 	/*
11835 	 * This field indicates the exact type of the completion.
11836 	 * By convention, the LSB identifies the length of the
11837 	 * record in 16B units. Even values indicate 16B
11838 	 * records. Odd values indicate 32B
11839 	 * records.
11840 	 */
11841 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TYPE_MASK \
11842 		UINT32_C(0x3f)
11843 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TYPE_SFT             0
11844 	/* HWRM Asynchronous Event Information */
11845 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TYPE_HWRM_ASYNC_EVENT \
11846 		UINT32_C(0x2e)
11847 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TYPE_LAST \
11848 		HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TYPE_HWRM_ASYNC_EVENT
11849 	/* Identifiers of events. */
11850 	uint16_t	event_id;
11851 	/* Firmware trace log message */
11852 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_ID_FW_TRACE_MSG \
11853 		UINT32_C(0xfe)
11854 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_ID_LAST \
11855 		HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_ID_FW_TRACE_MSG
11856 	/* Trace byte 0 to 3 */
11857 	uint32_t	event_data2;
11858 	/* Trace byte0 */
11859 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE0_MASK \
11860 		UINT32_C(0xff)
11861 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE0_SFT 0
11862 	/* Trace byte1 */
11863 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE1_MASK \
11864 		UINT32_C(0xff00)
11865 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE1_SFT 8
11866 	/* Trace byte2 */
11867 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE2_MASK \
11868 		UINT32_C(0xff0000)
11869 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE2_SFT 16
11870 	/* Trace byte3 */
11871 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE3_MASK \
11872 		UINT32_C(0xff000000)
11873 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE3_SFT 24
11874 	uint8_t	opaque_v;
11875 	/*
11876 	 * This value is written by the NIC such that it will be different
11877 	 * for each pass through the completion queue. The even passes
11878 	 * will write 1. The odd passes will write 0.
11879 	 */
11880 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_V          UINT32_C(0x1)
11881 	/* opaque is 7 b */
11882 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_OPAQUE_MASK UINT32_C(0xfe)
11883 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_OPAQUE_SFT 1
11884 	/* Trace flags */
11885 	uint8_t	timestamp_lo;
11886 	/* Indicates if the string is partial or complete. */
11887 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_STRING \
11888 		UINT32_C(0x1)
11889 	/* Complete string */
11890 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_STRING_COMPLETE \
11891 		UINT32_C(0x0)
11892 	/* Partial string */
11893 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_STRING_PARTIAL \
11894 		UINT32_C(0x1)
11895 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_STRING_LAST \
11896 		HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_STRING_PARTIAL
11897 	/* Indicates the firmware that sent the trace message. */
11898 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_FIRMWARE \
11899 		UINT32_C(0x2)
11900 	/* Primary firmware */
11901 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_FIRMWARE_PRIMARY \
11902 		(UINT32_C(0x0) << 1)
11903 	/* Secondary firmware */
11904 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_FIRMWARE_SECONDARY \
11905 		(UINT32_C(0x1) << 1)
11906 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_FIRMWARE_LAST \
11907 		HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_FIRMWARE_SECONDARY
11908 	/* Trace byte 4 to 5 */
11909 	uint16_t	timestamp_hi;
11910 	/* Trace byte4 */
11911 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_HI_BYTE4_MASK \
11912 		UINT32_C(0xff)
11913 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_HI_BYTE4_SFT 0
11914 	/* Trace byte5 */
11915 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_HI_BYTE5_MASK \
11916 		UINT32_C(0xff00)
11917 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_HI_BYTE5_SFT 8
11918 	/* Trace byte 6 to 9 */
11919 	uint32_t	event_data1;
11920 	/* Trace byte6 */
11921 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE6_MASK \
11922 		UINT32_C(0xff)
11923 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE6_SFT 0
11924 	/* Trace byte7 */
11925 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE7_MASK \
11926 		UINT32_C(0xff00)
11927 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE7_SFT 8
11928 	/* Trace byte8 */
11929 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE8_MASK \
11930 		UINT32_C(0xff0000)
11931 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE8_SFT 16
11932 	/* Trace byte9 */
11933 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE9_MASK \
11934 		UINT32_C(0xff000000)
11935 	#define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE9_SFT 24
11936 } __rte_packed;
11937 
11938 /* hwrm_async_event_cmpl_hwrm_error (size:128b/16B) */
11939 struct hwrm_async_event_cmpl_hwrm_error {
11940 	uint16_t	type;
11941 	/*
11942 	 * This field indicates the exact type of the completion.
11943 	 * By convention, the LSB identifies the length of the
11944 	 * record in 16B units. Even values indicate 16B
11945 	 * records. Odd values indicate 32B
11946 	 * records.
11947 	 */
11948 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_MASK \
11949 		UINT32_C(0x3f)
11950 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_SFT             0
11951 	/* HWRM Asynchronous Event Information */
11952 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_HWRM_ASYNC_EVENT \
11953 		UINT32_C(0x2e)
11954 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_LAST \
11955 		HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_HWRM_ASYNC_EVENT
11956 	/* Identifiers of events. */
11957 	uint16_t	event_id;
11958 	/* HWRM Error */
11959 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_HWRM_ERROR \
11960 		UINT32_C(0xff)
11961 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_LAST \
11962 		HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_HWRM_ERROR
11963 	/* Event specific data */
11964 	uint32_t	event_data2;
11965 	/* Severity of HWRM Error */
11966 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_MASK \
11967 		UINT32_C(0xff)
11968 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_SFT     0
11969 	/* Warning */
11970 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_WARNING \
11971 		UINT32_C(0x0)
11972 	/* Non-fatal Error */
11973 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_NONFATAL \
11974 		UINT32_C(0x1)
11975 	/* Fatal Error */
11976 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_FATAL \
11977 		UINT32_C(0x2)
11978 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_LAST \
11979 		HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_FATAL
11980 	uint8_t	opaque_v;
11981 	/*
11982 	 * This value is written by the NIC such that it will be different
11983 	 * for each pass through the completion queue. The even passes
11984 	 * will write 1. The odd passes will write 0.
11985 	 */
11986 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_V          UINT32_C(0x1)
11987 	/* opaque is 7 b */
11988 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_OPAQUE_MASK UINT32_C(0xfe)
11989 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_OPAQUE_SFT 1
11990 	/* 8-lsb timestamp from POR (100-msec resolution) */
11991 	uint8_t	timestamp_lo;
11992 	/* 16-lsb timestamp from POR (100-msec resolution) */
11993 	uint16_t	timestamp_hi;
11994 	/* Event specific data */
11995 	uint32_t	event_data1;
11996 	/* Time stamp for error event */
11997 	#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA1_TIMESTAMP \
11998 		UINT32_C(0x1)
11999 } __rte_packed;
12000 
12001 /* hwrm_async_event_cmpl_error_report_base (size:128b/16B) */
12002 struct hwrm_async_event_cmpl_error_report_base {
12003 	uint16_t	type;
12004 	/*
12005 	 * This field indicates the exact type of the completion.
12006 	 * By convention, the LSB identifies the length of the
12007 	 * record in 16B units. Even values indicate 16B
12008 	 * records. Odd values indicate 32B
12009 	 * records.
12010 	 */
12011 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_TYPE_MASK \
12012 		UINT32_C(0x3f)
12013 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_TYPE_SFT             0
12014 	/* HWRM Asynchronous Event Information */
12015 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_TYPE_HWRM_ASYNC_EVENT \
12016 		UINT32_C(0x2e)
12017 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_TYPE_LAST \
12018 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_TYPE_HWRM_ASYNC_EVENT
12019 	/* Identifiers of events. */
12020 	uint16_t	event_id;
12021 	/*
12022 	 * This async notification message is used to inform
12023 	 * the driver that an error has occurred which may need
12024 	 * the attention of the administrator.
12025 	 */
12026 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_ID_ERROR_REPORT \
12027 		UINT32_C(0x45)
12028 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_ID_LAST \
12029 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_ID_ERROR_REPORT
12030 	/* Event specific data. */
12031 	uint32_t	event_data2;
12032 	uint8_t	opaque_v;
12033 	/*
12034 	 * This value is written by the NIC such that it will be different
12035 	 * for each pass through the completion queue. The even passes
12036 	 * will write 1. The odd passes will write 0.
12037 	 */
12038 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_V \
12039 		UINT32_C(0x1)
12040 	/* opaque is 7 b */
12041 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_OPAQUE_MASK \
12042 		UINT32_C(0xfe)
12043 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_OPAQUE_SFT 1
12044 	/* 8-lsb timestamp (100-msec resolution) */
12045 	uint8_t	timestamp_lo;
12046 	/* 16-lsb timestamp (100-msec resolution) */
12047 	uint16_t	timestamp_hi;
12048 	/* Event specific data */
12049 	uint32_t	event_data1;
12050 	/* Indicates the type of error being reported. */
12051 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_MASK \
12052 		UINT32_C(0xff)
12053 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_SFT \
12054 		0
12055 	/* Reserved */
12056 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_RESERVED \
12057 		UINT32_C(0x0)
12058 	/*
12059 	 * The NIC was subjected to an extended pause storm which caused it
12060 	 * to disable flow control in order to avoid stalling the Tx path.
12061 	 */
12062 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_PAUSE_STORM \
12063 		UINT32_C(0x1)
12064 	/*
12065 	 * The NIC received an interrupt storm on a TSIO pin being used as
12066 	 * PPS_IN which caused it to disable the interrupt. The signal
12067 	 * should be fixed to be a proper 1 PPS signal before re-enabling
12068 	 * it. The pin number on which this signal was received is stored
12069 	 * in event_data2 as pin_id.
12070 	 */
12071 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_INVALID_SIGNAL \
12072 		UINT32_C(0x2)
12073 	/*
12074 	 * There was a low level error with an NVM write or erase.
12075 	 * See nvm_err_type for more details.
12076 	 */
12077 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_NVM \
12078 		UINT32_C(0x3)
12079 	/*
12080 	 * This indicates doorbell drop threshold was hit. When this
12081 	 * threshold is crossed, it indicates one or more doorbells for
12082 	 * the function were dropped by hardware.
12083 	 */
12084 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_DOORBELL_DROP_THRESHOLD \
12085 		UINT32_C(0x4)
12086 	/*
12087 	 * Indicates the NIC's temperature has crossed one of the thermal
12088 	 * thresholds.
12089 	 */
12090 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_THERMAL_THRESHOLD \
12091 		UINT32_C(0x5)
12092 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_LAST \
12093 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_THERMAL_THRESHOLD
12094 } __rte_packed;
12095 
12096 /* hwrm_async_event_cmpl_error_report_pause_storm (size:128b/16B) */
12097 struct hwrm_async_event_cmpl_error_report_pause_storm {
12098 	uint16_t	type;
12099 	/*
12100 	 * This field indicates the exact type of the completion.
12101 	 * By convention, the LSB identifies the length of the
12102 	 * record in 16B units. Even values indicate 16B
12103 	 * records. Odd values indicate 32B
12104 	 * records.
12105 	 */
12106 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_TYPE_MASK \
12107 		UINT32_C(0x3f)
12108 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_TYPE_SFT \
12109 		0
12110 	/* HWRM Asynchronous Event Information */
12111 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_TYPE_HWRM_ASYNC_EVENT \
12112 		UINT32_C(0x2e)
12113 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_TYPE_LAST \
12114 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_TYPE_HWRM_ASYNC_EVENT
12115 	/* Identifiers of events. */
12116 	uint16_t	event_id;
12117 	/*
12118 	 * This async notification message is used to inform
12119 	 * the driver that an error has occurred which may need
12120 	 * the attention of the administrator.
12121 	 */
12122 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_EVENT_ID_ERROR_REPORT \
12123 		UINT32_C(0x45)
12124 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_EVENT_ID_LAST \
12125 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_EVENT_ID_ERROR_REPORT
12126 	/* Event specific data. */
12127 	uint32_t	event_data2;
12128 	uint8_t	opaque_v;
12129 	/*
12130 	 * This value is written by the NIC such that it will be different
12131 	 * for each pass through the completion queue. The even passes
12132 	 * will write 1. The odd passes will write 0.
12133 	 */
12134 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_V \
12135 		UINT32_C(0x1)
12136 	/* opaque is 7 b */
12137 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_OPAQUE_MASK \
12138 		UINT32_C(0xfe)
12139 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_OPAQUE_SFT 1
12140 	/* 8-lsb timestamp (100-msec resolution) */
12141 	uint8_t	timestamp_lo;
12142 	/* 16-lsb timestamp (100-msec resolution) */
12143 	uint16_t	timestamp_hi;
12144 	/* Event specific data */
12145 	uint32_t	event_data1;
12146 	/* Indicates the type of error being reported. */
12147 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_EVENT_DATA1_ERROR_TYPE_MASK \
12148 		UINT32_C(0xff)
12149 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_EVENT_DATA1_ERROR_TYPE_SFT \
12150 		0
12151 	/*
12152 	 * The NIC was subjected to an extended pause storm which caused it
12153 	 * to disable flow control in order to avoid stalling the Tx path.
12154 	 */
12155 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_EVENT_DATA1_ERROR_TYPE_PAUSE_STORM \
12156 		UINT32_C(0x1)
12157 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_EVENT_DATA1_ERROR_TYPE_LAST \
12158 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_PAUSE_STORM_EVENT_DATA1_ERROR_TYPE_PAUSE_STORM
12159 } __rte_packed;
12160 
12161 /* hwrm_async_event_cmpl_error_report_invalid_signal (size:128b/16B) */
12162 struct hwrm_async_event_cmpl_error_report_invalid_signal {
12163 	uint16_t	type;
12164 	/*
12165 	 * This field indicates the exact type of the completion.
12166 	 * By convention, the LSB identifies the length of the
12167 	 * record in 16B units. Even values indicate 16B
12168 	 * records. Odd values indicate 32B
12169 	 * records.
12170 	 */
12171 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_TYPE_MASK \
12172 		UINT32_C(0x3f)
12173 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_TYPE_SFT \
12174 		0
12175 	/* HWRM Asynchronous Event Information */
12176 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_TYPE_HWRM_ASYNC_EVENT \
12177 		UINT32_C(0x2e)
12178 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_TYPE_LAST \
12179 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_TYPE_HWRM_ASYNC_EVENT
12180 	/* Identifiers of events. */
12181 	uint16_t	event_id;
12182 	/*
12183 	 * This async notification message is used to inform
12184 	 * the driver that an error has occurred which may need
12185 	 * the attention of the administrator.
12186 	 */
12187 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_EVENT_ID_ERROR_REPORT \
12188 		UINT32_C(0x45)
12189 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_EVENT_ID_LAST \
12190 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_EVENT_ID_ERROR_REPORT
12191 	/* Event specific data. */
12192 	uint32_t	event_data2;
12193 	/* Indicates the TSIO pin on which invalid signal is detected. */
12194 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_EVENT_DATA2_PIN_ID_MASK \
12195 		UINT32_C(0xff)
12196 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_EVENT_DATA2_PIN_ID_SFT \
12197 		0
12198 	uint8_t	opaque_v;
12199 	/*
12200 	 * This value is written by the NIC such that it will be different
12201 	 * for each pass through the completion queue. The even passes
12202 	 * will write 1. The odd passes will write 0.
12203 	 */
12204 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_V \
12205 		UINT32_C(0x1)
12206 	/* opaque is 7 b */
12207 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_OPAQUE_MASK \
12208 		UINT32_C(0xfe)
12209 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_OPAQUE_SFT 1
12210 	/* 8-lsb timestamp (100-msec resolution) */
12211 	uint8_t	timestamp_lo;
12212 	/* 16-lsb timestamp (100-msec resolution) */
12213 	uint16_t	timestamp_hi;
12214 	/* Event specific data */
12215 	uint32_t	event_data1;
12216 	/* Indicates the type of error being reported. */
12217 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_EVENT_DATA1_ERROR_TYPE_MASK \
12218 		UINT32_C(0xff)
12219 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_EVENT_DATA1_ERROR_TYPE_SFT \
12220 		0
12221 	/*
12222 	 * The NIC received an interrupt storm on a TSIO pin being used as
12223 	 * PPS_IN which caused it to disable the interrupt. The signal
12224 	 * should be fixed to be a proper 1 PPS signal before re-enabling
12225 	 * it. The pin number on which this signal was received is stored
12226 	 * in event_data2 as pin_id.
12227 	 */
12228 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_EVENT_DATA1_ERROR_TYPE_INVALID_SIGNAL \
12229 		UINT32_C(0x2)
12230 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_EVENT_DATA1_ERROR_TYPE_LAST \
12231 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_EVENT_DATA1_ERROR_TYPE_INVALID_SIGNAL
12232 } __rte_packed;
12233 
12234 /* hwrm_async_event_cmpl_error_report_nvm (size:128b/16B) */
12235 struct hwrm_async_event_cmpl_error_report_nvm {
12236 	uint16_t	type;
12237 	/*
12238 	 * This field indicates the exact type of the completion.
12239 	 * By convention, the LSB identifies the length of the
12240 	 * record in 16B units. Even values indicate 16B
12241 	 * records. Odd values indicate 32B
12242 	 * records.
12243 	 */
12244 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_TYPE_MASK \
12245 		UINT32_C(0x3f)
12246 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_TYPE_SFT             0
12247 	/* HWRM Asynchronous Event Information */
12248 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_TYPE_HWRM_ASYNC_EVENT \
12249 		UINT32_C(0x2e)
12250 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_TYPE_LAST \
12251 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_TYPE_HWRM_ASYNC_EVENT
12252 	/* Identifiers of events. */
12253 	uint16_t	event_id;
12254 	/*
12255 	 * This async notification message is used to inform
12256 	 * the driver that an error has occurred which may need
12257 	 * the attention of the administrator.
12258 	 */
12259 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_ID_ERROR_REPORT \
12260 		UINT32_C(0x45)
12261 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_ID_LAST \
12262 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_ID_ERROR_REPORT
12263 	/* Event specific data. */
12264 	uint32_t	event_data2;
12265 	/* Indicates the address where error was detected */
12266 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA2_ERR_ADDR_MASK \
12267 		UINT32_C(0xffffffff)
12268 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA2_ERR_ADDR_SFT \
12269 		0
12270 	uint8_t	opaque_v;
12271 	/*
12272 	 * This value is written by the NIC such that it will be different
12273 	 * for each pass through the completion queue. The even passes
12274 	 * will write 1. The odd passes will write 0.
12275 	 */
12276 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_V          UINT32_C(0x1)
12277 	/* opaque is 7 b */
12278 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_OPAQUE_MASK \
12279 		UINT32_C(0xfe)
12280 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_OPAQUE_SFT 1
12281 	/* 8-lsb timestamp (100-msec resolution) */
12282 	uint8_t	timestamp_lo;
12283 	/* 16-lsb timestamp (100-msec resolution) */
12284 	uint16_t	timestamp_hi;
12285 	/* Event specific data */
12286 	uint32_t	event_data1;
12287 	/* Indicates the type of error being reported. */
12288 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_ERROR_TYPE_MASK \
12289 		UINT32_C(0xff)
12290 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_ERROR_TYPE_SFT \
12291 		0
12292 	/*
12293 	 * There was a low level error with an NVM operation.
12294 	 * See nvm_err_type for more details.
12295 	 */
12296 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_ERROR_TYPE_NVM_ERROR \
12297 		UINT32_C(0x3)
12298 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_ERROR_TYPE_LAST \
12299 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_ERROR_TYPE_NVM_ERROR
12300 	/* The specific type of NVM error */
12301 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_NVM_ERR_TYPE_MASK \
12302 		UINT32_C(0xff00)
12303 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_NVM_ERR_TYPE_SFT \
12304 		8
12305 	/*
12306 	 * There was a low level error with an NVM write operation.
12307 	 * Verification of written data did not match.
12308 	 * event_data2 will be the failing address.
12309 	 */
12310 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_NVM_ERR_TYPE_WRITE \
12311 		(UINT32_C(0x1) << 8)
12312 	/*
12313 	 * There was a low level error with an NVM erase operation.
12314 	 * All the bits were not erased.
12315 	 * event_data2 will be the failing address.
12316 	 */
12317 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_NVM_ERR_TYPE_ERASE \
12318 		(UINT32_C(0x2) << 8)
12319 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_NVM_ERR_TYPE_LAST \
12320 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_NVM_EVENT_DATA1_NVM_ERR_TYPE_ERASE
12321 } __rte_packed;
12322 
12323 /* hwrm_async_event_cmpl_error_report_doorbell_drop_threshold (size:128b/16B) */
12324 struct hwrm_async_event_cmpl_error_report_doorbell_drop_threshold {
12325 	uint16_t	type;
12326 	/*
12327 	 * This field indicates the exact type of the completion.
12328 	 * By convention, the LSB identifies the length of the
12329 	 * record in 16B units. Even values indicate 16B
12330 	 * records. Odd values indicate 32B
12331 	 * records.
12332 	 */
12333 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_TYPE_MASK \
12334 		UINT32_C(0x3f)
12335 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_TYPE_SFT \
12336 		0
12337 	/* HWRM Asynchronous Event Information */
12338 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_TYPE_HWRM_ASYNC_EVENT \
12339 		UINT32_C(0x2e)
12340 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_TYPE_LAST \
12341 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_TYPE_HWRM_ASYNC_EVENT
12342 	/* Identifiers of events. */
12343 	uint16_t	event_id;
12344 	/*
12345 	 * This async notification message is used to inform
12346 	 * the driver that an error has occurred which may need
12347 	 * the attention of the administrator.
12348 	 */
12349 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_EVENT_ID_ERROR_REPORT \
12350 		UINT32_C(0x45)
12351 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_EVENT_ID_LAST \
12352 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_EVENT_ID_ERROR_REPORT
12353 	/* Event specific data. */
12354 	uint32_t	event_data2;
12355 	uint8_t	opaque_v;
12356 	/*
12357 	 * This value is written by the NIC such that it will be different
12358 	 * for each pass through the completion queue. The even passes
12359 	 * will write 1. The odd passes will write 0.
12360 	 */
12361 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_V \
12362 		UINT32_C(0x1)
12363 	/* opaque is 7 b */
12364 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_OPAQUE_MASK \
12365 		UINT32_C(0xfe)
12366 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_OPAQUE_SFT \
12367 		1
12368 	/* 8-lsb timestamp (100-msec resolution) */
12369 	uint8_t	timestamp_lo;
12370 	/* 16-lsb timestamp (100-msec resolution) */
12371 	uint16_t	timestamp_hi;
12372 	/* Event specific data */
12373 	uint32_t	event_data1;
12374 	/* Indicates the type of error being reported. */
12375 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_EVENT_DATA1_ERROR_TYPE_MASK \
12376 		UINT32_C(0xff)
12377 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_EVENT_DATA1_ERROR_TYPE_SFT \
12378 		0
12379 	/*
12380 	 * This indicates doorbell drop threshold was hit. When this
12381 	 * threshold is crossed, it indicates one or more doorbells for
12382 	 * the function were dropped by hardware.
12383 	 */
12384 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_EVENT_DATA1_ERROR_TYPE_DOORBELL_DROP_THRESHOLD \
12385 		UINT32_C(0x4)
12386 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_EVENT_DATA1_ERROR_TYPE_LAST \
12387 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_DOORBELL_DROP_THRESHOLD_EVENT_DATA1_ERROR_TYPE_DOORBELL_DROP_THRESHOLD
12388 } __rte_packed;
12389 
12390 /* hwrm_async_event_cmpl_error_report_thermal (size:128b/16B) */
12391 struct hwrm_async_event_cmpl_error_report_thermal {
12392 	uint16_t	type;
12393 	/*
12394 	 * This field indicates the exact type of the completion.
12395 	 * By convention, the LSB identifies the length of the
12396 	 * record in 16B units. Even values indicate 16B
12397 	 * records. Odd values indicate 32B
12398 	 * records.
12399 	 */
12400 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_TYPE_MASK \
12401 		UINT32_C(0x3f)
12402 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_TYPE_SFT \
12403 		0
12404 	/* HWRM Asynchronous Event Information */
12405 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_TYPE_HWRM_ASYNC_EVENT \
12406 		UINT32_C(0x2e)
12407 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_TYPE_LAST \
12408 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_TYPE_HWRM_ASYNC_EVENT
12409 	/* Identifiers of events. */
12410 	uint16_t	event_id;
12411 	/*
12412 	 * This async notification message is used to inform
12413 	 * the driver that an error has occurred which may need
12414 	 * the attention of the administrator.
12415 	 */
12416 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_ID_ERROR_REPORT \
12417 		UINT32_C(0x45)
12418 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_ID_LAST \
12419 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_ID_ERROR_REPORT
12420 	/* Event specific data. */
12421 	uint32_t	event_data2;
12422 	/* Current temperature.  In Celsius */
12423 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA2_CURRENT_TEMP_MASK \
12424 		UINT32_C(0xff)
12425 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA2_CURRENT_TEMP_SFT \
12426 		0
12427 	/*
12428 	 * The temperature setting of the threshold that was just crossed.
12429 	 * In Celsius
12430 	 */
12431 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA2_THRESHOLD_TEMP_MASK \
12432 		UINT32_C(0xff00)
12433 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA2_THRESHOLD_TEMP_SFT \
12434 		8
12435 	uint8_t	opaque_v;
12436 	/*
12437 	 * This value is written by the NIC such that it will be different
12438 	 * for each pass through the completion queue. The even passes
12439 	 * will write 1. The odd passes will write 0.
12440 	 */
12441 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_V \
12442 		UINT32_C(0x1)
12443 	/* opaque is 7 b */
12444 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_OPAQUE_MASK \
12445 		UINT32_C(0xfe)
12446 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_OPAQUE_SFT 1
12447 	/* 8-lsb timestamp (100-msec resolution) */
12448 	uint8_t	timestamp_lo;
12449 	/* 16-lsb timestamp (100-msec resolution) */
12450 	uint16_t	timestamp_hi;
12451 	/* Event specific data */
12452 	uint32_t	event_data1;
12453 	/* Indicates the type of error being reported. */
12454 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_ERROR_TYPE_MASK \
12455 		UINT32_C(0xff)
12456 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_ERROR_TYPE_SFT \
12457 		0
12458 	/*
12459 	 * There was thermal event. The type will be specified in the
12460 	 * field threshold_type. event_data2 will contain the current
12461 	 * temperature and the configured value for the threshold that
12462 	 * was just crossed. The threshold values are lower thresholds,
12463 	 * so the event will trigger with an active flag when the
12464 	 * temperature is on an increasing trajectory.
12465 	 */
12466 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_ERROR_TYPE_THERMAL_EVENT \
12467 		UINT32_C(0x5)
12468 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_ERROR_TYPE_LAST \
12469 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_ERROR_TYPE_THERMAL_EVENT
12470 	/* The specific type of thermal threshold error */
12471 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_THRESHOLD_TYPE_MASK \
12472 		UINT32_C(0x700)
12473 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_THRESHOLD_TYPE_SFT \
12474 		8
12475 	/* Warning thermal threshold was crossed */
12476 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_THRESHOLD_TYPE_WARN \
12477 		(UINT32_C(0x0) << 8)
12478 	/* Critical thermal threshold was crossed */
12479 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_THRESHOLD_TYPE_CRITICAL \
12480 		(UINT32_C(0x1) << 8)
12481 	/* Fatal thermal threshold was crossed */
12482 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_THRESHOLD_TYPE_FATAL \
12483 		(UINT32_C(0x2) << 8)
12484 	/*
12485 	 * Thermal shutdown threshold was crossed and a shutdown is
12486 	 * imminent. This event will not occur if self shutdown
12487 	 * is disabled.
12488 	 */
12489 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_THRESHOLD_TYPE_SHUTDOWN \
12490 		(UINT32_C(0x3) << 8)
12491 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_THRESHOLD_TYPE_LAST \
12492 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_THRESHOLD_TYPE_SHUTDOWN
12493 	/*
12494 	 * Indicates if the thermal crossing occurs while the temperature is
12495 	 * increasing or decreasing.
12496 	 */
12497 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_TRANSITION_DIR \
12498 		UINT32_C(0x800)
12499 	/* Threshold is crossed while the temperature is falling. */
12500 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_TRANSITION_DIR_DECREASING \
12501 		(UINT32_C(0x0) << 11)
12502 	/* Threshold is crossed while the temperature is rising. */
12503 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_TRANSITION_DIR_INCREASING \
12504 		(UINT32_C(0x1) << 11)
12505 	#define HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_TRANSITION_DIR_LAST \
12506 		HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_TRANSITION_DIR_INCREASING
12507 } __rte_packed;
12508 
12509 /* metadata_base_msg (size:64b/8B) */
12510 struct metadata_base_msg {
12511 	uint16_t	md_type_link;
12512 	/* This field classifies the data present in the meta-data. */
12513 	#define METADATA_BASE_MSG_MD_TYPE_MASK      UINT32_C(0x1f)
12514 	#define METADATA_BASE_MSG_MD_TYPE_SFT       0
12515 	/* Meta data fields are not valid */
12516 	#define METADATA_BASE_MSG_MD_TYPE_NONE        UINT32_C(0x0)
12517 	/*
12518 	 * This setting is used when packets are coming in-order. Depending on
12519 	 * the state of the receive context, the meta-data will carry different
12520 	 * information.
12521 	 */
12522 	#define METADATA_BASE_MSG_MD_TYPE_TLS_INSYNC  UINT32_C(0x1)
12523 	/*
12524 	 * With this setting HW passes the TCP sequence number of the TLS
12525 	 * record that it is requesting a resync on in the meta data.
12526 	 */
12527 	#define METADATA_BASE_MSG_MD_TYPE_TLS_RESYNC  UINT32_C(0x2)
12528 	#define METADATA_BASE_MSG_MD_TYPE_LAST \
12529 		METADATA_BASE_MSG_MD_TYPE_TLS_RESYNC
12530 	/*
12531 	 * This field indicates where the next metadata block starts. It is
12532 	 * counted in 16B units. A value of zero indicates that there is no
12533 	 * metadata.
12534 	 */
12535 	#define METADATA_BASE_MSG_LINK_MASK         UINT32_C(0x1e0)
12536 	#define METADATA_BASE_MSG_LINK_SFT          5
12537 	uint16_t	unused0;
12538 	uint32_t	unused1;
12539 } __rte_packed;
12540 
12541 /* tls_metadata_base_msg (size:64b/8B) */
12542 struct tls_metadata_base_msg {
12543 	uint32_t	md_type_link_flags_kid_lo;
12544 	/* This field classifies the data present in the meta-data. */
12545 	#define TLS_METADATA_BASE_MSG_MD_TYPE_MASK \
12546 		UINT32_C(0x1f)
12547 	#define TLS_METADATA_BASE_MSG_MD_TYPE_SFT                  0
12548 	/*
12549 	 * This setting is used when packets are coming in-order. Depending on
12550 	 * the state of the receive context, the meta-data will carry different
12551 	 * information.
12552 	 */
12553 	#define TLS_METADATA_BASE_MSG_MD_TYPE_TLS_INSYNC \
12554 		UINT32_C(0x1)
12555 	/*
12556 	 * With this setting HW passes the TCP sequence number of the TLS
12557 	 * record that it is requesting a resync on in the meta data.
12558 	 */
12559 	#define TLS_METADATA_BASE_MSG_MD_TYPE_TLS_RESYNC \
12560 		UINT32_C(0x2)
12561 	#define TLS_METADATA_BASE_MSG_MD_TYPE_LAST \
12562 		TLS_METADATA_BASE_MSG_MD_TYPE_TLS_RESYNC
12563 	/*
12564 	 * This field indicates where the next metadata block starts. It is
12565 	 * counted in 16B units. A value of zero indicates that there is no
12566 	 * metadata.
12567 	 */
12568 	#define TLS_METADATA_BASE_MSG_LINK_MASK \
12569 		UINT32_C(0x1e0)
12570 	#define TLS_METADATA_BASE_MSG_LINK_SFT                     5
12571 	/* These are flags present in the metadata. */
12572 	#define TLS_METADATA_BASE_MSG_FLAGS_MASK \
12573 		UINT32_C(0x1fffe00)
12574 	#define TLS_METADATA_BASE_MSG_FLAGS_SFT                    9
12575 	/*
12576 	 * A value of 1 implies that the packet was decrypted by HW. Otherwise
12577 	 * the packet is passed on as it came in on the wire.
12578 	 */
12579 	#define TLS_METADATA_BASE_MSG_FLAGS_DECRYPTED \
12580 		UINT32_C(0x200)
12581 	/*
12582 	 * This field indicates the state of the ghash field passed in the
12583 	 * meta-data.
12584 	 */
12585 	#define TLS_METADATA_BASE_MSG_FLAGS_GHASH_MASK \
12586 		UINT32_C(0xc00)
12587 	#define TLS_METADATA_BASE_MSG_FLAGS_GHASH_SFT               10
12588 	/*
12589 	 * This enumeration states that the ghash is not valid in the
12590 	 * meta-data.
12591 	 */
12592 	#define TLS_METADATA_BASE_MSG_FLAGS_GHASH_NOT_VALID \
12593 		(UINT32_C(0x0) << 10)
12594 	/*
12595 	 * This enumeration indicates that this pkt contains the record's
12596 	 * tag and this pkt was received ooo, the partial_ghash field
12597 	 * contains the ghash.
12598 	 */
12599 	#define TLS_METADATA_BASE_MSG_FLAGS_GHASH_CUR_REC \
12600 		(UINT32_C(0x1) << 10)
12601 	/*
12602 	 * This enumeration indicates that the current record's tag wasn't
12603 	 * seen and the chip is moving on to the next record, the
12604 	 * partial_ghash field contains the ghash.
12605 	 */
12606 	#define TLS_METADATA_BASE_MSG_FLAGS_GHASH_PRIOR_REC \
12607 		(UINT32_C(0x2) << 10)
12608 	#define TLS_METADATA_BASE_MSG_FLAGS_GHASH_LAST \
12609 		TLS_METADATA_BASE_MSG_FLAGS_GHASH_PRIOR_REC
12610 	/* This field indicates the status of tag authentication. */
12611 	#define TLS_METADATA_BASE_MSG_FLAGS_TAG_AUTH_STATUS_MASK \
12612 		UINT32_C(0x3000)
12613 	#define TLS_METADATA_BASE_MSG_FLAGS_TAG_AUTH_STATUS_SFT     12
12614 	/*
12615 	 * This enumeration is set when there is no tags present in the
12616 	 * packet.
12617 	 */
12618 	#define TLS_METADATA_BASE_MSG_FLAGS_TAG_AUTH_STATUS_NONE \
12619 		(UINT32_C(0x0) << 12)
12620 	/*
12621 	 * This enumeration states that there is at least one tag in the
12622 	 * packet and every tag is valid.
12623 	 */
12624 	#define TLS_METADATA_BASE_MSG_FLAGS_TAG_AUTH_STATUS_SUCCESS \
12625 		(UINT32_C(0x1) << 12)
12626 	/*
12627 	 * This enumeration states that there is at least one tag in the
12628 	 * packet and at least one of the tag is invalid. The entire packet
12629 	 * is sent decrypted to the host.
12630 	 */
12631 	#define TLS_METADATA_BASE_MSG_FLAGS_TAG_AUTH_STATUS_FAILURE \
12632 		(UINT32_C(0x2) << 12)
12633 	#define TLS_METADATA_BASE_MSG_FLAGS_TAG_AUTH_STATUS_LAST \
12634 		TLS_METADATA_BASE_MSG_FLAGS_TAG_AUTH_STATUS_FAILURE
12635 	/*
12636 	 * A value of 1 indicates that this packet contains a record that
12637 	 * starts in the packet and extends beyond the packet.
12638 	 */
12639 	#define TLS_METADATA_BASE_MSG_FLAGS_HEADER_FLDS_VALID \
12640 		UINT32_C(0x4000)
12641 	/*
12642 	 * This value indicates the lower 7-bit of the Crypto Key ID
12643 	 * associated with this operation.
12644 	 */
12645 	#define TLS_METADATA_BASE_MSG_KID_LO_MASK \
12646 		UINT32_C(0xfe000000)
12647 	#define TLS_METADATA_BASE_MSG_KID_LO_SFT                   25
12648 	uint16_t	kid_hi;
12649 	/*
12650 	 * This value indicates the upper 13-bit of the Crypto Key ID
12651 	 * associated with this operation.
12652 	 */
12653 	#define TLS_METADATA_BASE_MSG_KID_HI_MASK UINT32_C(0x1fff)
12654 	#define TLS_METADATA_BASE_MSG_KID_HI_SFT 0
12655 	uint16_t	unused0;
12656 } __rte_packed;
12657 
12658 /* tls_metadata_insync_msg (size:192b/24B) */
12659 struct tls_metadata_insync_msg {
12660 	uint32_t	md_type_link_flags_kid_lo;
12661 	/* This field classifies the data present in the meta-data. */
12662 	#define TLS_METADATA_INSYNC_MSG_MD_TYPE_MASK \
12663 		UINT32_C(0x1f)
12664 	#define TLS_METADATA_INSYNC_MSG_MD_TYPE_SFT                  0
12665 	/*
12666 	 * This setting is used when packets are coming in-order. Depending on
12667 	 * the state of the receive context, the meta-data will carry different
12668 	 * information.
12669 	 */
12670 	#define TLS_METADATA_INSYNC_MSG_MD_TYPE_TLS_INSYNC \
12671 		UINT32_C(0x1)
12672 	#define TLS_METADATA_INSYNC_MSG_MD_TYPE_LAST \
12673 		TLS_METADATA_INSYNC_MSG_MD_TYPE_TLS_INSYNC
12674 	/*
12675 	 * This field indicates where the next metadata block starts. It is
12676 	 * counted in 16B units. A value of zero indicates that there is no
12677 	 * metadata.
12678 	 */
12679 	#define TLS_METADATA_INSYNC_MSG_LINK_MASK \
12680 		UINT32_C(0x1e0)
12681 	#define TLS_METADATA_INSYNC_MSG_LINK_SFT                     5
12682 	/* These are flags present in the metadata. */
12683 	#define TLS_METADATA_INSYNC_MSG_FLAGS_MASK \
12684 		UINT32_C(0x1fffe00)
12685 	#define TLS_METADATA_INSYNC_MSG_FLAGS_SFT                    9
12686 	/*
12687 	 * A value of 1 implies that the packet was decrypted by HW. Otherwise
12688 	 * the packet is passed on as it came in on the wire.
12689 	 */
12690 	#define TLS_METADATA_INSYNC_MSG_FLAGS_DECRYPTED \
12691 		UINT32_C(0x200)
12692 	/*
12693 	 * This field indicates the state of the ghash field passed in the
12694 	 * meta-data.
12695 	 */
12696 	#define TLS_METADATA_INSYNC_MSG_FLAGS_GHASH_MASK \
12697 		UINT32_C(0xc00)
12698 	#define TLS_METADATA_INSYNC_MSG_FLAGS_GHASH_SFT               10
12699 	/*
12700 	 * This enumeration states that the ghash is not valid in the
12701 	 * meta-data.
12702 	 */
12703 	#define TLS_METADATA_INSYNC_MSG_FLAGS_GHASH_NOT_VALID \
12704 		(UINT32_C(0x0) << 10)
12705 	/*
12706 	 * This enumeration indicates that this pkt contains the record's
12707 	 * tag and this pkt was received ooo, the partial_ghash field
12708 	 * contains the ghash.
12709 	 */
12710 	#define TLS_METADATA_INSYNC_MSG_FLAGS_GHASH_CUR_REC \
12711 		(UINT32_C(0x1) << 10)
12712 	/*
12713 	 * This enumeration indicates that the current record's tag wasn't
12714 	 * seen and the chip is moving on to the next record, the
12715 	 * partial_ghash field contains the ghash.
12716 	 */
12717 	#define TLS_METADATA_INSYNC_MSG_FLAGS_GHASH_PRIOR_REC \
12718 		(UINT32_C(0x2) << 10)
12719 	#define TLS_METADATA_INSYNC_MSG_FLAGS_GHASH_LAST \
12720 		TLS_METADATA_INSYNC_MSG_FLAGS_GHASH_PRIOR_REC
12721 	/* This field indicates the status of tag authentication. */
12722 	#define TLS_METADATA_INSYNC_MSG_FLAGS_TAG_AUTH_STATUS_MASK \
12723 		UINT32_C(0x3000)
12724 	#define TLS_METADATA_INSYNC_MSG_FLAGS_TAG_AUTH_STATUS_SFT     12
12725 	/*
12726 	 * This enumeration is set when there is no tags present in the
12727 	 * packet.
12728 	 */
12729 	#define TLS_METADATA_INSYNC_MSG_FLAGS_TAG_AUTH_STATUS_NONE \
12730 		(UINT32_C(0x0) << 12)
12731 	/*
12732 	 * This enumeration states that there is at least one tag in the
12733 	 * packet and every tag is valid.
12734 	 */
12735 	#define TLS_METADATA_INSYNC_MSG_FLAGS_TAG_AUTH_STATUS_SUCCESS \
12736 		(UINT32_C(0x1) << 12)
12737 	/*
12738 	 * This enumeration states that there is at least one tag in the
12739 	 * packet and at least one of the tag is invalid. The entire packet
12740 	 * is sent decrypted to the host.
12741 	 */
12742 	#define TLS_METADATA_INSYNC_MSG_FLAGS_TAG_AUTH_STATUS_FAILURE \
12743 		(UINT32_C(0x2) << 12)
12744 	#define TLS_METADATA_INSYNC_MSG_FLAGS_TAG_AUTH_STATUS_LAST \
12745 		TLS_METADATA_INSYNC_MSG_FLAGS_TAG_AUTH_STATUS_FAILURE
12746 	/*
12747 	 * A value of 1 indicates that this packet contains a record that
12748 	 * starts in the packet and extends beyond the packet.
12749 	 */
12750 	#define TLS_METADATA_INSYNC_MSG_FLAGS_HEADER_FLDS_VALID \
12751 		UINT32_C(0x4000)
12752 	/*
12753 	 * This value indicates the lower 7-bit of the Crypto Key ID
12754 	 * associated with this operation.
12755 	 */
12756 	#define TLS_METADATA_INSYNC_MSG_KID_LO_MASK \
12757 		UINT32_C(0xfe000000)
12758 	#define TLS_METADATA_INSYNC_MSG_KID_LO_SFT                   25
12759 	uint16_t	kid_hi;
12760 	/*
12761 	 * This value indicates the upper 13-bit of the Crypto Key ID
12762 	 * associated with this operation.
12763 	 */
12764 	#define TLS_METADATA_INSYNC_MSG_KID_HI_MASK UINT32_C(0x1fff)
12765 	#define TLS_METADATA_INSYNC_MSG_KID_HI_SFT 0
12766 	/*
12767 	 * This field is only valid when md_type is set to tls_insync. This field
12768 	 * indicates the offset within the current TCP packet where the TLS header
12769 	 * starts. If there are multiple TLS headers in the packet, this provides
12770 	 * the offset of the last TLS header.
12771 	 *
12772 	 * The field is calculated by subtracting TCP sequence number of the first
12773 	 * byte of the TCP payload of the packet from the TCP sequence number of
12774 	 * the last TLS header in the packet.
12775 	 */
12776 	uint16_t	tls_header_offset;
12777 	/*
12778 	 * This is the sequence Number of the record that was processed by the HW.
12779 	 * If there are multiple records in a packet, this would be the sequence
12780 	 * number of the last record.
12781 	 */
12782 	uint64_t	record_seq_num;
12783 	/*
12784 	 * This field contains cumulative partial GHASH value of all the packets
12785 	 * decrypted by the HW associated with a TLS record. This field is valid
12786 	 * on when packets belonging to have arrived out-of-order and HW could
12787 	 * not decrypt every packet and authenticate the record. Partial GHASH is
12788 	 * only sent out with packet having the TAG field.
12789 	 */
12790 	uint64_t	partial_ghash;
12791 } __rte_packed;
12792 
12793 /* tls_metadata_resync_msg (size:256b/32B) */
12794 struct tls_metadata_resync_msg {
12795 	uint32_t	md_type_link_flags_kid_lo;
12796 	/* This field classifies the data present in the meta-data. */
12797 	#define TLS_METADATA_RESYNC_MSG_MD_TYPE_MASK \
12798 		UINT32_C(0x1f)
12799 	#define TLS_METADATA_RESYNC_MSG_MD_TYPE_SFT                 0
12800 	/*
12801 	 * With this setting HW passes the TCP sequence number of the TLS
12802 	 * record that it is requesting a resync on in the meta data.
12803 	 */
12804 	#define TLS_METADATA_RESYNC_MSG_MD_TYPE_TLS_RESYNC \
12805 		UINT32_C(0x2)
12806 	#define TLS_METADATA_RESYNC_MSG_MD_TYPE_LAST \
12807 		TLS_METADATA_RESYNC_MSG_MD_TYPE_TLS_RESYNC
12808 	/*
12809 	 * This field indicates where the next metadata block starts. It is
12810 	 * counted in 16B units. A value of zero indicates that there is no
12811 	 * metadata.
12812 	 */
12813 	#define TLS_METADATA_RESYNC_MSG_LINK_MASK \
12814 		UINT32_C(0x1e0)
12815 	#define TLS_METADATA_RESYNC_MSG_LINK_SFT                    5
12816 	/* These are flags present in the metadata. */
12817 	#define TLS_METADATA_RESYNC_MSG_FLAGS_MASK \
12818 		UINT32_C(0x1fffe00)
12819 	#define TLS_METADATA_RESYNC_MSG_FLAGS_SFT                   9
12820 	/*
12821 	 * A value of 1 implies that the packet was decrypted by HW. Otherwise
12822 	 * the packet is passed on as it came in on the wire.
12823 	 */
12824 	#define TLS_METADATA_RESYNC_MSG_FLAGS_DECRYPTED \
12825 		UINT32_C(0x200)
12826 	/*
12827 	 * This field indicates the state of the ghash field passed in the
12828 	 * meta-data.
12829 	 */
12830 	#define TLS_METADATA_RESYNC_MSG_FLAGS_GHASH_MASK \
12831 		UINT32_C(0xc00)
12832 	#define TLS_METADATA_RESYNC_MSG_FLAGS_GHASH_SFT              10
12833 	/*
12834 	 * This enumeration states that the ghash is not valid in the
12835 	 * meta-data.
12836 	 */
12837 	#define TLS_METADATA_RESYNC_MSG_FLAGS_GHASH_NOT_VALID \
12838 		(UINT32_C(0x0) << 10)
12839 	#define TLS_METADATA_RESYNC_MSG_FLAGS_GHASH_LAST \
12840 		TLS_METADATA_RESYNC_MSG_FLAGS_GHASH_NOT_VALID
12841 	/* This field indicates the status of tag authentication. */
12842 	#define TLS_METADATA_RESYNC_MSG_FLAGS_TAG_AUTH_STATUS_MASK \
12843 		UINT32_C(0x3000)
12844 	#define TLS_METADATA_RESYNC_MSG_FLAGS_TAG_AUTH_STATUS_SFT    12
12845 	/*
12846 	 * This enumeration is set when there is no tags present in the
12847 	 * packet.
12848 	 */
12849 	#define TLS_METADATA_RESYNC_MSG_FLAGS_TAG_AUTH_STATUS_NONE \
12850 		(UINT32_C(0x0) << 12)
12851 	#define TLS_METADATA_RESYNC_MSG_FLAGS_TAG_AUTH_STATUS_LAST \
12852 		TLS_METADATA_RESYNC_MSG_FLAGS_TAG_AUTH_STATUS_NONE
12853 	/*
12854 	 * A value of 1 indicates that this packet contains a record that
12855 	 * starts in the packet and extends beyond the packet.
12856 	 */
12857 	#define TLS_METADATA_RESYNC_MSG_FLAGS_HEADER_FLDS_VALID \
12858 		UINT32_C(0x4000)
12859 	/*
12860 	 * This value indicates the lower 7-bit of the Crypto Key ID
12861 	 * associated with this operation.
12862 	 */
12863 	#define TLS_METADATA_RESYNC_MSG_KID_LO_MASK \
12864 		UINT32_C(0xfe000000)
12865 	#define TLS_METADATA_RESYNC_MSG_KID_LO_SFT                  25
12866 	uint16_t	kid_hi;
12867 	/*
12868 	 * This value indicates the upper 13-bit of the Crypto Key ID
12869 	 * associated with this operation.
12870 	 */
12871 	#define TLS_METADATA_RESYNC_MSG_KID_HI_MASK UINT32_C(0x1fff)
12872 	#define TLS_METADATA_RESYNC_MSG_KID_HI_SFT 0
12873 	/* This field is unused in this context. */
12874 	uint16_t	metadata_0;
12875 	/*
12876 	 * This field indicates the TCP sequence number of the TLS record that HW
12877 	 * is requesting a resync on from the Driver. HW will keep a count of the
12878 	 * TLS records it found after this record (delta_records). Driver will
12879 	 * provide the TLS Record Sequence Number associated with the record. HW
12880 	 * will add the delta_records to the Record Sequence Number provided by
12881 	 * the driver and get back on sync.
12882 	 */
12883 	uint32_t	resync_record_tcp_seq_num;
12884 	uint32_t	unused0;
12885 	/* This field is unused in this context. */
12886 	uint64_t	metadata_2;
12887 	/* This field is unused in this context. */
12888 	uint64_t	metadata_3;
12889 } __rte_packed;
12890 
12891 /*******************
12892  * hwrm_func_reset *
12893  *******************/
12894 
12895 
12896 /* hwrm_func_reset_input (size:192b/24B) */
12897 struct hwrm_func_reset_input {
12898 	/* The HWRM command request type. */
12899 	uint16_t	req_type;
12900 	/*
12901 	 * The completion ring to send the completion event on. This should
12902 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
12903 	 */
12904 	uint16_t	cmpl_ring;
12905 	/*
12906 	 * The sequence ID is used by the driver for tracking multiple
12907 	 * commands. This ID is treated as opaque data by the firmware and
12908 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
12909 	 */
12910 	uint16_t	seq_id;
12911 	/*
12912 	 * The target ID of the command:
12913 	 * * 0x0-0xFFF8 - The function ID
12914 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
12915 	 * * 0xFFFD - Reserved for user-space HWRM interface
12916 	 * * 0xFFFF - HWRM
12917 	 */
12918 	uint16_t	target_id;
12919 	/*
12920 	 * A physical address pointer pointing to a host buffer that the
12921 	 * command's response data will be written. This can be either a host
12922 	 * physical address (HPA) or a guest physical address (GPA) and must
12923 	 * point to a physically contiguous block of memory.
12924 	 */
12925 	uint64_t	resp_addr;
12926 	uint32_t	enables;
12927 	/*
12928 	 * This bit must be '1' for the vf_id_valid field to be
12929 	 * configured.
12930 	 */
12931 	#define HWRM_FUNC_RESET_INPUT_ENABLES_VF_ID_VALID     UINT32_C(0x1)
12932 	/*
12933 	 * The ID of the VF that this PF is trying to reset.
12934 	 * Only the parent PF shall be allowed to reset a child VF.
12935 	 *
12936 	 * A parent PF driver shall use this field only when a specific child VF
12937 	 * is requested to be reset.
12938 	 */
12939 	uint16_t	vf_id;
12940 	/* This value indicates the level of a function reset. */
12941 	uint8_t	func_reset_level;
12942 	/*
12943 	 * Reset the caller function and its children VFs (if any). If no
12944 	 * children functions exist, then reset the caller function only.
12945 	 */
12946 	#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETALL \
12947 		UINT32_C(0x0)
12948 	/* Reset the caller function only */
12949 	#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETME \
12950 		UINT32_C(0x1)
12951 	/*
12952 	 * Reset all children VFs of the caller function driver if the
12953 	 * caller is a PF driver.
12954 	 * It is an error to specify this level by a VF driver.
12955 	 * It is an error to specify this level by a PF driver with
12956 	 * no children VFs.
12957 	 */
12958 	#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETCHILDREN \
12959 		UINT32_C(0x2)
12960 	/*
12961 	 * Reset a specific VF of the caller function driver if the caller
12962 	 * is the parent PF driver.
12963 	 * It is an error to specify this level by a VF driver.
12964 	 * It is an error to specify this level by a PF driver that is not
12965 	 * the parent of the VF that is being requested to reset.
12966 	 */
12967 	#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETVF \
12968 		UINT32_C(0x3)
12969 	#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_LAST \
12970 		HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETVF
12971 	uint8_t	unused_0;
12972 } __rte_packed;
12973 
12974 /* hwrm_func_reset_output (size:128b/16B) */
12975 struct hwrm_func_reset_output {
12976 	/* The specific error status for the command. */
12977 	uint16_t	error_code;
12978 	/* The HWRM command request type. */
12979 	uint16_t	req_type;
12980 	/* The sequence ID from the original command. */
12981 	uint16_t	seq_id;
12982 	/* The length of the response data in number of bytes. */
12983 	uint16_t	resp_len;
12984 	uint8_t	unused_0[7];
12985 	/*
12986 	 * This field is used in Output records to indicate that the output
12987 	 * is completely written to RAM.  This field should be read as '1'
12988 	 * to indicate that the output has been completely written.
12989 	 * When writing a command completion or response to an internal processor,
12990 	 * the order of writes has to be such that this field is written last.
12991 	 */
12992 	uint8_t	valid;
12993 } __rte_packed;
12994 
12995 /********************
12996  * hwrm_func_getfid *
12997  ********************/
12998 
12999 
13000 /* hwrm_func_getfid_input (size:192b/24B) */
13001 struct hwrm_func_getfid_input {
13002 	/* The HWRM command request type. */
13003 	uint16_t	req_type;
13004 	/*
13005 	 * The completion ring to send the completion event on. This should
13006 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
13007 	 */
13008 	uint16_t	cmpl_ring;
13009 	/*
13010 	 * The sequence ID is used by the driver for tracking multiple
13011 	 * commands. This ID is treated as opaque data by the firmware and
13012 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
13013 	 */
13014 	uint16_t	seq_id;
13015 	/*
13016 	 * The target ID of the command:
13017 	 * * 0x0-0xFFF8 - The function ID
13018 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
13019 	 * * 0xFFFD - Reserved for user-space HWRM interface
13020 	 * * 0xFFFF - HWRM
13021 	 */
13022 	uint16_t	target_id;
13023 	/*
13024 	 * A physical address pointer pointing to a host buffer that the
13025 	 * command's response data will be written. This can be either a host
13026 	 * physical address (HPA) or a guest physical address (GPA) and must
13027 	 * point to a physically contiguous block of memory.
13028 	 */
13029 	uint64_t	resp_addr;
13030 	uint32_t	enables;
13031 	/*
13032 	 * This bit must be '1' for the pci_id field to be
13033 	 * configured.
13034 	 */
13035 	#define HWRM_FUNC_GETFID_INPUT_ENABLES_PCI_ID     UINT32_C(0x1)
13036 	/*
13037 	 * This value is the PCI ID of the queried function.
13038 	 * If ARI is enabled, then it is
13039 	 * Bus Number (8b):Function Number(8b). Otherwise, it is
13040 	 * Bus Number (8b):Device Number (5b):Function Number(3b).
13041 	 */
13042 	uint16_t	pci_id;
13043 	uint8_t	unused_0[2];
13044 } __rte_packed;
13045 
13046 /* hwrm_func_getfid_output (size:128b/16B) */
13047 struct hwrm_func_getfid_output {
13048 	/* The specific error status for the command. */
13049 	uint16_t	error_code;
13050 	/* The HWRM command request type. */
13051 	uint16_t	req_type;
13052 	/* The sequence ID from the original command. */
13053 	uint16_t	seq_id;
13054 	/* The length of the response data in number of bytes. */
13055 	uint16_t	resp_len;
13056 	/*
13057 	 * FID value.  This value is used to identify operations on the PCI
13058 	 * bus as belonging to a particular PCI function.
13059 	 */
13060 	uint16_t	fid;
13061 	uint8_t	unused_0[5];
13062 	/*
13063 	 * This field is used in Output records to indicate that the output
13064 	 * is completely written to RAM.  This field should be read as '1'
13065 	 * to indicate that the output has been completely written.
13066 	 * When writing a command completion or response to an internal processor,
13067 	 * the order of writes has to be such that this field is written last.
13068 	 */
13069 	uint8_t	valid;
13070 } __rte_packed;
13071 
13072 /**********************
13073  * hwrm_func_vf_alloc *
13074  **********************/
13075 
13076 
13077 /* hwrm_func_vf_alloc_input (size:192b/24B) */
13078 struct hwrm_func_vf_alloc_input {
13079 	/* The HWRM command request type. */
13080 	uint16_t	req_type;
13081 	/*
13082 	 * The completion ring to send the completion event on. This should
13083 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
13084 	 */
13085 	uint16_t	cmpl_ring;
13086 	/*
13087 	 * The sequence ID is used by the driver for tracking multiple
13088 	 * commands. This ID is treated as opaque data by the firmware and
13089 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
13090 	 */
13091 	uint16_t	seq_id;
13092 	/*
13093 	 * The target ID of the command:
13094 	 * * 0x0-0xFFF8 - The function ID
13095 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
13096 	 * * 0xFFFD - Reserved for user-space HWRM interface
13097 	 * * 0xFFFF - HWRM
13098 	 */
13099 	uint16_t	target_id;
13100 	/*
13101 	 * A physical address pointer pointing to a host buffer that the
13102 	 * command's response data will be written. This can be either a host
13103 	 * physical address (HPA) or a guest physical address (GPA) and must
13104 	 * point to a physically contiguous block of memory.
13105 	 */
13106 	uint64_t	resp_addr;
13107 	uint32_t	enables;
13108 	/*
13109 	 * This bit must be '1' for the first_vf_id field to be
13110 	 * configured.
13111 	 */
13112 	#define HWRM_FUNC_VF_ALLOC_INPUT_ENABLES_FIRST_VF_ID     UINT32_C(0x1)
13113 	/*
13114 	 * This value is used to identify a Virtual Function (VF).
13115 	 * The scope of VF ID is local within a PF.
13116 	 */
13117 	uint16_t	first_vf_id;
13118 	/* The number of virtual functions requested. */
13119 	uint16_t	num_vfs;
13120 } __rte_packed;
13121 
13122 /* hwrm_func_vf_alloc_output (size:128b/16B) */
13123 struct hwrm_func_vf_alloc_output {
13124 	/* The specific error status for the command. */
13125 	uint16_t	error_code;
13126 	/* The HWRM command request type. */
13127 	uint16_t	req_type;
13128 	/* The sequence ID from the original command. */
13129 	uint16_t	seq_id;
13130 	/* The length of the response data in number of bytes. */
13131 	uint16_t	resp_len;
13132 	/* The ID of the first VF allocated. */
13133 	uint16_t	first_vf_id;
13134 	uint8_t	unused_0[5];
13135 	/*
13136 	 * This field is used in Output records to indicate that the output
13137 	 * is completely written to RAM.  This field should be read as '1'
13138 	 * to indicate that the output has been completely written.
13139 	 * When writing a command completion or response to an internal processor,
13140 	 * the order of writes has to be such that this field is written last.
13141 	 */
13142 	uint8_t	valid;
13143 } __rte_packed;
13144 
13145 /*********************
13146  * hwrm_func_vf_free *
13147  *********************/
13148 
13149 
13150 /* hwrm_func_vf_free_input (size:192b/24B) */
13151 struct hwrm_func_vf_free_input {
13152 	/* The HWRM command request type. */
13153 	uint16_t	req_type;
13154 	/*
13155 	 * The completion ring to send the completion event on. This should
13156 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
13157 	 */
13158 	uint16_t	cmpl_ring;
13159 	/*
13160 	 * The sequence ID is used by the driver for tracking multiple
13161 	 * commands. This ID is treated as opaque data by the firmware and
13162 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
13163 	 */
13164 	uint16_t	seq_id;
13165 	/*
13166 	 * The target ID of the command:
13167 	 * * 0x0-0xFFF8 - The function ID
13168 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
13169 	 * * 0xFFFD - Reserved for user-space HWRM interface
13170 	 * * 0xFFFF - HWRM
13171 	 */
13172 	uint16_t	target_id;
13173 	/*
13174 	 * A physical address pointer pointing to a host buffer that the
13175 	 * command's response data will be written. This can be either a host
13176 	 * physical address (HPA) or a guest physical address (GPA) and must
13177 	 * point to a physically contiguous block of memory.
13178 	 */
13179 	uint64_t	resp_addr;
13180 	uint32_t	enables;
13181 	/*
13182 	 * This bit must be '1' for the first_vf_id field to be
13183 	 * configured.
13184 	 */
13185 	#define HWRM_FUNC_VF_FREE_INPUT_ENABLES_FIRST_VF_ID     UINT32_C(0x1)
13186 	/*
13187 	 * This value is used to identify a Virtual Function (VF).
13188 	 * The scope of VF ID is local within a PF.
13189 	 */
13190 	uint16_t	first_vf_id;
13191 	/*
13192 	 * The number of virtual functions requested.
13193 	 * 0xFFFF - Cleanup all children of this PF.
13194 	 */
13195 	uint16_t	num_vfs;
13196 } __rte_packed;
13197 
13198 /* hwrm_func_vf_free_output (size:128b/16B) */
13199 struct hwrm_func_vf_free_output {
13200 	/* The specific error status for the command. */
13201 	uint16_t	error_code;
13202 	/* The HWRM command request type. */
13203 	uint16_t	req_type;
13204 	/* The sequence ID from the original command. */
13205 	uint16_t	seq_id;
13206 	/* The length of the response data in number of bytes. */
13207 	uint16_t	resp_len;
13208 	uint8_t	unused_0[7];
13209 	/*
13210 	 * This field is used in Output records to indicate that the output
13211 	 * is completely written to RAM.  This field should be read as '1'
13212 	 * to indicate that the output has been completely written.
13213 	 * When writing a command completion or response to an internal processor,
13214 	 * the order of writes has to be such that this field is written last.
13215 	 */
13216 	uint8_t	valid;
13217 } __rte_packed;
13218 
13219 /********************
13220  * hwrm_func_vf_cfg *
13221  ********************/
13222 
13223 
13224 /* hwrm_func_vf_cfg_input (size:448b/56B) */
13225 struct hwrm_func_vf_cfg_input {
13226 	/* The HWRM command request type. */
13227 	uint16_t	req_type;
13228 	/*
13229 	 * The completion ring to send the completion event on. This should
13230 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
13231 	 */
13232 	uint16_t	cmpl_ring;
13233 	/*
13234 	 * The sequence ID is used by the driver for tracking multiple
13235 	 * commands. This ID is treated as opaque data by the firmware and
13236 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
13237 	 */
13238 	uint16_t	seq_id;
13239 	/*
13240 	 * The target ID of the command:
13241 	 * * 0x0-0xFFF8 - The function ID
13242 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
13243 	 * * 0xFFFD - Reserved for user-space HWRM interface
13244 	 * * 0xFFFF - HWRM
13245 	 */
13246 	uint16_t	target_id;
13247 	/*
13248 	 * A physical address pointer pointing to a host buffer that the
13249 	 * command's response data will be written. This can be either a host
13250 	 * physical address (HPA) or a guest physical address (GPA) and must
13251 	 * point to a physically contiguous block of memory.
13252 	 */
13253 	uint64_t	resp_addr;
13254 	uint32_t	enables;
13255 	/*
13256 	 * This bit must be '1' for the mtu field to be
13257 	 * configured.
13258 	 */
13259 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_MTU \
13260 		UINT32_C(0x1)
13261 	/*
13262 	 * This bit must be '1' for the guest_vlan field to be
13263 	 * configured.
13264 	 */
13265 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_GUEST_VLAN \
13266 		UINT32_C(0x2)
13267 	/*
13268 	 * This bit must be '1' for the async_event_cr field to be
13269 	 * configured.
13270 	 */
13271 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_ASYNC_EVENT_CR \
13272 		UINT32_C(0x4)
13273 	/*
13274 	 * This bit must be '1' for the dflt_mac_addr field to be
13275 	 * configured.
13276 	 */
13277 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_DFLT_MAC_ADDR \
13278 		UINT32_C(0x8)
13279 	/*
13280 	 * This bit must be '1' for the num_rsscos_ctxs field to be
13281 	 * configured.
13282 	 */
13283 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_RSSCOS_CTXS \
13284 		UINT32_C(0x10)
13285 	/*
13286 	 * This bit must be '1' for the num_cmpl_rings field to be
13287 	 * configured.
13288 	 */
13289 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_CMPL_RINGS \
13290 		UINT32_C(0x20)
13291 	/*
13292 	 * This bit must be '1' for the num_tx_rings field to be
13293 	 * configured.
13294 	 */
13295 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_TX_RINGS \
13296 		UINT32_C(0x40)
13297 	/*
13298 	 * This bit must be '1' for the num_rx_rings field to be
13299 	 * configured.
13300 	 */
13301 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_RX_RINGS \
13302 		UINT32_C(0x80)
13303 	/*
13304 	 * This bit must be '1' for the num_l2_ctxs field to be
13305 	 * configured.
13306 	 */
13307 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_L2_CTXS \
13308 		UINT32_C(0x100)
13309 	/*
13310 	 * This bit must be '1' for the num_vnics field to be
13311 	 * configured.
13312 	 */
13313 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_VNICS \
13314 		UINT32_C(0x200)
13315 	/*
13316 	 * This bit must be '1' for the num_stat_ctxs field to be
13317 	 * configured.
13318 	 */
13319 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_STAT_CTXS \
13320 		UINT32_C(0x400)
13321 	/*
13322 	 * This bit must be '1' for the num_hw_ring_grps field to be
13323 	 * configured.
13324 	 */
13325 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_HW_RING_GRPS \
13326 		UINT32_C(0x800)
13327 	/*
13328 	 * This bit must be '1' for the num_tx_key_ctxs field to be
13329 	 * configured.
13330 	 */
13331 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_TX_KEY_CTXS \
13332 		UINT32_C(0x1000)
13333 	/*
13334 	 * This bit must be '1' for the num_rx_key_ctxs field to be
13335 	 * configured.
13336 	 */
13337 	#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_RX_KEY_CTXS \
13338 		UINT32_C(0x2000)
13339 	/*
13340 	 * The maximum transmission unit requested on the function.
13341 	 * The HWRM should make sure that the mtu of
13342 	 * the function does not exceed the mtu of the physical
13343 	 * port that this function is associated with.
13344 	 *
13345 	 * In addition to requesting mtu per function, it is
13346 	 * possible to configure mtu per transmit ring.
13347 	 * By default, the mtu of each transmit ring associated
13348 	 * with a function is equal to the mtu of the function.
13349 	 * The HWRM should make sure that the mtu of each transmit
13350 	 * ring that is assigned to a function has a valid mtu.
13351 	 */
13352 	uint16_t	mtu;
13353 	/*
13354 	 * The guest VLAN for the function being configured.
13355 	 * This field's format is same as 802.1Q Tag's
13356 	 * Tag Control Information (TCI) format that includes both
13357 	 * Priority Code Point (PCP) and VLAN Identifier (VID).
13358 	 */
13359 	uint16_t	guest_vlan;
13360 	/*
13361 	 * ID of the target completion ring for receiving asynchronous
13362 	 * event completions. If this field is not valid, then the
13363 	 * HWRM shall use the default completion ring of the function
13364 	 * that is being configured as the target completion ring for
13365 	 * providing any asynchronous event completions for that
13366 	 * function.
13367 	 * If this field is valid, then the HWRM shall use the
13368 	 * completion ring identified by this ID as the target
13369 	 * completion ring for providing any asynchronous event
13370 	 * completions for the function that is being configured.
13371 	 */
13372 	uint16_t	async_event_cr;
13373 	/*
13374 	 * This value is the current MAC address requested by the VF
13375 	 * driver to be configured on this VF. A value of
13376 	 * 00-00-00-00-00-00 indicates no MAC address configuration
13377 	 * is requested by the VF driver.
13378 	 * The parent PF driver may reject or overwrite this
13379 	 * MAC address.
13380 	 */
13381 	uint8_t	dflt_mac_addr[6];
13382 	uint32_t	flags;
13383 	/*
13384 	 * This bit requests that the firmware test to see if all the assets
13385 	 * requested in this command (i.e. number of TX rings) are available.
13386 	 * The firmware will return an error if the requested assets are
13387 	 * not available. The firwmare will NOT reserve the assets if they
13388 	 * are available.
13389 	 */
13390 	#define HWRM_FUNC_VF_CFG_INPUT_FLAGS_TX_ASSETS_TEST \
13391 		UINT32_C(0x1)
13392 	/*
13393 	 * This bit requests that the firmware test to see if all the assets
13394 	 * requested in this command (i.e. number of RX rings) are available.
13395 	 * The firmware will return an error if the requested assets are
13396 	 * not available. The firwmare will NOT reserve the assets if they
13397 	 * are available.
13398 	 */
13399 	#define HWRM_FUNC_VF_CFG_INPUT_FLAGS_RX_ASSETS_TEST \
13400 		UINT32_C(0x2)
13401 	/*
13402 	 * This bit requests that the firmware test to see if all the assets
13403 	 * requested in this command (i.e. number of CMPL rings) are available.
13404 	 * The firmware will return an error if the requested assets are
13405 	 * not available. The firwmare will NOT reserve the assets if they
13406 	 * are available.
13407 	 */
13408 	#define HWRM_FUNC_VF_CFG_INPUT_FLAGS_CMPL_ASSETS_TEST \
13409 		UINT32_C(0x4)
13410 	/*
13411 	 * This bit requests that the firmware test to see if all the assets
13412 	 * requested in this command (i.e. number of RSS ctx) are available.
13413 	 * The firmware will return an error if the requested assets are
13414 	 * not available. The firwmare will NOT reserve the assets if they
13415 	 * are available.
13416 	 */
13417 	#define HWRM_FUNC_VF_CFG_INPUT_FLAGS_RSSCOS_CTX_ASSETS_TEST \
13418 		UINT32_C(0x8)
13419 	/*
13420 	 * This bit requests that the firmware test to see if all the assets
13421 	 * requested in this command (i.e. number of ring groups) are available.
13422 	 * The firmware will return an error if the requested assets are
13423 	 * not available. The firwmare will NOT reserve the assets if they
13424 	 * are available.
13425 	 */
13426 	#define HWRM_FUNC_VF_CFG_INPUT_FLAGS_RING_GRP_ASSETS_TEST \
13427 		UINT32_C(0x10)
13428 	/*
13429 	 * This bit requests that the firmware test to see if all the assets
13430 	 * requested in this command (i.e. number of stat ctx) are available.
13431 	 * The firmware will return an error if the requested assets are
13432 	 * not available. The firwmare will NOT reserve the assets if they
13433 	 * are available.
13434 	 */
13435 	#define HWRM_FUNC_VF_CFG_INPUT_FLAGS_STAT_CTX_ASSETS_TEST \
13436 		UINT32_C(0x20)
13437 	/*
13438 	 * This bit requests that the firmware test to see if all the assets
13439 	 * requested in this command (i.e. number of VNICs) are available.
13440 	 * The firmware will return an error if the requested assets are
13441 	 * not available. The firwmare will NOT reserve the assets if they
13442 	 * are available.
13443 	 */
13444 	#define HWRM_FUNC_VF_CFG_INPUT_FLAGS_VNIC_ASSETS_TEST \
13445 		UINT32_C(0x40)
13446 	/*
13447 	 * This bit requests that the firmware test to see if all the assets
13448 	 * requested in this command (i.e. number of L2 ctx) are available.
13449 	 * The firmware will return an error if the requested assets are
13450 	 * not available. The firwmare will NOT reserve the assets if they
13451 	 * are available.
13452 	 */
13453 	#define HWRM_FUNC_VF_CFG_INPUT_FLAGS_L2_CTX_ASSETS_TEST \
13454 		UINT32_C(0x80)
13455 	/*
13456 	 * If this bit is set to 1, the VF driver is requesting FW to enable
13457 	 * PPP TX PUSH feature on all the TX rings specified in the
13458 	 * num_tx_rings field. By default, the PPP TX push feature is
13459 	 * disabled for all the TX rings of the VF. This flag is ignored if
13460 	 * the num_tx_rings field is not specified or the VF doesn't support
13461 	 * PPP tx push feature.
13462 	 */
13463 	#define HWRM_FUNC_VF_CFG_INPUT_FLAGS_PPP_PUSH_MODE_ENABLE \
13464 		UINT32_C(0x100)
13465 	/*
13466 	 * If this bit is set to 1, the VF driver is requesting FW to disable
13467 	 * PPP TX PUSH feature on all the TX rings of the VF. This flag is
13468 	 * ignored if the VF doesn't support PPP tx push feature.
13469 	 */
13470 	#define HWRM_FUNC_VF_CFG_INPUT_FLAGS_PPP_PUSH_MODE_DISABLE \
13471 		UINT32_C(0x200)
13472 	/* The number of RSS/COS contexts requested for the VF. */
13473 	uint16_t	num_rsscos_ctxs;
13474 	/* The number of completion rings requested for the VF. */
13475 	uint16_t	num_cmpl_rings;
13476 	/* The number of transmit rings requested for the VF. */
13477 	uint16_t	num_tx_rings;
13478 	/* The number of receive rings requested for the VF. */
13479 	uint16_t	num_rx_rings;
13480 	/* The number of L2 contexts requested for the VF. */
13481 	uint16_t	num_l2_ctxs;
13482 	/* The number of vnics requested for the VF. */
13483 	uint16_t	num_vnics;
13484 	/* The number of statistic contexts requested for the VF. */
13485 	uint16_t	num_stat_ctxs;
13486 	/* The number of HW ring groups requested for the VF. */
13487 	uint16_t	num_hw_ring_grps;
13488 	/* Number of Tx Key Contexts requested. */
13489 	uint16_t	num_tx_key_ctxs;
13490 	/* Number of Rx Key Contexts requested. */
13491 	uint16_t	num_rx_key_ctxs;
13492 } __rte_packed;
13493 
13494 /* hwrm_func_vf_cfg_output (size:128b/16B) */
13495 struct hwrm_func_vf_cfg_output {
13496 	/* The specific error status for the command. */
13497 	uint16_t	error_code;
13498 	/* The HWRM command request type. */
13499 	uint16_t	req_type;
13500 	/* The sequence ID from the original command. */
13501 	uint16_t	seq_id;
13502 	/* The length of the response data in number of bytes. */
13503 	uint16_t	resp_len;
13504 	uint8_t	unused_0[7];
13505 	/*
13506 	 * This field is used in Output records to indicate that the output
13507 	 * is completely written to RAM.  This field should be read as '1'
13508 	 * to indicate that the output has been completely written.
13509 	 * When writing a command completion or response to an internal processor,
13510 	 * the order of writes has to be such that this field is written last.
13511 	 */
13512 	uint8_t	valid;
13513 } __rte_packed;
13514 
13515 /*******************
13516  * hwrm_func_qcaps *
13517  *******************/
13518 
13519 
13520 /* hwrm_func_qcaps_input (size:192b/24B) */
13521 struct hwrm_func_qcaps_input {
13522 	/* The HWRM command request type. */
13523 	uint16_t	req_type;
13524 	/*
13525 	 * The completion ring to send the completion event on. This should
13526 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
13527 	 */
13528 	uint16_t	cmpl_ring;
13529 	/*
13530 	 * The sequence ID is used by the driver for tracking multiple
13531 	 * commands. This ID is treated as opaque data by the firmware and
13532 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
13533 	 */
13534 	uint16_t	seq_id;
13535 	/*
13536 	 * The target ID of the command:
13537 	 * * 0x0-0xFFF8 - The function ID
13538 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
13539 	 * * 0xFFFD - Reserved for user-space HWRM interface
13540 	 * * 0xFFFF - HWRM
13541 	 */
13542 	uint16_t	target_id;
13543 	/*
13544 	 * A physical address pointer pointing to a host buffer that the
13545 	 * command's response data will be written. This can be either a host
13546 	 * physical address (HPA) or a guest physical address (GPA) and must
13547 	 * point to a physically contiguous block of memory.
13548 	 */
13549 	uint64_t	resp_addr;
13550 	/*
13551 	 * Function ID of the function that is being queried.
13552 	 * 0xFF... (All Fs) if the query is for the requesting
13553 	 * function.
13554 	 * 0xFFFE (REQUESTING_PARENT_FID) This is a special FID
13555 	 * to be used by a trusted VF to query its parent PF.
13556 	 */
13557 	uint16_t	fid;
13558 	uint8_t	unused_0[6];
13559 } __rte_packed;
13560 
13561 /* hwrm_func_qcaps_output (size:768b/96B) */
13562 struct hwrm_func_qcaps_output {
13563 	/* The specific error status for the command. */
13564 	uint16_t	error_code;
13565 	/* The HWRM command request type. */
13566 	uint16_t	req_type;
13567 	/* The sequence ID from the original command. */
13568 	uint16_t	seq_id;
13569 	/* The length of the response data in number of bytes. */
13570 	uint16_t	resp_len;
13571 	/*
13572 	 * FID value.  This value is used to identify operations on the PCI
13573 	 * bus as belonging to a particular PCI function.
13574 	 */
13575 	uint16_t	fid;
13576 	/*
13577 	 * Port ID of port that this function is associated with.
13578 	 * Valid only for the PF.
13579 	 * 0xFF... (All Fs) if this function is not associated with
13580 	 * any port.
13581 	 * 0xFF... (All Fs) if this function is called from a VF.
13582 	 */
13583 	uint16_t	port_id;
13584 	uint32_t	flags;
13585 	/* If 1, then Push mode is supported on this function. */
13586 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_PUSH_MODE_SUPPORTED \
13587 		UINT32_C(0x1)
13588 	/*
13589 	 * If 1, then the global MSI-X auto-masking is enabled for the
13590 	 * device.
13591 	 */
13592 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_GLOBAL_MSIX_AUTOMASKING \
13593 		UINT32_C(0x2)
13594 	/*
13595 	 * If 1, then the Precision Time Protocol (PTP) processing
13596 	 * is supported on this function.
13597 	 * The HWRM should enable PTP on only a single Physical
13598 	 * Function (PF) per port.
13599 	 */
13600 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_PTP_SUPPORTED \
13601 		UINT32_C(0x4)
13602 	/*
13603 	 * If 1, then RDMA over Converged Ethernet (RoCE) v1
13604 	 * is supported on this function.
13605 	 */
13606 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ROCE_V1_SUPPORTED \
13607 		UINT32_C(0x8)
13608 	/*
13609 	 * If 1, then RDMA over Converged Ethernet (RoCE) v2
13610 	 * is supported on this function.
13611 	 */
13612 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ROCE_V2_SUPPORTED \
13613 		UINT32_C(0x10)
13614 	/*
13615 	 * If 1, then control and configuration of WoL magic packet
13616 	 * are supported on this function.
13617 	 */
13618 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_WOL_MAGICPKT_SUPPORTED \
13619 		UINT32_C(0x20)
13620 	/*
13621 	 * If 1, then control and configuration of bitmap pattern
13622 	 * packet are supported on this function.
13623 	 */
13624 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_WOL_BMP_SUPPORTED \
13625 		UINT32_C(0x40)
13626 	/*
13627 	 * If set to 1, then the control and configuration of rate limit
13628 	 * of an allocated TX ring on the queried function is supported.
13629 	 */
13630 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_TX_RING_RL_SUPPORTED \
13631 		UINT32_C(0x80)
13632 	/*
13633 	 * If 1, then control and configuration of minimum and
13634 	 * maximum bandwidths are supported on the queried function.
13635 	 */
13636 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_TX_BW_CFG_SUPPORTED \
13637 		UINT32_C(0x100)
13638 	/*
13639 	 * If the query is for a VF, then this flag shall be ignored.
13640 	 * If this query is for a PF and this flag is set to 1,
13641 	 * then the PF has the capability to set the rate limits
13642 	 * on the TX rings of its children VFs.
13643 	 * If this query is for a PF and this flag is set to 0, then
13644 	 * the PF does not have the capability to set the rate limits
13645 	 * on the TX rings of its children VFs.
13646 	 */
13647 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_VF_TX_RING_RL_SUPPORTED \
13648 		UINT32_C(0x200)
13649 	/*
13650 	 * If the query is for a VF, then this flag shall be ignored.
13651 	 * If this query is for a PF and this flag is set to 1,
13652 	 * then the PF has the capability to set the minimum and/or
13653 	 * maximum bandwidths for its children VFs.
13654 	 * If this query is for a PF and this flag is set to 0, then
13655 	 * the PF does not have the capability to set the minimum or
13656 	 * maximum bandwidths for its children VFs.
13657 	 */
13658 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_VF_BW_CFG_SUPPORTED \
13659 		UINT32_C(0x400)
13660 	/*
13661 	 * Standard TX Ring mode is used for the allocation of TX ring
13662 	 * and underlying scheduling resources that allow bandwidth
13663 	 * reservation and limit settings on the queried function.
13664 	 * If set to 1, then standard TX ring mode is supported
13665 	 * on the queried function.
13666 	 * If set to 0, then standard TX ring mode is not available
13667 	 * on the queried function.
13668 	 */
13669 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_STD_TX_RING_MODE_SUPPORTED \
13670 		UINT32_C(0x800)
13671 	/*
13672 	 * If the query is for a VF, then this flag shall be ignored,
13673 	 * If this query is for a PF and this flag is set to 1,
13674 	 * then the PF has the capability to detect GENEVE tunnel
13675 	 * flags.
13676 	 */
13677 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_GENEVE_TUN_FLAGS_SUPPORTED \
13678 		UINT32_C(0x1000)
13679 	/*
13680 	 * If the query is for a VF, then this flag shall be ignored,
13681 	 * If this query is for a PF and this flag is set to 1,
13682 	 * then the PF has the capability to detect NVGRE tunnel
13683 	 * flags.
13684 	 */
13685 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_NVGRE_TUN_FLAGS_SUPPORTED \
13686 		UINT32_C(0x2000)
13687 	/*
13688 	 * If the query is for a VF, then this flag shall be ignored,
13689 	 * If this query is for a PF and this flag is set to 1,
13690 	 * then the PF has the capability to detect GRE tunnel
13691 	 * flags.
13692 	 */
13693 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_GRE_TUN_FLAGS_SUPPORTED \
13694 		UINT32_C(0x4000)
13695 	/*
13696 	 * If the query is for a VF, then this flag shall be ignored,
13697 	 * If this query is for a PF and this flag is set to 1,
13698 	 * then the PF has the capability to detect MPLS tunnel
13699 	 * flags.
13700 	 */
13701 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_MPLS_TUN_FLAGS_SUPPORTED \
13702 		UINT32_C(0x8000)
13703 	/*
13704 	 * If the query is for a VF, then this flag shall be ignored,
13705 	 * If this query is for a PF and this flag is set to 1,
13706 	 * then the PF has the capability to support pcie stats.
13707 	 */
13708 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_PCIE_STATS_SUPPORTED \
13709 		UINT32_C(0x10000)
13710 	/*
13711 	 * If the query is for a VF, then this flag shall be ignored,
13712 	 * If this query is for a PF and this flag is set to 1,
13713 	 * then the PF has the capability to adopt the VF's belonging
13714 	 * to another PF.
13715 	 */
13716 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ADOPTED_PF_SUPPORTED \
13717 		UINT32_C(0x20000)
13718 	/*
13719 	 * If the query is for a VF, then this flag shall be ignored,
13720 	 * If this query is for a PF and this flag is set to 1,
13721 	 * then the PF has the administrative privilege to configure another PF
13722 	 */
13723 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ADMIN_PF_SUPPORTED \
13724 		UINT32_C(0x40000)
13725 	/*
13726 	 * If the query is for a VF, then this flag shall be ignored.
13727 	 * If this query is for a PF and this flag is set to 1, then
13728 	 * the PF will know that the firmware has the capability to track
13729 	 * the virtual link status.
13730 	 */
13731 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_LINK_ADMIN_STATUS_SUPPORTED \
13732 		UINT32_C(0x80000)
13733 	/*
13734 	 * If 1, then this function supports the push mode that uses
13735 	 * write combine buffers and the long inline tx buffer descriptor.
13736 	 */
13737 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_WCB_PUSH_MODE \
13738 		UINT32_C(0x100000)
13739 	/*
13740 	 * If 1, then FW has capability to allocate TX rings dynamically
13741 	 * in ring alloc even if PF reserved pool is zero.
13742 	 * This bit will be used only for PFs.
13743 	 */
13744 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_DYNAMIC_TX_RING_ALLOC \
13745 		UINT32_C(0x200000)
13746 	/*
13747 	 * When this bit is '1', it indicates that core firmware is
13748 	 * capable of Hot Reset.
13749 	 */
13750 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_HOT_RESET_CAPABLE \
13751 		UINT32_C(0x400000)
13752 	/*
13753 	 * This flag will be set to 1 by the FW if FW supports adapter error
13754 	 * recovery.
13755 	 */
13756 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ERROR_RECOVERY_CAPABLE \
13757 		UINT32_C(0x800000)
13758 	/*
13759 	 * If the query is for a VF, then this flag shall be ignored.
13760 	 * If this query is for a PF and this flag is set to 1, then
13761 	 * the PF has the capability to support extended stats.
13762 	 */
13763 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_STATS_SUPPORTED \
13764 		UINT32_C(0x1000000)
13765 	/*
13766 	 * If the query is for a VF, then this flag shall be ignored.
13767 	 * If this query is for a PF and this flag is set to 1, then host
13768 	 * must initiate reset or reload (or fastboot) the firmware image
13769 	 * upon detection of device shutdown state.
13770 	 */
13771 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ERR_RECOVER_RELOAD \
13772 		UINT32_C(0x2000000)
13773 	/*
13774 	 * If the query is for a VF, then this flag (always set to 0) shall
13775 	 * be ignored. If this query is for a PF and this flag is set to 1,
13776 	 * host, when registered for the default vnic change async event,
13777 	 * receives async notification whenever a default vnic state is
13778 	 * changed for any of child or adopted VFs.
13779 	 */
13780 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_NOTIFY_VF_DEF_VNIC_CHNG_SUPPORTED \
13781 		UINT32_C(0x4000000)
13782 	/* If set to 1, then the vlan acceleration for TX is disabled. */
13783 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_VLAN_ACCELERATION_TX_DISABLED \
13784 		UINT32_C(0x8000000)
13785 	/*
13786 	 * When this bit is '1', it indicates that core firmware supports
13787 	 * DBG_COREDUMP_XXX commands.
13788 	 */
13789 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_COREDUMP_CMD_SUPPORTED \
13790 		UINT32_C(0x10000000)
13791 	/*
13792 	 * When this bit is '1', it indicates that core firmware supports
13793 	 * DBG_CRASHDUMP_XXX commands.
13794 	 */
13795 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_CRASHDUMP_CMD_SUPPORTED \
13796 		UINT32_C(0x20000000)
13797 	/*
13798 	 * If the query is for a VF, then this flag should be ignored.
13799 	 * If the query is for a PF and this flag is set to 1, then
13800 	 * the PF has the capability to support retrieval of
13801 	 * rx_port_stats_ext_pfc_wd statistics (supported by the PFC
13802 	 * WatchDog feature) via the hwrm_port_qstats_ext_pfc_wd command.
13803 	 * If this flag is set to 1, only that (supported) command should
13804 	 * be used for retrieval of PFC related statistics (rather than
13805 	 * hwrm_port_qstats_ext command, which could previously be used).
13806 	 */
13807 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_PFC_WD_STATS_SUPPORTED \
13808 		UINT32_C(0x40000000)
13809 	/*
13810 	 * When this bit is '1', it indicates that core firmware supports
13811 	 * DBG_QCAPS command
13812 	 */
13813 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_DBG_QCAPS_CMD_SUPPORTED \
13814 		UINT32_C(0x80000000)
13815 	/*
13816 	 * This value is current MAC address configured for this
13817 	 * function. A value of 00-00-00-00-00-00 indicates no
13818 	 * MAC address is currently configured.
13819 	 */
13820 	uint8_t	mac_address[6];
13821 	/*
13822 	 * The maximum number of RSS/COS contexts that can be
13823 	 * allocated to the function.
13824 	 */
13825 	uint16_t	max_rsscos_ctx;
13826 	/*
13827 	 * The maximum number of completion rings that can be
13828 	 * allocated to the function.
13829 	 */
13830 	uint16_t	max_cmpl_rings;
13831 	/*
13832 	 * The maximum number of transmit rings that can be
13833 	 * allocated to the function.
13834 	 */
13835 	uint16_t	max_tx_rings;
13836 	/*
13837 	 * The maximum number of receive rings that can be
13838 	 * allocated to the function.
13839 	 */
13840 	uint16_t	max_rx_rings;
13841 	/*
13842 	 * The maximum number of L2 contexts that can be
13843 	 * allocated to the function.
13844 	 */
13845 	uint16_t	max_l2_ctxs;
13846 	/*
13847 	 * The maximum number of VNICs that can be
13848 	 * allocated to the function.
13849 	 */
13850 	uint16_t	max_vnics;
13851 	/*
13852 	 * The identifier for the first VF enabled on a PF. This
13853 	 * is valid only on the PF with SR-IOV enabled.
13854 	 * 0xFF... (All Fs) if this command is called on a PF with
13855 	 * SR-IOV disabled or on a VF.
13856 	 */
13857 	uint16_t	first_vf_id;
13858 	/*
13859 	 * The maximum number of VFs that can be
13860 	 * allocated to the function. This is valid only on the
13861 	 * PF with SR-IOV enabled. 0xFF... (All Fs) if this
13862 	 * command is called on a PF with SR-IOV disabled or
13863 	 * on a VF.
13864 	 */
13865 	uint16_t	max_vfs;
13866 	/*
13867 	 * The maximum number of statistic contexts that can be
13868 	 * allocated to the function.
13869 	 */
13870 	uint16_t	max_stat_ctx;
13871 	/*
13872 	 * The maximum number of Encapsulation records that can be
13873 	 * offloaded by this function.
13874 	 */
13875 	uint32_t	max_encap_records;
13876 	/*
13877 	 * The maximum number of decapsulation records that can
13878 	 * be offloaded by this function.
13879 	 */
13880 	uint32_t	max_decap_records;
13881 	/*
13882 	 * The maximum number of Exact Match (EM) flows that can be
13883 	 * offloaded by this function on the TX side.
13884 	 */
13885 	uint32_t	max_tx_em_flows;
13886 	/*
13887 	 * The maximum number of Wildcard Match (WM) flows that can
13888 	 * be offloaded by this function on the TX side.
13889 	 */
13890 	uint32_t	max_tx_wm_flows;
13891 	/*
13892 	 * The maximum number of Exact Match (EM) flows that can be
13893 	 * offloaded by this function on the RX side.
13894 	 */
13895 	uint32_t	max_rx_em_flows;
13896 	/*
13897 	 * The maximum number of Wildcard Match (WM) flows that can
13898 	 * be offloaded by this function on the RX side.
13899 	 */
13900 	uint32_t	max_rx_wm_flows;
13901 	/*
13902 	 * The maximum number of multicast filters that can
13903 	 * be supported by this function on the RX side.
13904 	 */
13905 	uint32_t	max_mcast_filters;
13906 	/*
13907 	 * The maximum value of flow_id that can be supported
13908 	 * in completion records.
13909 	 */
13910 	uint32_t	max_flow_id;
13911 	/*
13912 	 * The maximum number of HW ring groups that can be
13913 	 * supported on this function.
13914 	 */
13915 	uint32_t	max_hw_ring_grps;
13916 	/*
13917 	 * The maximum number of strict priority transmit rings
13918 	 * that can be allocated to the function.
13919 	 * This number indicates the maximum number of TX rings
13920 	 * that can be assigned strict priorities out of the
13921 	 * maximum number of TX rings that can be allocated
13922 	 * (max_tx_rings) to the function.
13923 	 */
13924 	uint16_t	max_sp_tx_rings;
13925 	/*
13926 	 * The maximum number of MSI-X vectors that may be allocated across
13927 	 * all VFs for the function. This is valid only on the PF with SR-IOV
13928 	 * enabled. Returns zero if this command is called on a PF with
13929 	 * SR-IOV disabled or on a VF.
13930 	 */
13931 	uint16_t	max_msix_vfs;
13932 	uint32_t	flags_ext;
13933 	/*
13934 	 * If 1, the device can be configured to set the ECN bits in the
13935 	 * IP header of received packets if the receive queue length
13936 	 * exceeds a given threshold.
13937 	 */
13938 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_ECN_MARK_SUPPORTED \
13939 		UINT32_C(0x1)
13940 	/*
13941 	 * If 1, the device can report the number of received packets
13942 	 * that it marked as having experienced congestion.
13943 	 */
13944 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_ECN_STATS_SUPPORTED \
13945 		UINT32_C(0x2)
13946 	/*
13947 	 * If 1, the device can report extended hw statistics (including
13948 	 * additional tpa statistics).
13949 	 */
13950 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_EXT_HW_STATS_SUPPORTED \
13951 		UINT32_C(0x4)
13952 	/*
13953 	 * If set to 1, then the core firmware has support to enable/
13954 	 * disable hot reset support for interface dynamically through
13955 	 * HWRM_FUNC_CFG.
13956 	 */
13957 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_HOT_RESET_IF_SUPPORT \
13958 		UINT32_C(0x8)
13959 	/* If 1, the proxy mode is supported on this function */
13960 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_PROXY_MODE_SUPPORT \
13961 		UINT32_C(0x10)
13962 	/*
13963 	 * If 1, the tx rings source interface override feature is supported
13964 	 * on this function.
13965 	 */
13966 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_TX_PROXY_SRC_INTF_OVERRIDE_SUPPORT \
13967 		UINT32_C(0x20)
13968 	/*
13969 	 * If 1, the device supports scheduler queues. SCHQs can be managed
13970 	 * using RING_SCHQ_ALLOC/CFG/FREE commands.
13971 	 */
13972 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_SCHQ_SUPPORTED \
13973 		UINT32_C(0x40)
13974 	/*
13975 	 * If set to 1, then this function supports the TX push mode that
13976 	 * uses ping-pong buffers from the push pages.
13977 	 */
13978 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_PPP_PUSH_MODE_SUPPORTED \
13979 		UINT32_C(0x80)
13980 	/*
13981 	 * If set to 1, then this function doesn't have the privilege to
13982 	 * configure the EVB mode of the port it uses.
13983 	 */
13984 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_EVB_MODE_CFG_NOT_SUPPORTED \
13985 		UINT32_C(0x100)
13986 	/*
13987 	 * If set to 1, then the HW and FW support the SoC packet DMA
13988 	 * datapath between SoC and NIC. This function can act as the
13989 	 * HWRM communication transport agent on behalf of the SoC SPD
13990 	 * software module. This capability is only advertised to the
13991 	 * SoC PFs.
13992 	 */
13993 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_SOC_SPD_SUPPORTED \
13994 		UINT32_C(0x200)
13995 	/*
13996 	 * If set to 1, then this function supports FW_LIVEPATCH for
13997 	 * firmware livepatch commands.
13998 	 */
13999 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_FW_LIVEPATCH_SUPPORTED \
14000 		UINT32_C(0x400)
14001 	/*
14002 	 * When this bit is '1', it indicates that core firmware is
14003 	 * capable of fast Reset.
14004 	 */
14005 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_FAST_RESET_CAPABLE \
14006 		UINT32_C(0x800)
14007 	/*
14008 	 * When this bit is '1', it indicates that firmware and hardware
14009 	 * are capable of updating tx_metadata via hwrm_ring_cfg command.
14010 	 */
14011 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_TX_METADATA_CFG_CAPABLE \
14012 		UINT32_C(0x1000)
14013 	/*
14014 	 * If set to 1, then the device can report the action
14015 	 * needed to activate set nvm options.
14016 	 */
14017 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_NVM_OPTION_ACTION_SUPPORTED \
14018 		UINT32_C(0x2000)
14019 	/*
14020 	 * When this bit is '1', it indicates that the BD metadata feature
14021 	 * is supported for this function.
14022 	 */
14023 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_BD_METADATA_SUPPORTED \
14024 		UINT32_C(0x4000)
14025 	/*
14026 	 * When this bit is '1', it indicates that the echo request feature
14027 	 * is supported for this function. If the driver registers for the
14028 	 * echo request asynchronous event, then the firmware can send an
14029 	 * unsolicited echo request to the driver and expect an echo
14030 	 * response.
14031 	 */
14032 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_ECHO_REQUEST_SUPPORTED \
14033 		UINT32_C(0x8000)
14034 	/*
14035 	 * When this bit is '1', it indicates that core firmware supports
14036 	 * NPAR 1.2 on this function.
14037 	 */
14038 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_NPAR_1_2_SUPPORTED \
14039 		UINT32_C(0x10000)
14040 	/* When this bit is '1', it indicates that PTM feature is supported. */
14041 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_PTP_PTM_SUPPORTED \
14042 		UINT32_C(0x20000)
14043 	/* When this bit is '1', it indicates that PPS feature is supported. */
14044 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_PTP_PPS_SUPPORTED \
14045 		UINT32_C(0x40000)
14046 	/*
14047 	 * When this bit is '1', it indicates that VF config. change
14048 	 * async event is supported on the parent PF if the async.
14049 	 * event is registered by the PF.
14050 	 */
14051 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_VF_CFG_ASYNC_FOR_PF_SUPPORTED \
14052 		UINT32_C(0x80000)
14053 	/*
14054 	 * When this bit is '1', the NIC supports configuration of
14055 	 * partition_min_bw and partition_max_bw. Configuration of a
14056 	 * minimum guaranteed bandwidth is only supported if the
14057 	 * min_bw_supported flag is also set.
14058 	 */
14059 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_PARTITION_BW_SUPPORTED \
14060 		UINT32_C(0x100000)
14061 	/*
14062 	 * When this bit is '1', the FW supports configuration of
14063 	 * PCP and TPID values of the default VLAN.
14064 	 */
14065 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_DFLT_VLAN_TPID_PCP_SUPPORTED \
14066 		UINT32_C(0x200000)
14067 	/* When this bit is '1', it indicates that HW and FW support KTLS. */
14068 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_KTLS_SUPPORTED \
14069 		UINT32_C(0x400000)
14070 	/*
14071 	 * When this bit is '1', the firmware supports HWRM_PORT_EP_TX_CFG
14072 	 * and HWRM_PORT_EP_TX_QCFG for endpoint rate control, and additions
14073 	 * to HWRM_QUEUE_GLOBAL_CFG and HWRM_QUEUE_GLOBAL_QCFG for receive
14074 	 * rate control. Configuration of a minimum guaranteed bandwidth
14075 	 * is only supported if the min_bw_supported flag is also set.
14076 	 */
14077 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_EP_RATE_CONTROL \
14078 		UINT32_C(0x800000)
14079 	/*
14080 	 * When this bit is '1', the firmware supports enforcement of
14081 	 * minimum guaranteed bandwidth. A minimum guaranteed bandwidth
14082 	 * could be configured for a partition or for an endpoint. Firmware
14083 	 * only sets this flag if one or both of the ep_rate_control and
14084 	 * partition_bw_supported flags are set.
14085 	 */
14086 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_MIN_BW_SUPPORTED \
14087 		UINT32_C(0x1000000)
14088 	/*
14089 	 * When this bit is '1', HW supports TX coalesced completion
14090 	 * records.
14091 	 */
14092 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_TX_COAL_CMPL_CAP \
14093 		UINT32_C(0x2000000)
14094 	/*
14095 	 * When this bit is '1', it indicates the FW has full support
14096 	 * for all backing store types with the BACKING_STORE_CFG/QCFG
14097 	 * V2 APIs.
14098 	 */
14099 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_BS_V2_SUPPORTED \
14100 		UINT32_C(0x4000000)
14101 	/*
14102 	 * When this bit is '1', it indicates the FW forces to use the
14103 	 * BACKING_STORE_CFG/QCFG V2 APIs.
14104 	 */
14105 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_BS_V2_REQUIRED \
14106 		UINT32_C(0x8000000)
14107 	/*
14108 	 * When this bit is '1', it indicates that FW will support a single
14109 	 * 64bit real time clock for PTP.
14110 	 */
14111 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_PTP_64BIT_RTC_SUPPORTED \
14112 		UINT32_C(0x10000000)
14113 	/*
14114 	 * When this bit is '1', it indicates the FW is capable of
14115 	 * supporting Doorbell Pacing.
14116 	 */
14117 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_DBR_PACING_SUPPORTED \
14118 		UINT32_C(0x20000000)
14119 	/*
14120 	 * When this bit is '1', it indicates the FW is capable of
14121 	 * supporting HW based doorbell drop recovery.
14122 	 */
14123 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_HW_DBR_DROP_RECOV_SUPPORTED \
14124 		UINT32_C(0x40000000)
14125 	/*
14126 	 * When this bit is '1', it indicates the driver can disable the CQ
14127 	 * overflow detection and can also skip the index updates for CQ.
14128 	 */
14129 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_DISABLE_CQ_OVERFLOW_DETECTION_SUPPORTED \
14130 		UINT32_C(0x80000000)
14131 	/* The maximum number of SCHQs supported by this device. */
14132 	uint8_t	max_schqs;
14133 	uint8_t	mpc_chnls_cap;
14134 	/*
14135 	 * When this bit is '1', it indicates that HW and firmware
14136 	 * supports the use of a MPC channel with destination set
14137 	 * to the TX crypto engine block.
14138 	 */
14139 	#define HWRM_FUNC_QCAPS_OUTPUT_MPC_CHNLS_CAP_TCE         UINT32_C(0x1)
14140 	/*
14141 	 * When this bit is '1', it indicates that HW and firmware
14142 	 * supports the use of a MPC channel with destination set
14143 	 * to the RX crypto engine block.
14144 	 */
14145 	#define HWRM_FUNC_QCAPS_OUTPUT_MPC_CHNLS_CAP_RCE         UINT32_C(0x2)
14146 	/*
14147 	 * When this bit is '1', it indicates that HW and firmware
14148 	 * supports the use of a MPC channel with destination set
14149 	 * to the TX configurable flow processing block.
14150 	 */
14151 	#define HWRM_FUNC_QCAPS_OUTPUT_MPC_CHNLS_CAP_TE_CFA      UINT32_C(0x4)
14152 	/*
14153 	 * When this bit is '1', it indicates that HW and firmware
14154 	 * supports the use of a MPC channel with destination set
14155 	 * to the RX configurable flow processing block.
14156 	 */
14157 	#define HWRM_FUNC_QCAPS_OUTPUT_MPC_CHNLS_CAP_RE_CFA      UINT32_C(0x8)
14158 	/*
14159 	 * When this bit is '1', it indicates that HW and firmware
14160 	 * supports the use of a MPC channel with destination set
14161 	 * to the primate processor block.
14162 	 */
14163 	#define HWRM_FUNC_QCAPS_OUTPUT_MPC_CHNLS_CAP_PRIMATE     UINT32_C(0x10)
14164 	/*
14165 	 * Maximum number of Key Contexts supported per HWRM
14166 	 * function call for allocating Key Contexts.
14167 	 */
14168 	uint16_t	max_key_ctxs_alloc;
14169 	uint32_t	flags_ext2;
14170 	/*
14171 	 * When this bit is '1', it indicates that FW will support
14172 	 * timestamping on all RX packets, not just PTP type packets.
14173 	 */
14174 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT2_RX_ALL_PKTS_TIMESTAMPS_SUPPORTED \
14175 		UINT32_C(0x1)
14176 	/* When this bit is '1', it indicates that HW and FW support QUIC. */
14177 	#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT2_QUIC_SUPPORTED \
14178 		UINT32_C(0x2)
14179 	uint16_t	tunnel_disable_flag;
14180 	/*
14181 	 * When this bit is '1', it indicates that the VXLAN parsing
14182 	 * is disabled in hardware
14183 	 */
14184 	#define HWRM_FUNC_QCAPS_OUTPUT_TUNNEL_DISABLE_FLAG_DISABLE_VXLAN \
14185 		UINT32_C(0x1)
14186 	/*
14187 	 * When this bit is '1', it indicates that the NGE parsing
14188 	 * is disabled in hardware
14189 	 */
14190 	#define HWRM_FUNC_QCAPS_OUTPUT_TUNNEL_DISABLE_FLAG_DISABLE_NGE \
14191 		UINT32_C(0x2)
14192 	/*
14193 	 * When this bit is '1', it indicates that the NVGRE parsing
14194 	 * is disabled in hardware
14195 	 */
14196 	#define HWRM_FUNC_QCAPS_OUTPUT_TUNNEL_DISABLE_FLAG_DISABLE_NVGRE \
14197 		UINT32_C(0x4)
14198 	/*
14199 	 * When this bit is '1', it indicates that the L2GRE parsing
14200 	 * is disabled in hardware
14201 	 */
14202 	#define HWRM_FUNC_QCAPS_OUTPUT_TUNNEL_DISABLE_FLAG_DISABLE_L2GRE \
14203 		UINT32_C(0x8)
14204 	/*
14205 	 * When this bit is '1', it indicates that the GRE parsing
14206 	 * is disabled in hardware
14207 	 */
14208 	#define HWRM_FUNC_QCAPS_OUTPUT_TUNNEL_DISABLE_FLAG_DISABLE_GRE \
14209 		UINT32_C(0x10)
14210 	/*
14211 	 * When this bit is '1', it indicates that the IPINIP parsing
14212 	 * is disabled in hardware
14213 	 */
14214 	#define HWRM_FUNC_QCAPS_OUTPUT_TUNNEL_DISABLE_FLAG_DISABLE_IPINIP \
14215 		UINT32_C(0x20)
14216 	/*
14217 	 * When this bit is '1', it indicates that the MPLS parsing
14218 	 * is disabled in hardware
14219 	 */
14220 	#define HWRM_FUNC_QCAPS_OUTPUT_TUNNEL_DISABLE_FLAG_DISABLE_MPLS \
14221 		UINT32_C(0x40)
14222 	/*
14223 	 * When this bit is '1', it indicates that the PPPOE parsing
14224 	 * is disabled in hardware
14225 	 */
14226 	#define HWRM_FUNC_QCAPS_OUTPUT_TUNNEL_DISABLE_FLAG_DISABLE_PPPOE \
14227 		UINT32_C(0x80)
14228 	uint8_t	unused_1;
14229 	/*
14230 	 * This field is used in Output records to indicate that the output
14231 	 * is completely written to RAM.  This field should be read as '1'
14232 	 * to indicate that the output has been completely written.
14233 	 * When writing a command completion or response to an internal
14234 	 * processor, the order of writes has to be such that this field is
14235 	 * written last.
14236 	 */
14237 	uint8_t	valid;
14238 } __rte_packed;
14239 
14240 /******************
14241  * hwrm_func_qcfg *
14242  ******************/
14243 
14244 
14245 /* hwrm_func_qcfg_input (size:192b/24B) */
14246 struct hwrm_func_qcfg_input {
14247 	/* The HWRM command request type. */
14248 	uint16_t	req_type;
14249 	/*
14250 	 * The completion ring to send the completion event on. This should
14251 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
14252 	 */
14253 	uint16_t	cmpl_ring;
14254 	/*
14255 	 * The sequence ID is used by the driver for tracking multiple
14256 	 * commands. This ID is treated as opaque data by the firmware and
14257 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
14258 	 */
14259 	uint16_t	seq_id;
14260 	/*
14261 	 * The target ID of the command:
14262 	 * * 0x0-0xFFF8 - The function ID
14263 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
14264 	 * * 0xFFFD - Reserved for user-space HWRM interface
14265 	 * * 0xFFFF - HWRM
14266 	 */
14267 	uint16_t	target_id;
14268 	/*
14269 	 * A physical address pointer pointing to a host buffer that the
14270 	 * command's response data will be written. This can be either a host
14271 	 * physical address (HPA) or a guest physical address (GPA) and must
14272 	 * point to a physically contiguous block of memory.
14273 	 */
14274 	uint64_t	resp_addr;
14275 	/*
14276 	 * Function ID of the function that is being queried.
14277 	 * 0xFF... (All Fs) if the query is for the requesting
14278 	 * function.
14279 	 * 0xFFFE (REQUESTING_PARENT_FID) This is a special FID
14280 	 * to be used by a trusted VF to query its parent PF.
14281 	 */
14282 	uint16_t	fid;
14283 	uint8_t	unused_0[6];
14284 } __rte_packed;
14285 
14286 /* hwrm_func_qcfg_output (size:896b/112B) */
14287 struct hwrm_func_qcfg_output {
14288 	/* The specific error status for the command. */
14289 	uint16_t	error_code;
14290 	/* The HWRM command request type. */
14291 	uint16_t	req_type;
14292 	/* The sequence ID from the original command. */
14293 	uint16_t	seq_id;
14294 	/* The length of the response data in number of bytes. */
14295 	uint16_t	resp_len;
14296 	/*
14297 	 * FID value.  This value is used to identify operations on the PCI
14298 	 * bus as belonging to a particular PCI function.
14299 	 */
14300 	uint16_t	fid;
14301 	/*
14302 	 * Port ID of port that this function is associated with.
14303 	 * 0xFF... (All Fs) if this function is not associated with
14304 	 * any port.
14305 	 */
14306 	uint16_t	port_id;
14307 	/*
14308 	 * This value is the current VLAN setting for this
14309 	 * function. The value of 0 for this field indicates
14310 	 * no priority tagging or VLAN is used.
14311 	 * This field's format is same as 802.1Q Tag's
14312 	 * Tag Control Information (TCI) format that includes both
14313 	 * Priority Code Point (PCP) and VLAN Identifier (VID).
14314 	 */
14315 	uint16_t	vlan;
14316 	uint16_t	flags;
14317 	/*
14318 	 * If 1, then magic packet based Out-Of-Box WoL is enabled on
14319 	 * the port associated with this function.
14320 	 */
14321 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_OOB_WOL_MAGICPKT_ENABLED \
14322 		UINT32_C(0x1)
14323 	/*
14324 	 * If 1, then bitmap pattern based Out-Of-Box WoL packet is enabled
14325 	 * on the port associated with this function.
14326 	 */
14327 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_OOB_WOL_BMP_ENABLED \
14328 		UINT32_C(0x2)
14329 	/*
14330 	 * If set to 1, then FW based DCBX agent is enabled and running on
14331 	 * the port associated with this function.
14332 	 * If set to 0, then DCBX agent is not running in the firmware.
14333 	 */
14334 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_FW_DCBX_AGENT_ENABLED \
14335 		UINT32_C(0x4)
14336 	/*
14337 	 * Standard TX Ring mode is used for the allocation of TX ring
14338 	 * and underlying scheduling resources that allow bandwidth
14339 	 * reservation and limit settings on the queried function.
14340 	 * If set to 1, then standard TX ring mode is enabled
14341 	 * on the queried function.
14342 	 * If set to 0, then the standard TX ring mode is disabled
14343 	 * on the queried function. In this extended TX ring resource
14344 	 * mode, the minimum and maximum bandwidth settings are not
14345 	 * supported to allow the allocation of TX rings to span multiple
14346 	 * scheduler nodes.
14347 	 */
14348 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_STD_TX_RING_MODE_ENABLED \
14349 		UINT32_C(0x8)
14350 	/*
14351 	 * If set to 1 then FW based LLDP agent is enabled and running on
14352 	 * the port associated with this function.
14353 	 * If set to 0 then the LLDP agent is not running in the firmware.
14354 	 */
14355 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_FW_LLDP_AGENT_ENABLED \
14356 		UINT32_C(0x10)
14357 	/*
14358 	 * If set to 1, then multi-host mode is active for this function.
14359 	 * The NIC is attached to two or more independent host systems
14360 	 * through two or more PCIe endpoints.
14361 	 * If set to 0, then multi-host mode is inactive for this function
14362 	 * or not applicable for this device.
14363 	 */
14364 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_MULTI_HOST \
14365 		UINT32_C(0x20)
14366 	/*
14367 	 * If the function that is being queried is a PF, then the HWRM shall
14368 	 * set this field to 0 and the HWRM client shall ignore this field.
14369 	 * If the function that is being queried is a VF, then the HWRM shall
14370 	 * set this field to 1 if the queried VF is trusted, otherwise the HWRM
14371 	 * shall set this field to 0.
14372 	 */
14373 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_TRUSTED_VF \
14374 		UINT32_C(0x40)
14375 	/*
14376 	 * If set to 1, then secure mode is enabled for this function or device.
14377 	 * If set to 0, then secure mode is disabled (or normal mode) for this
14378 	 * function or device.
14379 	 */
14380 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_SECURE_MODE_ENABLED \
14381 		UINT32_C(0x80)
14382 	/*
14383 	 * If set to 1, then this PF is enabled with a preboot driver that
14384 	 * requires access to the legacy L2 ring model and legacy 32b
14385 	 * doorbells. If set to 0, then this PF is not allowed to use
14386 	 * the legacy L2 rings. This feature is not allowed on VFs and
14387 	 * is only relevant for devices that require a context backing
14388 	 * store.
14389 	 */
14390 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_PREBOOT_LEGACY_L2_RINGS \
14391 		UINT32_C(0x100)
14392 	/*
14393 	 * If set to 1, then the firmware and all currently registered driver
14394 	 * instances support hot reset. The hot reset support will be updated
14395 	 * dynamically based on the driver interface advertisement.
14396 	 * If set to 0, then the adapter is not currently able to initiate
14397 	 * hot reset.
14398 	 */
14399 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_HOT_RESET_ALLOWED \
14400 		UINT32_C(0x200)
14401 	/*
14402 	 * If set to 1, then the PPP tx push mode is enabled for all the
14403 	 * reserved TX rings of this function. If set to 0, then PPP tx push
14404 	 * mode is disabled for all the reserved TX rings of this function.
14405 	 */
14406 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_PPP_PUSH_MODE_ENABLED \
14407 		UINT32_C(0x400)
14408 	/*
14409 	 * If set to 1, then the firmware will notify driver using async
14410 	 * event when a ring is disabled due to a Hardware error.
14411 	 */
14412 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_RING_MONITOR_ENABLED \
14413 		UINT32_C(0x800)
14414 	/*
14415 	 * If set to 1, then the firmware and all currently registered driver
14416 	 * instances support fast reset. The fast reset support will be
14417 	 * updated dynamically based on the driver interface advertisement.
14418 	 * If set to 0, then the adapter is not currently able to initiate
14419 	 * fast reset.
14420 	 */
14421 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_FAST_RESET_ALLOWED \
14422 		UINT32_C(0x1000)
14423 	/*
14424 	 * If set to 1, then multi-root mode is active for this function.
14425 	 * The NIC is attached to a single host with a single operating
14426 	 * system, but through two or more PCIe endpoints.
14427 	 * If set to 0, then multi-root mode is inactive for this function
14428 	 * or not applicable for this device.
14429 	 */
14430 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_MULTI_ROOT \
14431 		UINT32_C(0x2000)
14432 	/*
14433 	 * This flag indicates RDMA support for child VFS of
14434 	 * a physical function.
14435 	 * If set to 1, RoCE is supported on all child VFs.
14436 	 * If set to 0, RoCE is disabled on all child VFs.
14437 	 */
14438 	#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_ENABLE_RDMA_SRIOV \
14439 		UINT32_C(0x4000)
14440 	/*
14441 	 * This value is current MAC address configured for this
14442 	 * function. A value of 00-00-00-00-00-00 indicates no
14443 	 * MAC address is currently configured.
14444 	 */
14445 	uint8_t	mac_address[6];
14446 	/*
14447 	 * This value is current PCI ID of this
14448 	 * function. If ARI is enabled, then it is
14449 	 * Bus Number (8b):Function Number(8b). Otherwise, it is
14450 	 * Bus Number (8b):Device Number (4b):Function Number(4b).
14451 	 * If multi-host mode is active, the 4 lsb will indicate
14452 	 * the PF index for this function.
14453 	 */
14454 	uint16_t	pci_id;
14455 	/*
14456 	 * The number of RSS/COS contexts currently
14457 	 * allocated to the function.
14458 	 */
14459 	uint16_t	alloc_rsscos_ctx;
14460 	/*
14461 	 * The number of completion rings currently allocated to
14462 	 * the function. This does not include the rings allocated
14463 	 * to any children functions if any.
14464 	 */
14465 	uint16_t	alloc_cmpl_rings;
14466 	/*
14467 	 * The number of transmit rings currently allocated to
14468 	 * the function. This does not include the rings allocated
14469 	 * to any children functions if any.
14470 	 */
14471 	uint16_t	alloc_tx_rings;
14472 	/*
14473 	 * The number of receive rings currently allocated to
14474 	 * the function. This does not include the rings allocated
14475 	 * to any children functions if any.
14476 	 */
14477 	uint16_t	alloc_rx_rings;
14478 	/* The allocated number of L2 contexts to the function. */
14479 	uint16_t	alloc_l2_ctx;
14480 	/* The allocated number of vnics to the function. */
14481 	uint16_t	alloc_vnics;
14482 	/*
14483 	 * The maximum transmission unit of the function
14484 	 * configured by the admin pf.
14485 	 * If the reported mtu value is non-zero then it will be used for the
14486 	 * rings allocated on this function, otherwise the default
14487 	 * value is used if ring MTU is not specified.
14488 	 * The driver cannot use any MTU bigger than this value
14489 	 * if it is non-zero.
14490 	 */
14491 	uint16_t	admin_mtu;
14492 	/*
14493 	 * The maximum receive unit of the function.
14494 	 * For vnics allocated on this function, this default
14495 	 * value is used if vnic MRU is not specified.
14496 	 */
14497 	uint16_t	mru;
14498 	/* The statistics context assigned to a function. */
14499 	uint16_t	stat_ctx_id;
14500 	/*
14501 	 * The HWRM shall return Unknown value for this field
14502 	 * when this command is used to query VF's configuration.
14503 	 */
14504 	uint8_t	port_partition_type;
14505 	/* Single physical function */
14506 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_SPF     UINT32_C(0x0)
14507 	/* Multiple physical functions */
14508 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_MPFS    UINT32_C(0x1)
14509 	/* Network Partitioning 1.0 */
14510 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_NPAR1_0 UINT32_C(0x2)
14511 	/* Network Partitioning 1.5 */
14512 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_NPAR1_5 UINT32_C(0x3)
14513 	/* Network Partitioning 2.0 */
14514 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_NPAR2_0 UINT32_C(0x4)
14515 	/* Network Partitioning 1.2 */
14516 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_NPAR1_2 UINT32_C(0x5)
14517 	/* Unknown */
14518 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_UNKNOWN \
14519 		UINT32_C(0xff)
14520 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_LAST \
14521 		HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_UNKNOWN
14522 	/*
14523 	 * This field will indicate number of physical functions on this port_partition.
14524 	 * HWRM shall return unavail (i.e. value of 0) for this field
14525 	 * when this command is used to query VF's configuration or
14526 	 * from older firmware that doesn't support this field.
14527 	 */
14528 	uint8_t	port_pf_cnt;
14529 	/* number of PFs is not available */
14530 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PF_CNT_UNAVAIL UINT32_C(0x0)
14531 	#define HWRM_FUNC_QCFG_OUTPUT_PORT_PF_CNT_LAST \
14532 		HWRM_FUNC_QCFG_OUTPUT_PORT_PF_CNT_UNAVAIL
14533 	/*
14534 	 * The default VNIC ID assigned to a function that is
14535 	 * being queried.
14536 	 */
14537 	uint16_t	dflt_vnic_id;
14538 	uint16_t	max_mtu_configured;
14539 	/*
14540 	 * Minimum guaranteed transmit bandwidth for this function. When
14541 	 * specified for a PF, does not affect traffic from the PF's child VFs.
14542 	 * A value of 0 indicates the minimum bandwidth is not configured.
14543 	 */
14544 	uint32_t	min_bw;
14545 	/* The bandwidth value. */
14546 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_MASK \
14547 		UINT32_C(0xfffffff)
14548 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_SFT              0
14549 	/* The granularity of the value (bits or bytes). */
14550 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE \
14551 		UINT32_C(0x10000000)
14552 	/* Value is in bits. */
14553 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_BITS \
14554 		(UINT32_C(0x0) << 28)
14555 	/* Value is in bytes. */
14556 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_BYTES \
14557 		(UINT32_C(0x1) << 28)
14558 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_LAST \
14559 		HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_BYTES
14560 	/* bw_value_unit is 3 b */
14561 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_MASK \
14562 		UINT32_C(0xe0000000)
14563 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_SFT         29
14564 	/* Value is in Mb or MB (base 10). */
14565 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_MEGA \
14566 		(UINT32_C(0x0) << 29)
14567 	/* Value is in Kb or KB (base 10). */
14568 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_KILO \
14569 		(UINT32_C(0x2) << 29)
14570 	/* Value is in bits or bytes. */
14571 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_BASE \
14572 		(UINT32_C(0x4) << 29)
14573 	/* Value is in Gb or GB (base 10). */
14574 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_GIGA \
14575 		(UINT32_C(0x6) << 29)
14576 	/* Value is in 1/100th of a percentage of link bandwidth. */
14577 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
14578 		(UINT32_C(0x1) << 29)
14579 	/* Invalid unit */
14580 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_INVALID \
14581 		(UINT32_C(0x7) << 29)
14582 	#define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_LAST \
14583 		HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_INVALID
14584 	/*
14585 	 * Maximum transmit rate for this function. When specified for a PF,
14586 	 * does not affect traffic from the PF's child VFs.
14587 	 * A value of 0 indicates that the maximum bandwidth is not configured.
14588 	 */
14589 	uint32_t	max_bw;
14590 	/* The bandwidth value. */
14591 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_MASK \
14592 		UINT32_C(0xfffffff)
14593 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_SFT              0
14594 	/* The granularity of the value (bits or bytes). */
14595 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE \
14596 		UINT32_C(0x10000000)
14597 	/* Value is in bits. */
14598 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_BITS \
14599 		(UINT32_C(0x0) << 28)
14600 	/* Value is in bytes. */
14601 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_BYTES \
14602 		(UINT32_C(0x1) << 28)
14603 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_LAST \
14604 		HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_BYTES
14605 	/* bw_value_unit is 3 b */
14606 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_MASK \
14607 		UINT32_C(0xe0000000)
14608 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_SFT         29
14609 	/* Value is in Mb or MB (base 10). */
14610 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_MEGA \
14611 		(UINT32_C(0x0) << 29)
14612 	/* Value is in Kb or KB (base 10). */
14613 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_KILO \
14614 		(UINT32_C(0x2) << 29)
14615 	/* Value is in bits or bytes. */
14616 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_BASE \
14617 		(UINT32_C(0x4) << 29)
14618 	/* Value is in Gb or GB (base 10). */
14619 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_GIGA \
14620 		(UINT32_C(0x6) << 29)
14621 	/* Value is in 1/100th of a percentage of link bandwidth. */
14622 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
14623 		(UINT32_C(0x1) << 29)
14624 	/* Invalid unit */
14625 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_INVALID \
14626 		(UINT32_C(0x7) << 29)
14627 	#define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_LAST \
14628 		HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_INVALID
14629 	/*
14630 	 * This value indicates the Edge virtual bridge mode for the
14631 	 * domain that this function belongs to.
14632 	 */
14633 	uint8_t	evb_mode;
14634 	/* No Edge Virtual Bridging (EVB) */
14635 	#define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_NO_EVB UINT32_C(0x0)
14636 	/* Virtual Ethernet Bridge (VEB) */
14637 	#define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_VEB    UINT32_C(0x1)
14638 	/* Virtual Ethernet Port Aggregator (VEPA) */
14639 	#define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_VEPA   UINT32_C(0x2)
14640 	#define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_LAST \
14641 		HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_VEPA
14642 	uint8_t	options;
14643 	/*
14644 	 * This value indicates the PCIE device cache line size.
14645 	 * The cache line size allows the DMA writes to terminate and
14646 	 * start at the cache boundary.
14647 	 */
14648 	#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_MASK \
14649 		UINT32_C(0x3)
14650 	#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SFT          0
14651 	/* Cache Line Size 64 bytes */
14652 	#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SIZE_64 \
14653 		UINT32_C(0x0)
14654 	/* Cache Line Size 128 bytes */
14655 	#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SIZE_128 \
14656 		UINT32_C(0x1)
14657 	#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_LAST \
14658 		HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SIZE_128
14659 	/* This value is the virtual link admin state setting. */
14660 	#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_MASK \
14661 		UINT32_C(0xc)
14662 	#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_SFT        2
14663 	/* Admin link state is in forced down mode. */
14664 	#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_DOWN \
14665 		(UINT32_C(0x0) << 2)
14666 	/* Admin link state is in forced up mode. */
14667 	#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_UP \
14668 		(UINT32_C(0x1) << 2)
14669 	/* Admin link state is in auto mode  - follows the physical link state. */
14670 	#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_AUTO \
14671 		(UINT32_C(0x2) << 2)
14672 	#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_LAST \
14673 		HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_AUTO
14674 	/* Reserved for future. */
14675 	#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_RSVD_MASK \
14676 		UINT32_C(0xf0)
14677 	#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_RSVD_SFT                    4
14678 	/*
14679 	 * The number of VFs that are allocated to the function.
14680 	 * This is valid only on the PF with SR-IOV enabled.
14681 	 * 0xFF... (All Fs) if this command is called on a PF with
14682 	 * SR-IOV disabled or on a VF.
14683 	 */
14684 	uint16_t	alloc_vfs;
14685 	/*
14686 	 * The number of allocated multicast filters for this
14687 	 * function on the RX side.
14688 	 */
14689 	uint32_t	alloc_mcast_filters;
14690 	/*
14691 	 * The number of allocated HW ring groups for this
14692 	 * function.
14693 	 */
14694 	uint32_t	alloc_hw_ring_grps;
14695 	/*
14696 	 * The number of strict priority transmit rings out of
14697 	 * currently allocated TX rings to the function
14698 	 * (alloc_tx_rings).
14699 	 */
14700 	uint16_t	alloc_sp_tx_rings;
14701 	/*
14702 	 * The number of statistics contexts
14703 	 * currently reserved for the function.
14704 	 */
14705 	uint16_t	alloc_stat_ctx;
14706 	/*
14707 	 * This field specifies how many NQs are reserved for the PF.
14708 	 * Remaining NQs that belong to the PF are available for VFs.
14709 	 * Once a PF has created VFs, it cannot change how many NQs are
14710 	 * reserved for itself (since the NQs must be contiguous in HW).
14711 	 */
14712 	uint16_t	alloc_msix;
14713 	/*
14714 	 * The number of registered VF’s associated with the PF. This field
14715 	 * should be ignored when the request received on the VF interface.
14716 	 * This field will be updated on the PF interface to initiate
14717 	 * the unregister request on PF in the HOT Reset Process.
14718 	 */
14719 	uint16_t	registered_vfs;
14720 	/*
14721 	 * The size of the doorbell BAR in KBytes reserved for L2 including
14722 	 * any area that is shared between L2 and RoCE.  The L2 driver
14723 	 * should only map the L2 portion of the doorbell BAR.  Any rounding
14724 	 * of the BAR size to the native CPU page size should be performed
14725 	 * by the driver.  If the value is zero, no special partitioning
14726 	 * of the doorbell BAR between L2 and RoCE is required.
14727 	 */
14728 	uint16_t	l2_doorbell_bar_size_kb;
14729 	uint8_t	unused_1;
14730 	/*
14731 	 * For backward compatibility this field must be set to 1.
14732 	 * Older drivers might look for this field to be 1 before
14733 	 * processing the message.
14734 	 */
14735 	uint8_t	always_1;
14736 	/*
14737 	 * This GRC address location is used by the Host driver interfaces to poll
14738 	 * the adapter ready state to re-initiate the registration process again
14739 	 * after receiving the RESET Notify event.
14740 	 */
14741 	uint32_t	reset_addr_poll;
14742 	/*
14743 	 * This field specifies legacy L2 doorbell size in KBytes. Drivers should use
14744 	 * this value to find out the doorbell page offset from the BAR.
14745 	 */
14746 	uint16_t	legacy_l2_db_size_kb;
14747 	uint16_t	svif_info;
14748 	/*
14749 	 * This field specifies the source virtual interface of the function being
14750 	 * queried. Drivers can use this to program svif field in the L2 context
14751 	 * table
14752 	 */
14753 	#define HWRM_FUNC_QCFG_OUTPUT_SVIF_INFO_SVIF_MASK      UINT32_C(0x7fff)
14754 	#define HWRM_FUNC_QCFG_OUTPUT_SVIF_INFO_SVIF_SFT       0
14755 	/* This field specifies whether svif is valid or not */
14756 	#define HWRM_FUNC_QCFG_OUTPUT_SVIF_INFO_SVIF_VALID     UINT32_C(0x8000)
14757 	uint8_t	mpc_chnls;
14758 	/*
14759 	 * When this bit is '1', it indicates that a MPC channel with
14760 	 * destination set to the TX crypto engine block is enabled.
14761 	 */
14762 	#define HWRM_FUNC_QCFG_OUTPUT_MPC_CHNLS_TCE_ENABLED \
14763 		UINT32_C(0x1)
14764 	/*
14765 	 * When this bit is '1', it indicates that a MPC channel with
14766 	 * destination set to the RX crypto engine block is enabled.
14767 	 */
14768 	#define HWRM_FUNC_QCFG_OUTPUT_MPC_CHNLS_RCE_ENABLED \
14769 		UINT32_C(0x2)
14770 	/*
14771 	 * When this bit is '1', it indicates that a MPC channel with
14772 	 * destination set to the TX configurable flow processing block is
14773 	 * enabled.
14774 	 */
14775 	#define HWRM_FUNC_QCFG_OUTPUT_MPC_CHNLS_TE_CFA_ENABLED \
14776 		UINT32_C(0x4)
14777 	/*
14778 	 * When this bit is '1', it indicates that a MPC channel with
14779 	 * destination set to the RX configurable flow processing block is
14780 	 * enabled.
14781 	 */
14782 	#define HWRM_FUNC_QCFG_OUTPUT_MPC_CHNLS_RE_CFA_ENABLED \
14783 		UINT32_C(0x8)
14784 	/*
14785 	 * When this bit is '1', it indicates that a MPC channel with
14786 	 * destination set to the primate processor block is enabled.
14787 	 */
14788 	#define HWRM_FUNC_QCFG_OUTPUT_MPC_CHNLS_PRIMATE_ENABLED \
14789 		UINT32_C(0x10)
14790 	uint8_t	unused_2[3];
14791 	/*
14792 	 * Minimum guaranteed bandwidth for the network partition made up
14793 	 * of the caller physical function and all its child virtual
14794 	 * functions. The rate is specified as a percentage of the bandwidth
14795 	 * of the link the partition is associated with. A value of 0
14796 	 * indicates that no minimum bandwidth is configured.
14797 	 * The format of this field is defined to match min_bw, even though
14798 	 * the partition minimum rate is always specified as a percentage.
14799 	 */
14800 	uint32_t	partition_min_bw;
14801 	/* The bandwidth value. */
14802 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MIN_BW_BW_VALUE_MASK \
14803 		UINT32_C(0xfffffff)
14804 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MIN_BW_BW_VALUE_SFT \
14805 		0
14806 	/*
14807 	 * The granularity of the value (bits or bytes). Firmware never sets
14808 	 * this field.
14809 	 */
14810 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MIN_BW_SCALE \
14811 		UINT32_C(0x10000000)
14812 	/* Value is in bits. */
14813 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MIN_BW_SCALE_BITS \
14814 		(UINT32_C(0x0) << 28)
14815 	/* Value is in bytes. */
14816 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MIN_BW_SCALE_BYTES \
14817 		(UINT32_C(0x1) << 28)
14818 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MIN_BW_SCALE_LAST \
14819 		HWRM_FUNC_QCFG_OUTPUT_PARTITION_MIN_BW_SCALE_BYTES
14820 	/* Always percentage of link bandwidth. */
14821 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MIN_BW_BW_VALUE_UNIT_MASK \
14822 		UINT32_C(0xe0000000)
14823 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MIN_BW_BW_VALUE_UNIT_SFT \
14824 		29
14825 	/* Bandwidth value is in hundredths of a percent of link bandwidth. */
14826 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
14827 		(UINT32_C(0x1) << 29)
14828 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MIN_BW_BW_VALUE_UNIT_LAST \
14829 		HWRM_FUNC_QCFG_OUTPUT_PARTITION_MIN_BW_BW_VALUE_UNIT_PERCENT1_100
14830 	/*
14831 	 * The maximum bandwidth that may be used by the network partition
14832 	 * made up of the caller physical function and all its child virtual
14833 	 * functions. The rate is specified as a percentage of the bandwidth
14834 	 * of the link the partition is associated with. A value of 0
14835 	 * indicates that no maximum bandwidth is configured.
14836 	 * The format of this field is defined to match max_bw, even though
14837 	 * the partition bandwidth must be specified as a percentage.
14838 	 */
14839 	uint32_t	partition_max_bw;
14840 	/* The bandwidth value. */
14841 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MAX_BW_BW_VALUE_MASK \
14842 		UINT32_C(0xfffffff)
14843 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MAX_BW_BW_VALUE_SFT \
14844 		0
14845 	/*
14846 	 * The granularity of the value (bits or bytes). Firmware never sets
14847 	 * this field.
14848 	 */
14849 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MAX_BW_SCALE \
14850 		UINT32_C(0x10000000)
14851 	/* Value is in bits. */
14852 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MAX_BW_SCALE_BITS \
14853 		(UINT32_C(0x0) << 28)
14854 	/* Value is in bytes. */
14855 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MAX_BW_SCALE_BYTES \
14856 		(UINT32_C(0x1) << 28)
14857 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MAX_BW_SCALE_LAST \
14858 		HWRM_FUNC_QCFG_OUTPUT_PARTITION_MAX_BW_SCALE_BYTES
14859 	/* Always a percentage of link bandwidth. */
14860 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MAX_BW_BW_VALUE_UNIT_MASK \
14861 		UINT32_C(0xe0000000)
14862 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MAX_BW_BW_VALUE_UNIT_SFT \
14863 		29
14864 	/* Value is in hundredths of a percent of link bandwidth. */
14865 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
14866 		(UINT32_C(0x1) << 29)
14867 	#define HWRM_FUNC_QCFG_OUTPUT_PARTITION_MAX_BW_BW_VALUE_UNIT_LAST \
14868 		HWRM_FUNC_QCFG_OUTPUT_PARTITION_MAX_BW_BW_VALUE_UNIT_PERCENT1_100
14869 	/*
14870 	 * The maximum transmission unit of the function
14871 	 * configured by the host pf/vf.
14872 	 * If the reported mtu value is non-zero then it will be used for the
14873 	 * rings allocated on this function, otherwise the default
14874 	 * value is used if ring MTU is not specified.
14875 	 */
14876 	uint16_t	host_mtu;
14877 	/* Number of Tx Key Contexts allocated. */
14878 	uint16_t	alloc_tx_key_ctxs;
14879 	/* Number of Rx Key Contexts allocated. */
14880 	uint16_t	alloc_rx_key_ctxs;
14881 	uint8_t	unused_3[5];
14882 	/*
14883 	 * This field is used in Output records to indicate that the output
14884 	 * is completely written to RAM.  This field should be read as '1'
14885 	 * to indicate that the output has been completely written.
14886 	 * When writing a command completion or response to an internal processor,
14887 	 * the order of writes has to be such that this field is written last.
14888 	 */
14889 	uint8_t	valid;
14890 } __rte_packed;
14891 
14892 /*****************
14893  * hwrm_func_cfg *
14894  *****************/
14895 
14896 
14897 /* hwrm_func_cfg_input (size:896b/112B) */
14898 struct hwrm_func_cfg_input {
14899 	/* The HWRM command request type. */
14900 	uint16_t	req_type;
14901 	/*
14902 	 * The completion ring to send the completion event on. This should
14903 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
14904 	 */
14905 	uint16_t	cmpl_ring;
14906 	/*
14907 	 * The sequence ID is used by the driver for tracking multiple
14908 	 * commands. This ID is treated as opaque data by the firmware and
14909 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
14910 	 */
14911 	uint16_t	seq_id;
14912 	/*
14913 	 * The target ID of the command:
14914 	 * * 0x0-0xFFF8 - The function ID
14915 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
14916 	 * * 0xFFFD - Reserved for user-space HWRM interface
14917 	 * * 0xFFFF - HWRM
14918 	 */
14919 	uint16_t	target_id;
14920 	/*
14921 	 * A physical address pointer pointing to a host buffer that the
14922 	 * command's response data will be written. This can be either a host
14923 	 * physical address (HPA) or a guest physical address (GPA) and must
14924 	 * point to a physically contiguous block of memory.
14925 	 */
14926 	uint64_t	resp_addr;
14927 	/*
14928 	 * Function ID of the function that is being
14929 	 * configured.
14930 	 * If set to 0xFF... (All Fs), then the configuration is
14931 	 * for the requesting function.
14932 	 */
14933 	uint16_t	fid;
14934 	/*
14935 	 * This field specifies how many NQs will be reserved for the PF.
14936 	 * Remaining NQs that belong to the PF become available for VFs.
14937 	 * Once a PF has created VFs, it cannot change how many NQs are
14938 	 * reserved for itself (since the NQs must be contiguous in HW).
14939 	 */
14940 	uint16_t	num_msix;
14941 	uint32_t	flags;
14942 	/*
14943 	 * When this bit is '1', the function is disabled with
14944 	 * source MAC address check.
14945 	 * This is an anti-spoofing check. If this flag is set,
14946 	 * then the function shall be configured to disallow
14947 	 * transmission of frames with the source MAC address that
14948 	 * is configured for this function.
14949 	 */
14950 	#define HWRM_FUNC_CFG_INPUT_FLAGS_SRC_MAC_ADDR_CHECK_DISABLE \
14951 		UINT32_C(0x1)
14952 	/*
14953 	 * When this bit is '1', the function is enabled with
14954 	 * source MAC address check.
14955 	 * This is an anti-spoofing check. If this flag is set,
14956 	 * then the function shall be configured to allow
14957 	 * transmission of frames with the source MAC address that
14958 	 * is configured for this function.
14959 	 */
14960 	#define HWRM_FUNC_CFG_INPUT_FLAGS_SRC_MAC_ADDR_CHECK_ENABLE \
14961 		UINT32_C(0x2)
14962 	/* reserved. */
14963 	#define HWRM_FUNC_CFG_INPUT_FLAGS_RSVD_MASK \
14964 		UINT32_C(0x1fc)
14965 	#define HWRM_FUNC_CFG_INPUT_FLAGS_RSVD_SFT                       2
14966 	/*
14967 	 * Standard TX Ring mode is used for the allocation of TX ring
14968 	 * and underlying scheduling resources that allow bandwidth
14969 	 * reservation and limit settings on the queried function.
14970 	 * If set to 1, then standard TX ring mode is requested to be
14971 	 * enabled on the function being configured.
14972 	 */
14973 	#define HWRM_FUNC_CFG_INPUT_FLAGS_STD_TX_RING_MODE_ENABLE \
14974 		UINT32_C(0x200)
14975 	/*
14976 	 * Standard TX Ring mode is used for the allocation of TX ring
14977 	 * and underlying scheduling resources that allow bandwidth
14978 	 * reservation and limit settings on the queried function.
14979 	 * If set to 1, then the standard TX ring mode is requested to
14980 	 * be disabled on the function being configured. In this extended
14981 	 * TX ring resource mode, the minimum and maximum bandwidth settings
14982 	 * are not supported to allow the allocation of TX rings to
14983 	 * span multiple scheduler nodes.
14984 	 */
14985 	#define HWRM_FUNC_CFG_INPUT_FLAGS_STD_TX_RING_MODE_DISABLE \
14986 		UINT32_C(0x400)
14987 	/*
14988 	 * If this bit is set, virtual mac address configured
14989 	 * in this command will be persistent over warm boot.
14990 	 */
14991 	#define HWRM_FUNC_CFG_INPUT_FLAGS_VIRT_MAC_PERSIST \
14992 		UINT32_C(0x800)
14993 	/*
14994 	 * This bit only applies to the VF. If this bit is set, the statistic
14995 	 * context counters will not be cleared when the statistic context is freed
14996 	 * or a function reset is called on VF. This bit will be cleared when the PF
14997 	 * is unloaded or a function reset is called on the PF.
14998 	 */
14999 	#define HWRM_FUNC_CFG_INPUT_FLAGS_NO_AUTOCLEAR_STATISTIC \
15000 		UINT32_C(0x1000)
15001 	/*
15002 	 * This bit requests that the firmware test to see if all the assets
15003 	 * requested in this command (i.e. number of TX rings) are available.
15004 	 * The firmware will return an error if the requested assets are
15005 	 * not available. The firwmare will NOT reserve the assets if they
15006 	 * are available.
15007 	 */
15008 	#define HWRM_FUNC_CFG_INPUT_FLAGS_TX_ASSETS_TEST \
15009 		UINT32_C(0x2000)
15010 	/*
15011 	 * This bit requests that the firmware test to see if all the assets
15012 	 * requested in this command (i.e. number of RX rings) are available.
15013 	 * The firmware will return an error if the requested assets are
15014 	 * not available. The firwmare will NOT reserve the assets if they
15015 	 * are available.
15016 	 */
15017 	#define HWRM_FUNC_CFG_INPUT_FLAGS_RX_ASSETS_TEST \
15018 		UINT32_C(0x4000)
15019 	/*
15020 	 * This bit requests that the firmware test to see if all the assets
15021 	 * requested in this command (i.e. number of CMPL rings) are available.
15022 	 * The firmware will return an error if the requested assets are
15023 	 * not available. The firwmare will NOT reserve the assets if they
15024 	 * are available.
15025 	 */
15026 	#define HWRM_FUNC_CFG_INPUT_FLAGS_CMPL_ASSETS_TEST \
15027 		UINT32_C(0x8000)
15028 	/*
15029 	 * This bit requests that the firmware test to see if all the assets
15030 	 * requested in this command (i.e. number of RSS ctx) are available.
15031 	 * The firmware will return an error if the requested assets are
15032 	 * not available. The firwmare will NOT reserve the assets if they
15033 	 * are available.
15034 	 */
15035 	#define HWRM_FUNC_CFG_INPUT_FLAGS_RSSCOS_CTX_ASSETS_TEST \
15036 		UINT32_C(0x10000)
15037 	/*
15038 	 * This bit requests that the firmware test to see if all the assets
15039 	 * requested in this command (i.e. number of ring groups) are available.
15040 	 * The firmware will return an error if the requested assets are
15041 	 * not available. The firwmare will NOT reserve the assets if they
15042 	 * are available.
15043 	 */
15044 	#define HWRM_FUNC_CFG_INPUT_FLAGS_RING_GRP_ASSETS_TEST \
15045 		UINT32_C(0x20000)
15046 	/*
15047 	 * This bit requests that the firmware test to see if all the assets
15048 	 * requested in this command (i.e. number of stat ctx) are available.
15049 	 * The firmware will return an error if the requested assets are
15050 	 * not available. The firwmare will NOT reserve the assets if they
15051 	 * are available.
15052 	 */
15053 	#define HWRM_FUNC_CFG_INPUT_FLAGS_STAT_CTX_ASSETS_TEST \
15054 		UINT32_C(0x40000)
15055 	/*
15056 	 * This bit requests that the firmware test to see if all the assets
15057 	 * requested in this command (i.e. number of VNICs) are available.
15058 	 * The firmware will return an error if the requested assets are
15059 	 * not available. The firwmare will NOT reserve the assets if they
15060 	 * are available.
15061 	 */
15062 	#define HWRM_FUNC_CFG_INPUT_FLAGS_VNIC_ASSETS_TEST \
15063 		UINT32_C(0x80000)
15064 	/*
15065 	 * This bit requests that the firmware test to see if all the assets
15066 	 * requested in this command (i.e. number of L2 ctx) are available.
15067 	 * The firmware will return an error if the requested assets are
15068 	 * not available. The firwmare will NOT reserve the assets if they
15069 	 * are available.
15070 	 */
15071 	#define HWRM_FUNC_CFG_INPUT_FLAGS_L2_CTX_ASSETS_TEST \
15072 		UINT32_C(0x100000)
15073 	/*
15074 	 * This configuration change can be initiated by a PF driver. This
15075 	 * configuration request shall be targeted to a VF. From local host
15076 	 * resident HWRM clients, only the parent PF driver shall be allowed
15077 	 * to initiate this change on one of its children VFs. If this bit is
15078 	 * set to 1, then the VF that is being configured is requested to be
15079 	 * trusted.
15080 	 */
15081 	#define HWRM_FUNC_CFG_INPUT_FLAGS_TRUSTED_VF_ENABLE \
15082 		UINT32_C(0x200000)
15083 	/*
15084 	 * When this bit it set, even if PF reserved pool size is zero,
15085 	 * FW will allow driver to create TX rings in ring alloc,
15086 	 * by reserving TX ring, S3 node dynamically.
15087 	 */
15088 	#define HWRM_FUNC_CFG_INPUT_FLAGS_DYNAMIC_TX_RING_ALLOC \
15089 		UINT32_C(0x400000)
15090 	/*
15091 	 * This bit requests that the firmware test to see if all the assets
15092 	 * requested in this command (i.e. number of NQ rings) are available.
15093 	 * The firmware will return an error if the requested assets are
15094 	 * not available. The firwmare will NOT reserve the assets if they
15095 	 * are available.
15096 	 */
15097 	#define HWRM_FUNC_CFG_INPUT_FLAGS_NQ_ASSETS_TEST \
15098 		UINT32_C(0x800000)
15099 	/*
15100 	 * This configuration change can be initiated by a PF driver. This
15101 	 * configuration request shall be targeted to a VF. From local host
15102 	 * resident HWRM clients, only the parent PF driver shall be allowed
15103 	 * to initiate this change on one of its children VFs. If this bit is
15104 	 * set to 1, then the VF that is being configured is requested to be
15105 	 * untrusted.
15106 	 */
15107 	#define HWRM_FUNC_CFG_INPUT_FLAGS_TRUSTED_VF_DISABLE \
15108 		UINT32_C(0x1000000)
15109 	/*
15110 	 * This bit is used by preboot drivers on a PF that require access
15111 	 * to the legacy L2 ring model and legacy 32b doorbells. This
15112 	 * feature is not allowed on VFs and is only relevant for devices
15113 	 * that require a context backing store.
15114 	 */
15115 	#define HWRM_FUNC_CFG_INPUT_FLAGS_PREBOOT_LEGACY_L2_RINGS \
15116 		UINT32_C(0x2000000)
15117 	/*
15118 	 * If this bit is set to 0, then the interface does not support hot
15119 	 * reset capability which it advertised with the hot_reset_support
15120 	 * flag in HWRM_FUNC_DRV_RGTR. If any of the function has set this
15121 	 * flag to 0, adapter cannot do the hot reset. In this state, if the
15122 	 * firmware receives a hot reset request, firmware must fail the
15123 	 * request. If this bit is set to 1, then interface is renabling the
15124 	 * hot reset capability.
15125 	 */
15126 	#define HWRM_FUNC_CFG_INPUT_FLAGS_HOT_RESET_IF_EN_DIS \
15127 		UINT32_C(0x4000000)
15128 	/*
15129 	 * If this bit is set to 1, the PF driver is requesting FW
15130 	 * to enable PPP TX PUSH feature on all the TX rings specified in
15131 	 * the num_tx_rings field. By default, the PPP TX push feature is
15132 	 * disabled for all the TX rings of the function. This flag is
15133 	 * ignored if num_tx_rings field is not specified or the function
15134 	 * doesn't support PPP tx push feature.
15135 	 */
15136 	#define HWRM_FUNC_CFG_INPUT_FLAGS_PPP_PUSH_MODE_ENABLE \
15137 		UINT32_C(0x8000000)
15138 	/*
15139 	 * If this bit is set to 1, the PF driver is requesting FW
15140 	 * to disable PPP TX PUSH feature on all the TX rings specified in
15141 	 * the num_tx_rings field. This flag is ignored if num_tx_rings
15142 	 * field is not specified or the function doesn't support PPP tx
15143 	 * push feature.
15144 	 */
15145 	#define HWRM_FUNC_CFG_INPUT_FLAGS_PPP_PUSH_MODE_DISABLE \
15146 		UINT32_C(0x10000000)
15147 	/*
15148 	 * If this bit is set to 1, the driver is requesting FW to enable
15149 	 * the BD_METADATA feature for this function. The FW returns error
15150 	 * on this request if the TX_METADATA is enabled for this function.
15151 	 */
15152 	#define HWRM_FUNC_CFG_INPUT_FLAGS_BD_METADATA_ENABLE \
15153 		UINT32_C(0x20000000)
15154 	/*
15155 	 * If this bit is set to 1, the driver is requesting FW to disable
15156 	 * the BD_METADATA feature for this function. The FW returns error
15157 	 * on this request if the TX_METADATA is enabled for this function.
15158 	 */
15159 	#define HWRM_FUNC_CFG_INPUT_FLAGS_BD_METADATA_DISABLE \
15160 		UINT32_C(0x40000000)
15161 	uint32_t	enables;
15162 	/*
15163 	 * This bit must be '1' for the admin_mtu field to be
15164 	 * configured.
15165 	 */
15166 	#define HWRM_FUNC_CFG_INPUT_ENABLES_ADMIN_MTU \
15167 		UINT32_C(0x1)
15168 	/*
15169 	 * This bit must be '1' for the mru field to be
15170 	 * configured.
15171 	 */
15172 	#define HWRM_FUNC_CFG_INPUT_ENABLES_MRU \
15173 		UINT32_C(0x2)
15174 	/*
15175 	 * This bit must be '1' for the num_rsscos_ctxs field to be
15176 	 * configured.
15177 	 */
15178 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_RSSCOS_CTXS \
15179 		UINT32_C(0x4)
15180 	/*
15181 	 * This bit must be '1' for the num_cmpl_rings field to be
15182 	 * configured.
15183 	 */
15184 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_CMPL_RINGS \
15185 		UINT32_C(0x8)
15186 	/*
15187 	 * This bit must be '1' for the num_tx_rings field to be
15188 	 * configured.
15189 	 */
15190 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_TX_RINGS \
15191 		UINT32_C(0x10)
15192 	/*
15193 	 * This bit must be '1' for the num_rx_rings field to be
15194 	 * configured.
15195 	 */
15196 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_RX_RINGS \
15197 		UINT32_C(0x20)
15198 	/*
15199 	 * This bit must be '1' for the num_l2_ctxs field to be
15200 	 * configured.
15201 	 */
15202 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_L2_CTXS \
15203 		UINT32_C(0x40)
15204 	/*
15205 	 * This bit must be '1' for the num_vnics field to be
15206 	 * configured.
15207 	 */
15208 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_VNICS \
15209 		UINT32_C(0x80)
15210 	/*
15211 	 * This bit must be '1' for the num_stat_ctxs field to be
15212 	 * configured.
15213 	 */
15214 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_STAT_CTXS \
15215 		UINT32_C(0x100)
15216 	/*
15217 	 * This bit must be '1' for the dflt_mac_addr field to be
15218 	 * configured.
15219 	 */
15220 	#define HWRM_FUNC_CFG_INPUT_ENABLES_DFLT_MAC_ADDR \
15221 		UINT32_C(0x200)
15222 	/*
15223 	 * This bit must be '1' for the dflt_vlan field to be
15224 	 * configured.
15225 	 */
15226 	#define HWRM_FUNC_CFG_INPUT_ENABLES_DFLT_VLAN \
15227 		UINT32_C(0x400)
15228 	/*
15229 	 * This bit must be '1' for the dflt_ip_addr field to be
15230 	 * configured.
15231 	 */
15232 	#define HWRM_FUNC_CFG_INPUT_ENABLES_DFLT_IP_ADDR \
15233 		UINT32_C(0x800)
15234 	/*
15235 	 * This bit must be '1' for the min_bw field to be
15236 	 * configured.
15237 	 */
15238 	#define HWRM_FUNC_CFG_INPUT_ENABLES_MIN_BW \
15239 		UINT32_C(0x1000)
15240 	/*
15241 	 * This bit must be '1' for the max_bw field to be
15242 	 * configured.
15243 	 */
15244 	#define HWRM_FUNC_CFG_INPUT_ENABLES_MAX_BW \
15245 		UINT32_C(0x2000)
15246 	/*
15247 	 * This bit must be '1' for the async_event_cr field to be
15248 	 * configured.
15249 	 */
15250 	#define HWRM_FUNC_CFG_INPUT_ENABLES_ASYNC_EVENT_CR \
15251 		UINT32_C(0x4000)
15252 	/*
15253 	 * This bit must be '1' for the vlan_antispoof_mode field to be
15254 	 * configured.
15255 	 */
15256 	#define HWRM_FUNC_CFG_INPUT_ENABLES_VLAN_ANTISPOOF_MODE \
15257 		UINT32_C(0x8000)
15258 	/*
15259 	 * This bit must be '1' for the allowed_vlan_pris field to be
15260 	 * configured.
15261 	 */
15262 	#define HWRM_FUNC_CFG_INPUT_ENABLES_ALLOWED_VLAN_PRIS \
15263 		UINT32_C(0x10000)
15264 	/*
15265 	 * This bit must be '1' for the evb_mode field to be
15266 	 * configured.
15267 	 */
15268 	#define HWRM_FUNC_CFG_INPUT_ENABLES_EVB_MODE \
15269 		UINT32_C(0x20000)
15270 	/*
15271 	 * This bit must be '1' for the num_mcast_filters field to be
15272 	 * configured.
15273 	 */
15274 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_MCAST_FILTERS \
15275 		UINT32_C(0x40000)
15276 	/*
15277 	 * This bit must be '1' for the num_hw_ring_grps field to be
15278 	 * configured.
15279 	 */
15280 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_HW_RING_GRPS \
15281 		UINT32_C(0x80000)
15282 	/*
15283 	 * This bit must be '1' for the cache_linesize field to be
15284 	 * configured.
15285 	 */
15286 	#define HWRM_FUNC_CFG_INPUT_ENABLES_CACHE_LINESIZE \
15287 		UINT32_C(0x100000)
15288 	/*
15289 	 * This bit must be '1' for the num_msix field to be
15290 	 * configured.
15291 	 */
15292 	#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_MSIX \
15293 		UINT32_C(0x200000)
15294 	/*
15295 	 * This bit must be '1' for the link admin state field to be
15296 	 * configured.
15297 	 */
15298 	#define HWRM_FUNC_CFG_INPUT_ENABLES_ADMIN_LINK_STATE \
15299 		UINT32_C(0x400000)
15300 	/*
15301 	 * This bit must be '1' for the hot_reset_if_en_dis field to be
15302 	 * configured.
15303 	 */
15304 	#define HWRM_FUNC_CFG_INPUT_ENABLES_HOT_RESET_IF_SUPPORT \
15305 		UINT32_C(0x800000)
15306 	/*
15307 	 * This bit must be '1' for the schq_id field to be
15308 	 * configured.
15309 	 */
15310 	#define HWRM_FUNC_CFG_INPUT_ENABLES_SCHQ_ID \
15311 		UINT32_C(0x1000000)
15312 	/*
15313 	 * This bit must be '1' for the mpc_chnls field to be
15314 	 * configured.
15315 	 */
15316 	#define HWRM_FUNC_CFG_INPUT_ENABLES_MPC_CHNLS \
15317 		UINT32_C(0x2000000)
15318 	/*
15319 	 * This bit must be '1' for the partition_min_bw field to be
15320 	 * configured.
15321 	 */
15322 	#define HWRM_FUNC_CFG_INPUT_ENABLES_PARTITION_MIN_BW \
15323 		UINT32_C(0x4000000)
15324 	/*
15325 	 * This bit must be '1' for the partition_max_bw field to be
15326 	 * configured.
15327 	 */
15328 	#define HWRM_FUNC_CFG_INPUT_ENABLES_PARTITION_MAX_BW \
15329 		UINT32_C(0x8000000)
15330 	/*
15331 	 * This bit must be '1' for the tpid field to be
15332 	 * configured. This bit is only valid when dflt_vlan enable
15333 	 * bit is set.
15334 	 */
15335 	#define HWRM_FUNC_CFG_INPUT_ENABLES_TPID \
15336 		UINT32_C(0x10000000)
15337 	/*
15338 	 * This bit must be '1' for the host_mtu field to be
15339 	 * configured.
15340 	 */
15341 	#define HWRM_FUNC_CFG_INPUT_ENABLES_HOST_MTU \
15342 		UINT32_C(0x20000000)
15343 	/*
15344 	 * This bit must be '1' for the number of Tx Key Contexts
15345 	 * field to be configured.
15346 	 */
15347 	#define HWRM_FUNC_CFG_INPUT_ENABLES_TX_KEY_CTXS \
15348 		UINT32_C(0x40000000)
15349 	/*
15350 	 * This bit must be '1' for the number of Rx Key Contexts
15351 	 * field to be configured.
15352 	 */
15353 	#define HWRM_FUNC_CFG_INPUT_ENABLES_RX_KEY_CTXS \
15354 		UINT32_C(0x80000000)
15355 	/*
15356 	 * This field can be used by the admin PF to configure
15357 	 * mtu of foster PFs.
15358 	 * The maximum transmission unit of the function.
15359 	 * The HWRM should make sure that the mtu of
15360 	 * the function does not exceed the mtu of the physical
15361 	 * port that this function is associated with.
15362 	 *
15363 	 * In addition to configuring mtu per function, it is
15364 	 * possible to configure mtu per transmit ring.
15365 	 * By default, the mtu of each transmit ring associated
15366 	 * with a function is equal to the mtu of the function.
15367 	 * The HWRM should make sure that the mtu of each transmit
15368 	 * ring that is assigned to a function has a valid mtu.
15369 	 */
15370 	uint16_t	admin_mtu;
15371 	/*
15372 	 * The maximum receive unit of the function.
15373 	 * The HWRM should make sure that the mru of
15374 	 * the function does not exceed the mru of the physical
15375 	 * port that this function is associated with.
15376 	 *
15377 	 * In addition to configuring mru per function, it is
15378 	 * possible to configure mru per vnic.
15379 	 * By default, the mru of each vnic associated
15380 	 * with a function is equal to the mru of the function.
15381 	 * The HWRM should make sure that the mru of each vnic
15382 	 * that is assigned to a function has a valid mru.
15383 	 */
15384 	uint16_t	mru;
15385 	/*
15386 	 * The number of RSS/COS contexts requested for the
15387 	 * function.
15388 	 */
15389 	uint16_t	num_rsscos_ctxs;
15390 	/*
15391 	 * The number of completion rings requested for the
15392 	 * function. This does not include the rings allocated
15393 	 * to any children functions if any.
15394 	 */
15395 	uint16_t	num_cmpl_rings;
15396 	/*
15397 	 * The number of transmit rings requested for the function.
15398 	 * This does not include the rings allocated to any
15399 	 * children functions if any.
15400 	 */
15401 	uint16_t	num_tx_rings;
15402 	/*
15403 	 * The number of receive rings requested for the function.
15404 	 * This does not include the rings allocated
15405 	 * to any children functions if any.
15406 	 */
15407 	uint16_t	num_rx_rings;
15408 	/* The requested number of L2 contexts for the function. */
15409 	uint16_t	num_l2_ctxs;
15410 	/* The requested number of vnics for the function. */
15411 	uint16_t	num_vnics;
15412 	/* The requested number of statistic contexts for the function. */
15413 	uint16_t	num_stat_ctxs;
15414 	/*
15415 	 * The number of HW ring groups that should
15416 	 * be reserved for this function.
15417 	 */
15418 	uint16_t	num_hw_ring_grps;
15419 	/* The default MAC address for the function being configured. */
15420 	uint8_t	dflt_mac_addr[6];
15421 	/*
15422 	 * The default VLAN for the function being configured.
15423 	 * This field's format is same as 802.1Q Tag's
15424 	 * Tag Control Information (TCI) format that includes both
15425 	 * Priority Code Point (PCP) and VLAN Identifier (VID).
15426 	 */
15427 	uint16_t	dflt_vlan;
15428 	/*
15429 	 * The default IP address for the function being configured.
15430 	 * This address is only used in enabling source property check.
15431 	 */
15432 	uint32_t	dflt_ip_addr[4];
15433 	/*
15434 	 * Minimum guaranteed transmit bandwidth for this function. When
15435 	 * specified for a PF, does not affect traffic from the PF's child VFs.
15436 	 * A value of 0 indicates the minimum bandwidth is not configured.
15437 	 */
15438 	uint32_t	min_bw;
15439 	/* The bandwidth value. */
15440 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_MASK \
15441 		UINT32_C(0xfffffff)
15442 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_SFT              0
15443 	/* The granularity of the value (bits or bytes). */
15444 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE \
15445 		UINT32_C(0x10000000)
15446 	/* Value is in bits. */
15447 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_BITS \
15448 		(UINT32_C(0x0) << 28)
15449 	/* Value is in bytes. */
15450 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_BYTES \
15451 		(UINT32_C(0x1) << 28)
15452 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_LAST \
15453 		HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_BYTES
15454 	/* bw_value_unit is 3 b */
15455 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_MASK \
15456 		UINT32_C(0xe0000000)
15457 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_SFT         29
15458 	/* Value is in Mb or MB (base 10). */
15459 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_MEGA \
15460 		(UINT32_C(0x0) << 29)
15461 	/* Value is in Kb or KB (base 10). */
15462 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_KILO \
15463 		(UINT32_C(0x2) << 29)
15464 	/* Value is in bits or bytes. */
15465 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_BASE \
15466 		(UINT32_C(0x4) << 29)
15467 	/* Value is in Gb or GB (base 10). */
15468 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_GIGA \
15469 		(UINT32_C(0x6) << 29)
15470 	/* Value is in 1/100th of a percentage of total bandwidth. */
15471 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
15472 		(UINT32_C(0x1) << 29)
15473 	/* Invalid unit */
15474 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_INVALID \
15475 		(UINT32_C(0x7) << 29)
15476 	#define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_LAST \
15477 		HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_INVALID
15478 	/*
15479 	 * Maximum transmit rate for this function. When specified for a PF,
15480 	 * does not affect traffic from the PF's child VFs.
15481 	 * A value of 0 indicates that the maximum bandwidth is not configured.
15482 	 */
15483 	uint32_t	max_bw;
15484 	/* The bandwidth value. */
15485 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_MASK \
15486 		UINT32_C(0xfffffff)
15487 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_SFT              0
15488 	/* The granularity of the value (bits or bytes). */
15489 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE \
15490 		UINT32_C(0x10000000)
15491 	/* Value is in bits. */
15492 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_BITS \
15493 		(UINT32_C(0x0) << 28)
15494 	/* Value is in bytes. */
15495 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_BYTES \
15496 		(UINT32_C(0x1) << 28)
15497 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_LAST \
15498 		HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_BYTES
15499 	/* bw_value_unit is 3 b */
15500 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_MASK \
15501 		UINT32_C(0xe0000000)
15502 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_SFT         29
15503 	/* Value is in Mb or MB (base 10). */
15504 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_MEGA \
15505 		(UINT32_C(0x0) << 29)
15506 	/* Value is in Kb or KB (base 10). */
15507 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_KILO \
15508 		(UINT32_C(0x2) << 29)
15509 	/* Value is in bits or bytes. */
15510 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_BASE \
15511 		(UINT32_C(0x4) << 29)
15512 	/* Value is in Gb or GB (base 10). */
15513 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_GIGA \
15514 		(UINT32_C(0x6) << 29)
15515 	/* Value is in 1/100th of a percentage of total bandwidth. */
15516 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
15517 		(UINT32_C(0x1) << 29)
15518 	/* Invalid unit */
15519 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID \
15520 		(UINT32_C(0x7) << 29)
15521 	#define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_LAST \
15522 		HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID
15523 	/*
15524 	 * ID of the target completion ring for receiving asynchronous
15525 	 * event completions. If this field is not valid, then the
15526 	 * HWRM shall use the default completion ring of the function
15527 	 * that is being configured as the target completion ring for
15528 	 * providing any asynchronous event completions for that
15529 	 * function.
15530 	 * If this field is valid, then the HWRM shall use the
15531 	 * completion ring identified by this ID as the target
15532 	 * completion ring for providing any asynchronous event
15533 	 * completions for the function that is being configured.
15534 	 */
15535 	uint16_t	async_event_cr;
15536 	/* VLAN Anti-spoofing mode. */
15537 	uint8_t	vlan_antispoof_mode;
15538 	/* No VLAN anti-spoofing checks are enabled */
15539 	#define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_NOCHECK \
15540 		UINT32_C(0x0)
15541 	/* Validate VLAN against the configured VLAN(s) */
15542 	#define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_VALIDATE_VLAN \
15543 		UINT32_C(0x1)
15544 	/* Insert VLAN if it does not exist, otherwise discard */
15545 	#define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_INSERT_IF_VLANDNE \
15546 		UINT32_C(0x2)
15547 	/* Insert VLAN if it does not exist, override VLAN if it exists */
15548 	#define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_INSERT_OR_OVERRIDE_VLAN \
15549 		UINT32_C(0x3)
15550 	#define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_LAST \
15551 		HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_INSERT_OR_OVERRIDE_VLAN
15552 	/*
15553 	 * This bit field defines VLAN PRIs that are allowed on
15554 	 * this function.
15555 	 * If nth bit is set, then VLAN PRI n is allowed on this
15556 	 * function.
15557 	 */
15558 	uint8_t	allowed_vlan_pris;
15559 	/*
15560 	 * The evb_mode is configured on a per port basis. The default evb_mode
15561 	 * is configured based on the NVM EVB mode setting upon firmware
15562 	 * initialization. The HWRM allows a PF driver to change EVB mode for a
15563 	 * port used by the PF only when one of the following conditions is
15564 	 * satisfied.
15565 	 * 1. The current operating mode is single function mode.
15566 	 *    (ie. one PF per port)
15567 	 * 2. For SmartNIC, any one of the PAXC PFs is permitted to change the
15568 	 *    EVB mode of the port used by the PAXC PF. None of the X86 PFs
15569 	 *    should have privileges.
15570 	 * The HWRM doesn't permit any PFs to change the underlying EVB mode
15571 	 * when running as MHB or NPAR mode in performance NIC configuration.
15572 	 * The HWRM doesn't permit a VF driver to change the EVB mode.
15573 	 * Once the HWRM determines a function doesn't meet the conditions
15574 	 * to configure the EVB mode, it sets the evb_mode_cfg_not_supported
15575 	 * flag in HWRM_FUNC_QCAPS command response for the function.
15576 	 * The HWRM takes into account the switching of EVB mode from one to
15577 	 * another and reconfigure hardware resources as reqiured. The
15578 	 * switching from VEB to VEPA mode requires the disabling of the
15579 	 * loopback traffic. Additionally, source knockouts are handled
15580 	 * differently in VEB and VEPA modes.
15581 	 */
15582 	uint8_t	evb_mode;
15583 	/* No Edge Virtual Bridging (EVB) */
15584 	#define HWRM_FUNC_CFG_INPUT_EVB_MODE_NO_EVB UINT32_C(0x0)
15585 	/* Virtual Ethernet Bridge (VEB) */
15586 	#define HWRM_FUNC_CFG_INPUT_EVB_MODE_VEB    UINT32_C(0x1)
15587 	/* Virtual Ethernet Port Aggregator (VEPA) */
15588 	#define HWRM_FUNC_CFG_INPUT_EVB_MODE_VEPA   UINT32_C(0x2)
15589 	#define HWRM_FUNC_CFG_INPUT_EVB_MODE_LAST \
15590 		HWRM_FUNC_CFG_INPUT_EVB_MODE_VEPA
15591 	uint8_t	options;
15592 	/*
15593 	 * This value indicates the PCIE device cache line size.
15594 	 * The cache line size allows the DMA writes to terminate and
15595 	 * start at the cache boundary.
15596 	 */
15597 	#define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_MASK \
15598 		UINT32_C(0x3)
15599 	#define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SFT          0
15600 	/* Cache Line Size 64 bytes */
15601 	#define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SIZE_64 \
15602 		UINT32_C(0x0)
15603 	/* Cache Line Size 128 bytes */
15604 	#define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SIZE_128 \
15605 		UINT32_C(0x1)
15606 	#define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_LAST \
15607 		HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SIZE_128
15608 	/* This value is the virtual link admin state setting. */
15609 	#define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_MASK \
15610 		UINT32_C(0xc)
15611 	#define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_SFT        2
15612 	/* Admin state is forced down. */
15613 	#define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_DOWN \
15614 		(UINT32_C(0x0) << 2)
15615 	/* Admin state is forced up. */
15616 	#define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_UP \
15617 		(UINT32_C(0x1) << 2)
15618 	/* Admin state is in auto mode - is to follow the physical link state. */
15619 	#define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_AUTO \
15620 		(UINT32_C(0x2) << 2)
15621 	#define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_LAST \
15622 		HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_AUTO
15623 	/* Reserved for future. */
15624 	#define HWRM_FUNC_CFG_INPUT_OPTIONS_RSVD_MASK \
15625 		UINT32_C(0xf0)
15626 	#define HWRM_FUNC_CFG_INPUT_OPTIONS_RSVD_SFT                    4
15627 	/*
15628 	 * The number of multicast filters that should
15629 	 * be reserved for this function on the RX side.
15630 	 */
15631 	uint16_t	num_mcast_filters;
15632 	/* Used by a PF driver to associate a SCHQ with a VF. */
15633 	uint16_t	schq_id;
15634 	uint16_t	mpc_chnls;
15635 	/*
15636 	 * When this bit is '1', the caller requests to enable a MPC
15637 	 * channel with destination to the TX crypto engine block.
15638 	 * When this bit is ‘0’, this flag has no effect.
15639 	 */
15640 	#define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_TCE_ENABLE          UINT32_C(0x1)
15641 	/*
15642 	 * When this bit is '1', the caller requests to disable a MPC
15643 	 * channel with destination to the TX crypto engine block.
15644 	 * When this bit is ‘0’, this flag has no effect.
15645 	 */
15646 	#define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_TCE_DISABLE         UINT32_C(0x2)
15647 	/*
15648 	 * When this bit is '1', the caller requests to enable a MPC
15649 	 * channel with destination to the RX crypto engine block.
15650 	 * When this bit is ‘0’, this flag has no effect.
15651 	 */
15652 	#define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_RCE_ENABLE          UINT32_C(0x4)
15653 	/*
15654 	 * When this bit is '1', the caller requests to disable a MPC
15655 	 * channel with destination to the RX crypto engine block.
15656 	 * When this bit is ‘0’, this flag has no effect.
15657 	 */
15658 	#define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_RCE_DISABLE         UINT32_C(0x8)
15659 	/*
15660 	 * When this bit is '1', the caller requests to enable a MPC
15661 	 * channel with destination to the TX configurable flow processing
15662 	 * block. When this bit is ‘0’, this flag has no effect.
15663 	 */
15664 	#define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_TE_CFA_ENABLE \
15665 		UINT32_C(0x10)
15666 	/*
15667 	 * When this bit is '1', the caller requests to disable a MPC
15668 	 * channel with destination to the TX configurable flow processing
15669 	 * block. When this bit is ‘0’, this flag has no effect.
15670 	 */
15671 	#define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_TE_CFA_DISABLE \
15672 		UINT32_C(0x20)
15673 	/*
15674 	 * When this bit is '1', the caller requests to enable a MPC
15675 	 * channel with destination to the RX configurable flow processing
15676 	 * block. When this bit is ‘0’, this flag has no effect.
15677 	 */
15678 	#define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_RE_CFA_ENABLE \
15679 		UINT32_C(0x40)
15680 	/*
15681 	 * When this bit is '1', the caller requests to disable a MPC
15682 	 * channel with destination to the RX configurable flow processing
15683 	 * block. When this bit is ‘0’, this flag has no effect.
15684 	 */
15685 	#define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_RE_CFA_DISABLE \
15686 		UINT32_C(0x80)
15687 	/*
15688 	 * When this bit is '1', the caller requests to enable a MPC
15689 	 * channel with destination to the primate processor block.
15690 	 * When this bit is ‘0’, this flag has no effect.
15691 	 */
15692 	#define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_PRIMATE_ENABLE \
15693 		UINT32_C(0x100)
15694 	/*
15695 	 * When this bit is '1', the caller requests to disable a MPC
15696 	 * channel with destination to the primate processor block.
15697 	 * When this bit is ‘0’, this flag has no effect.
15698 	 */
15699 	#define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_PRIMATE_DISABLE \
15700 		UINT32_C(0x200)
15701 	/*
15702 	 * Minimum guaranteed bandwidth for the network partition made up
15703 	 * of the caller physical function and all its child virtual
15704 	 * functions. The rate is specified as a percentage of the bandwidth
15705 	 * of the link the partition is associated with. A value of 0
15706 	 * indicates that no minimum bandwidth is configured. The sum of the
15707 	 * minimum bandwidths for all partitions on a link must not exceed
15708 	 * 100%.
15709 	 * The format of this field is defined to match min_bw, even though
15710 	 * it does not allow all the options for min_bw at this time.
15711 	 */
15712 	uint32_t	partition_min_bw;
15713 	/* The bandwidth value. */
15714 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MIN_BW_BW_VALUE_MASK \
15715 		UINT32_C(0xfffffff)
15716 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MIN_BW_BW_VALUE_SFT \
15717 		0
15718 	/*
15719 	 * The granularity of the value (bits or bytes). Firmware ignores
15720 	 * this field.
15721 	 */
15722 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MIN_BW_SCALE \
15723 		UINT32_C(0x10000000)
15724 	/* Value is in bits. */
15725 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MIN_BW_SCALE_BITS \
15726 		(UINT32_C(0x0) << 28)
15727 	/* Value is in bytes. */
15728 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MIN_BW_SCALE_BYTES \
15729 		(UINT32_C(0x1) << 28)
15730 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MIN_BW_SCALE_LAST \
15731 		HWRM_FUNC_CFG_INPUT_PARTITION_MIN_BW_SCALE_BYTES
15732 	/* Bandwidth units. Must be set to percent1_100. */
15733 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MIN_BW_BW_VALUE_UNIT_MASK \
15734 		UINT32_C(0xe0000000)
15735 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MIN_BW_BW_VALUE_UNIT_SFT \
15736 		29
15737 	/* Value is in hundredths of a percent of link bandwidth. */
15738 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
15739 		(UINT32_C(0x1) << 29)
15740 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MIN_BW_BW_VALUE_UNIT_LAST \
15741 		HWRM_FUNC_CFG_INPUT_PARTITION_MIN_BW_BW_VALUE_UNIT_PERCENT1_100
15742 	/*
15743 	 * The maximum bandwidth that may be used by the network partition
15744 	 * made up of the caller physical function and all its child virtual
15745 	 * functions. The rate is specified as a percentage of the bandwidth
15746 	 * of the link the partition is associated with. A value of 0
15747 	 * indicates that no maximum bandwidth is configured.
15748 	 * The format of this field is defined to match max_bw, even though it
15749 	 * does not allow all the options for max_bw at this time.
15750 	 */
15751 	uint32_t	partition_max_bw;
15752 	/* The bandwidth value. */
15753 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MAX_BW_BW_VALUE_MASK \
15754 		UINT32_C(0xfffffff)
15755 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MAX_BW_BW_VALUE_SFT \
15756 		0
15757 	/*
15758 	 * The granularity of the value (bits or bytes). Firmware ignores
15759 	 * this field.
15760 	 */
15761 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MAX_BW_SCALE \
15762 		UINT32_C(0x10000000)
15763 	/* Value is in bits. */
15764 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MAX_BW_SCALE_BITS \
15765 		(UINT32_C(0x0) << 28)
15766 	/* Value is in bytes. */
15767 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MAX_BW_SCALE_BYTES \
15768 		(UINT32_C(0x1) << 28)
15769 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MAX_BW_SCALE_LAST \
15770 		HWRM_FUNC_CFG_INPUT_PARTITION_MAX_BW_SCALE_BYTES
15771 	/* Bandwidth units. Must be set to percent1_100. */
15772 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MAX_BW_BW_VALUE_UNIT_MASK \
15773 		UINT32_C(0xe0000000)
15774 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MAX_BW_BW_VALUE_UNIT_SFT \
15775 		29
15776 	/* Value is in hundredths of a percent of link bandwidth. */
15777 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
15778 		(UINT32_C(0x1) << 29)
15779 	#define HWRM_FUNC_CFG_INPUT_PARTITION_MAX_BW_BW_VALUE_UNIT_LAST \
15780 		HWRM_FUNC_CFG_INPUT_PARTITION_MAX_BW_BW_VALUE_UNIT_PERCENT1_100
15781 	/*
15782 	 * The TPID for the function for which default VLAN
15783 	 * is configured. If the dflt_vlan is not specified
15784 	 * with the TPID, FW returns error. If the TPID is
15785 	 * not specified with dflt_vlan, the default TPID of
15786 	 * 0x8100 will be used. This field is specified in
15787 	 * network byte order.
15788 	 */
15789 	uint16_t	tpid;
15790 	/*
15791 	 * This field can be used by the host PF to configure
15792 	 * mtu value.
15793 	 * The maximum transmission unit of the function.
15794 	 * The HWRM should make sure that the mtu of
15795 	 * the function does not exceed the mtu of the physical
15796 	 * port that this function is associated with.
15797 	 *
15798 	 * In addition to configuring mtu per function, it is
15799 	 * possible to configure mtu per transmit ring.
15800 	 * By default, the mtu of each transmit ring associated
15801 	 * with a function is equal to the mtu of the function.
15802 	 * The HWRM should make sure that the mtu of each transmit
15803 	 * ring that is assigned to a function has a valid mtu.
15804 	 */
15805 	uint16_t	host_mtu;
15806 	/* Number of Tx Key Contexts requested. */
15807 	uint16_t	num_tx_key_ctxs;
15808 	/* Number of Rx Key Contexts requested. */
15809 	uint16_t	num_rx_key_ctxs;
15810 	uint8_t	unused_0[4];
15811 } __rte_packed;
15812 
15813 /* hwrm_func_cfg_output (size:128b/16B) */
15814 struct hwrm_func_cfg_output {
15815 	/* The specific error status for the command. */
15816 	uint16_t	error_code;
15817 	/* The HWRM command request type. */
15818 	uint16_t	req_type;
15819 	/* The sequence ID from the original command. */
15820 	uint16_t	seq_id;
15821 	/* The length of the response data in number of bytes. */
15822 	uint16_t	resp_len;
15823 	uint8_t	unused_0[7];
15824 	/*
15825 	 * This field is used in Output records to indicate that the output
15826 	 * is completely written to RAM.  This field should be read as '1'
15827 	 * to indicate that the output has been completely written.
15828 	 * When writing a command completion or response to an internal processor,
15829 	 * the order of writes has to be such that this field is written last.
15830 	 */
15831 	uint8_t	valid;
15832 } __rte_packed;
15833 
15834 /* hwrm_func_cfg_cmd_err (size:64b/8B) */
15835 struct hwrm_func_cfg_cmd_err {
15836 	/* command specific error codes for the cmd_err field in hwrm_err_output */
15837 	uint8_t	code;
15838 	/* Unknown error. */
15839 	#define HWRM_FUNC_CFG_CMD_ERR_CODE_UNKNOWN \
15840 		UINT32_C(0x0)
15841 	/* The partition minimum bandwidth is out of range. */
15842 	#define HWRM_FUNC_CFG_CMD_ERR_CODE_PARTITION_MIN_BW_RANGE \
15843 		UINT32_C(0x1)
15844 	/* The minimum bandwidth is more than the maximum bandwidth. */
15845 	#define HWRM_FUNC_CFG_CMD_ERR_CODE_PARTITION_MIN_MORE_THAN_MAX \
15846 		UINT32_C(0x2)
15847 	/*
15848 	 * The NIC does not support enforcement of a minimum guaranteed
15849 	 * bandwidth for a partition.
15850 	 */
15851 	#define HWRM_FUNC_CFG_CMD_ERR_CODE_PARTITION_MIN_BW_UNSUPPORTED \
15852 		UINT32_C(0x3)
15853 	/* Partition bandwidths must be specified as a percentage. */
15854 	#define HWRM_FUNC_CFG_CMD_ERR_CODE_PARTITION_BW_PERCENT \
15855 		UINT32_C(0x4)
15856 	#define HWRM_FUNC_CFG_CMD_ERR_CODE_LAST \
15857 		HWRM_FUNC_CFG_CMD_ERR_CODE_PARTITION_BW_PERCENT
15858 	uint8_t	unused_0[7];
15859 } __rte_packed;
15860 
15861 /********************
15862  * hwrm_func_qstats *
15863  ********************/
15864 
15865 
15866 /* hwrm_func_qstats_input (size:192b/24B) */
15867 struct hwrm_func_qstats_input {
15868 	/* The HWRM command request type. */
15869 	uint16_t	req_type;
15870 	/*
15871 	 * The completion ring to send the completion event on. This should
15872 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
15873 	 */
15874 	uint16_t	cmpl_ring;
15875 	/*
15876 	 * The sequence ID is used by the driver for tracking multiple
15877 	 * commands. This ID is treated as opaque data by the firmware and
15878 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
15879 	 */
15880 	uint16_t	seq_id;
15881 	/*
15882 	 * The target ID of the command:
15883 	 * * 0x0-0xFFF8 - The function ID
15884 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
15885 	 * * 0xFFFD - Reserved for user-space HWRM interface
15886 	 * * 0xFFFF - HWRM
15887 	 */
15888 	uint16_t	target_id;
15889 	/*
15890 	 * A physical address pointer pointing to a host buffer that the
15891 	 * command's response data will be written. This can be either a host
15892 	 * physical address (HPA) or a guest physical address (GPA) and must
15893 	 * point to a physically contiguous block of memory.
15894 	 */
15895 	uint64_t	resp_addr;
15896 	/*
15897 	 * Function ID of the function that is being queried.
15898 	 * 0xFF... (All Fs) if the query is for the requesting
15899 	 * function.
15900 	 * A privileged PF can query for other function's statistics.
15901 	 */
15902 	uint16_t	fid;
15903 	/* This flags indicates the type of statistics request. */
15904 	uint8_t	flags;
15905 	/* This value is not used to avoid backward compatibility issues. */
15906 	#define HWRM_FUNC_QSTATS_INPUT_FLAGS_UNUSED       UINT32_C(0x0)
15907 	/*
15908 	 * flags should be set to 1 when request is for only RoCE statistics.
15909 	 * This will be honored only if the caller_fid is a privileged PF.
15910 	 * In all other cases FID and caller_fid should be the same.
15911 	 */
15912 	#define HWRM_FUNC_QSTATS_INPUT_FLAGS_ROCE_ONLY    UINT32_C(0x1)
15913 	/*
15914 	 * flags should be set to 2 when request is for the counter mask,
15915 	 * representing the width of each of the stats counters, rather
15916 	 * than counters themselves.
15917 	 */
15918 	#define HWRM_FUNC_QSTATS_INPUT_FLAGS_COUNTER_MASK UINT32_C(0x2)
15919 	#define HWRM_FUNC_QSTATS_INPUT_FLAGS_LAST \
15920 		HWRM_FUNC_QSTATS_INPUT_FLAGS_COUNTER_MASK
15921 	uint8_t	unused_0[5];
15922 } __rte_packed;
15923 
15924 /* hwrm_func_qstats_output (size:1408b/176B) */
15925 struct hwrm_func_qstats_output {
15926 	/* The specific error status for the command. */
15927 	uint16_t	error_code;
15928 	/* The HWRM command request type. */
15929 	uint16_t	req_type;
15930 	/* The sequence ID from the original command. */
15931 	uint16_t	seq_id;
15932 	/* The length of the response data in number of bytes. */
15933 	uint16_t	resp_len;
15934 	/* Number of transmitted unicast packets on the function. */
15935 	uint64_t	tx_ucast_pkts;
15936 	/* Number of transmitted multicast packets on the function. */
15937 	uint64_t	tx_mcast_pkts;
15938 	/* Number of transmitted broadcast packets on the function. */
15939 	uint64_t	tx_bcast_pkts;
15940 	/*
15941 	 * Number of transmitted packets that were discarded due to
15942 	 * internal NIC resource problems.  For transmit, this
15943 	 * can only happen if TMP is configured to allow dropping
15944 	 * in HOL blocking conditions, which is not a normal
15945 	 * configuration.
15946 	 */
15947 	uint64_t	tx_discard_pkts;
15948 	/*
15949 	 * Number of dropped packets on transmit path on the function.
15950 	 * These are packets that have been marked for drop by
15951 	 * the TE CFA block or are packets that exceeded the
15952 	 * transmit MTU limit for the function.
15953 	 */
15954 	uint64_t	tx_drop_pkts;
15955 	/* Number of transmitted bytes for unicast traffic on the function. */
15956 	uint64_t	tx_ucast_bytes;
15957 	/* Number of transmitted bytes for multicast traffic on the function. */
15958 	uint64_t	tx_mcast_bytes;
15959 	/* Number of transmitted bytes for broadcast traffic on the function. */
15960 	uint64_t	tx_bcast_bytes;
15961 	/* Number of received unicast packets on the function. */
15962 	uint64_t	rx_ucast_pkts;
15963 	/* Number of received multicast packets on the function. */
15964 	uint64_t	rx_mcast_pkts;
15965 	/* Number of received broadcast packets on the function. */
15966 	uint64_t	rx_bcast_pkts;
15967 	/*
15968 	 * Number of received packets that were discarded on the function
15969 	 * due to resource limitations.  This can happen for 3 reasons.
15970 	 * # The BD used for the packet has a bad format.
15971 	 * # There were no BDs available in the ring for the packet.
15972 	 * # There were no BDs available on-chip for the packet.
15973 	 */
15974 	uint64_t	rx_discard_pkts;
15975 	/*
15976 	 * Number of dropped packets on received path on the function.
15977 	 * These are packets that have been marked for drop by the
15978 	 * RE CFA.
15979 	 */
15980 	uint64_t	rx_drop_pkts;
15981 	/* Number of received bytes for unicast traffic on the function. */
15982 	uint64_t	rx_ucast_bytes;
15983 	/* Number of received bytes for multicast traffic on the function. */
15984 	uint64_t	rx_mcast_bytes;
15985 	/* Number of received bytes for broadcast traffic on the function. */
15986 	uint64_t	rx_bcast_bytes;
15987 	/* Number of aggregated unicast packets on the function. */
15988 	uint64_t	rx_agg_pkts;
15989 	/* Number of aggregated unicast bytes on the function. */
15990 	uint64_t	rx_agg_bytes;
15991 	/* Number of aggregation events on the function. */
15992 	uint64_t	rx_agg_events;
15993 	/* Number of aborted aggregations on the function. */
15994 	uint64_t	rx_agg_aborts;
15995 	uint8_t	unused_0[7];
15996 	/*
15997 	 * This field is used in Output records to indicate that the output
15998 	 * is completely written to RAM.  This field should be read as '1'
15999 	 * to indicate that the output has been completely written.
16000 	 * When writing a command completion or response to an internal processor,
16001 	 * the order of writes has to be such that this field is written last.
16002 	 */
16003 	uint8_t	valid;
16004 } __rte_packed;
16005 
16006 /************************
16007  * hwrm_func_qstats_ext *
16008  ************************/
16009 
16010 
16011 /* hwrm_func_qstats_ext_input (size:256b/32B) */
16012 struct hwrm_func_qstats_ext_input {
16013 	/* The HWRM command request type. */
16014 	uint16_t	req_type;
16015 	/*
16016 	 * The completion ring to send the completion event on. This should
16017 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
16018 	 */
16019 	uint16_t	cmpl_ring;
16020 	/*
16021 	 * The sequence ID is used by the driver for tracking multiple
16022 	 * commands. This ID is treated as opaque data by the firmware and
16023 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
16024 	 */
16025 	uint16_t	seq_id;
16026 	/*
16027 	 * The target ID of the command:
16028 	 * * 0x0-0xFFF8 - The function ID
16029 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16030 	 * * 0xFFFD - Reserved for user-space HWRM interface
16031 	 * * 0xFFFF - HWRM
16032 	 */
16033 	uint16_t	target_id;
16034 	/*
16035 	 * A physical address pointer pointing to a host buffer that the
16036 	 * command's response data will be written. This can be either a host
16037 	 * physical address (HPA) or a guest physical address (GPA) and must
16038 	 * point to a physically contiguous block of memory.
16039 	 */
16040 	uint64_t	resp_addr;
16041 	/*
16042 	 * Function ID of the function that is being queried.
16043 	 * 0xFF... (All Fs) if the query is for the requesting
16044 	 * function.
16045 	 * A privileged PF can query for other function's statistics.
16046 	 */
16047 	uint16_t	fid;
16048 	/* This flags indicates the type of statistics request. */
16049 	uint8_t	flags;
16050 	/* This value is not used to avoid backward compatibility issues. */
16051 	#define HWRM_FUNC_QSTATS_EXT_INPUT_FLAGS_UNUSED       UINT32_C(0x0)
16052 	/*
16053 	 * flags should be set to 1 when request is for only RoCE statistics.
16054 	 * This will be honored only if the caller_fid is a privileged PF.
16055 	 * In all other cases FID and caller_fid should be the same.
16056 	 */
16057 	#define HWRM_FUNC_QSTATS_EXT_INPUT_FLAGS_ROCE_ONLY    UINT32_C(0x1)
16058 	/*
16059 	 * flags should be set to 2 when request is for the counter mask
16060 	 * representing the width of each of the stats counters, rather
16061 	 * than counters themselves.
16062 	 */
16063 	#define HWRM_FUNC_QSTATS_EXT_INPUT_FLAGS_COUNTER_MASK UINT32_C(0x2)
16064 	#define HWRM_FUNC_QSTATS_EXT_INPUT_FLAGS_LAST \
16065 		HWRM_FUNC_QSTATS_EXT_INPUT_FLAGS_COUNTER_MASK
16066 	uint8_t	unused_0[1];
16067 	uint32_t	enables;
16068 	/*
16069 	 * This bit must be '1' for the schq_id and traffic_class fields to
16070 	 * be configured.
16071 	 */
16072 	#define HWRM_FUNC_QSTATS_EXT_INPUT_ENABLES_SCHQ_ID     UINT32_C(0x1)
16073 	/* Specifies the SCHQ for which to gather statistics */
16074 	uint16_t	schq_id;
16075 	/*
16076 	 * Specifies the traffic class for which to gather statistics. Valid
16077 	 * values are 0 through (max_configurable_queues - 1), where
16078 	 * max_configurable_queues is in the response of HWRM_QUEUE_QPORTCFG
16079 	 */
16080 	uint16_t	traffic_class;
16081 	uint8_t	unused_1[4];
16082 } __rte_packed;
16083 
16084 /* hwrm_func_qstats_ext_output (size:1536b/192B) */
16085 struct hwrm_func_qstats_ext_output {
16086 	/* The specific error status for the command. */
16087 	uint16_t	error_code;
16088 	/* The HWRM command request type. */
16089 	uint16_t	req_type;
16090 	/* The sequence ID from the original command. */
16091 	uint16_t	seq_id;
16092 	/* The length of the response data in number of bytes. */
16093 	uint16_t	resp_len;
16094 	/* Number of received unicast packets */
16095 	uint64_t	rx_ucast_pkts;
16096 	/* Number of received multicast packets */
16097 	uint64_t	rx_mcast_pkts;
16098 	/* Number of received broadcast packets */
16099 	uint64_t	rx_bcast_pkts;
16100 	/* Number of discarded packets on received path */
16101 	uint64_t	rx_discard_pkts;
16102 	/* Number of packets on receive path with error */
16103 	uint64_t	rx_error_pkts;
16104 	/* Number of received bytes for unicast traffic */
16105 	uint64_t	rx_ucast_bytes;
16106 	/* Number of received bytes for multicast traffic */
16107 	uint64_t	rx_mcast_bytes;
16108 	/* Number of received bytes for broadcast traffic */
16109 	uint64_t	rx_bcast_bytes;
16110 	/* Number of transmitted unicast packets */
16111 	uint64_t	tx_ucast_pkts;
16112 	/* Number of transmitted multicast packets */
16113 	uint64_t	tx_mcast_pkts;
16114 	/* Number of transmitted broadcast packets */
16115 	uint64_t	tx_bcast_pkts;
16116 	/* Number of packets on transmit path with error */
16117 	uint64_t	tx_error_pkts;
16118 	/* Number of discarded packets on transmit path */
16119 	uint64_t	tx_discard_pkts;
16120 	/* Number of transmitted bytes for unicast traffic */
16121 	uint64_t	tx_ucast_bytes;
16122 	/* Number of transmitted bytes for multicast traffic */
16123 	uint64_t	tx_mcast_bytes;
16124 	/* Number of transmitted bytes for broadcast traffic */
16125 	uint64_t	tx_bcast_bytes;
16126 	/* Number of TPA eligible packets */
16127 	uint64_t	rx_tpa_eligible_pkt;
16128 	/* Number of TPA eligible bytes */
16129 	uint64_t	rx_tpa_eligible_bytes;
16130 	/* Number of TPA packets */
16131 	uint64_t	rx_tpa_pkt;
16132 	/* Number of TPA bytes */
16133 	uint64_t	rx_tpa_bytes;
16134 	/* Number of TPA errors */
16135 	uint64_t	rx_tpa_errors;
16136 	/* Number of TPA errors */
16137 	uint64_t	rx_tpa_events;
16138 	uint8_t	unused_0[7];
16139 	/*
16140 	 * This field is used in Output records to indicate that the output
16141 	 * is completely written to RAM.  This field should be read as '1'
16142 	 * to indicate that the output has been completely written.
16143 	 * When writing a command completion or response to an internal processor,
16144 	 * the order of writes has to be such that this field is written last.
16145 	 */
16146 	uint8_t	valid;
16147 } __rte_packed;
16148 
16149 /***********************
16150  * hwrm_func_clr_stats *
16151  ***********************/
16152 
16153 
16154 /* hwrm_func_clr_stats_input (size:192b/24B) */
16155 struct hwrm_func_clr_stats_input {
16156 	/* The HWRM command request type. */
16157 	uint16_t	req_type;
16158 	/*
16159 	 * The completion ring to send the completion event on. This should
16160 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
16161 	 */
16162 	uint16_t	cmpl_ring;
16163 	/*
16164 	 * The sequence ID is used by the driver for tracking multiple
16165 	 * commands. This ID is treated as opaque data by the firmware and
16166 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
16167 	 */
16168 	uint16_t	seq_id;
16169 	/*
16170 	 * The target ID of the command:
16171 	 * * 0x0-0xFFF8 - The function ID
16172 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16173 	 * * 0xFFFD - Reserved for user-space HWRM interface
16174 	 * * 0xFFFF - HWRM
16175 	 */
16176 	uint16_t	target_id;
16177 	/*
16178 	 * A physical address pointer pointing to a host buffer that the
16179 	 * command's response data will be written. This can be either a host
16180 	 * physical address (HPA) or a guest physical address (GPA) and must
16181 	 * point to a physically contiguous block of memory.
16182 	 */
16183 	uint64_t	resp_addr;
16184 	/*
16185 	 * Function ID of the function.
16186 	 * 0xFF... (All Fs) if the query is for the requesting
16187 	 * function.
16188 	 */
16189 	uint16_t	fid;
16190 	uint8_t	unused_0[6];
16191 } __rte_packed;
16192 
16193 /* hwrm_func_clr_stats_output (size:128b/16B) */
16194 struct hwrm_func_clr_stats_output {
16195 	/* The specific error status for the command. */
16196 	uint16_t	error_code;
16197 	/* The HWRM command request type. */
16198 	uint16_t	req_type;
16199 	/* The sequence ID from the original command. */
16200 	uint16_t	seq_id;
16201 	/* The length of the response data in number of bytes. */
16202 	uint16_t	resp_len;
16203 	uint8_t	unused_0[7];
16204 	/*
16205 	 * This field is used in Output records to indicate that the output
16206 	 * is completely written to RAM.  This field should be read as '1'
16207 	 * to indicate that the output has been completely written.
16208 	 * When writing a command completion or response to an internal processor,
16209 	 * the order of writes has to be such that this field is written last.
16210 	 */
16211 	uint8_t	valid;
16212 } __rte_packed;
16213 
16214 /**************************
16215  * hwrm_func_vf_resc_free *
16216  **************************/
16217 
16218 
16219 /* hwrm_func_vf_resc_free_input (size:192b/24B) */
16220 struct hwrm_func_vf_resc_free_input {
16221 	/* The HWRM command request type. */
16222 	uint16_t	req_type;
16223 	/*
16224 	 * The completion ring to send the completion event on. This should
16225 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
16226 	 */
16227 	uint16_t	cmpl_ring;
16228 	/*
16229 	 * The sequence ID is used by the driver for tracking multiple
16230 	 * commands. This ID is treated as opaque data by the firmware and
16231 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
16232 	 */
16233 	uint16_t	seq_id;
16234 	/*
16235 	 * The target ID of the command:
16236 	 * * 0x0-0xFFF8 - The function ID
16237 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16238 	 * * 0xFFFD - Reserved for user-space HWRM interface
16239 	 * * 0xFFFF - HWRM
16240 	 */
16241 	uint16_t	target_id;
16242 	/*
16243 	 * A physical address pointer pointing to a host buffer that the
16244 	 * command's response data will be written. This can be either a host
16245 	 * physical address (HPA) or a guest physical address (GPA) and must
16246 	 * point to a physically contiguous block of memory.
16247 	 */
16248 	uint64_t	resp_addr;
16249 	/*
16250 	 * This value is used to identify a Virtual Function (VF).
16251 	 * The scope of VF ID is local within a PF.
16252 	 */
16253 	uint16_t	vf_id;
16254 	uint8_t	unused_0[6];
16255 } __rte_packed;
16256 
16257 /* hwrm_func_vf_resc_free_output (size:128b/16B) */
16258 struct hwrm_func_vf_resc_free_output {
16259 	/* The specific error status for the command. */
16260 	uint16_t	error_code;
16261 	/* The HWRM command request type. */
16262 	uint16_t	req_type;
16263 	/* The sequence ID from the original command. */
16264 	uint16_t	seq_id;
16265 	/* The length of the response data in number of bytes. */
16266 	uint16_t	resp_len;
16267 	uint8_t	unused_0[7];
16268 	/*
16269 	 * This field is used in Output records to indicate that the output
16270 	 * is completely written to RAM.  This field should be read as '1'
16271 	 * to indicate that the output has been completely written.
16272 	 * When writing a command completion or response to an internal processor,
16273 	 * the order of writes has to be such that this field is written last.
16274 	 */
16275 	uint8_t	valid;
16276 } __rte_packed;
16277 
16278 /**********************
16279  * hwrm_func_drv_rgtr *
16280  **********************/
16281 
16282 
16283 /* hwrm_func_drv_rgtr_input (size:896b/112B) */
16284 struct hwrm_func_drv_rgtr_input {
16285 	/* The HWRM command request type. */
16286 	uint16_t	req_type;
16287 	/*
16288 	 * The completion ring to send the completion event on. This should
16289 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
16290 	 */
16291 	uint16_t	cmpl_ring;
16292 	/*
16293 	 * The sequence ID is used by the driver for tracking multiple
16294 	 * commands. This ID is treated as opaque data by the firmware and
16295 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
16296 	 */
16297 	uint16_t	seq_id;
16298 	/*
16299 	 * The target ID of the command:
16300 	 * * 0x0-0xFFF8 - The function ID
16301 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16302 	 * * 0xFFFD - Reserved for user-space HWRM interface
16303 	 * * 0xFFFF - HWRM
16304 	 */
16305 	uint16_t	target_id;
16306 	/*
16307 	 * A physical address pointer pointing to a host buffer that the
16308 	 * command's response data will be written. This can be either a host
16309 	 * physical address (HPA) or a guest physical address (GPA) and must
16310 	 * point to a physically contiguous block of memory.
16311 	 */
16312 	uint64_t	resp_addr;
16313 	uint32_t	flags;
16314 	/*
16315 	 * When this bit is '1', the function driver is requesting
16316 	 * all requests from its children VF drivers to be
16317 	 * forwarded to itself.
16318 	 * This flag can only be set by the PF driver.
16319 	 * If a VF driver sets this flag, it should be ignored
16320 	 * by the HWRM.
16321 	 */
16322 	#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FWD_ALL_MODE \
16323 		UINT32_C(0x1)
16324 	/*
16325 	 * When this bit is '1', the function is requesting none of
16326 	 * the requests from its children VF drivers to be
16327 	 * forwarded to itself.
16328 	 * This flag can only be set by the PF driver.
16329 	 * If a VF driver sets this flag, it should be ignored
16330 	 * by the HWRM.
16331 	 */
16332 	#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FWD_NONE_MODE \
16333 		UINT32_C(0x2)
16334 	/*
16335 	 * When this bit is '1', then ver_maj_8b, ver_min_8b, ver_upd_8b
16336 	 * fields shall be ignored and ver_maj, ver_min, ver_upd
16337 	 * and ver_patch shall be used for the driver version information.
16338 	 * When this bit is '0', then ver_maj_8b, ver_min_8b, ver_upd_8b
16339 	 * fields shall be used for the driver version information and
16340 	 * ver_maj, ver_min, ver_upd and ver_patch shall be ignored.
16341 	 */
16342 	#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_16BIT_VER_MODE \
16343 		UINT32_C(0x4)
16344 	/*
16345 	 * When this bit is '1', the function is indicating support of
16346 	 * 64bit flow handle.  The firmware that only supports 64bit flow
16347 	 * handle should check this bit before allowing processing of
16348 	 * HWRM_CFA_FLOW_XXX commands from the requesting function as firmware
16349 	 * with 64bit flow handle support can only be compatible with drivers
16350 	 * that support 64bit flow handle. The legacy drivers that don't support
16351 	 * 64bit flow handle won't be able to use HWRM_CFA_FLOW_XXX commands when
16352 	 * running with new firmware that only supports 64bit flow handle. The new
16353 	 * firmware support 64bit flow handle returns HWRM_ERR_CODE_CMD_NOT_SUPPORTED
16354 	 * status to the legacy driver when encounters these commands.
16355 	 */
16356 	#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FLOW_HANDLE_64BIT_MODE \
16357 		UINT32_C(0x8)
16358 	/*
16359 	 * When this bit is '1', the function is indicating support of
16360 	 * Hot Reset. The driver interface will destroy the resources,
16361 	 * unregister the function and register again up on receiving
16362 	 * the RESET_NOTIFY Async notification from the core firmware.
16363 	 * The core firmware will this use flag and trigger the Hot Reset
16364 	 * process only if all the registered driver instances are capable
16365 	 * of this support.
16366 	 */
16367 	#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_HOT_RESET_SUPPORT \
16368 		UINT32_C(0x10)
16369 	/*
16370 	 * When this bit is 1, the function is indicating the support of the
16371 	 * error recovery capability. Error recovery support will be used by
16372 	 * firmware only if all the driver instances support error recovery
16373 	 * process. By setting this bit, driver is indicating support for
16374 	 * corresponding async event completion message. These will be
16375 	 * delivered to the driver even if they did not register for it.
16376 	 * If supported, after receiving reset notify async event with fatal
16377 	 * flag set in event data1, then all the drivers have to tear down
16378 	 * their resources without sending any HWRM commands to FW.
16379 	 */
16380 	#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_ERROR_RECOVERY_SUPPORT \
16381 		UINT32_C(0x20)
16382 	/*
16383 	 * When this bit is 1, the function is indicating the support of the
16384 	 * Master capability. The Firmware will use this capability to select the
16385 	 * Master function. The master function will be used to initiate
16386 	 * designated functionality like error recovery etc… If none of the
16387 	 * registered PF’s or trusted VF’s indicate this support, then
16388 	 * firmware will select the 1st registered PF as Master capable instance.
16389 	 */
16390 	#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_MASTER_SUPPORT \
16391 		UINT32_C(0x40)
16392 	/*
16393 	 * When this bit is 1, the function is indicating the support of the
16394 	 * fast reset capability. Fast reset support will be used by
16395 	 * firmware only if all the driver instances support fast reset
16396 	 * process. By setting this bit, driver is indicating support for
16397 	 * corresponding async event completion message. These will be
16398 	 * delivered to the driver even if they did not register for it.
16399 	 * If supported, after receiving reset notify async event with fast
16400 	 * reset flag set in event data1, then all the drivers have to tear
16401 	 * down their resources without sending any HWRM commands to FW.
16402 	 */
16403 	#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FAST_RESET_SUPPORT \
16404 		UINT32_C(0x80)
16405 	/*
16406 	 * When this bit is 1, the function's driver is indicating the
16407 	 * support of handling the vnic_rss_cfg's INVALID_PARAM error
16408 	 * returned by firmware. Firmware returns error, if host driver
16409 	 * configures the invalid hash_types bit combination for a given
16410 	 * IP version.
16411 	 */
16412 	#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_RSS_STRICT_HASH_TYPE_SUPPORT \
16413 		UINT32_C(0x100)
16414 	/*
16415 	 * When this bit is 1, the function's driver is indicating the
16416 	 * support of handling the NPAR 1.2 feature where the s-tag may be
16417 	 * a value other than 0x8100 or 0x88a8.
16418 	 */
16419 	#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_NPAR_1_2_SUPPORT \
16420 		UINT32_C(0x200)
16421 	uint32_t	enables;
16422 	/*
16423 	 * This bit must be '1' for the os_type field to be
16424 	 * configured.
16425 	 */
16426 	#define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_OS_TYPE \
16427 		UINT32_C(0x1)
16428 	/*
16429 	 * This bit must be '1' for the ver field to be
16430 	 * configured.
16431 	 */
16432 	#define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_VER \
16433 		UINT32_C(0x2)
16434 	/*
16435 	 * This bit must be '1' for the timestamp field to be
16436 	 * configured.
16437 	 */
16438 	#define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_TIMESTAMP \
16439 		UINT32_C(0x4)
16440 	/*
16441 	 * This bit must be '1' for the vf_req_fwd field to be
16442 	 * configured.
16443 	 */
16444 	#define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_VF_REQ_FWD \
16445 		UINT32_C(0x8)
16446 	/*
16447 	 * This bit must be '1' for the async_event_fwd field to be
16448 	 * configured.
16449 	 */
16450 	#define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_ASYNC_EVENT_FWD \
16451 		UINT32_C(0x10)
16452 	/* This value indicates the type of OS.  The values are based on CIM_OperatingSystem.mof file as published by the DMTF. */
16453 	uint16_t	os_type;
16454 	/* Unknown */
16455 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_UNKNOWN   UINT32_C(0x0)
16456 	/* Other OS not listed below. */
16457 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_OTHER     UINT32_C(0x1)
16458 	/* MSDOS OS. */
16459 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_MSDOS     UINT32_C(0xe)
16460 	/* Windows OS. */
16461 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_WINDOWS   UINT32_C(0x12)
16462 	/* Solaris OS. */
16463 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_SOLARIS   UINT32_C(0x1d)
16464 	/* Linux OS. */
16465 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_LINUX     UINT32_C(0x24)
16466 	/* FreeBSD OS. */
16467 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_FREEBSD   UINT32_C(0x2a)
16468 	/* VMware ESXi OS. */
16469 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_ESXI      UINT32_C(0x68)
16470 	/* Microsoft Windows 8 64-bit OS. */
16471 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_WIN864    UINT32_C(0x73)
16472 	/* Microsoft Windows Server 2012 R2 OS. */
16473 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_WIN2012R2 UINT32_C(0x74)
16474 	/* UEFI driver. */
16475 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_UEFI      UINT32_C(0x8000)
16476 	#define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_LAST \
16477 		HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_UEFI
16478 	/* This is the 8bit major version of the driver. */
16479 	uint8_t	ver_maj_8b;
16480 	/* This is the 8bit minor version of the driver. */
16481 	uint8_t	ver_min_8b;
16482 	/* This is the 8bit update version of the driver. */
16483 	uint8_t	ver_upd_8b;
16484 	uint8_t	unused_0[3];
16485 	/*
16486 	 * This is a 32-bit timestamp provided by the driver for
16487 	 * keep alive.
16488 	 * The timestamp is in multiples of 1ms.
16489 	 */
16490 	uint32_t	timestamp;
16491 	uint8_t	unused_1[4];
16492 	/*
16493 	 * This is a 256-bit bit mask provided by the PF driver for
16494 	 * letting the HWRM know what commands issued by the VF driver
16495 	 * to the HWRM should be forwarded to the PF driver.
16496 	 * Nth bit refers to the Nth req_type.
16497 	 *
16498 	 * Setting Nth bit to 1 indicates that requests from the
16499 	 * VF driver with req_type equal to N shall be forwarded to
16500 	 * the parent PF driver.
16501 	 *
16502 	 * This field is not valid for the VF driver.
16503 	 */
16504 	uint32_t	vf_req_fwd[8];
16505 	/*
16506 	 * This is a 256-bit bit mask provided by the function driver
16507 	 * (PF or VF driver) to indicate the list of asynchronous event
16508 	 * completions to be forwarded.
16509 	 *
16510 	 * Nth bit refers to the Nth event_id.
16511 	 *
16512 	 * Setting Nth bit to 1 by the function driver shall result in
16513 	 * the HWRM forwarding asynchronous event completion with
16514 	 * event_id equal to N.
16515 	 *
16516 	 * If all bits are set to 0 (value of 0), then the HWRM shall
16517 	 * not forward any asynchronous event completion to this
16518 	 * function driver.
16519 	 */
16520 	uint32_t	async_event_fwd[8];
16521 	/* This is the 16bit major version of the driver. */
16522 	uint16_t	ver_maj;
16523 	/* This is the 16bit minor version of the driver. */
16524 	uint16_t	ver_min;
16525 	/* This is the 16bit update version of the driver. */
16526 	uint16_t	ver_upd;
16527 	/* This is the 16bit patch version of the driver. */
16528 	uint16_t	ver_patch;
16529 } __rte_packed;
16530 
16531 /* hwrm_func_drv_rgtr_output (size:128b/16B) */
16532 struct hwrm_func_drv_rgtr_output {
16533 	/* The specific error status for the command. */
16534 	uint16_t	error_code;
16535 	/* The HWRM command request type. */
16536 	uint16_t	req_type;
16537 	/* The sequence ID from the original command. */
16538 	uint16_t	seq_id;
16539 	/* The length of the response data in number of bytes. */
16540 	uint16_t	resp_len;
16541 	uint32_t	flags;
16542 	/*
16543 	 * When this bit is '1', it indicates that the
16544 	 * HWRM_FUNC_DRV_IF_CHANGE call is supported.
16545 	 */
16546 	#define HWRM_FUNC_DRV_RGTR_OUTPUT_FLAGS_IF_CHANGE_SUPPORTED \
16547 		UINT32_C(0x1)
16548 	uint8_t	unused_0[3];
16549 	/*
16550 	 * This field is used in Output records to indicate that the output
16551 	 * is completely written to RAM.  This field should be read as '1'
16552 	 * to indicate that the output has been completely written.
16553 	 * When writing a command completion or response to an internal processor,
16554 	 * the order of writes has to be such that this field is written last.
16555 	 */
16556 	uint8_t	valid;
16557 } __rte_packed;
16558 
16559 /************************
16560  * hwrm_func_drv_unrgtr *
16561  ************************/
16562 
16563 
16564 /* hwrm_func_drv_unrgtr_input (size:192b/24B) */
16565 struct hwrm_func_drv_unrgtr_input {
16566 	/* The HWRM command request type. */
16567 	uint16_t	req_type;
16568 	/*
16569 	 * The completion ring to send the completion event on. This should
16570 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
16571 	 */
16572 	uint16_t	cmpl_ring;
16573 	/*
16574 	 * The sequence ID is used by the driver for tracking multiple
16575 	 * commands. This ID is treated as opaque data by the firmware and
16576 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
16577 	 */
16578 	uint16_t	seq_id;
16579 	/*
16580 	 * The target ID of the command:
16581 	 * * 0x0-0xFFF8 - The function ID
16582 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16583 	 * * 0xFFFD - Reserved for user-space HWRM interface
16584 	 * * 0xFFFF - HWRM
16585 	 */
16586 	uint16_t	target_id;
16587 	/*
16588 	 * A physical address pointer pointing to a host buffer that the
16589 	 * command's response data will be written. This can be either a host
16590 	 * physical address (HPA) or a guest physical address (GPA) and must
16591 	 * point to a physically contiguous block of memory.
16592 	 */
16593 	uint64_t	resp_addr;
16594 	uint32_t	flags;
16595 	/*
16596 	 * When this bit is '1', the function driver is notifying
16597 	 * the HWRM to prepare for the shutdown.
16598 	 */
16599 	#define HWRM_FUNC_DRV_UNRGTR_INPUT_FLAGS_PREPARE_FOR_SHUTDOWN \
16600 		UINT32_C(0x1)
16601 	uint8_t	unused_0[4];
16602 } __rte_packed;
16603 
16604 /* hwrm_func_drv_unrgtr_output (size:128b/16B) */
16605 struct hwrm_func_drv_unrgtr_output {
16606 	/* The specific error status for the command. */
16607 	uint16_t	error_code;
16608 	/* The HWRM command request type. */
16609 	uint16_t	req_type;
16610 	/* The sequence ID from the original command. */
16611 	uint16_t	seq_id;
16612 	/* The length of the response data in number of bytes. */
16613 	uint16_t	resp_len;
16614 	uint8_t	unused_0[7];
16615 	/*
16616 	 * This field is used in Output records to indicate that the output
16617 	 * is completely written to RAM.  This field should be read as '1'
16618 	 * to indicate that the output has been completely written.
16619 	 * When writing a command completion or response to an internal processor,
16620 	 * the order of writes has to be such that this field is written last.
16621 	 */
16622 	uint8_t	valid;
16623 } __rte_packed;
16624 
16625 /**********************
16626  * hwrm_func_buf_rgtr *
16627  **********************/
16628 
16629 
16630 /* hwrm_func_buf_rgtr_input (size:1024b/128B) */
16631 struct hwrm_func_buf_rgtr_input {
16632 	/* The HWRM command request type. */
16633 	uint16_t	req_type;
16634 	/*
16635 	 * The completion ring to send the completion event on. This should
16636 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
16637 	 */
16638 	uint16_t	cmpl_ring;
16639 	/*
16640 	 * The sequence ID is used by the driver for tracking multiple
16641 	 * commands. This ID is treated as opaque data by the firmware and
16642 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
16643 	 */
16644 	uint16_t	seq_id;
16645 	/*
16646 	 * The target ID of the command:
16647 	 * * 0x0-0xFFF8 - The function ID
16648 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16649 	 * * 0xFFFD - Reserved for user-space HWRM interface
16650 	 * * 0xFFFF - HWRM
16651 	 */
16652 	uint16_t	target_id;
16653 	/*
16654 	 * A physical address pointer pointing to a host buffer that the
16655 	 * command's response data will be written. This can be either a host
16656 	 * physical address (HPA) or a guest physical address (GPA) and must
16657 	 * point to a physically contiguous block of memory.
16658 	 */
16659 	uint64_t	resp_addr;
16660 	uint32_t	enables;
16661 	/*
16662 	 * This bit must be '1' for the vf_id field to be
16663 	 * configured.
16664 	 */
16665 	#define HWRM_FUNC_BUF_RGTR_INPUT_ENABLES_VF_ID            UINT32_C(0x1)
16666 	/*
16667 	 * This bit must be '1' for the err_buf_addr field to be
16668 	 * configured.
16669 	 */
16670 	#define HWRM_FUNC_BUF_RGTR_INPUT_ENABLES_ERR_BUF_ADDR     UINT32_C(0x2)
16671 	/*
16672 	 * This value is used to identify a Virtual Function (VF).
16673 	 * The scope of VF ID is local within a PF.
16674 	 */
16675 	uint16_t	vf_id;
16676 	/*
16677 	 * This field represents the number of pages used for request
16678 	 * buffer(s).
16679 	 */
16680 	uint16_t	req_buf_num_pages;
16681 	/*
16682 	 * This field represents the page size used for request
16683 	 * buffer(s).
16684 	 */
16685 	uint16_t	req_buf_page_size;
16686 	/* 16 bytes */
16687 	#define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_16B UINT32_C(0x4)
16688 	/* 4 Kbytes */
16689 	#define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_4K  UINT32_C(0xc)
16690 	/* 8 Kbytes */
16691 	#define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_8K  UINT32_C(0xd)
16692 	/* 64 Kbytes */
16693 	#define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_64K UINT32_C(0x10)
16694 	/* 2 Mbytes */
16695 	#define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_2M  UINT32_C(0x15)
16696 	/* 4 Mbytes */
16697 	#define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_4M  UINT32_C(0x16)
16698 	/* 1 Gbytes */
16699 	#define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_1G  UINT32_C(0x1e)
16700 	#define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_LAST \
16701 		HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_1G
16702 	/* The length of the request buffer per VF in bytes. */
16703 	uint16_t	req_buf_len;
16704 	/* The length of the response buffer in bytes. */
16705 	uint16_t	resp_buf_len;
16706 	uint8_t	unused_0[2];
16707 	/* This field represents the page address of page #0. */
16708 	uint64_t	req_buf_page_addr0;
16709 	/* This field represents the page address of page #1. */
16710 	uint64_t	req_buf_page_addr1;
16711 	/* This field represents the page address of page #2. */
16712 	uint64_t	req_buf_page_addr2;
16713 	/* This field represents the page address of page #3. */
16714 	uint64_t	req_buf_page_addr3;
16715 	/* This field represents the page address of page #4. */
16716 	uint64_t	req_buf_page_addr4;
16717 	/* This field represents the page address of page #5. */
16718 	uint64_t	req_buf_page_addr5;
16719 	/* This field represents the page address of page #6. */
16720 	uint64_t	req_buf_page_addr6;
16721 	/* This field represents the page address of page #7. */
16722 	uint64_t	req_buf_page_addr7;
16723 	/* This field represents the page address of page #8. */
16724 	uint64_t	req_buf_page_addr8;
16725 	/* This field represents the page address of page #9. */
16726 	uint64_t	req_buf_page_addr9;
16727 	/*
16728 	 * This field is used to receive the error reporting from
16729 	 * the chipset. Only applicable for PFs.
16730 	 */
16731 	uint64_t	error_buf_addr;
16732 	/*
16733 	 * This field is used to receive the response forwarded by the
16734 	 * HWRM.
16735 	 */
16736 	uint64_t	resp_buf_addr;
16737 } __rte_packed;
16738 
16739 /* hwrm_func_buf_rgtr_output (size:128b/16B) */
16740 struct hwrm_func_buf_rgtr_output {
16741 	/* The specific error status for the command. */
16742 	uint16_t	error_code;
16743 	/* The HWRM command request type. */
16744 	uint16_t	req_type;
16745 	/* The sequence ID from the original command. */
16746 	uint16_t	seq_id;
16747 	/* The length of the response data in number of bytes. */
16748 	uint16_t	resp_len;
16749 	uint8_t	unused_0[7];
16750 	/*
16751 	 * This field is used in Output records to indicate that the output
16752 	 * is completely written to RAM.  This field should be read as '1'
16753 	 * to indicate that the output has been completely written.
16754 	 * When writing a command completion or response to an internal processor,
16755 	 * the order of writes has to be such that this field is written last.
16756 	 */
16757 	uint8_t	valid;
16758 } __rte_packed;
16759 
16760 /************************
16761  * hwrm_func_buf_unrgtr *
16762  ************************/
16763 
16764 
16765 /* hwrm_func_buf_unrgtr_input (size:192b/24B) */
16766 struct hwrm_func_buf_unrgtr_input {
16767 	/* The HWRM command request type. */
16768 	uint16_t	req_type;
16769 	/*
16770 	 * The completion ring to send the completion event on. This should
16771 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
16772 	 */
16773 	uint16_t	cmpl_ring;
16774 	/*
16775 	 * The sequence ID is used by the driver for tracking multiple
16776 	 * commands. This ID is treated as opaque data by the firmware and
16777 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
16778 	 */
16779 	uint16_t	seq_id;
16780 	/*
16781 	 * The target ID of the command:
16782 	 * * 0x0-0xFFF8 - The function ID
16783 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16784 	 * * 0xFFFD - Reserved for user-space HWRM interface
16785 	 * * 0xFFFF - HWRM
16786 	 */
16787 	uint16_t	target_id;
16788 	/*
16789 	 * A physical address pointer pointing to a host buffer that the
16790 	 * command's response data will be written. This can be either a host
16791 	 * physical address (HPA) or a guest physical address (GPA) and must
16792 	 * point to a physically contiguous block of memory.
16793 	 */
16794 	uint64_t	resp_addr;
16795 	uint32_t	enables;
16796 	/*
16797 	 * This bit must be '1' for the vf_id field to be
16798 	 * configured.
16799 	 */
16800 	#define HWRM_FUNC_BUF_UNRGTR_INPUT_ENABLES_VF_ID     UINT32_C(0x1)
16801 	/*
16802 	 * This value is used to identify a Virtual Function (VF).
16803 	 * The scope of VF ID is local within a PF.
16804 	 */
16805 	uint16_t	vf_id;
16806 	uint8_t	unused_0[2];
16807 } __rte_packed;
16808 
16809 /* hwrm_func_buf_unrgtr_output (size:128b/16B) */
16810 struct hwrm_func_buf_unrgtr_output {
16811 	/* The specific error status for the command. */
16812 	uint16_t	error_code;
16813 	/* The HWRM command request type. */
16814 	uint16_t	req_type;
16815 	/* The sequence ID from the original command. */
16816 	uint16_t	seq_id;
16817 	/* The length of the response data in number of bytes. */
16818 	uint16_t	resp_len;
16819 	uint8_t	unused_0[7];
16820 	/*
16821 	 * This field is used in Output records to indicate that the output
16822 	 * is completely written to RAM.  This field should be read as '1'
16823 	 * to indicate that the output has been completely written.
16824 	 * When writing a command completion or response to an internal processor,
16825 	 * the order of writes has to be such that this field is written last.
16826 	 */
16827 	uint8_t	valid;
16828 } __rte_packed;
16829 
16830 /**********************
16831  * hwrm_func_drv_qver *
16832  **********************/
16833 
16834 
16835 /* hwrm_func_drv_qver_input (size:192b/24B) */
16836 struct hwrm_func_drv_qver_input {
16837 	/* The HWRM command request type. */
16838 	uint16_t	req_type;
16839 	/*
16840 	 * The completion ring to send the completion event on. This should
16841 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
16842 	 */
16843 	uint16_t	cmpl_ring;
16844 	/*
16845 	 * The sequence ID is used by the driver for tracking multiple
16846 	 * commands. This ID is treated as opaque data by the firmware and
16847 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
16848 	 */
16849 	uint16_t	seq_id;
16850 	/*
16851 	 * The target ID of the command:
16852 	 * * 0x0-0xFFF8 - The function ID
16853 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16854 	 * * 0xFFFD - Reserved for user-space HWRM interface
16855 	 * * 0xFFFF - HWRM
16856 	 */
16857 	uint16_t	target_id;
16858 	/*
16859 	 * A physical address pointer pointing to a host buffer that the
16860 	 * command's response data will be written. This can be either a host
16861 	 * physical address (HPA) or a guest physical address (GPA) and must
16862 	 * point to a physically contiguous block of memory.
16863 	 */
16864 	uint64_t	resp_addr;
16865 	/* Reserved for future use. */
16866 	uint32_t	reserved;
16867 	/*
16868 	 * Function ID of the function that is being queried.
16869 	 * 0xFF... (All Fs) if the query is for the requesting
16870 	 * function.
16871 	 */
16872 	uint16_t	fid;
16873 	uint8_t	unused_0[2];
16874 } __rte_packed;
16875 
16876 /* hwrm_func_drv_qver_output (size:256b/32B) */
16877 struct hwrm_func_drv_qver_output {
16878 	/* The specific error status for the command. */
16879 	uint16_t	error_code;
16880 	/* The HWRM command request type. */
16881 	uint16_t	req_type;
16882 	/* The sequence ID from the original command. */
16883 	uint16_t	seq_id;
16884 	/* The length of the response data in number of bytes. */
16885 	uint16_t	resp_len;
16886 	/* This value indicates the type of OS.  The values are based on CIM_OperatingSystem.mof file as published by the DMTF. */
16887 	uint16_t	os_type;
16888 	/* Unknown */
16889 	#define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_UNKNOWN   UINT32_C(0x0)
16890 	/* Other OS not listed below. */
16891 	#define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_OTHER     UINT32_C(0x1)
16892 	/* MSDOS OS. */
16893 	#define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_MSDOS     UINT32_C(0xe)
16894 	/* Windows OS. */
16895 	#define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_WINDOWS   UINT32_C(0x12)
16896 	/* Solaris OS. */
16897 	#define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_SOLARIS   UINT32_C(0x1d)
16898 	/* Linux OS. */
16899 	#define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_LINUX     UINT32_C(0x24)
16900 	/* FreeBSD OS. */
16901 	#define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_FREEBSD   UINT32_C(0x2a)
16902 	/* VMware ESXi OS. */
16903 	#define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_ESXI      UINT32_C(0x68)
16904 	/* Microsoft Windows 8 64-bit OS. */
16905 	#define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_WIN864    UINT32_C(0x73)
16906 	/* Microsoft Windows Server 2012 R2 OS. */
16907 	#define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_WIN2012R2 UINT32_C(0x74)
16908 	/* UEFI driver. */
16909 	#define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_UEFI      UINT32_C(0x8000)
16910 	#define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_LAST \
16911 		HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_UEFI
16912 	/* This is the 8bit major version of the driver. */
16913 	uint8_t	ver_maj_8b;
16914 	/* This is the 8bit minor version of the driver. */
16915 	uint8_t	ver_min_8b;
16916 	/* This is the 8bit update version of the driver. */
16917 	uint8_t	ver_upd_8b;
16918 	uint8_t	unused_0[3];
16919 	/* This is the 16bit major version of the driver. */
16920 	uint16_t	ver_maj;
16921 	/* This is the 16bit minor version of the driver. */
16922 	uint16_t	ver_min;
16923 	/* This is the 16bit update version of the driver. */
16924 	uint16_t	ver_upd;
16925 	/* This is the 16bit patch version of the driver. */
16926 	uint16_t	ver_patch;
16927 	uint8_t	unused_1[7];
16928 	/*
16929 	 * This field is used in Output records to indicate that the output
16930 	 * is completely written to RAM.  This field should be read as '1'
16931 	 * to indicate that the output has been completely written.
16932 	 * When writing a command completion or response to an internal processor,
16933 	 * the order of writes has to be such that this field is written last.
16934 	 */
16935 	uint8_t	valid;
16936 } __rte_packed;
16937 
16938 /****************************
16939  * hwrm_func_resource_qcaps *
16940  ****************************/
16941 
16942 
16943 /* hwrm_func_resource_qcaps_input (size:192b/24B) */
16944 struct hwrm_func_resource_qcaps_input {
16945 	/* The HWRM command request type. */
16946 	uint16_t	req_type;
16947 	/*
16948 	 * The completion ring to send the completion event on. This should
16949 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
16950 	 */
16951 	uint16_t	cmpl_ring;
16952 	/*
16953 	 * The sequence ID is used by the driver for tracking multiple
16954 	 * commands. This ID is treated as opaque data by the firmware and
16955 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
16956 	 */
16957 	uint16_t	seq_id;
16958 	/*
16959 	 * The target ID of the command:
16960 	 * * 0x0-0xFFF8 - The function ID
16961 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16962 	 * * 0xFFFD - Reserved for user-space HWRM interface
16963 	 * * 0xFFFF - HWRM
16964 	 */
16965 	uint16_t	target_id;
16966 	/*
16967 	 * A physical address pointer pointing to a host buffer that the
16968 	 * command's response data will be written. This can be either a host
16969 	 * physical address (HPA) or a guest physical address (GPA) and must
16970 	 * point to a physically contiguous block of memory.
16971 	 */
16972 	uint64_t	resp_addr;
16973 	/*
16974 	 * Function ID of the function that is being queried.
16975 	 * 0xFF... (All Fs) if the query is for the requesting
16976 	 * function.
16977 	 */
16978 	uint16_t	fid;
16979 	uint8_t	unused_0[6];
16980 } __rte_packed;
16981 
16982 /* hwrm_func_resource_qcaps_output (size:512b/64B) */
16983 struct hwrm_func_resource_qcaps_output {
16984 	/* The specific error status for the command. */
16985 	uint16_t	error_code;
16986 	/* The HWRM command request type. */
16987 	uint16_t	req_type;
16988 	/* The sequence ID from the original command. */
16989 	uint16_t	seq_id;
16990 	/* The length of the response data in number of bytes. */
16991 	uint16_t	resp_len;
16992 	/* Maximum guaranteed number of VFs supported by PF. Not applicable for VFs. */
16993 	uint16_t	max_vfs;
16994 	/* Maximum guaranteed number of MSI-X vectors supported by function */
16995 	uint16_t	max_msix;
16996 	/* Hint of strategy to be used by PF driver to reserve resources for its VF */
16997 	uint16_t	vf_reservation_strategy;
16998 	/* The PF driver should evenly divide its remaining resources among all VFs. */
16999 	#define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_MAXIMAL \
17000 		UINT32_C(0x0)
17001 	/* The PF driver should only reserve minimal resources for each VF. */
17002 	#define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_MINIMAL \
17003 		UINT32_C(0x1)
17004 	/*
17005 	 * The PF driver should not reserve any resources for each VF until
17006 	 * the VF interface is brought up.
17007 	 */
17008 	#define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_MINIMAL_STATIC \
17009 		UINT32_C(0x2)
17010 	#define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_LAST \
17011 		HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_MINIMAL_STATIC
17012 	/* Minimum guaranteed number of RSS/COS contexts */
17013 	uint16_t	min_rsscos_ctx;
17014 	/* Maximum non-guaranteed number of RSS/COS contexts */
17015 	uint16_t	max_rsscos_ctx;
17016 	/* Minimum guaranteed number of completion rings */
17017 	uint16_t	min_cmpl_rings;
17018 	/* Maximum non-guaranteed number of completion rings */
17019 	uint16_t	max_cmpl_rings;
17020 	/* Minimum guaranteed number of transmit rings */
17021 	uint16_t	min_tx_rings;
17022 	/* Maximum non-guaranteed number of transmit rings */
17023 	uint16_t	max_tx_rings;
17024 	/* Minimum guaranteed number of receive rings */
17025 	uint16_t	min_rx_rings;
17026 	/* Maximum non-guaranteed number of receive rings */
17027 	uint16_t	max_rx_rings;
17028 	/* Minimum guaranteed number of L2 contexts */
17029 	uint16_t	min_l2_ctxs;
17030 	/* Maximum non-guaranteed number of L2 contexts */
17031 	uint16_t	max_l2_ctxs;
17032 	/* Minimum guaranteed number of VNICs */
17033 	uint16_t	min_vnics;
17034 	/* Maximum non-guaranteed number of VNICs */
17035 	uint16_t	max_vnics;
17036 	/* Minimum guaranteed number of statistic contexts */
17037 	uint16_t	min_stat_ctx;
17038 	/* Maximum non-guaranteed number of statistic contexts */
17039 	uint16_t	max_stat_ctx;
17040 	/* Minimum guaranteed number of ring groups */
17041 	uint16_t	min_hw_ring_grps;
17042 	/* Maximum non-guaranteed number of ring groups */
17043 	uint16_t	max_hw_ring_grps;
17044 	/*
17045 	 * Maximum number of inputs into the transmit scheduler for this function.
17046 	 * The number of TX rings assigned to the function cannot exceed this value.
17047 	 */
17048 	uint16_t	max_tx_scheduler_inputs;
17049 	uint16_t	flags;
17050 	/*
17051 	 * When this bit is '1', it indicates that VF_RESOURCE_CFG supports
17052 	 * feature to reserve all minimum resources when minimum >= 1, otherwise
17053 	 * returns an error.
17054 	 */
17055 	#define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_FLAGS_MIN_GUARANTEED \
17056 		UINT32_C(0x1)
17057 	/* Minimum guaranteed number of Tx Key Contexts */
17058 	uint16_t	min_tx_key_ctxs;
17059 	/* Maximum non-guaranteed number of Tx Key Contexts */
17060 	uint16_t	max_tx_key_ctxs;
17061 	/* Minimum guaranteed number of Rx Key Contexts */
17062 	uint16_t	min_rx_key_ctxs;
17063 	/* Maximum non-guaranteed number of Rx Key Contexts */
17064 	uint16_t	max_rx_key_ctxs;
17065 	uint8_t	unused_0[5];
17066 	/*
17067 	 * This field is used in Output records to indicate that the output
17068 	 * is completely written to RAM.  This field should be read as '1'
17069 	 * to indicate that the output has been completely written.
17070 	 * When writing a command completion or response to an internal processor,
17071 	 * the order of writes has to be such that this field is written last.
17072 	 */
17073 	uint8_t	valid;
17074 } __rte_packed;
17075 
17076 /*****************************
17077  * hwrm_func_vf_resource_cfg *
17078  *****************************/
17079 
17080 
17081 /* hwrm_func_vf_resource_cfg_input (size:512b/64B) */
17082 struct hwrm_func_vf_resource_cfg_input {
17083 	/* The HWRM command request type. */
17084 	uint16_t	req_type;
17085 	/*
17086 	 * The completion ring to send the completion event on. This should
17087 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
17088 	 */
17089 	uint16_t	cmpl_ring;
17090 	/*
17091 	 * The sequence ID is used by the driver for tracking multiple
17092 	 * commands. This ID is treated as opaque data by the firmware and
17093 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
17094 	 */
17095 	uint16_t	seq_id;
17096 	/*
17097 	 * The target ID of the command:
17098 	 * * 0x0-0xFFF8 - The function ID
17099 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
17100 	 * * 0xFFFD - Reserved for user-space HWRM interface
17101 	 * * 0xFFFF - HWRM
17102 	 */
17103 	uint16_t	target_id;
17104 	/*
17105 	 * A physical address pointer pointing to a host buffer that the
17106 	 * command's response data will be written. This can be either a host
17107 	 * physical address (HPA) or a guest physical address (GPA) and must
17108 	 * point to a physically contiguous block of memory.
17109 	 */
17110 	uint64_t	resp_addr;
17111 	/* VF ID that is being configured by PF */
17112 	uint16_t	vf_id;
17113 	/* Maximum guaranteed number of MSI-X vectors for the function */
17114 	uint16_t	max_msix;
17115 	/* Minimum guaranteed number of RSS/COS contexts */
17116 	uint16_t	min_rsscos_ctx;
17117 	/* Maximum non-guaranteed number of RSS/COS contexts */
17118 	uint16_t	max_rsscos_ctx;
17119 	/* Minimum guaranteed number of completion rings */
17120 	uint16_t	min_cmpl_rings;
17121 	/* Maximum non-guaranteed number of completion rings */
17122 	uint16_t	max_cmpl_rings;
17123 	/* Minimum guaranteed number of transmit rings */
17124 	uint16_t	min_tx_rings;
17125 	/* Maximum non-guaranteed number of transmit rings */
17126 	uint16_t	max_tx_rings;
17127 	/* Minimum guaranteed number of receive rings */
17128 	uint16_t	min_rx_rings;
17129 	/* Maximum non-guaranteed number of receive rings */
17130 	uint16_t	max_rx_rings;
17131 	/* Minimum guaranteed number of L2 contexts */
17132 	uint16_t	min_l2_ctxs;
17133 	/* Maximum non-guaranteed number of L2 contexts */
17134 	uint16_t	max_l2_ctxs;
17135 	/* Minimum guaranteed number of VNICs */
17136 	uint16_t	min_vnics;
17137 	/* Maximum non-guaranteed number of VNICs */
17138 	uint16_t	max_vnics;
17139 	/* Minimum guaranteed number of statistic contexts */
17140 	uint16_t	min_stat_ctx;
17141 	/* Maximum non-guaranteed number of statistic contexts */
17142 	uint16_t	max_stat_ctx;
17143 	/* Minimum guaranteed number of ring groups */
17144 	uint16_t	min_hw_ring_grps;
17145 	/* Maximum non-guaranteed number of ring groups */
17146 	uint16_t	max_hw_ring_grps;
17147 	uint16_t	flags;
17148 	/*
17149 	 * If this bit is set, all minimum resources requested should be
17150 	 * reserved if minimum >= 1, otherwise return error. In case of
17151 	 * error, keep all existing reservations before the call.
17152 	 */
17153 	#define HWRM_FUNC_VF_RESOURCE_CFG_INPUT_FLAGS_MIN_GUARANTEED \
17154 		UINT32_C(0x1)
17155 	/* Minimum guaranteed number of Tx Key Contexts */
17156 	uint16_t	min_tx_key_ctxs;
17157 	/* Maximum non-guaranteed number of Tx Key Contexts */
17158 	uint16_t	max_tx_key_ctxs;
17159 	/* Minimum guaranteed number of Rx Key Contexts */
17160 	uint16_t	min_rx_key_ctxs;
17161 	/* Maximum non-guaranteed number of Rx Key Contexts */
17162 	uint16_t	max_rx_key_ctxs;
17163 	uint8_t	unused_0[2];
17164 } __rte_packed;
17165 
17166 /* hwrm_func_vf_resource_cfg_output (size:256b/32B) */
17167 struct hwrm_func_vf_resource_cfg_output {
17168 	/* The specific error status for the command. */
17169 	uint16_t	error_code;
17170 	/* The HWRM command request type. */
17171 	uint16_t	req_type;
17172 	/* The sequence ID from the original command. */
17173 	uint16_t	seq_id;
17174 	/* The length of the response data in number of bytes. */
17175 	uint16_t	resp_len;
17176 	/* Reserved number of RSS/COS contexts */
17177 	uint16_t	reserved_rsscos_ctx;
17178 	/* Reserved number of completion rings */
17179 	uint16_t	reserved_cmpl_rings;
17180 	/* Reserved number of transmit rings */
17181 	uint16_t	reserved_tx_rings;
17182 	/* Reserved number of receive rings */
17183 	uint16_t	reserved_rx_rings;
17184 	/* Reserved number of L2 contexts */
17185 	uint16_t	reserved_l2_ctxs;
17186 	/* Reserved number of VNICs */
17187 	uint16_t	reserved_vnics;
17188 	/* Reserved number of statistic contexts */
17189 	uint16_t	reserved_stat_ctx;
17190 	/* Reserved number of ring groups */
17191 	uint16_t	reserved_hw_ring_grps;
17192 	/* Actual number of Tx Key Contexts reserved */
17193 	uint16_t	reserved_tx_key_ctxs;
17194 	/* Actual number of Rx Key Contexts reserved */
17195 	uint16_t	reserved_rx_key_ctxs;
17196 	uint8_t	unused_0[3];
17197 	/*
17198 	 * This field is used in Output records to indicate that the output
17199 	 * is completely written to RAM.  This field should be read as '1'
17200 	 * to indicate that the output has been completely written.
17201 	 * When writing a command completion or response to an internal processor,
17202 	 * the order of writes has to be such that this field is written last.
17203 	 */
17204 	uint8_t	valid;
17205 } __rte_packed;
17206 
17207 /*********************************
17208  * hwrm_func_backing_store_qcaps *
17209  *********************************/
17210 
17211 
17212 /* hwrm_func_backing_store_qcaps_input (size:128b/16B) */
17213 struct hwrm_func_backing_store_qcaps_input {
17214 	/* The HWRM command request type. */
17215 	uint16_t	req_type;
17216 	/*
17217 	 * The completion ring to send the completion event on. This should
17218 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
17219 	 */
17220 	uint16_t	cmpl_ring;
17221 	/*
17222 	 * The sequence ID is used by the driver for tracking multiple
17223 	 * commands. This ID is treated as opaque data by the firmware and
17224 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
17225 	 */
17226 	uint16_t	seq_id;
17227 	/*
17228 	 * The target ID of the command:
17229 	 * * 0x0-0xFFF8 - The function ID
17230 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
17231 	 * * 0xFFFD - Reserved for user-space HWRM interface
17232 	 * * 0xFFFF - HWRM
17233 	 */
17234 	uint16_t	target_id;
17235 	/*
17236 	 * A physical address pointer pointing to a host buffer that the
17237 	 * command's response data will be written. This can be either a host
17238 	 * physical address (HPA) or a guest physical address (GPA) and must
17239 	 * point to a physically contiguous block of memory.
17240 	 */
17241 	uint64_t	resp_addr;
17242 } __rte_packed;
17243 
17244 /* hwrm_func_backing_store_qcaps_output (size:832b/104B) */
17245 struct hwrm_func_backing_store_qcaps_output {
17246 	/* The specific error status for the command. */
17247 	uint16_t	error_code;
17248 	/* The HWRM command request type. */
17249 	uint16_t	req_type;
17250 	/* The sequence ID from the original command. */
17251 	uint16_t	seq_id;
17252 	/* The length of the response data in number of bytes. */
17253 	uint16_t	resp_len;
17254 	/* Maximum number of QP context entries supported for this function. */
17255 	uint32_t	qp_max_entries;
17256 	/*
17257 	 * Minimum number of QP context entries that are needed to be reserved
17258 	 * for QP1 for the PF and its VFs. PF drivers must allocate at least
17259 	 * this many QP context entries, even if RoCE will not be used.
17260 	 */
17261 	uint16_t	qp_min_qp1_entries;
17262 	/*
17263 	 * Maximum number of QP context entries that can be used for L2 and
17264 	 * mid-path.
17265 	 */
17266 	uint16_t	qp_max_l2_entries;
17267 	/* Number of bytes that must be allocated for each context entry. */
17268 	uint16_t	qp_entry_size;
17269 	/* Maximum number of SRQ context entries that can be used for L2. */
17270 	uint16_t	srq_max_l2_entries;
17271 	/* Maximum number of SRQ context entries supported for this function. */
17272 	uint32_t	srq_max_entries;
17273 	/* Number of bytes that must be allocated for each context entry. */
17274 	uint16_t	srq_entry_size;
17275 	/* Maximum number of CQ context entries that can be used for L2. */
17276 	uint16_t	cq_max_l2_entries;
17277 	/* Maximum number of CQ context entries supported for this function. */
17278 	uint32_t	cq_max_entries;
17279 	/* Number of bytes that must be allocated for each context entry. */
17280 	uint16_t	cq_entry_size;
17281 	/* Maximum number of VNIC context entries supported for this function. */
17282 	uint16_t	vnic_max_vnic_entries;
17283 	/* Maximum number of Ring table context entries supported for this function. */
17284 	uint16_t	vnic_max_ring_table_entries;
17285 	/* Number of bytes that must be allocated for each context entry. */
17286 	uint16_t	vnic_entry_size;
17287 	/* Maximum number of statistic context entries supported for this function. */
17288 	uint32_t	stat_max_entries;
17289 	/* Number of bytes that must be allocated for each context entry. */
17290 	uint16_t	stat_entry_size;
17291 	/* Number of bytes that must be allocated for each context entry. */
17292 	uint16_t	tqm_entry_size;
17293 	/* Minimum number of TQM context entries required per ring. */
17294 	uint32_t	tqm_min_entries_per_ring;
17295 	/*
17296 	 * Maximum number of TQM context entries supported per ring. This is
17297 	 * actually a recommended TQM queue size based on worst case usage of
17298 	 * the TQM queue.
17299 	 *
17300 	 * TQM fastpath rings should be sized large enough to accommodate the
17301 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
17302 	 * that can be enqueued to the TQM ring.
17303 	 *
17304 	 * TQM slowpath rings should be sized as follows:
17305 	 *
17306 	 * num_entries = num_vnics + num_l2_tx_rings + 2 * num_roce_qps + tqm_min_size
17307 	 *
17308 	 * Where:
17309 	 *   num_vnics is the number of VNICs allocated in the VNIC backing store
17310 	 *   num_l2_tx_rings is the number of L2 rings in the QP backing store
17311 	 *   num_roce_qps is the number of RoCE QPs in the QP backing store
17312 	 *   tqm_min_size is tqm_min_entries_per_ring reported by
17313 	 *     HWRM_FUNC_BACKING_STORE_QCAPS
17314 	 *
17315 	 * Note that TQM ring sizes cannot be extended while the system is
17316 	 * operational. If a PF driver needs to extend a TQM ring, it needs
17317 	 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
17318 	 * the backing store.
17319 	 */
17320 	uint32_t	tqm_max_entries_per_ring;
17321 	/*
17322 	 * Maximum number of MR plus AV context entries supported for this
17323 	 * function.
17324 	 */
17325 	uint32_t	mrav_max_entries;
17326 	/* Number of bytes that must be allocated for each context entry. */
17327 	uint16_t	mrav_entry_size;
17328 	/* Number of bytes that must be allocated for each context entry. */
17329 	uint16_t	tim_entry_size;
17330 	/* Maximum number of Timer context entries supported for this function. */
17331 	uint32_t	tim_max_entries;
17332 	/*
17333 	 * When this field is zero, the 32b `mrav_num_entries` field in the
17334 	 * `backing_store_cfg` and `backing_store_qcfg` commands represents
17335 	 * the total number of MR plus AV entries allowed in the MR/AV backing
17336 	 * store PBL.
17337 	 *
17338 	 * When this field is non-zero, the 32b `mrav_num_entries` field in
17339 	 * the `backing_store_cfg` and `backing_store_qcfg` commands is
17340 	 * logically divided into two 16b fields. Bits `[31:16]` represents
17341 	 * the `mr_num_entries` and bits `[15:0]` represents `av_num_entries`.
17342 	 * Both of these values are represented in a unit granularity
17343 	 * specified by this field. For example, if this field is 16 and
17344 	 * `mrav_num_entries` is `0x02000100`, then the number of MR entries
17345 	 * is 8192 and the number of AV entries is 4096.
17346 	 */
17347 	uint16_t	mrav_num_entries_units;
17348 	/*
17349 	 * The number of entries specified for any TQM ring must be a
17350 	 * multiple of this value to prevent any resource allocation
17351 	 * limitations.
17352 	 */
17353 	uint8_t	tqm_entries_multiple;
17354 	/*
17355 	 * Initializer to be used by drivers
17356 	 * to initialize context memory to ensure
17357 	 * context subsystem flags an error for an attack
17358 	 * before the first time context load.
17359 	 */
17360 	uint8_t	ctx_kind_initializer;
17361 	/*
17362 	 * Specifies which context kinds need to be initialized with the
17363 	 * ctx_kind_initializer.
17364 	 */
17365 	uint16_t	ctx_init_mask;
17366 	/*
17367 	 * If this bit is '1' then this context type should be initialized
17368 	 * with the ctx_kind_initializer at the specified offset.
17369 	 */
17370 	#define HWRM_FUNC_BACKING_STORE_QCAPS_OUTPUT_CTX_INIT_MASK_QP \
17371 		UINT32_C(0x1)
17372 	/*
17373 	 * If this bit is '1' then this context type should be initialized
17374 	 * with the ctx_kind_initializer at the specified offset.
17375 	 */
17376 	#define HWRM_FUNC_BACKING_STORE_QCAPS_OUTPUT_CTX_INIT_MASK_SRQ \
17377 		UINT32_C(0x2)
17378 	/*
17379 	 * If this bit is '1' then this context type should be initialized
17380 	 * with the ctx_kind_initializer at the specified offset.
17381 	 */
17382 	#define HWRM_FUNC_BACKING_STORE_QCAPS_OUTPUT_CTX_INIT_MASK_CQ \
17383 		UINT32_C(0x4)
17384 	/*
17385 	 * If this bit is '1' then this context type should be initialized
17386 	 * with the ctx_kind_initializer at the specified offset.
17387 	 */
17388 	#define HWRM_FUNC_BACKING_STORE_QCAPS_OUTPUT_CTX_INIT_MASK_VNIC \
17389 		UINT32_C(0x8)
17390 	/*
17391 	 * If this bit is '1' then this context type should be initialized
17392 	 * with the ctx_kind_initializer at the specified offset.
17393 	 */
17394 	#define HWRM_FUNC_BACKING_STORE_QCAPS_OUTPUT_CTX_INIT_MASK_STAT \
17395 		UINT32_C(0x10)
17396 	/*
17397 	 * If this bit is '1' then this context type should be initialized
17398 	 * with the ctx_kind_initializer at the specified offset.
17399 	 */
17400 	#define HWRM_FUNC_BACKING_STORE_QCAPS_OUTPUT_CTX_INIT_MASK_MRAV \
17401 		UINT32_C(0x20)
17402 	/*
17403 	 * If this bit is '1' then the Tx KTLS context type should be
17404 	 * initialized with the ctx_kind_initializer at the specified offset.
17405 	 */
17406 	#define HWRM_FUNC_BACKING_STORE_QCAPS_OUTPUT_CTX_INIT_MASK_TKC \
17407 		UINT32_C(0x40)
17408 	/*
17409 	 * If this bit is '1' then the Rx KTLS context type should be
17410 	 * initialized with the ctx_kind_initializer at the specified offset.
17411 	 */
17412 	#define HWRM_FUNC_BACKING_STORE_QCAPS_OUTPUT_CTX_INIT_MASK_RKC \
17413 		UINT32_C(0x80)
17414 	/*
17415 	 * Specifies the doubleword offset of ctx_kind_initializer for this
17416 	 * context type.
17417 	 */
17418 	uint8_t	qp_init_offset;
17419 	/*
17420 	 * Specifies the doubleword offset of ctx_kind_initializer for this
17421 	 * context type.
17422 	 */
17423 	uint8_t	srq_init_offset;
17424 	/*
17425 	 * Specifies the doubleword offset of ctx_kind_initializer for this
17426 	 * context type.
17427 	 */
17428 	uint8_t	cq_init_offset;
17429 	/*
17430 	 * Specifies the doubleword offset of ctx_kind_initializer for this
17431 	 * context type.
17432 	 */
17433 	uint8_t	vnic_init_offset;
17434 	/*
17435 	 * Count of TQM fastpath rings to be used for allocating backing store.
17436 	 * Backing store configuration must be specified for each TQM ring from
17437 	 * this count in `backing_store_cfg`.
17438 	 * Only first 8 TQM FP rings will be advertised with this field.
17439 	 */
17440 	uint8_t	tqm_fp_rings_count;
17441 	/*
17442 	 * Specifies the doubleword offset of ctx_kind_initializer for this
17443 	 * context type.
17444 	 */
17445 	uint8_t	stat_init_offset;
17446 	/*
17447 	 * Specifies the doubleword offset of ctx_kind_initializer for this
17448 	 * context type.
17449 	 */
17450 	uint8_t	mrav_init_offset;
17451 	/*
17452 	 * Count of TQM extended fastpath rings to be used for allocating
17453 	 * backing store beyond 8 rings(rings 9,10,11)
17454 	 * Backing store configuration must be specified for each TQM ring from
17455 	 * this count in `backing_store_cfg`.
17456 	 */
17457 	uint8_t	tqm_fp_rings_count_ext;
17458 	/*
17459 	 * Specifies the doubleword offset of ctx_kind_initializer for Tx
17460 	 * KTLS context type.
17461 	 */
17462 	uint8_t	tkc_init_offset;
17463 	/*
17464 	 * Specifies the doubleword offset of ctx_kind_initializer for Rx
17465 	 * KTLS context type.
17466 	 */
17467 	uint8_t	rkc_init_offset;
17468 	/* Tx KTLS context entry size in bytes. */
17469 	uint16_t	tkc_entry_size;
17470 	/* Rx KTLS context entry size in bytes. */
17471 	uint16_t	rkc_entry_size;
17472 	/*
17473 	 * Maximum number of Tx KTLS context entries supported for this
17474 	 * function.
17475 	 */
17476 	uint32_t	tkc_max_entries;
17477 	/*
17478 	 * Maximum number of Rx KTLS context entries supported for this
17479 	 * function.
17480 	 */
17481 	uint32_t	rkc_max_entries;
17482 	/* Reserved for future. */
17483 	uint8_t	rsvd1[7];
17484 	/*
17485 	 * This field is used in Output records to indicate that the output
17486 	 * is completely written to RAM.  This field should be read as '1'
17487 	 * to indicate that the output has been completely written.
17488 	 * When writing a command completion or response to an internal processor,
17489 	 * the order of writes has to be such that this field is written last.
17490 	 */
17491 	uint8_t	valid;
17492 } __rte_packed;
17493 
17494 /* tqm_fp_ring_cfg (size:128b/16B) */
17495 struct tqm_fp_ring_cfg {
17496 	/* TQM ring page size and level. */
17497 	uint8_t	tqm_ring_pg_size_tqm_ring_lvl;
17498 	/* TQM ring PBL indirect levels. */
17499 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_LVL_MASK \
17500 		UINT32_C(0xf)
17501 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_LVL_SFT       0
17502 	/* PBL pointer is physical start address. */
17503 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_LVL_LVL_0 \
17504 		UINT32_C(0x0)
17505 	/* PBL pointer points to PTE table. */
17506 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_LVL_LVL_1 \
17507 		UINT32_C(0x1)
17508 	/*
17509 	 * PBL pointer points to PDE table with each entry pointing to
17510 	 * PTE tables.
17511 	 */
17512 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_LVL_LVL_2 \
17513 		UINT32_C(0x2)
17514 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_LVL_LAST \
17515 		TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_LVL_LVL_2
17516 	/* TQM ring page size. */
17517 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_PG_SIZE_MASK \
17518 		UINT32_C(0xf0)
17519 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_PG_SIZE_SFT   4
17520 	/* 4KB. */
17521 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_PG_SIZE_PG_4K \
17522 		(UINT32_C(0x0) << 4)
17523 	/* 8KB. */
17524 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_PG_SIZE_PG_8K \
17525 		(UINT32_C(0x1) << 4)
17526 	/* 64KB. */
17527 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_PG_SIZE_PG_64K \
17528 		(UINT32_C(0x2) << 4)
17529 	/* 2MB. */
17530 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_PG_SIZE_PG_2M \
17531 		(UINT32_C(0x3) << 4)
17532 	/* 8MB. */
17533 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_PG_SIZE_PG_8M \
17534 		(UINT32_C(0x4) << 4)
17535 	/* 1GB. */
17536 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_PG_SIZE_PG_1G \
17537 		(UINT32_C(0x5) << 4)
17538 	#define TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_PG_SIZE_LAST \
17539 		TQM_FP_RING_CFG_TQM_RING_CFG_TQM_RING_PG_SIZE_PG_1G
17540 	uint8_t	unused[3];
17541 	/* Number of TQM ring entries. */
17542 	uint32_t	tqm_ring_num_entries;
17543 	/* TQM ring page directory. */
17544 	uint64_t	tqm_ring_page_dir;
17545 } __rte_packed;
17546 
17547 /*******************************
17548  * hwrm_func_backing_store_cfg *
17549  *******************************/
17550 
17551 
17552 /* hwrm_func_backing_store_cfg_input (size:2688b/336B) */
17553 struct hwrm_func_backing_store_cfg_input {
17554 	/* The HWRM command request type. */
17555 	uint16_t	req_type;
17556 	/*
17557 	 * The completion ring to send the completion event on. This should
17558 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
17559 	 */
17560 	uint16_t	cmpl_ring;
17561 	/*
17562 	 * The sequence ID is used by the driver for tracking multiple
17563 	 * commands. This ID is treated as opaque data by the firmware and
17564 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
17565 	 */
17566 	uint16_t	seq_id;
17567 	/*
17568 	 * The target ID of the command:
17569 	 * * 0x0-0xFFF8 - The function ID
17570 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
17571 	 * * 0xFFFD - Reserved for user-space HWRM interface
17572 	 * * 0xFFFF - HWRM
17573 	 */
17574 	uint16_t	target_id;
17575 	/*
17576 	 * A physical address pointer pointing to a host buffer that the
17577 	 * command's response data will be written. This can be either a host
17578 	 * physical address (HPA) or a guest physical address (GPA) and must
17579 	 * point to a physically contiguous block of memory.
17580 	 */
17581 	uint64_t	resp_addr;
17582 	uint32_t	flags;
17583 	/*
17584 	 * When set, the firmware only uses on-chip resources and does not
17585 	 * expect any backing store to be provided by the host driver. This
17586 	 * mode provides minimal L2 functionality (e.g. limited L2 resources,
17587 	 * no RoCE).
17588 	 */
17589 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_FLAGS_PREBOOT_MODE \
17590 		UINT32_C(0x1)
17591 	/*
17592 	 * When set, the 32b `mrav_num_entries` field is logically divided
17593 	 * into two 16b fields, `mr_num_entries` and `av_num_entries`.
17594 	 */
17595 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_FLAGS_MRAV_RESERVATION_SPLIT \
17596 		UINT32_C(0x2)
17597 	uint32_t	enables;
17598 	/*
17599 	 * This bit must be '1' for the qp fields to be
17600 	 * configured.
17601 	 */
17602 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_QP \
17603 		UINT32_C(0x1)
17604 	/*
17605 	 * This bit must be '1' for the srq fields to be
17606 	 * configured.
17607 	 */
17608 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_SRQ \
17609 		UINT32_C(0x2)
17610 	/*
17611 	 * This bit must be '1' for the cq fields to be
17612 	 * configured.
17613 	 */
17614 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_CQ \
17615 		UINT32_C(0x4)
17616 	/*
17617 	 * This bit must be '1' for the vnic fields to be
17618 	 * configured.
17619 	 */
17620 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_VNIC \
17621 		UINT32_C(0x8)
17622 	/*
17623 	 * This bit must be '1' for the stat fields to be
17624 	 * configured.
17625 	 */
17626 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_STAT \
17627 		UINT32_C(0x10)
17628 	/*
17629 	 * This bit must be '1' for the tqm_sp fields to be
17630 	 * configured.
17631 	 */
17632 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_SP \
17633 		UINT32_C(0x20)
17634 	/*
17635 	 * This bit must be '1' for the tqm_ring0 fields to be
17636 	 * configured.
17637 	 */
17638 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING0 \
17639 		UINT32_C(0x40)
17640 	/*
17641 	 * This bit must be '1' for the tqm_ring1 fields to be
17642 	 * configured.
17643 	 */
17644 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING1 \
17645 		UINT32_C(0x80)
17646 	/*
17647 	 * This bit must be '1' for the tqm_ring2 fields to be
17648 	 * configured.
17649 	 */
17650 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING2 \
17651 		UINT32_C(0x100)
17652 	/*
17653 	 * This bit must be '1' for the tqm_ring3 fields to be
17654 	 * configured.
17655 	 */
17656 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING3 \
17657 		UINT32_C(0x200)
17658 	/*
17659 	 * This bit must be '1' for the tqm_ring4 fields to be
17660 	 * configured.
17661 	 */
17662 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING4 \
17663 		UINT32_C(0x400)
17664 	/*
17665 	 * This bit must be '1' for the tqm_ring5 fields to be
17666 	 * configured.
17667 	 */
17668 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING5 \
17669 		UINT32_C(0x800)
17670 	/*
17671 	 * This bit must be '1' for the tqm_ring6 fields to be
17672 	 * configured.
17673 	 */
17674 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING6 \
17675 		UINT32_C(0x1000)
17676 	/*
17677 	 * This bit must be '1' for the tqm_ring7 fields to be
17678 	 * configured.
17679 	 */
17680 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING7 \
17681 		UINT32_C(0x2000)
17682 	/*
17683 	 * This bit must be '1' for the mrav fields to be
17684 	 * configured.
17685 	 */
17686 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_MRAV \
17687 		UINT32_C(0x4000)
17688 	/*
17689 	 * This bit must be '1' for the tim fields to be
17690 	 * configured.
17691 	 */
17692 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TIM \
17693 		UINT32_C(0x8000)
17694 	/*
17695 	 * This bit must be '1' for the tqm_ring8 fields to be
17696 	 * configured.
17697 	 */
17698 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING8 \
17699 		UINT32_C(0x10000)
17700 	/*
17701 	 * This bit must be '1' for the tqm_ring9 fields to be
17702 	 * configured.
17703 	 */
17704 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING9 \
17705 		UINT32_C(0x20000)
17706 	/*
17707 	 * This bit must be '1' for the tqm_ring10 fields to be
17708 	 * configured.
17709 	 */
17710 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING10 \
17711 		UINT32_C(0x40000)
17712 	/*
17713 	 * This bit must be '1' for the Tx KTLS context
17714 	 * fields to be configured.
17715 	 */
17716 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TKC \
17717 		UINT32_C(0x80000)
17718 	/*
17719 	 * This bit must be '1' for the Rx KTLS context
17720 	 * fields to be configured.
17721 	 */
17722 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_RKC \
17723 		UINT32_C(0x100000)
17724 	/* QPC page size and level. */
17725 	uint8_t	qpc_pg_size_qpc_lvl;
17726 	/* QPC PBL indirect levels. */
17727 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_MASK \
17728 		UINT32_C(0xf)
17729 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_SFT       0
17730 	/* PBL pointer is physical start address. */
17731 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_0 \
17732 		UINT32_C(0x0)
17733 	/* PBL pointer points to PTE table. */
17734 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_1 \
17735 		UINT32_C(0x1)
17736 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
17737 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_2 \
17738 		UINT32_C(0x2)
17739 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LAST \
17740 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_2
17741 	/* QPC page size. */
17742 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_MASK \
17743 		UINT32_C(0xf0)
17744 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_SFT   4
17745 	/* 4KB. */
17746 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_4K \
17747 		(UINT32_C(0x0) << 4)
17748 	/* 8KB. */
17749 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_8K \
17750 		(UINT32_C(0x1) << 4)
17751 	/* 64KB. */
17752 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_64K \
17753 		(UINT32_C(0x2) << 4)
17754 	/* 2MB. */
17755 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_2M \
17756 		(UINT32_C(0x3) << 4)
17757 	/* 8MB. */
17758 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_8M \
17759 		(UINT32_C(0x4) << 4)
17760 	/* 1GB. */
17761 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_1G \
17762 		(UINT32_C(0x5) << 4)
17763 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_LAST \
17764 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_1G
17765 	/* SRQ page size and level. */
17766 	uint8_t	srq_pg_size_srq_lvl;
17767 	/* SRQ PBL indirect levels. */
17768 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_MASK \
17769 		UINT32_C(0xf)
17770 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_SFT       0
17771 	/* PBL pointer is physical start address. */
17772 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_0 \
17773 		UINT32_C(0x0)
17774 	/* PBL pointer points to PTE table. */
17775 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_1 \
17776 		UINT32_C(0x1)
17777 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
17778 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_2 \
17779 		UINT32_C(0x2)
17780 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LAST \
17781 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_2
17782 	/* SRQ page size. */
17783 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_MASK \
17784 		UINT32_C(0xf0)
17785 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_SFT   4
17786 	/* 4KB. */
17787 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_4K \
17788 		(UINT32_C(0x0) << 4)
17789 	/* 8KB. */
17790 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_8K \
17791 		(UINT32_C(0x1) << 4)
17792 	/* 64KB. */
17793 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_64K \
17794 		(UINT32_C(0x2) << 4)
17795 	/* 2MB. */
17796 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_2M \
17797 		(UINT32_C(0x3) << 4)
17798 	/* 8MB. */
17799 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_8M \
17800 		(UINT32_C(0x4) << 4)
17801 	/* 1GB. */
17802 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_1G \
17803 		(UINT32_C(0x5) << 4)
17804 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_LAST \
17805 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_1G
17806 	/* CQ page size and level. */
17807 	uint8_t	cq_pg_size_cq_lvl;
17808 	/* CQ PBL indirect levels. */
17809 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_MASK \
17810 		UINT32_C(0xf)
17811 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_SFT       0
17812 	/* PBL pointer is physical start address. */
17813 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_0 \
17814 		UINT32_C(0x0)
17815 	/* PBL pointer points to PTE table. */
17816 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_1 \
17817 		UINT32_C(0x1)
17818 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
17819 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_2 \
17820 		UINT32_C(0x2)
17821 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LAST \
17822 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_2
17823 	/* CQ page size. */
17824 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_MASK \
17825 		UINT32_C(0xf0)
17826 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_SFT   4
17827 	/* 4KB. */
17828 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_4K \
17829 		(UINT32_C(0x0) << 4)
17830 	/* 8KB. */
17831 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_8K \
17832 		(UINT32_C(0x1) << 4)
17833 	/* 64KB. */
17834 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_64K \
17835 		(UINT32_C(0x2) << 4)
17836 	/* 2MB. */
17837 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_2M \
17838 		(UINT32_C(0x3) << 4)
17839 	/* 8MB. */
17840 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_8M \
17841 		(UINT32_C(0x4) << 4)
17842 	/* 1GB. */
17843 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_1G \
17844 		(UINT32_C(0x5) << 4)
17845 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_LAST \
17846 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_1G
17847 	/* VNIC page size and level. */
17848 	uint8_t	vnic_pg_size_vnic_lvl;
17849 	/* VNIC PBL indirect levels. */
17850 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_MASK \
17851 		UINT32_C(0xf)
17852 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_SFT       0
17853 	/* PBL pointer is physical start address. */
17854 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_0 \
17855 		UINT32_C(0x0)
17856 	/* PBL pointer points to PTE table. */
17857 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_1 \
17858 		UINT32_C(0x1)
17859 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
17860 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_2 \
17861 		UINT32_C(0x2)
17862 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LAST \
17863 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_2
17864 	/* VNIC page size. */
17865 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_MASK \
17866 		UINT32_C(0xf0)
17867 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_SFT   4
17868 	/* 4KB. */
17869 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_4K \
17870 		(UINT32_C(0x0) << 4)
17871 	/* 8KB. */
17872 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_8K \
17873 		(UINT32_C(0x1) << 4)
17874 	/* 64KB. */
17875 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_64K \
17876 		(UINT32_C(0x2) << 4)
17877 	/* 2MB. */
17878 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_2M \
17879 		(UINT32_C(0x3) << 4)
17880 	/* 8MB. */
17881 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_8M \
17882 		(UINT32_C(0x4) << 4)
17883 	/* 1GB. */
17884 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_1G \
17885 		(UINT32_C(0x5) << 4)
17886 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_LAST \
17887 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_1G
17888 	/* Stat page size and level. */
17889 	uint8_t	stat_pg_size_stat_lvl;
17890 	/* Stat PBL indirect levels. */
17891 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_MASK \
17892 		UINT32_C(0xf)
17893 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_SFT       0
17894 	/* PBL pointer is physical start address. */
17895 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_0 \
17896 		UINT32_C(0x0)
17897 	/* PBL pointer points to PTE table. */
17898 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_1 \
17899 		UINT32_C(0x1)
17900 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
17901 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_2 \
17902 		UINT32_C(0x2)
17903 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LAST \
17904 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_2
17905 	/* Stat page size. */
17906 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_MASK \
17907 		UINT32_C(0xf0)
17908 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_SFT   4
17909 	/* 4KB. */
17910 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_4K \
17911 		(UINT32_C(0x0) << 4)
17912 	/* 8KB. */
17913 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_8K \
17914 		(UINT32_C(0x1) << 4)
17915 	/* 64KB. */
17916 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_64K \
17917 		(UINT32_C(0x2) << 4)
17918 	/* 2MB. */
17919 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_2M \
17920 		(UINT32_C(0x3) << 4)
17921 	/* 8MB. */
17922 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_8M \
17923 		(UINT32_C(0x4) << 4)
17924 	/* 1GB. */
17925 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_1G \
17926 		(UINT32_C(0x5) << 4)
17927 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_LAST \
17928 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_1G
17929 	/* TQM slow path page size and level. */
17930 	uint8_t	tqm_sp_pg_size_tqm_sp_lvl;
17931 	/* TQM slow path PBL indirect levels. */
17932 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_MASK \
17933 		UINT32_C(0xf)
17934 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_SFT       0
17935 	/* PBL pointer is physical start address. */
17936 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_0 \
17937 		UINT32_C(0x0)
17938 	/* PBL pointer points to PTE table. */
17939 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_1 \
17940 		UINT32_C(0x1)
17941 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
17942 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_2 \
17943 		UINT32_C(0x2)
17944 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LAST \
17945 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_2
17946 	/* TQM slow path page size. */
17947 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_MASK \
17948 		UINT32_C(0xf0)
17949 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_SFT   4
17950 	/* 4KB. */
17951 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_4K \
17952 		(UINT32_C(0x0) << 4)
17953 	/* 8KB. */
17954 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_8K \
17955 		(UINT32_C(0x1) << 4)
17956 	/* 64KB. */
17957 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_64K \
17958 		(UINT32_C(0x2) << 4)
17959 	/* 2MB. */
17960 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_2M \
17961 		(UINT32_C(0x3) << 4)
17962 	/* 8MB. */
17963 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_8M \
17964 		(UINT32_C(0x4) << 4)
17965 	/* 1GB. */
17966 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_1G \
17967 		(UINT32_C(0x5) << 4)
17968 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_LAST \
17969 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_1G
17970 	/* TQM ring 0 page size and level. */
17971 	uint8_t	tqm_ring0_pg_size_tqm_ring0_lvl;
17972 	/* TQM ring 0 PBL indirect levels. */
17973 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_MASK \
17974 		UINT32_C(0xf)
17975 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_SFT       0
17976 	/* PBL pointer is physical start address. */
17977 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_0 \
17978 		UINT32_C(0x0)
17979 	/* PBL pointer points to PTE table. */
17980 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_1 \
17981 		UINT32_C(0x1)
17982 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
17983 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_2 \
17984 		UINT32_C(0x2)
17985 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LAST \
17986 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_2
17987 	/* TQM ring 0 page size. */
17988 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_MASK \
17989 		UINT32_C(0xf0)
17990 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_SFT   4
17991 	/* 4KB. */
17992 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_4K \
17993 		(UINT32_C(0x0) << 4)
17994 	/* 8KB. */
17995 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_8K \
17996 		(UINT32_C(0x1) << 4)
17997 	/* 64KB. */
17998 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_64K \
17999 		(UINT32_C(0x2) << 4)
18000 	/* 2MB. */
18001 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_2M \
18002 		(UINT32_C(0x3) << 4)
18003 	/* 8MB. */
18004 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_8M \
18005 		(UINT32_C(0x4) << 4)
18006 	/* 1GB. */
18007 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_1G \
18008 		(UINT32_C(0x5) << 4)
18009 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_LAST \
18010 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_1G
18011 	/* TQM ring 1 page size and level. */
18012 	uint8_t	tqm_ring1_pg_size_tqm_ring1_lvl;
18013 	/* TQM ring 1 PBL indirect levels. */
18014 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_MASK \
18015 		UINT32_C(0xf)
18016 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_SFT       0
18017 	/* PBL pointer is physical start address. */
18018 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_0 \
18019 		UINT32_C(0x0)
18020 	/* PBL pointer points to PTE table. */
18021 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_1 \
18022 		UINT32_C(0x1)
18023 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
18024 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_2 \
18025 		UINT32_C(0x2)
18026 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LAST \
18027 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_2
18028 	/* TQM ring 1 page size. */
18029 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_MASK \
18030 		UINT32_C(0xf0)
18031 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_SFT   4
18032 	/* 4KB. */
18033 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_4K \
18034 		(UINT32_C(0x0) << 4)
18035 	/* 8KB. */
18036 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_8K \
18037 		(UINT32_C(0x1) << 4)
18038 	/* 64KB. */
18039 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_64K \
18040 		(UINT32_C(0x2) << 4)
18041 	/* 2MB. */
18042 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_2M \
18043 		(UINT32_C(0x3) << 4)
18044 	/* 8MB. */
18045 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_8M \
18046 		(UINT32_C(0x4) << 4)
18047 	/* 1GB. */
18048 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_1G \
18049 		(UINT32_C(0x5) << 4)
18050 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_LAST \
18051 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_1G
18052 	/* TQM ring 2 page size and level. */
18053 	uint8_t	tqm_ring2_pg_size_tqm_ring2_lvl;
18054 	/* TQM ring 2 PBL indirect levels. */
18055 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_MASK \
18056 		UINT32_C(0xf)
18057 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_SFT       0
18058 	/* PBL pointer is physical start address. */
18059 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_0 \
18060 		UINT32_C(0x0)
18061 	/* PBL pointer points to PTE table. */
18062 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_1 \
18063 		UINT32_C(0x1)
18064 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
18065 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_2 \
18066 		UINT32_C(0x2)
18067 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LAST \
18068 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_2
18069 	/* TQM ring 2 page size. */
18070 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_MASK \
18071 		UINT32_C(0xf0)
18072 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_SFT   4
18073 	/* 4KB. */
18074 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_4K \
18075 		(UINT32_C(0x0) << 4)
18076 	/* 8KB. */
18077 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_8K \
18078 		(UINT32_C(0x1) << 4)
18079 	/* 64KB. */
18080 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_64K \
18081 		(UINT32_C(0x2) << 4)
18082 	/* 2MB. */
18083 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_2M \
18084 		(UINT32_C(0x3) << 4)
18085 	/* 8MB. */
18086 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_8M \
18087 		(UINT32_C(0x4) << 4)
18088 	/* 1GB. */
18089 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_1G \
18090 		(UINT32_C(0x5) << 4)
18091 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_LAST \
18092 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_1G
18093 	/* TQM ring 3 page size and level. */
18094 	uint8_t	tqm_ring3_pg_size_tqm_ring3_lvl;
18095 	/* TQM ring 3 PBL indirect levels. */
18096 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_MASK \
18097 		UINT32_C(0xf)
18098 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_SFT       0
18099 	/* PBL pointer is physical start address. */
18100 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_0 \
18101 		UINT32_C(0x0)
18102 	/* PBL pointer points to PTE table. */
18103 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_1 \
18104 		UINT32_C(0x1)
18105 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
18106 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_2 \
18107 		UINT32_C(0x2)
18108 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LAST \
18109 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_2
18110 	/* TQM ring 3 page size. */
18111 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_MASK \
18112 		UINT32_C(0xf0)
18113 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_SFT   4
18114 	/* 4KB. */
18115 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_4K \
18116 		(UINT32_C(0x0) << 4)
18117 	/* 8KB. */
18118 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_8K \
18119 		(UINT32_C(0x1) << 4)
18120 	/* 64KB. */
18121 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_64K \
18122 		(UINT32_C(0x2) << 4)
18123 	/* 2MB. */
18124 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_2M \
18125 		(UINT32_C(0x3) << 4)
18126 	/* 8MB. */
18127 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_8M \
18128 		(UINT32_C(0x4) << 4)
18129 	/* 1GB. */
18130 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_1G \
18131 		(UINT32_C(0x5) << 4)
18132 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_LAST \
18133 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_1G
18134 	/* TQM ring 4 page size and level. */
18135 	uint8_t	tqm_ring4_pg_size_tqm_ring4_lvl;
18136 	/* TQM ring 4 PBL indirect levels. */
18137 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_MASK \
18138 		UINT32_C(0xf)
18139 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_SFT       0
18140 	/* PBL pointer is physical start address. */
18141 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_0 \
18142 		UINT32_C(0x0)
18143 	/* PBL pointer points to PTE table. */
18144 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_1 \
18145 		UINT32_C(0x1)
18146 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
18147 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_2 \
18148 		UINT32_C(0x2)
18149 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LAST \
18150 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_2
18151 	/* TQM ring 4 page size. */
18152 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_MASK \
18153 		UINT32_C(0xf0)
18154 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_SFT   4
18155 	/* 4KB. */
18156 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_4K \
18157 		(UINT32_C(0x0) << 4)
18158 	/* 8KB. */
18159 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_8K \
18160 		(UINT32_C(0x1) << 4)
18161 	/* 64KB. */
18162 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_64K \
18163 		(UINT32_C(0x2) << 4)
18164 	/* 2MB. */
18165 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_2M \
18166 		(UINT32_C(0x3) << 4)
18167 	/* 8MB. */
18168 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_8M \
18169 		(UINT32_C(0x4) << 4)
18170 	/* 1GB. */
18171 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_1G \
18172 		(UINT32_C(0x5) << 4)
18173 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_LAST \
18174 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_1G
18175 	/* TQM ring 5 page size and level. */
18176 	uint8_t	tqm_ring5_pg_size_tqm_ring5_lvl;
18177 	/* TQM ring 5 PBL indirect levels. */
18178 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_MASK \
18179 		UINT32_C(0xf)
18180 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_SFT       0
18181 	/* PBL pointer is physical start address. */
18182 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_0 \
18183 		UINT32_C(0x0)
18184 	/* PBL pointer points to PTE table. */
18185 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_1 \
18186 		UINT32_C(0x1)
18187 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
18188 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_2 \
18189 		UINT32_C(0x2)
18190 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LAST \
18191 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_2
18192 	/* TQM ring 5 page size. */
18193 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_MASK \
18194 		UINT32_C(0xf0)
18195 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_SFT   4
18196 	/* 4KB. */
18197 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_4K \
18198 		(UINT32_C(0x0) << 4)
18199 	/* 8KB. */
18200 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_8K \
18201 		(UINT32_C(0x1) << 4)
18202 	/* 64KB. */
18203 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_64K \
18204 		(UINT32_C(0x2) << 4)
18205 	/* 2MB. */
18206 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_2M \
18207 		(UINT32_C(0x3) << 4)
18208 	/* 8MB. */
18209 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_8M \
18210 		(UINT32_C(0x4) << 4)
18211 	/* 1GB. */
18212 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_1G \
18213 		(UINT32_C(0x5) << 4)
18214 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_LAST \
18215 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_1G
18216 	/* TQM ring 6 page size and level. */
18217 	uint8_t	tqm_ring6_pg_size_tqm_ring6_lvl;
18218 	/* TQM ring 6 PBL indirect levels. */
18219 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_MASK \
18220 		UINT32_C(0xf)
18221 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_SFT       0
18222 	/* PBL pointer is physical start address. */
18223 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_0 \
18224 		UINT32_C(0x0)
18225 	/* PBL pointer points to PTE table. */
18226 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_1 \
18227 		UINT32_C(0x1)
18228 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
18229 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_2 \
18230 		UINT32_C(0x2)
18231 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LAST \
18232 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_2
18233 	/* TQM ring 6 page size. */
18234 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_MASK \
18235 		UINT32_C(0xf0)
18236 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_SFT   4
18237 	/* 4KB. */
18238 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_4K \
18239 		(UINT32_C(0x0) << 4)
18240 	/* 8KB. */
18241 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_8K \
18242 		(UINT32_C(0x1) << 4)
18243 	/* 64KB. */
18244 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_64K \
18245 		(UINT32_C(0x2) << 4)
18246 	/* 2MB. */
18247 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_2M \
18248 		(UINT32_C(0x3) << 4)
18249 	/* 8MB. */
18250 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_8M \
18251 		(UINT32_C(0x4) << 4)
18252 	/* 1GB. */
18253 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_1G \
18254 		(UINT32_C(0x5) << 4)
18255 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_LAST \
18256 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_1G
18257 	/* TQM ring 7 page size and level. */
18258 	uint8_t	tqm_ring7_pg_size_tqm_ring7_lvl;
18259 	/* TQM ring 7 PBL indirect levels. */
18260 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_MASK \
18261 		UINT32_C(0xf)
18262 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_SFT       0
18263 	/* PBL pointer is physical start address. */
18264 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_0 \
18265 		UINT32_C(0x0)
18266 	/* PBL pointer points to PTE table. */
18267 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_1 \
18268 		UINT32_C(0x1)
18269 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
18270 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_2 \
18271 		UINT32_C(0x2)
18272 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LAST \
18273 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_2
18274 	/* TQM ring 7 page size. */
18275 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_MASK \
18276 		UINT32_C(0xf0)
18277 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_SFT   4
18278 	/* 4KB. */
18279 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_4K \
18280 		(UINT32_C(0x0) << 4)
18281 	/* 8KB. */
18282 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_8K \
18283 		(UINT32_C(0x1) << 4)
18284 	/* 64KB. */
18285 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_64K \
18286 		(UINT32_C(0x2) << 4)
18287 	/* 2MB. */
18288 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_2M \
18289 		(UINT32_C(0x3) << 4)
18290 	/* 8MB. */
18291 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_8M \
18292 		(UINT32_C(0x4) << 4)
18293 	/* 1GB. */
18294 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_1G \
18295 		(UINT32_C(0x5) << 4)
18296 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_LAST \
18297 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_1G
18298 	/* MR/AV page size and level. */
18299 	uint8_t	mrav_pg_size_mrav_lvl;
18300 	/* MR/AV PBL indirect levels. */
18301 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_MASK \
18302 		UINT32_C(0xf)
18303 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_SFT       0
18304 	/* PBL pointer is physical start address. */
18305 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_0 \
18306 		UINT32_C(0x0)
18307 	/* PBL pointer points to PTE table. */
18308 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_1 \
18309 		UINT32_C(0x1)
18310 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
18311 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_2 \
18312 		UINT32_C(0x2)
18313 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LAST \
18314 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_2
18315 	/* MR/AV page size. */
18316 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_MASK \
18317 		UINT32_C(0xf0)
18318 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_SFT   4
18319 	/* 4KB. */
18320 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_4K \
18321 		(UINT32_C(0x0) << 4)
18322 	/* 8KB. */
18323 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_8K \
18324 		(UINT32_C(0x1) << 4)
18325 	/* 64KB. */
18326 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_64K \
18327 		(UINT32_C(0x2) << 4)
18328 	/* 2MB. */
18329 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_2M \
18330 		(UINT32_C(0x3) << 4)
18331 	/* 8MB. */
18332 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_8M \
18333 		(UINT32_C(0x4) << 4)
18334 	/* 1GB. */
18335 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_1G \
18336 		(UINT32_C(0x5) << 4)
18337 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_LAST \
18338 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_1G
18339 	/* Timer page size and level. */
18340 	uint8_t	tim_pg_size_tim_lvl;
18341 	/* Timer PBL indirect levels. */
18342 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_MASK \
18343 		UINT32_C(0xf)
18344 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_SFT       0
18345 	/* PBL pointer is physical start address. */
18346 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_0 \
18347 		UINT32_C(0x0)
18348 	/* PBL pointer points to PTE table. */
18349 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_1 \
18350 		UINT32_C(0x1)
18351 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
18352 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_2 \
18353 		UINT32_C(0x2)
18354 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LAST \
18355 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_2
18356 	/* Timer page size. */
18357 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_MASK \
18358 		UINT32_C(0xf0)
18359 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_SFT   4
18360 	/* 4KB. */
18361 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_4K \
18362 		(UINT32_C(0x0) << 4)
18363 	/* 8KB. */
18364 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_8K \
18365 		(UINT32_C(0x1) << 4)
18366 	/* 64KB. */
18367 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_64K \
18368 		(UINT32_C(0x2) << 4)
18369 	/* 2MB. */
18370 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_2M \
18371 		(UINT32_C(0x3) << 4)
18372 	/* 8MB. */
18373 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_8M \
18374 		(UINT32_C(0x4) << 4)
18375 	/* 1GB. */
18376 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_1G \
18377 		(UINT32_C(0x5) << 4)
18378 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_LAST \
18379 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_1G
18380 	/* QP page directory. */
18381 	uint64_t	qpc_page_dir;
18382 	/* SRQ page directory. */
18383 	uint64_t	srq_page_dir;
18384 	/* CQ page directory. */
18385 	uint64_t	cq_page_dir;
18386 	/* VNIC page directory. */
18387 	uint64_t	vnic_page_dir;
18388 	/* Stat page directory. */
18389 	uint64_t	stat_page_dir;
18390 	/* TQM slowpath page directory. */
18391 	uint64_t	tqm_sp_page_dir;
18392 	/* TQM ring 0 page directory. */
18393 	uint64_t	tqm_ring0_page_dir;
18394 	/* TQM ring 1 page directory. */
18395 	uint64_t	tqm_ring1_page_dir;
18396 	/* TQM ring 2 page directory. */
18397 	uint64_t	tqm_ring2_page_dir;
18398 	/* TQM ring 3 page directory. */
18399 	uint64_t	tqm_ring3_page_dir;
18400 	/* TQM ring 4 page directory. */
18401 	uint64_t	tqm_ring4_page_dir;
18402 	/* TQM ring 5 page directory. */
18403 	uint64_t	tqm_ring5_page_dir;
18404 	/* TQM ring 6 page directory. */
18405 	uint64_t	tqm_ring6_page_dir;
18406 	/* TQM ring 7 page directory. */
18407 	uint64_t	tqm_ring7_page_dir;
18408 	/* MR/AV page directory. */
18409 	uint64_t	mrav_page_dir;
18410 	/* Timer page directory. */
18411 	uint64_t	tim_page_dir;
18412 	/* Number of QPs. */
18413 	uint32_t	qp_num_entries;
18414 	/* Number of SRQs. */
18415 	uint32_t	srq_num_entries;
18416 	/* Number of CQs. */
18417 	uint32_t	cq_num_entries;
18418 	/* Number of Stats. */
18419 	uint32_t	stat_num_entries;
18420 	/*
18421 	 * Number of TQM slowpath entries.
18422 	 *
18423 	 * TQM slowpath rings should be sized as follows:
18424 	 *
18425 	 * num_entries = num_vnics + num_l2_tx_rings + 2 * num_roce_qps + tqm_min_size
18426 	 *
18427 	 * Where:
18428 	 *   num_vnics is the number of VNICs allocated in the VNIC backing store
18429 	 *   num_l2_tx_rings is the number of L2 rings in the QP backing store
18430 	 *   num_roce_qps is the number of RoCE QPs in the QP backing store
18431 	 *   tqm_min_size is tqm_min_entries_per_ring reported by
18432 	 *     HWRM_FUNC_BACKING_STORE_QCAPS
18433 	 *
18434 	 * Note that TQM ring sizes cannot be extended while the system is
18435 	 * operational. If a PF driver needs to extend a TQM ring, it needs
18436 	 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
18437 	 * the backing store.
18438 	 */
18439 	uint32_t	tqm_sp_num_entries;
18440 	/*
18441 	 * Number of TQM ring 0 entries.
18442 	 *
18443 	 * TQM fastpath rings should be sized large enough to accommodate the
18444 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
18445 	 * that can be enqueued to the TQM ring.
18446 	 *
18447 	 * Note that TQM ring sizes cannot be extended while the system is
18448 	 * operational. If a PF driver needs to extend a TQM ring, it needs
18449 	 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
18450 	 * the backing store.
18451 	 */
18452 	uint32_t	tqm_ring0_num_entries;
18453 	/*
18454 	 * Number of TQM ring 1 entries.
18455 	 *
18456 	 * TQM fastpath rings should be sized large enough to accommodate the
18457 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
18458 	 * that can be enqueued to the TQM ring.
18459 	 *
18460 	 * Note that TQM ring sizes cannot be extended while the system is
18461 	 * operational. If a PF driver needs to extend a TQM ring, it needs
18462 	 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
18463 	 * the backing store.
18464 	 */
18465 	uint32_t	tqm_ring1_num_entries;
18466 	/*
18467 	 * Number of TQM ring 2 entries.
18468 	 *
18469 	 * TQM fastpath rings should be sized large enough to accommodate the
18470 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
18471 	 * that can be enqueued to the TQM ring.
18472 	 *
18473 	 * Note that TQM ring sizes cannot be extended while the system is
18474 	 * operational. If a PF driver needs to extend a TQM ring, it needs
18475 	 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
18476 	 * the backing store.
18477 	 */
18478 	uint32_t	tqm_ring2_num_entries;
18479 	/*
18480 	 * Number of TQM ring 3 entries.
18481 	 *
18482 	 * TQM fastpath rings should be sized large enough to accommodate the
18483 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
18484 	 * that can be enqueued to the TQM ring.
18485 	 *
18486 	 * Note that TQM ring sizes cannot be extended while the system is
18487 	 * operational. If a PF driver needs to extend a TQM ring, it needs
18488 	 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
18489 	 * the backing store.
18490 	 */
18491 	uint32_t	tqm_ring3_num_entries;
18492 	/*
18493 	 * Number of TQM ring 4 entries.
18494 	 *
18495 	 * TQM fastpath rings should be sized large enough to accommodate the
18496 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
18497 	 * that can be enqueued to the TQM ring.
18498 	 *
18499 	 * Note that TQM ring sizes cannot be extended while the system is
18500 	 * operational. If a PF driver needs to extend a TQM ring, it needs
18501 	 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
18502 	 * the backing store.
18503 	 */
18504 	uint32_t	tqm_ring4_num_entries;
18505 	/*
18506 	 * Number of TQM ring 5 entries.
18507 	 *
18508 	 * TQM fastpath rings should be sized large enough to accommodate the
18509 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
18510 	 * that can be enqueued to the TQM ring.
18511 	 *
18512 	 * Note that TQM ring sizes cannot be extended while the system is
18513 	 * operational. If a PF driver needs to extend a TQM ring, it needs
18514 	 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
18515 	 * the backing store.
18516 	 */
18517 	uint32_t	tqm_ring5_num_entries;
18518 	/*
18519 	 * Number of TQM ring 6 entries.
18520 	 *
18521 	 * TQM fastpath rings should be sized large enough to accommodate the
18522 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
18523 	 * that can be enqueued to the TQM ring.
18524 	 *
18525 	 * Note that TQM ring sizes cannot be extended while the system is
18526 	 * operational. If a PF driver needs to extend a TQM ring, it needs
18527 	 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
18528 	 * the backing store.
18529 	 */
18530 	uint32_t	tqm_ring6_num_entries;
18531 	/*
18532 	 * Number of TQM ring 7 entries.
18533 	 *
18534 	 * TQM fastpath rings should be sized large enough to accommodate the
18535 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
18536 	 * that can be enqueued to the TQM ring.
18537 	 *
18538 	 * Note that TQM ring sizes cannot be extended while the system is
18539 	 * operational. If a PF driver needs to extend a TQM ring, it needs
18540 	 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
18541 	 * the backing store.
18542 	 */
18543 	uint32_t	tqm_ring7_num_entries;
18544 	/*
18545 	 * If the MR/AV split reservation flag is not set, then this field
18546 	 * represents the total number of MR plus AV entries. For versions
18547 	 * of firmware that support the split reservation, when it is not
18548 	 * specified half of the entries will be reserved for MRs and the
18549 	 * other half for AVs.
18550 	 *
18551 	 * If the MR/AV split reservation flag is set, then this
18552 	 * field is logically divided into two 16b fields. Bits `[31:16]`
18553 	 * represents the `mr_num_entries` and bits `[15:0]` represents
18554 	 * `av_num_entries`. The granularity of these values is defined by
18555 	 * the `mrav_num_entries_unit` field returned by the
18556 	 * `backing_store_qcaps` command.
18557 	 */
18558 	uint32_t	mrav_num_entries;
18559 	/* Number of Timer entries. */
18560 	uint32_t	tim_num_entries;
18561 	/* Number of entries to reserve for QP1 */
18562 	uint16_t	qp_num_qp1_entries;
18563 	/* Number of entries to reserve for L2 */
18564 	uint16_t	qp_num_l2_entries;
18565 	/* Number of bytes that have been allocated for each context entry. */
18566 	uint16_t	qp_entry_size;
18567 	/* Number of entries to reserve for L2 */
18568 	uint16_t	srq_num_l2_entries;
18569 	/* Number of bytes that have been allocated for each context entry. */
18570 	uint16_t	srq_entry_size;
18571 	/* Number of entries to reserve for L2 */
18572 	uint16_t	cq_num_l2_entries;
18573 	/* Number of bytes that have been allocated for each context entry. */
18574 	uint16_t	cq_entry_size;
18575 	/* Number of entries to reserve for VNIC entries */
18576 	uint16_t	vnic_num_vnic_entries;
18577 	/* Number of entries to reserve for Ring table entries */
18578 	uint16_t	vnic_num_ring_table_entries;
18579 	/* Number of bytes that have been allocated for each context entry. */
18580 	uint16_t	vnic_entry_size;
18581 	/* Number of bytes that have been allocated for each context entry. */
18582 	uint16_t	stat_entry_size;
18583 	/* Number of bytes that have been allocated for each context entry. */
18584 	uint16_t	tqm_entry_size;
18585 	/* Number of bytes that have been allocated for each context entry. */
18586 	uint16_t	mrav_entry_size;
18587 	/* Number of bytes that have been allocated for each context entry. */
18588 	uint16_t	tim_entry_size;
18589 	/* TQM ring page size and level. */
18590 	uint8_t	tqm_ring8_pg_size_tqm_ring_lvl;
18591 	/* TQM ring PBL indirect levels. */
18592 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_LVL_MASK \
18593 		UINT32_C(0xf)
18594 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_LVL_SFT \
18595 		0
18596 	/* PBL pointer is physical start address. */
18597 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_LVL_LVL_0 \
18598 		UINT32_C(0x0)
18599 	/* PBL pointer points to PTE table. */
18600 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_LVL_LVL_1 \
18601 		UINT32_C(0x1)
18602 	/*
18603 	 * PBL pointer points to PDE table with each entry pointing to
18604 	 * PTE tables.
18605 	 */
18606 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_LVL_LVL_2 \
18607 		UINT32_C(0x2)
18608 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_LVL_LAST \
18609 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_LVL_LVL_2
18610 	/* TQM ring page size. */
18611 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_PG_SIZE_MASK \
18612 		UINT32_C(0xf0)
18613 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_PG_SIZE_SFT \
18614 		4
18615 	/* 4KB. */
18616 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_PG_SIZE_PG_4K \
18617 		(UINT32_C(0x0) << 4)
18618 	/* 8KB. */
18619 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_PG_SIZE_PG_8K \
18620 		(UINT32_C(0x1) << 4)
18621 	/* 64KB. */
18622 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_PG_SIZE_PG_64K \
18623 		(UINT32_C(0x2) << 4)
18624 	/* 2MB. */
18625 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_PG_SIZE_PG_2M \
18626 		(UINT32_C(0x3) << 4)
18627 	/* 8MB. */
18628 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_PG_SIZE_PG_8M \
18629 		(UINT32_C(0x4) << 4)
18630 	/* 1GB. */
18631 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_PG_SIZE_PG_1G \
18632 		(UINT32_C(0x5) << 4)
18633 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_PG_SIZE_LAST \
18634 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING8_TQM_RING_PG_SIZE_PG_1G
18635 	uint8_t	ring8_unused[3];
18636 	/* Number of TQM ring entries. */
18637 	uint32_t	tqm_ring8_num_entries;
18638 	/* TQM ring page directory. */
18639 	uint64_t	tqm_ring8_page_dir;
18640 	/* TQM ring page size and level. */
18641 	uint8_t	tqm_ring9_pg_size_tqm_ring_lvl;
18642 	/* TQM ring PBL indirect levels. */
18643 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_LVL_MASK \
18644 		UINT32_C(0xf)
18645 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_LVL_SFT \
18646 		0
18647 	/* PBL pointer is physical start address. */
18648 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_LVL_LVL_0 \
18649 		UINT32_C(0x0)
18650 	/* PBL pointer points to PTE table. */
18651 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_LVL_LVL_1 \
18652 		UINT32_C(0x1)
18653 	/*
18654 	 * PBL pointer points to PDE table with each entry pointing to
18655 	 * PTE tables.
18656 	 */
18657 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_LVL_LVL_2 \
18658 		UINT32_C(0x2)
18659 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_LVL_LAST \
18660 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_LVL_LVL_2
18661 	/* TQM ring page size. */
18662 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_PG_SIZE_MASK \
18663 		UINT32_C(0xf0)
18664 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_PG_SIZE_SFT \
18665 		4
18666 	/* 4KB. */
18667 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_PG_SIZE_PG_4K \
18668 		(UINT32_C(0x0) << 4)
18669 	/* 8KB. */
18670 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_PG_SIZE_PG_8K \
18671 		(UINT32_C(0x1) << 4)
18672 	/* 64KB. */
18673 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_PG_SIZE_PG_64K \
18674 		(UINT32_C(0x2) << 4)
18675 	/* 2MB. */
18676 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_PG_SIZE_PG_2M \
18677 		(UINT32_C(0x3) << 4)
18678 	/* 8MB. */
18679 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_PG_SIZE_PG_8M \
18680 		(UINT32_C(0x4) << 4)
18681 	/* 1GB. */
18682 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_PG_SIZE_PG_1G \
18683 		(UINT32_C(0x5) << 4)
18684 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_PG_SIZE_LAST \
18685 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING9_TQM_RING_PG_SIZE_PG_1G
18686 	uint8_t	ring9_unused[3];
18687 	/* Number of TQM ring entries. */
18688 	uint32_t	tqm_ring9_num_entries;
18689 	/* TQM ring page directory. */
18690 	uint64_t	tqm_ring9_page_dir;
18691 	/* TQM ring page size and level. */
18692 	uint8_t	tqm_ring10_pg_size_tqm_ring_lvl;
18693 	/* TQM ring PBL indirect levels. */
18694 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_LVL_MASK \
18695 		UINT32_C(0xf)
18696 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_LVL_SFT \
18697 		0
18698 	/* PBL pointer is physical start address. */
18699 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_LVL_LVL_0 \
18700 		UINT32_C(0x0)
18701 	/* PBL pointer points to PTE table. */
18702 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_LVL_LVL_1 \
18703 		UINT32_C(0x1)
18704 	/*
18705 	 * PBL pointer points to PDE table with each entry pointing to
18706 	 * PTE tables.
18707 	 */
18708 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_LVL_LVL_2 \
18709 		UINT32_C(0x2)
18710 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_LVL_LAST \
18711 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_LVL_LVL_2
18712 	/* TQM ring page size. */
18713 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_PG_SIZE_MASK \
18714 		UINT32_C(0xf0)
18715 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_PG_SIZE_SFT \
18716 		4
18717 	/* 4KB. */
18718 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_PG_SIZE_PG_4K \
18719 		(UINT32_C(0x0) << 4)
18720 	/* 8KB. */
18721 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_PG_SIZE_PG_8K \
18722 		(UINT32_C(0x1) << 4)
18723 	/* 64KB. */
18724 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_PG_SIZE_PG_64K \
18725 		(UINT32_C(0x2) << 4)
18726 	/* 2MB. */
18727 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_PG_SIZE_PG_2M \
18728 		(UINT32_C(0x3) << 4)
18729 	/* 8MB. */
18730 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_PG_SIZE_PG_8M \
18731 		(UINT32_C(0x4) << 4)
18732 	/* 1GB. */
18733 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_PG_SIZE_PG_1G \
18734 		(UINT32_C(0x5) << 4)
18735 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_PG_SIZE_LAST \
18736 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_RING10_TQM_RING_PG_SIZE_PG_1G
18737 	uint8_t	ring10_unused[3];
18738 	/* Number of TQM ring entries. */
18739 	uint32_t	tqm_ring10_num_entries;
18740 	/* TQM ring page directory. */
18741 	uint64_t	tqm_ring10_page_dir;
18742 	/* Number of Tx KTLS context entries allocated. */
18743 	uint32_t	tkc_num_entries;
18744 	/* Number of Rx KTLS context entries allocated. */
18745 	uint32_t	rkc_num_entries;
18746 	/* Tx KTLS context page directory. */
18747 	uint64_t	tkc_page_dir;
18748 	/* Rx KTLS context page directory. */
18749 	uint64_t	rkc_page_dir;
18750 	/* Number of bytes allocated for each Tx KTLS context entry. */
18751 	uint16_t	tkc_entry_size;
18752 	/* Number of bytes allocated for each Rx KTLS context entry. */
18753 	uint16_t	rkc_entry_size;
18754 	/* Tx KTLS context page size and level. */
18755 	uint8_t	tkc_pg_size_tkc_lvl;
18756 	/* Tx KTLS context PBL indirect levels. */
18757 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_LVL_MASK \
18758 		UINT32_C(0xf)
18759 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_LVL_SFT       0
18760 	/* PBL pointer is physical start address. */
18761 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_LVL_LVL_0 \
18762 		UINT32_C(0x0)
18763 	/* PBL pointer points to PTE table. */
18764 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_LVL_LVL_1 \
18765 		UINT32_C(0x1)
18766 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
18767 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_LVL_LVL_2 \
18768 		UINT32_C(0x2)
18769 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_LVL_LAST \
18770 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_LVL_LVL_2
18771 	/* Tx KTLS context page size. */
18772 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_PG_SIZE_MASK \
18773 		UINT32_C(0xf0)
18774 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_PG_SIZE_SFT   4
18775 	/* 4KB. */
18776 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_PG_SIZE_PG_4K \
18777 		(UINT32_C(0x0) << 4)
18778 	/* 8KB. */
18779 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_PG_SIZE_PG_8K \
18780 		(UINT32_C(0x1) << 4)
18781 	/* 64KB. */
18782 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_PG_SIZE_PG_64K \
18783 		(UINT32_C(0x2) << 4)
18784 	/* 2MB. */
18785 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_PG_SIZE_PG_2M \
18786 		(UINT32_C(0x3) << 4)
18787 	/* 8MB. */
18788 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_PG_SIZE_PG_8M \
18789 		(UINT32_C(0x4) << 4)
18790 	/* 1GB. */
18791 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_PG_SIZE_PG_1G \
18792 		(UINT32_C(0x5) << 4)
18793 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_PG_SIZE_LAST \
18794 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_TKC_PG_SIZE_PG_1G
18795 	/* Rx KTLS context page size and level. */
18796 	uint8_t	rkc_pg_size_rkc_lvl;
18797 	/* Rx KTLS context PBL indirect levels. */
18798 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_LVL_MASK \
18799 		UINT32_C(0xf)
18800 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_LVL_SFT       0
18801 	/* PBL pointer is physical start address. */
18802 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_LVL_LVL_0 \
18803 		UINT32_C(0x0)
18804 	/* PBL pointer points to PTE table. */
18805 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_LVL_LVL_1 \
18806 		UINT32_C(0x1)
18807 	/*
18808 	 * PBL pointer points to PDE table with each entry pointing to
18809 	 * PTE tables.
18810 	 */
18811 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_LVL_LVL_2 \
18812 		UINT32_C(0x2)
18813 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_LVL_LAST \
18814 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_LVL_LVL_2
18815 	/* Rx KTLS context page size. */
18816 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_PG_SIZE_MASK \
18817 		UINT32_C(0xf0)
18818 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_PG_SIZE_SFT   4
18819 	/* 4KB. */
18820 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_PG_SIZE_PG_4K \
18821 		(UINT32_C(0x0) << 4)
18822 	/* 8KB. */
18823 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_PG_SIZE_PG_8K \
18824 		(UINT32_C(0x1) << 4)
18825 	/* 64KB. */
18826 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_PG_SIZE_PG_64K \
18827 		(UINT32_C(0x2) << 4)
18828 	/* 2MB. */
18829 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_PG_SIZE_PG_2M \
18830 		(UINT32_C(0x3) << 4)
18831 	/* 8MB. */
18832 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_PG_SIZE_PG_8M \
18833 		(UINT32_C(0x4) << 4)
18834 	/* 1GB. */
18835 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_PG_SIZE_PG_1G \
18836 		(UINT32_C(0x5) << 4)
18837 	#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_PG_SIZE_LAST \
18838 		HWRM_FUNC_BACKING_STORE_CFG_INPUT_RKC_PG_SIZE_PG_1G
18839 	/* Reserved for future. */
18840 	uint8_t	rsvd[2];
18841 } __rte_packed;
18842 
18843 /* hwrm_func_backing_store_cfg_output (size:128b/16B) */
18844 struct hwrm_func_backing_store_cfg_output {
18845 	/* The specific error status for the command. */
18846 	uint16_t	error_code;
18847 	/* The HWRM command request type. */
18848 	uint16_t	req_type;
18849 	/* The sequence ID from the original command. */
18850 	uint16_t	seq_id;
18851 	/* The length of the response data in number of bytes. */
18852 	uint16_t	resp_len;
18853 	uint8_t	unused_0[7];
18854 	/*
18855 	 * This field is used in Output records to indicate that the output
18856 	 * is completely written to RAM.  This field should be read as '1'
18857 	 * to indicate that the output has been completely written.
18858 	 * When writing a command completion or response to an internal processor,
18859 	 * the order of writes has to be such that this field is written last.
18860 	 */
18861 	uint8_t	valid;
18862 } __rte_packed;
18863 
18864 /********************************
18865  * hwrm_func_backing_store_qcfg *
18866  ********************************/
18867 
18868 
18869 /* hwrm_func_backing_store_qcfg_input (size:128b/16B) */
18870 struct hwrm_func_backing_store_qcfg_input {
18871 	/* The HWRM command request type. */
18872 	uint16_t	req_type;
18873 	/*
18874 	 * The completion ring to send the completion event on. This should
18875 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
18876 	 */
18877 	uint16_t	cmpl_ring;
18878 	/*
18879 	 * The sequence ID is used by the driver for tracking multiple
18880 	 * commands. This ID is treated as opaque data by the firmware and
18881 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
18882 	 */
18883 	uint16_t	seq_id;
18884 	/*
18885 	 * The target ID of the command:
18886 	 * * 0x0-0xFFF8 - The function ID
18887 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
18888 	 * * 0xFFFD - Reserved for user-space HWRM interface
18889 	 * * 0xFFFF - HWRM
18890 	 */
18891 	uint16_t	target_id;
18892 	/*
18893 	 * A physical address pointer pointing to a host buffer that the
18894 	 * command's response data will be written. This can be either a host
18895 	 * physical address (HPA) or a guest physical address (GPA) and must
18896 	 * point to a physically contiguous block of memory.
18897 	 */
18898 	uint64_t	resp_addr;
18899 } __rte_packed;
18900 
18901 /* hwrm_func_backing_store_qcfg_output (size:2496b/312B) */
18902 struct hwrm_func_backing_store_qcfg_output {
18903 	/* The specific error status for the command. */
18904 	uint16_t	error_code;
18905 	/* The HWRM command request type. */
18906 	uint16_t	req_type;
18907 	/* The sequence ID from the original command. */
18908 	uint16_t	seq_id;
18909 	/* The length of the response data in number of bytes. */
18910 	uint16_t	resp_len;
18911 	uint32_t	flags;
18912 	/*
18913 	 * When set, the firmware only uses on-chip resources and does not
18914 	 * expect any backing store to be provided by the host driver. This
18915 	 * mode provides minimal L2 functionality (e.g. limited L2 resources,
18916 	 * no RoCE).
18917 	 */
18918 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_FLAGS_PREBOOT_MODE \
18919 		UINT32_C(0x1)
18920 	/*
18921 	 * When set, the 32b `mrav_num_entries` field is logically divided
18922 	 * into two 16b fields, `mr_num_entries` and `av_num_entries`.
18923 	 */
18924 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_FLAGS_MRAV_RESERVATION_SPLIT \
18925 		UINT32_C(0x2)
18926 	uint32_t	enables;
18927 	/*
18928 	 * This bit must be '1' for the qp fields to be
18929 	 * configured.
18930 	 */
18931 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_QP \
18932 		UINT32_C(0x1)
18933 	/*
18934 	 * This bit must be '1' for the srq fields to be
18935 	 * configured.
18936 	 */
18937 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_SRQ \
18938 		UINT32_C(0x2)
18939 	/*
18940 	 * This bit must be '1' for the cq fields to be
18941 	 * configured.
18942 	 */
18943 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_CQ \
18944 		UINT32_C(0x4)
18945 	/*
18946 	 * This bit must be '1' for the vnic fields to be
18947 	 * configured.
18948 	 */
18949 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_VNIC \
18950 		UINT32_C(0x8)
18951 	/*
18952 	 * This bit must be '1' for the stat fields to be
18953 	 * configured.
18954 	 */
18955 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_STAT \
18956 		UINT32_C(0x10)
18957 	/*
18958 	 * This bit must be '1' for the tqm_sp fields to be
18959 	 * configured.
18960 	 */
18961 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_TQM_SP \
18962 		UINT32_C(0x20)
18963 	/*
18964 	 * This bit must be '1' for the tqm_ring0 fields to be
18965 	 * configured.
18966 	 */
18967 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_TQM_RING0 \
18968 		UINT32_C(0x40)
18969 	/*
18970 	 * This bit must be '1' for the tqm_ring1 fields to be
18971 	 * configured.
18972 	 */
18973 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_TQM_RING1 \
18974 		UINT32_C(0x80)
18975 	/*
18976 	 * This bit must be '1' for the tqm_ring2 fields to be
18977 	 * configured.
18978 	 */
18979 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_TQM_RING2 \
18980 		UINT32_C(0x100)
18981 	/*
18982 	 * This bit must be '1' for the tqm_ring3 fields to be
18983 	 * configured.
18984 	 */
18985 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_TQM_RING3 \
18986 		UINT32_C(0x200)
18987 	/*
18988 	 * This bit must be '1' for the tqm_ring4 fields to be
18989 	 * configured.
18990 	 */
18991 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_TQM_RING4 \
18992 		UINT32_C(0x400)
18993 	/*
18994 	 * This bit must be '1' for the tqm_ring5 fields to be
18995 	 * configured.
18996 	 */
18997 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_TQM_RING5 \
18998 		UINT32_C(0x800)
18999 	/*
19000 	 * This bit must be '1' for the tqm_ring6 fields to be
19001 	 * configured.
19002 	 */
19003 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_TQM_RING6 \
19004 		UINT32_C(0x1000)
19005 	/*
19006 	 * This bit must be '1' for the tqm_ring7 fields to be
19007 	 * configured.
19008 	 */
19009 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_TQM_RING7 \
19010 		UINT32_C(0x2000)
19011 	/*
19012 	 * This bit must be '1' for the mrav fields to be
19013 	 * configured.
19014 	 */
19015 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_MRAV \
19016 		UINT32_C(0x4000)
19017 	/*
19018 	 * This bit must be '1' for the tim fields to be
19019 	 * configured.
19020 	 */
19021 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_TIM \
19022 		UINT32_C(0x8000)
19023 	/*
19024 	 * This bit must be '1' for the tqm_ring8 fields to be
19025 	 * configured.
19026 	 */
19027 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_TQM_RING8 \
19028 		UINT32_C(0x10000)
19029 	/*
19030 	 * This bit must be '1' for the tqm_ring9 fields to be
19031 	 * configured.
19032 	 */
19033 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_TQM_RING9 \
19034 		UINT32_C(0x20000)
19035 	/*
19036 	 * This bit must be '1' for the tqm_ring10 fields to be
19037 	 * configured.
19038 	 */
19039 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_TQM_RING10 \
19040 		UINT32_C(0x40000)
19041 	/*
19042 	 * This bit must be '1' for the Tx KTLS context
19043 	 * fields to be configured.
19044 	 */
19045 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_TKC \
19046 		UINT32_C(0x80000)
19047 	/*
19048 	 * This bit must be '1' for the Rx KTLS context
19049 	 * fields to be configured.
19050 	 */
19051 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_ENABLES_RKC \
19052 		UINT32_C(0x100000)
19053 	/* QPC page size and level. */
19054 	uint8_t	qpc_pg_size_qpc_lvl;
19055 	/* QPC PBL indirect levels. */
19056 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_MASK \
19057 		UINT32_C(0xf)
19058 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_SFT       0
19059 	/* PBL pointer is physical start address. */
19060 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_0 \
19061 		UINT32_C(0x0)
19062 	/* PBL pointer points to PTE table. */
19063 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_1 \
19064 		UINT32_C(0x1)
19065 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19066 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_2 \
19067 		UINT32_C(0x2)
19068 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LAST \
19069 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_2
19070 	/* QPC page size. */
19071 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_MASK \
19072 		UINT32_C(0xf0)
19073 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_SFT   4
19074 	/* 4KB. */
19075 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_4K \
19076 		(UINT32_C(0x0) << 4)
19077 	/* 8KB. */
19078 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_8K \
19079 		(UINT32_C(0x1) << 4)
19080 	/* 64KB. */
19081 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_64K \
19082 		(UINT32_C(0x2) << 4)
19083 	/* 2MB. */
19084 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_2M \
19085 		(UINT32_C(0x3) << 4)
19086 	/* 8MB. */
19087 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_8M \
19088 		(UINT32_C(0x4) << 4)
19089 	/* 1GB. */
19090 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_1G \
19091 		(UINT32_C(0x5) << 4)
19092 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_LAST \
19093 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_1G
19094 	/* SRQ page size and level. */
19095 	uint8_t	srq_pg_size_srq_lvl;
19096 	/* SRQ PBL indirect levels. */
19097 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_MASK \
19098 		UINT32_C(0xf)
19099 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_SFT       0
19100 	/* PBL pointer is physical start address. */
19101 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_0 \
19102 		UINT32_C(0x0)
19103 	/* PBL pointer points to PTE table. */
19104 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_1 \
19105 		UINT32_C(0x1)
19106 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19107 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_2 \
19108 		UINT32_C(0x2)
19109 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LAST \
19110 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_2
19111 	/* SRQ page size. */
19112 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_MASK \
19113 		UINT32_C(0xf0)
19114 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_SFT   4
19115 	/* 4KB. */
19116 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_4K \
19117 		(UINT32_C(0x0) << 4)
19118 	/* 8KB. */
19119 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_8K \
19120 		(UINT32_C(0x1) << 4)
19121 	/* 64KB. */
19122 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_64K \
19123 		(UINT32_C(0x2) << 4)
19124 	/* 2MB. */
19125 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_2M \
19126 		(UINT32_C(0x3) << 4)
19127 	/* 8MB. */
19128 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_8M \
19129 		(UINT32_C(0x4) << 4)
19130 	/* 1GB. */
19131 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_1G \
19132 		(UINT32_C(0x5) << 4)
19133 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_LAST \
19134 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_1G
19135 	/* CQ page size and level. */
19136 	uint8_t	cq_pg_size_cq_lvl;
19137 	/* CQ PBL indirect levels. */
19138 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_MASK \
19139 		UINT32_C(0xf)
19140 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_SFT       0
19141 	/* PBL pointer is physical start address. */
19142 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_0 \
19143 		UINT32_C(0x0)
19144 	/* PBL pointer points to PTE table. */
19145 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_1 \
19146 		UINT32_C(0x1)
19147 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19148 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_2 \
19149 		UINT32_C(0x2)
19150 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LAST \
19151 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_2
19152 	/* CQ page size. */
19153 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_MASK \
19154 		UINT32_C(0xf0)
19155 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_SFT   4
19156 	/* 4KB. */
19157 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_4K \
19158 		(UINT32_C(0x0) << 4)
19159 	/* 8KB. */
19160 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_8K \
19161 		(UINT32_C(0x1) << 4)
19162 	/* 64KB. */
19163 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_64K \
19164 		(UINT32_C(0x2) << 4)
19165 	/* 2MB. */
19166 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_2M \
19167 		(UINT32_C(0x3) << 4)
19168 	/* 8MB. */
19169 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_8M \
19170 		(UINT32_C(0x4) << 4)
19171 	/* 1GB. */
19172 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_1G \
19173 		(UINT32_C(0x5) << 4)
19174 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_LAST \
19175 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_1G
19176 	/* VNIC page size and level. */
19177 	uint8_t	vnic_pg_size_vnic_lvl;
19178 	/* VNIC PBL indirect levels. */
19179 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_MASK \
19180 		UINT32_C(0xf)
19181 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_SFT       0
19182 	/* PBL pointer is physical start address. */
19183 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_0 \
19184 		UINT32_C(0x0)
19185 	/* PBL pointer points to PTE table. */
19186 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_1 \
19187 		UINT32_C(0x1)
19188 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19189 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_2 \
19190 		UINT32_C(0x2)
19191 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LAST \
19192 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_2
19193 	/* VNIC page size. */
19194 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_MASK \
19195 		UINT32_C(0xf0)
19196 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_SFT   4
19197 	/* 4KB. */
19198 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_4K \
19199 		(UINT32_C(0x0) << 4)
19200 	/* 8KB. */
19201 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_8K \
19202 		(UINT32_C(0x1) << 4)
19203 	/* 64KB. */
19204 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_64K \
19205 		(UINT32_C(0x2) << 4)
19206 	/* 2MB. */
19207 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_2M \
19208 		(UINT32_C(0x3) << 4)
19209 	/* 8MB. */
19210 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_8M \
19211 		(UINT32_C(0x4) << 4)
19212 	/* 1GB. */
19213 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_1G \
19214 		(UINT32_C(0x5) << 4)
19215 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_LAST \
19216 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_1G
19217 	/* Stat page size and level. */
19218 	uint8_t	stat_pg_size_stat_lvl;
19219 	/* Stat PBL indirect levels. */
19220 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_MASK \
19221 		UINT32_C(0xf)
19222 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_SFT       0
19223 	/* PBL pointer is physical start address. */
19224 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_0 \
19225 		UINT32_C(0x0)
19226 	/* PBL pointer points to PTE table. */
19227 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_1 \
19228 		UINT32_C(0x1)
19229 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19230 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_2 \
19231 		UINT32_C(0x2)
19232 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LAST \
19233 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_2
19234 	/* Stat page size. */
19235 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_MASK \
19236 		UINT32_C(0xf0)
19237 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_SFT   4
19238 	/* 4KB. */
19239 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_4K \
19240 		(UINT32_C(0x0) << 4)
19241 	/* 8KB. */
19242 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_8K \
19243 		(UINT32_C(0x1) << 4)
19244 	/* 64KB. */
19245 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_64K \
19246 		(UINT32_C(0x2) << 4)
19247 	/* 2MB. */
19248 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_2M \
19249 		(UINT32_C(0x3) << 4)
19250 	/* 8MB. */
19251 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_8M \
19252 		(UINT32_C(0x4) << 4)
19253 	/* 1GB. */
19254 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_1G \
19255 		(UINT32_C(0x5) << 4)
19256 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_LAST \
19257 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_1G
19258 	/* TQM slow path page size and level. */
19259 	uint8_t	tqm_sp_pg_size_tqm_sp_lvl;
19260 	/* TQM slow path PBL indirect levels. */
19261 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_MASK \
19262 		UINT32_C(0xf)
19263 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_SFT       0
19264 	/* PBL pointer is physical start address. */
19265 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_0 \
19266 		UINT32_C(0x0)
19267 	/* PBL pointer points to PTE table. */
19268 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_1 \
19269 		UINT32_C(0x1)
19270 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19271 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_2 \
19272 		UINT32_C(0x2)
19273 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LAST \
19274 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_2
19275 	/* TQM slow path page size. */
19276 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_MASK \
19277 		UINT32_C(0xf0)
19278 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_SFT   4
19279 	/* 4KB. */
19280 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_4K \
19281 		(UINT32_C(0x0) << 4)
19282 	/* 8KB. */
19283 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_8K \
19284 		(UINT32_C(0x1) << 4)
19285 	/* 64KB. */
19286 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_64K \
19287 		(UINT32_C(0x2) << 4)
19288 	/* 2MB. */
19289 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_2M \
19290 		(UINT32_C(0x3) << 4)
19291 	/* 8MB. */
19292 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_8M \
19293 		(UINT32_C(0x4) << 4)
19294 	/* 1GB. */
19295 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_1G \
19296 		(UINT32_C(0x5) << 4)
19297 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_LAST \
19298 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_1G
19299 	/* TQM ring 0 page size and level. */
19300 	uint8_t	tqm_ring0_pg_size_tqm_ring0_lvl;
19301 	/* TQM ring 0 PBL indirect levels. */
19302 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_MASK \
19303 		UINT32_C(0xf)
19304 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_SFT       0
19305 	/* PBL pointer is physical start address. */
19306 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_0 \
19307 		UINT32_C(0x0)
19308 	/* PBL pointer points to PTE table. */
19309 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_1 \
19310 		UINT32_C(0x1)
19311 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19312 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_2 \
19313 		UINT32_C(0x2)
19314 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LAST \
19315 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_2
19316 	/* TQM ring 0 page size. */
19317 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_MASK \
19318 		UINT32_C(0xf0)
19319 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_SFT   4
19320 	/* 4KB. */
19321 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_4K \
19322 		(UINT32_C(0x0) << 4)
19323 	/* 8KB. */
19324 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_8K \
19325 		(UINT32_C(0x1) << 4)
19326 	/* 64KB. */
19327 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_64K \
19328 		(UINT32_C(0x2) << 4)
19329 	/* 2MB. */
19330 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_2M \
19331 		(UINT32_C(0x3) << 4)
19332 	/* 8MB. */
19333 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_8M \
19334 		(UINT32_C(0x4) << 4)
19335 	/* 1GB. */
19336 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_1G \
19337 		(UINT32_C(0x5) << 4)
19338 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_LAST \
19339 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_1G
19340 	/* TQM ring 1 page size and level. */
19341 	uint8_t	tqm_ring1_pg_size_tqm_ring1_lvl;
19342 	/* TQM ring 1 PBL indirect levels. */
19343 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_MASK \
19344 		UINT32_C(0xf)
19345 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_SFT       0
19346 	/* PBL pointer is physical start address. */
19347 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_0 \
19348 		UINT32_C(0x0)
19349 	/* PBL pointer points to PTE table. */
19350 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_1 \
19351 		UINT32_C(0x1)
19352 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19353 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_2 \
19354 		UINT32_C(0x2)
19355 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LAST \
19356 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_2
19357 	/* TQM ring 1 page size. */
19358 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_MASK \
19359 		UINT32_C(0xf0)
19360 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_SFT   4
19361 	/* 4KB. */
19362 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_4K \
19363 		(UINT32_C(0x0) << 4)
19364 	/* 8KB. */
19365 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_8K \
19366 		(UINT32_C(0x1) << 4)
19367 	/* 64KB. */
19368 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_64K \
19369 		(UINT32_C(0x2) << 4)
19370 	/* 2MB. */
19371 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_2M \
19372 		(UINT32_C(0x3) << 4)
19373 	/* 8MB. */
19374 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_8M \
19375 		(UINT32_C(0x4) << 4)
19376 	/* 1GB. */
19377 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_1G \
19378 		(UINT32_C(0x5) << 4)
19379 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_LAST \
19380 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_1G
19381 	/* TQM ring 2 page size and level. */
19382 	uint8_t	tqm_ring2_pg_size_tqm_ring2_lvl;
19383 	/* TQM ring 2 PBL indirect levels. */
19384 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_MASK \
19385 		UINT32_C(0xf)
19386 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_SFT       0
19387 	/* PBL pointer is physical start address. */
19388 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_0 \
19389 		UINT32_C(0x0)
19390 	/* PBL pointer points to PTE table. */
19391 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_1 \
19392 		UINT32_C(0x1)
19393 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19394 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_2 \
19395 		UINT32_C(0x2)
19396 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LAST \
19397 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_2
19398 	/* TQM ring 2 page size. */
19399 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_MASK \
19400 		UINT32_C(0xf0)
19401 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_SFT   4
19402 	/* 4KB. */
19403 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_4K \
19404 		(UINT32_C(0x0) << 4)
19405 	/* 8KB. */
19406 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_8K \
19407 		(UINT32_C(0x1) << 4)
19408 	/* 64KB. */
19409 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_64K \
19410 		(UINT32_C(0x2) << 4)
19411 	/* 2MB. */
19412 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_2M \
19413 		(UINT32_C(0x3) << 4)
19414 	/* 8MB. */
19415 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_8M \
19416 		(UINT32_C(0x4) << 4)
19417 	/* 1GB. */
19418 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_1G \
19419 		(UINT32_C(0x5) << 4)
19420 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_LAST \
19421 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_1G
19422 	/* TQM ring 3 page size and level. */
19423 	uint8_t	tqm_ring3_pg_size_tqm_ring3_lvl;
19424 	/* TQM ring 3 PBL indirect levels. */
19425 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_MASK \
19426 		UINT32_C(0xf)
19427 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_SFT       0
19428 	/* PBL pointer is physical start address. */
19429 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_0 \
19430 		UINT32_C(0x0)
19431 	/* PBL pointer points to PTE table. */
19432 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_1 \
19433 		UINT32_C(0x1)
19434 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19435 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_2 \
19436 		UINT32_C(0x2)
19437 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LAST \
19438 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_2
19439 	/* TQM ring 3 page size. */
19440 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_MASK \
19441 		UINT32_C(0xf0)
19442 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_SFT   4
19443 	/* 4KB. */
19444 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_4K \
19445 		(UINT32_C(0x0) << 4)
19446 	/* 8KB. */
19447 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_8K \
19448 		(UINT32_C(0x1) << 4)
19449 	/* 64KB. */
19450 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_64K \
19451 		(UINT32_C(0x2) << 4)
19452 	/* 2MB. */
19453 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_2M \
19454 		(UINT32_C(0x3) << 4)
19455 	/* 8MB. */
19456 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_8M \
19457 		(UINT32_C(0x4) << 4)
19458 	/* 1GB. */
19459 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_1G \
19460 		(UINT32_C(0x5) << 4)
19461 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_LAST \
19462 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_1G
19463 	/* TQM ring 4 page size and level. */
19464 	uint8_t	tqm_ring4_pg_size_tqm_ring4_lvl;
19465 	/* TQM ring 4 PBL indirect levels. */
19466 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_MASK \
19467 		UINT32_C(0xf)
19468 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_SFT       0
19469 	/* PBL pointer is physical start address. */
19470 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_0 \
19471 		UINT32_C(0x0)
19472 	/* PBL pointer points to PTE table. */
19473 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_1 \
19474 		UINT32_C(0x1)
19475 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19476 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_2 \
19477 		UINT32_C(0x2)
19478 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LAST \
19479 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_2
19480 	/* TQM ring 4 page size. */
19481 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_MASK \
19482 		UINT32_C(0xf0)
19483 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_SFT   4
19484 	/* 4KB. */
19485 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_4K \
19486 		(UINT32_C(0x0) << 4)
19487 	/* 8KB. */
19488 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_8K \
19489 		(UINT32_C(0x1) << 4)
19490 	/* 64KB. */
19491 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_64K \
19492 		(UINT32_C(0x2) << 4)
19493 	/* 2MB. */
19494 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_2M \
19495 		(UINT32_C(0x3) << 4)
19496 	/* 8MB. */
19497 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_8M \
19498 		(UINT32_C(0x4) << 4)
19499 	/* 1GB. */
19500 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_1G \
19501 		(UINT32_C(0x5) << 4)
19502 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_LAST \
19503 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_1G
19504 	/* TQM ring 5 page size and level. */
19505 	uint8_t	tqm_ring5_pg_size_tqm_ring5_lvl;
19506 	/* TQM ring 5 PBL indirect levels. */
19507 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_MASK \
19508 		UINT32_C(0xf)
19509 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_SFT       0
19510 	/* PBL pointer is physical start address. */
19511 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_0 \
19512 		UINT32_C(0x0)
19513 	/* PBL pointer points to PTE table. */
19514 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_1 \
19515 		UINT32_C(0x1)
19516 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19517 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_2 \
19518 		UINT32_C(0x2)
19519 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LAST \
19520 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_2
19521 	/* TQM ring 5 page size. */
19522 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_MASK \
19523 		UINT32_C(0xf0)
19524 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_SFT   4
19525 	/* 4KB. */
19526 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_4K \
19527 		(UINT32_C(0x0) << 4)
19528 	/* 8KB. */
19529 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_8K \
19530 		(UINT32_C(0x1) << 4)
19531 	/* 64KB. */
19532 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_64K \
19533 		(UINT32_C(0x2) << 4)
19534 	/* 2MB. */
19535 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_2M \
19536 		(UINT32_C(0x3) << 4)
19537 	/* 8MB. */
19538 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_8M \
19539 		(UINT32_C(0x4) << 4)
19540 	/* 1GB. */
19541 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_1G \
19542 		(UINT32_C(0x5) << 4)
19543 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_LAST \
19544 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_1G
19545 	/* TQM ring 6 page size and level. */
19546 	uint8_t	tqm_ring6_pg_size_tqm_ring6_lvl;
19547 	/* TQM ring 6 PBL indirect levels. */
19548 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_MASK \
19549 		UINT32_C(0xf)
19550 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_SFT       0
19551 	/* PBL pointer is physical start address. */
19552 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_0 \
19553 		UINT32_C(0x0)
19554 	/* PBL pointer points to PTE table. */
19555 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_1 \
19556 		UINT32_C(0x1)
19557 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19558 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_2 \
19559 		UINT32_C(0x2)
19560 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LAST \
19561 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_2
19562 	/* TQM ring 6 page size. */
19563 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_MASK \
19564 		UINT32_C(0xf0)
19565 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_SFT   4
19566 	/* 4KB. */
19567 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_4K \
19568 		(UINT32_C(0x0) << 4)
19569 	/* 8KB. */
19570 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_8K \
19571 		(UINT32_C(0x1) << 4)
19572 	/* 64KB. */
19573 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_64K \
19574 		(UINT32_C(0x2) << 4)
19575 	/* 2MB. */
19576 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_2M \
19577 		(UINT32_C(0x3) << 4)
19578 	/* 8MB. */
19579 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_8M \
19580 		(UINT32_C(0x4) << 4)
19581 	/* 1GB. */
19582 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_1G \
19583 		(UINT32_C(0x5) << 4)
19584 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_LAST \
19585 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_1G
19586 	/* TQM ring 7 page size and level. */
19587 	uint8_t	tqm_ring7_pg_size_tqm_ring7_lvl;
19588 	/* TQM ring 7 PBL indirect levels. */
19589 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_MASK \
19590 		UINT32_C(0xf)
19591 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_SFT       0
19592 	/* PBL pointer is physical start address. */
19593 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_0 \
19594 		UINT32_C(0x0)
19595 	/* PBL pointer points to PTE table. */
19596 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_1 \
19597 		UINT32_C(0x1)
19598 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19599 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_2 \
19600 		UINT32_C(0x2)
19601 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LAST \
19602 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_2
19603 	/* TQM ring 7 page size. */
19604 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_MASK \
19605 		UINT32_C(0xf0)
19606 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_SFT   4
19607 	/* 4KB. */
19608 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_4K \
19609 		(UINT32_C(0x0) << 4)
19610 	/* 8KB. */
19611 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_8K \
19612 		(UINT32_C(0x1) << 4)
19613 	/* 64KB. */
19614 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_64K \
19615 		(UINT32_C(0x2) << 4)
19616 	/* 2MB. */
19617 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_2M \
19618 		(UINT32_C(0x3) << 4)
19619 	/* 8MB. */
19620 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_8M \
19621 		(UINT32_C(0x4) << 4)
19622 	/* 1GB. */
19623 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_1G \
19624 		(UINT32_C(0x5) << 4)
19625 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_LAST \
19626 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_1G
19627 	/* MR/AV page size and level. */
19628 	uint8_t	mrav_pg_size_mrav_lvl;
19629 	/* MR/AV PBL indirect levels. */
19630 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_MASK \
19631 		UINT32_C(0xf)
19632 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_SFT       0
19633 	/* PBL pointer is physical start address. */
19634 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_0 \
19635 		UINT32_C(0x0)
19636 	/* PBL pointer points to PTE table. */
19637 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_1 \
19638 		UINT32_C(0x1)
19639 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19640 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_2 \
19641 		UINT32_C(0x2)
19642 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LAST \
19643 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_2
19644 	/* MR/AV page size. */
19645 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_MASK \
19646 		UINT32_C(0xf0)
19647 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_SFT   4
19648 	/* 4KB. */
19649 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_4K \
19650 		(UINT32_C(0x0) << 4)
19651 	/* 8KB. */
19652 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_8K \
19653 		(UINT32_C(0x1) << 4)
19654 	/* 64KB. */
19655 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_64K \
19656 		(UINT32_C(0x2) << 4)
19657 	/* 2MB. */
19658 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_2M \
19659 		(UINT32_C(0x3) << 4)
19660 	/* 8MB. */
19661 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_8M \
19662 		(UINT32_C(0x4) << 4)
19663 	/* 1GB. */
19664 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_1G \
19665 		(UINT32_C(0x5) << 4)
19666 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_LAST \
19667 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_1G
19668 	/* Timer page size and level. */
19669 	uint8_t	tim_pg_size_tim_lvl;
19670 	/* Timer PBL indirect levels. */
19671 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_MASK \
19672 		UINT32_C(0xf)
19673 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_SFT       0
19674 	/* PBL pointer is physical start address. */
19675 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_0 \
19676 		UINT32_C(0x0)
19677 	/* PBL pointer points to PTE table. */
19678 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_1 \
19679 		UINT32_C(0x1)
19680 	/* PBL pointer points to PDE table with each entry pointing to PTE tables. */
19681 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_2 \
19682 		UINT32_C(0x2)
19683 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LAST \
19684 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_2
19685 	/* Timer page size. */
19686 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_MASK \
19687 		UINT32_C(0xf0)
19688 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_SFT   4
19689 	/* 4KB. */
19690 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_4K \
19691 		(UINT32_C(0x0) << 4)
19692 	/* 8KB. */
19693 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_8K \
19694 		(UINT32_C(0x1) << 4)
19695 	/* 64KB. */
19696 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_64K \
19697 		(UINT32_C(0x2) << 4)
19698 	/* 2MB. */
19699 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_2M \
19700 		(UINT32_C(0x3) << 4)
19701 	/* 8MB. */
19702 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_8M \
19703 		(UINT32_C(0x4) << 4)
19704 	/* 1GB. */
19705 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_1G \
19706 		(UINT32_C(0x5) << 4)
19707 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_LAST \
19708 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_1G
19709 	/* QP page directory. */
19710 	uint64_t	qpc_page_dir;
19711 	/* SRQ page directory. */
19712 	uint64_t	srq_page_dir;
19713 	/* CQ page directory. */
19714 	uint64_t	cq_page_dir;
19715 	/* VNIC page directory. */
19716 	uint64_t	vnic_page_dir;
19717 	/* Stat page directory. */
19718 	uint64_t	stat_page_dir;
19719 	/* TQM slowpath page directory. */
19720 	uint64_t	tqm_sp_page_dir;
19721 	/* TQM ring 0 page directory. */
19722 	uint64_t	tqm_ring0_page_dir;
19723 	/* TQM ring 1 page directory. */
19724 	uint64_t	tqm_ring1_page_dir;
19725 	/* TQM ring 2 page directory. */
19726 	uint64_t	tqm_ring2_page_dir;
19727 	/* TQM ring 3 page directory. */
19728 	uint64_t	tqm_ring3_page_dir;
19729 	/* TQM ring 4 page directory. */
19730 	uint64_t	tqm_ring4_page_dir;
19731 	/* TQM ring 5 page directory. */
19732 	uint64_t	tqm_ring5_page_dir;
19733 	/* TQM ring 6 page directory. */
19734 	uint64_t	tqm_ring6_page_dir;
19735 	/* TQM ring 7 page directory. */
19736 	uint64_t	tqm_ring7_page_dir;
19737 	/* MR/AV page directory. */
19738 	uint64_t	mrav_page_dir;
19739 	/* Timer page directory. */
19740 	uint64_t	tim_page_dir;
19741 	/* Number of entries to reserve for QP1 */
19742 	uint16_t	qp_num_qp1_entries;
19743 	/* Number of entries to reserve for L2 */
19744 	uint16_t	qp_num_l2_entries;
19745 	/* Number of QPs. */
19746 	uint32_t	qp_num_entries;
19747 	/* Number of SRQs. */
19748 	uint32_t	srq_num_entries;
19749 	/* Number of entries to reserve for L2 */
19750 	uint16_t	srq_num_l2_entries;
19751 	/* Number of entries to reserve for L2 */
19752 	uint16_t	cq_num_l2_entries;
19753 	/* Number of CQs. */
19754 	uint32_t	cq_num_entries;
19755 	/* Number of entries to reserve for VNIC entries */
19756 	uint16_t	vnic_num_vnic_entries;
19757 	/* Number of entries to reserve for Ring table entries */
19758 	uint16_t	vnic_num_ring_table_entries;
19759 	/* Number of Stats. */
19760 	uint32_t	stat_num_entries;
19761 	/* Number of TQM slowpath entries. */
19762 	uint32_t	tqm_sp_num_entries;
19763 	/* Number of TQM ring 0 entries. */
19764 	uint32_t	tqm_ring0_num_entries;
19765 	/* Number of TQM ring 1 entries. */
19766 	uint32_t	tqm_ring1_num_entries;
19767 	/* Number of TQM ring 2 entries. */
19768 	uint32_t	tqm_ring2_num_entries;
19769 	/* Number of TQM ring 3 entries. */
19770 	uint32_t	tqm_ring3_num_entries;
19771 	/* Number of TQM ring 4 entries. */
19772 	uint32_t	tqm_ring4_num_entries;
19773 	/* Number of TQM ring 5 entries. */
19774 	uint32_t	tqm_ring5_num_entries;
19775 	/* Number of TQM ring 6 entries. */
19776 	uint32_t	tqm_ring6_num_entries;
19777 	/* Number of TQM ring 7 entries. */
19778 	uint32_t	tqm_ring7_num_entries;
19779 	/*
19780 	 * If the MR/AV split reservation flag is not set, then this field
19781 	 * represents the total number of MR plus AV entries. For versions
19782 	 * of firmware that support the split reservation, when it is not
19783 	 * specified half of the entries will be reserved for MRs and the
19784 	 * other half for AVs.
19785 	 *
19786 	 * If the MR/AV split reservation flag is set, then this
19787 	 * field is logically divided into two 16b fields. Bits `[31:16]`
19788 	 * represents the `mr_num_entries` and bits `[15:0]` represents
19789 	 * `av_num_entries`. The granularity of these values is defined by
19790 	 * the `mrav_num_entries_unit` field returned by the
19791 	 * `backing_store_qcaps` command.
19792 	 */
19793 	uint32_t	mrav_num_entries;
19794 	/* Number of Timer entries. */
19795 	uint32_t	tim_num_entries;
19796 	/* TQM ring page size and level. */
19797 	uint8_t	tqm_ring8_pg_size_tqm_ring_lvl;
19798 	/* TQM ring PBL indirect levels. */
19799 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_LVL_MASK \
19800 		UINT32_C(0xf)
19801 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_LVL_SFT \
19802 		0
19803 	/* PBL pointer is physical start address. */
19804 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_LVL_LVL_0 \
19805 		UINT32_C(0x0)
19806 	/* PBL pointer points to PTE table. */
19807 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_LVL_LVL_1 \
19808 		UINT32_C(0x1)
19809 	/*
19810 	 * PBL pointer points to PDE table with each entry pointing to
19811 	 * PTE tables.
19812 	 */
19813 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_LVL_LVL_2 \
19814 		UINT32_C(0x2)
19815 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_LVL_LAST \
19816 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_LVL_LVL_2
19817 	/* TQM ring page size. */
19818 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_PG_SIZE_MASK \
19819 		UINT32_C(0xf0)
19820 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_PG_SIZE_SFT \
19821 		4
19822 	/* 4KB. */
19823 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_PG_SIZE_PG_4K \
19824 		(UINT32_C(0x0) << 4)
19825 	/* 8KB. */
19826 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_PG_SIZE_PG_8K \
19827 		(UINT32_C(0x1) << 4)
19828 	/* 64KB. */
19829 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_PG_SIZE_PG_64K \
19830 		(UINT32_C(0x2) << 4)
19831 	/* 2MB. */
19832 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_PG_SIZE_PG_2M \
19833 		(UINT32_C(0x3) << 4)
19834 	/* 8MB. */
19835 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_PG_SIZE_PG_8M \
19836 		(UINT32_C(0x4) << 4)
19837 	/* 1GB. */
19838 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_PG_SIZE_PG_1G \
19839 		(UINT32_C(0x5) << 4)
19840 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_PG_SIZE_LAST \
19841 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING8_TQM_RING_PG_SIZE_PG_1G
19842 	uint8_t	ring8_unused[3];
19843 	/* Number of TQM ring entries. */
19844 	uint32_t	tqm_ring8_num_entries;
19845 	/* TQM ring page directory. */
19846 	uint64_t	tqm_ring8_page_dir;
19847 	/* TQM ring page size and level. */
19848 	uint8_t	tqm_ring9_pg_size_tqm_ring_lvl;
19849 	/* TQM ring PBL indirect levels. */
19850 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_LVL_MASK \
19851 		UINT32_C(0xf)
19852 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_LVL_SFT \
19853 		0
19854 	/* PBL pointer is physical start address. */
19855 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_LVL_LVL_0 \
19856 		UINT32_C(0x0)
19857 	/* PBL pointer points to PTE table. */
19858 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_LVL_LVL_1 \
19859 		UINT32_C(0x1)
19860 	/*
19861 	 * PBL pointer points to PDE table with each entry pointing to
19862 	 * PTE tables.
19863 	 */
19864 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_LVL_LVL_2 \
19865 		UINT32_C(0x2)
19866 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_LVL_LAST \
19867 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_LVL_LVL_2
19868 	/* TQM ring page size. */
19869 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_PG_SIZE_MASK \
19870 		UINT32_C(0xf0)
19871 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_PG_SIZE_SFT \
19872 		4
19873 	/* 4KB. */
19874 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_PG_SIZE_PG_4K \
19875 		(UINT32_C(0x0) << 4)
19876 	/* 8KB. */
19877 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_PG_SIZE_PG_8K \
19878 		(UINT32_C(0x1) << 4)
19879 	/* 64KB. */
19880 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_PG_SIZE_PG_64K \
19881 		(UINT32_C(0x2) << 4)
19882 	/* 2MB. */
19883 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_PG_SIZE_PG_2M \
19884 		(UINT32_C(0x3) << 4)
19885 	/* 8MB. */
19886 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_PG_SIZE_PG_8M \
19887 		(UINT32_C(0x4) << 4)
19888 	/* 1GB. */
19889 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_PG_SIZE_PG_1G \
19890 		(UINT32_C(0x5) << 4)
19891 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_PG_SIZE_LAST \
19892 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING9_TQM_RING_PG_SIZE_PG_1G
19893 	uint8_t	ring9_unused[3];
19894 	/* Number of TQM ring entries. */
19895 	uint32_t	tqm_ring9_num_entries;
19896 	/* TQM ring page directory. */
19897 	uint64_t	tqm_ring9_page_dir;
19898 	/* TQM ring page size and level. */
19899 	uint8_t	tqm_ring10_pg_size_tqm_ring_lvl;
19900 	/* TQM ring PBL indirect levels. */
19901 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_LVL_MASK \
19902 		UINT32_C(0xf)
19903 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_LVL_SFT \
19904 		0
19905 	/* PBL pointer is physical start address. */
19906 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_LVL_LVL_0 \
19907 		UINT32_C(0x0)
19908 	/* PBL pointer points to PTE table. */
19909 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_LVL_LVL_1 \
19910 		UINT32_C(0x1)
19911 	/*
19912 	 * PBL pointer points to PDE table with each entry pointing to
19913 	 * PTE tables.
19914 	 */
19915 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_LVL_LVL_2 \
19916 		UINT32_C(0x2)
19917 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_LVL_LAST \
19918 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_LVL_LVL_2
19919 	/* TQM ring page size. */
19920 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_PG_SIZE_MASK \
19921 		UINT32_C(0xf0)
19922 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_PG_SIZE_SFT \
19923 		4
19924 	/* 4KB. */
19925 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_PG_SIZE_PG_4K \
19926 		(UINT32_C(0x0) << 4)
19927 	/* 8KB. */
19928 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_PG_SIZE_PG_8K \
19929 		(UINT32_C(0x1) << 4)
19930 	/* 64KB. */
19931 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_PG_SIZE_PG_64K \
19932 		(UINT32_C(0x2) << 4)
19933 	/* 2MB. */
19934 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_PG_SIZE_PG_2M \
19935 		(UINT32_C(0x3) << 4)
19936 	/* 8MB. */
19937 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_PG_SIZE_PG_8M \
19938 		(UINT32_C(0x4) << 4)
19939 	/* 1GB. */
19940 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_PG_SIZE_PG_1G \
19941 		(UINT32_C(0x5) << 4)
19942 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_PG_SIZE_LAST \
19943 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RING10_TQM_RING_PG_SIZE_PG_1G
19944 	uint8_t	ring10_unused[3];
19945 	/* Number of TQM ring entries. */
19946 	uint32_t	tqm_ring10_num_entries;
19947 	/* TQM ring page directory. */
19948 	uint64_t	tqm_ring10_page_dir;
19949 	/* Number of Tx KTLS context entries. */
19950 	uint32_t	tkc_num_entries;
19951 	/* Number of Rx KTLS context entries. */
19952 	uint32_t	rkc_num_entries;
19953 	/* Tx KTLS context page directory. */
19954 	uint64_t	tkc_page_dir;
19955 	/* Rx KTLS context page directory. */
19956 	uint64_t	rkc_page_dir;
19957 	/* Tx KTLS context page size and level. */
19958 	uint8_t	tkc_pg_size_tkc_lvl;
19959 	/* Tx KTLS context PBL indirect levels. */
19960 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_LVL_MASK \
19961 		UINT32_C(0xf)
19962 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_LVL_SFT       0
19963 	/* PBL pointer is physical start address. */
19964 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_LVL_LVL_0 \
19965 		UINT32_C(0x0)
19966 	/* PBL pointer points to PTE table. */
19967 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_LVL_LVL_1 \
19968 		UINT32_C(0x1)
19969 	/*
19970 	 * PBL pointer points to PDE table with each entry pointing to
19971 	 * PTE tables.
19972 	 */
19973 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_LVL_LVL_2 \
19974 		UINT32_C(0x2)
19975 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_LVL_LAST \
19976 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_LVL_LVL_2
19977 	/* Tx KTLS context page size. */
19978 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_PG_SIZE_MASK \
19979 		UINT32_C(0xf0)
19980 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_PG_SIZE_SFT   4
19981 	/* 4KB. */
19982 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_PG_SIZE_PG_4K \
19983 		(UINT32_C(0x0) << 4)
19984 	/* 8KB. */
19985 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_PG_SIZE_PG_8K \
19986 		(UINT32_C(0x1) << 4)
19987 	/* 64KB. */
19988 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_PG_SIZE_PG_64K \
19989 		(UINT32_C(0x2) << 4)
19990 	/* 2MB. */
19991 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_PG_SIZE_PG_2M \
19992 		(UINT32_C(0x3) << 4)
19993 	/* 8MB. */
19994 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_PG_SIZE_PG_8M \
19995 		(UINT32_C(0x4) << 4)
19996 	/* 1GB. */
19997 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_PG_SIZE_PG_1G \
19998 		(UINT32_C(0x5) << 4)
19999 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_PG_SIZE_LAST \
20000 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TKC_PG_SIZE_PG_1G
20001 	/* Rx KTLS context page size and level. */
20002 	uint8_t	rkc_pg_size_rkc_lvl;
20003 	/* Rx KTLS context PBL indirect levels. */
20004 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_LVL_MASK \
20005 		UINT32_C(0xf)
20006 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_LVL_SFT       0
20007 	/* PBL pointer is physical start address. */
20008 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_LVL_LVL_0 \
20009 		UINT32_C(0x0)
20010 	/* PBL pointer points to PTE table. */
20011 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_LVL_LVL_1 \
20012 		UINT32_C(0x1)
20013 	/*
20014 	 * PBL pointer points to PDE table with each entry pointing to
20015 	 * PTE tables.
20016 	 */
20017 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_LVL_LVL_2 \
20018 		UINT32_C(0x2)
20019 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_LVL_LAST \
20020 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_LVL_LVL_2
20021 	/* Rx KTLS context page size. */
20022 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_PG_SIZE_MASK \
20023 		UINT32_C(0xf0)
20024 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_PG_SIZE_SFT   4
20025 	/* 4KB. */
20026 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_PG_SIZE_PG_4K \
20027 		(UINT32_C(0x0) << 4)
20028 	/* 8KB. */
20029 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_PG_SIZE_PG_8K \
20030 		(UINT32_C(0x1) << 4)
20031 	/* 64KB. */
20032 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_PG_SIZE_PG_64K \
20033 		(UINT32_C(0x2) << 4)
20034 	/* 2MB. */
20035 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_PG_SIZE_PG_2M \
20036 		(UINT32_C(0x3) << 4)
20037 	/* 8MB. */
20038 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_PG_SIZE_PG_8M \
20039 		(UINT32_C(0x4) << 4)
20040 	/* 1GB. */
20041 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_PG_SIZE_PG_1G \
20042 		(UINT32_C(0x5) << 4)
20043 	#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_PG_SIZE_LAST \
20044 		HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_RKC_PG_SIZE_PG_1G
20045 	uint8_t	unused_1[5];
20046 	/*
20047 	 * This field is used in Output records to indicate that the output
20048 	 * is completely written to RAM.  This field should be read as 1
20049 	 * to indicate that the output has been completely written.
20050 	 * When writing a command completion or response to an internal
20051 	 * processor, the order of writes has to be such that this field
20052 	 * is written last.
20053 	 */
20054 	uint8_t	valid;
20055 } __rte_packed;
20056 
20057 /****************************
20058  * hwrm_error_recovery_qcfg *
20059  ****************************/
20060 
20061 
20062 /* hwrm_error_recovery_qcfg_input (size:192b/24B) */
20063 struct hwrm_error_recovery_qcfg_input {
20064 	/* The HWRM command request type. */
20065 	uint16_t	req_type;
20066 	/*
20067 	 * The completion ring to send the completion event on. This should
20068 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
20069 	 */
20070 	uint16_t	cmpl_ring;
20071 	/*
20072 	 * The sequence ID is used by the driver for tracking multiple
20073 	 * commands. This ID is treated as opaque data by the firmware and
20074 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
20075 	 */
20076 	uint16_t	seq_id;
20077 	/*
20078 	 * The target ID of the command:
20079 	 * * 0x0-0xFFF8 - The function ID
20080 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
20081 	 * * 0xFFFD - Reserved for user-space HWRM interface
20082 	 * * 0xFFFF - HWRM
20083 	 */
20084 	uint16_t	target_id;
20085 	/*
20086 	 * A physical address pointer pointing to a host buffer that the
20087 	 * command's response data will be written. This can be either a host
20088 	 * physical address (HPA) or a guest physical address (GPA) and must
20089 	 * point to a physically contiguous block of memory.
20090 	 */
20091 	uint64_t	resp_addr;
20092 	uint8_t	unused_0[8];
20093 } __rte_packed;
20094 
20095 /* hwrm_error_recovery_qcfg_output (size:1664b/208B) */
20096 struct hwrm_error_recovery_qcfg_output {
20097 	/* The specific error status for the command. */
20098 	uint16_t	error_code;
20099 	/* The HWRM command request type. */
20100 	uint16_t	req_type;
20101 	/* The sequence ID from the original command. */
20102 	uint16_t	seq_id;
20103 	/* The length of the response data in number of bytes. */
20104 	uint16_t	resp_len;
20105 	uint32_t	flags;
20106 	/*
20107 	 * When this flag is set to 1, error recovery will be initiated
20108 	 * through master function driver.
20109 	 */
20110 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FLAGS_HOST       UINT32_C(0x1)
20111 	/*
20112 	 * When this flag is set to 1, error recovery will be performed
20113 	 * through Co processor.
20114 	 */
20115 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FLAGS_CO_CPU     UINT32_C(0x2)
20116 	/*
20117 	 * Driver Polling frequency. This value is in units of 100msec.
20118 	 * Typical value would be 10 to indicate 1sec.
20119 	 * Drivers can poll FW health status, Heartbeat, reset_counter with
20120 	 * this frequency.
20121 	 */
20122 	uint32_t	driver_polling_freq;
20123 	/*
20124 	 * This value is in units of 100msec.
20125 	 * Typical value would be 30 to indicate 3sec.
20126 	 * Master function wait period from detecting a fatal error to
20127 	 * initiating reset. In this time period Master PF expects every
20128 	 * active driver will detect fatal error.
20129 	 */
20130 	uint32_t	master_func_wait_period;
20131 	/*
20132 	 * This value is in units of 100msec.
20133 	 * Typical value would be 50 to indicate 5sec.
20134 	 * Normal function wait period from fatal error detection to
20135 	 * polling FW health status. In this time period, drivers should not
20136 	 * do any PCIe MMIO transaction and should not send any HWRM commands.
20137 	 */
20138 	uint32_t	normal_func_wait_period;
20139 	/*
20140 	 * This value is in units of 100msec.
20141 	 * Typical value would be 20 to indicate 2sec.
20142 	 * This field indicates that, master function wait period after chip
20143 	 * reset. After this time, master function should reinitialize with
20144 	 * FW.
20145 	 */
20146 	uint32_t	master_func_wait_period_after_reset;
20147 	/*
20148 	 * This value is in units of 100msec.
20149 	 * Typical value would be 60 to indicate 6sec.
20150 	 * This field is applicable to both master and normal functions.
20151 	 * Even after chip reset, if FW status not changed to ready,
20152 	 * then all the functions can poll for this much time and bailout.
20153 	 */
20154 	uint32_t	max_bailout_time_after_reset;
20155 	/*
20156 	 * FW health status register.
20157 	 * Lower 2 bits indicates address space location and upper 30 bits
20158 	 * indicates upper 30bits of the register address.
20159 	 * A value of 0xFFFF-FFFF indicates this register does not exist.
20160 	 */
20161 	uint32_t	fw_health_status_reg;
20162 	/* Lower 2 bits indicates address space location. */
20163 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_MASK \
20164 		UINT32_C(0x3)
20165 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_SFT \
20166 		0
20167 	/*
20168 	 * If value is 0, this register is located in PCIe config space.
20169 	 * Drivers have to map appropriate window to access this
20170 	 * register.
20171 	 */
20172 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_PCIE_CFG \
20173 		UINT32_C(0x0)
20174 	/*
20175 	 * If value is 1, this register is located in GRC address space.
20176 	 * Drivers have to map appropriate window to access this
20177 	 * register.
20178 	 */
20179 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_GRC \
20180 		UINT32_C(0x1)
20181 	/*
20182 	 * If value is 2, this register is located in first BAR address
20183 	 * space. Drivers have to map appropriate window to access this
20184 	 * register.
20185 	 */
20186 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_BAR0 \
20187 		UINT32_C(0x2)
20188 	/*
20189 	 * If value is 3, this register is located in second BAR address
20190 	 * space. Drivers have to map appropriate window to access this
20191 	 * Drivers have to map appropriate window to access this
20192 	 * register.
20193 	 */
20194 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_BAR1 \
20195 		UINT32_C(0x3)
20196 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_LAST \
20197 		HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_BAR1
20198 	/* Upper 30bits of the register address. */
20199 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_MASK \
20200 		UINT32_C(0xfffffffc)
20201 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SFT \
20202 		2
20203 	/*
20204 	 * FW HeartBeat register.
20205 	 * Lower 2 bits indicates address space location and upper 30 bits
20206 	 * indicates actual address.
20207 	 * A value of 0xFFFF-FFFF indicates this register does not exist.
20208 	 */
20209 	uint32_t	fw_heartbeat_reg;
20210 	/* Lower 2 bits indicates address space location. */
20211 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_MASK \
20212 		UINT32_C(0x3)
20213 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_SFT \
20214 		0
20215 	/*
20216 	 * If value is 0, this register is located in PCIe config space.
20217 	 * Drivers have to map appropriate window to access this
20218 	 * register.
20219 	 */
20220 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_PCIE_CFG \
20221 		UINT32_C(0x0)
20222 	/*
20223 	 * If value is 1, this register is located in GRC address space.
20224 	 * Drivers have to map appropriate window to access this
20225 	 * register.
20226 	 */
20227 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_GRC \
20228 		UINT32_C(0x1)
20229 	/*
20230 	 * If value is 2, this register is located in first BAR address
20231 	 * space. Drivers have to map appropriate window to access this
20232 	 * register.
20233 	 */
20234 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_BAR0 \
20235 		UINT32_C(0x2)
20236 	/*
20237 	 * If value is 3, this register is located in second BAR address
20238 	 * space. Drivers have to map appropriate window to access this
20239 	 * register.
20240 	 */
20241 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_BAR1 \
20242 		UINT32_C(0x3)
20243 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_LAST \
20244 		HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_BAR1
20245 	/* Upper 30bits of the register address. */
20246 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_MASK \
20247 		UINT32_C(0xfffffffc)
20248 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SFT \
20249 		2
20250 	/*
20251 	 * FW reset counter.
20252 	 * Lower 2 bits indicates address space location and upper 30 bits
20253 	 * indicates actual address.
20254 	 * A value of 0xFFFF-FFFF indicates this register does not exist.
20255 	 */
20256 	uint32_t	fw_reset_cnt_reg;
20257 	/* Lower 2 bits indicates address space location. */
20258 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_MASK \
20259 		UINT32_C(0x3)
20260 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_SFT \
20261 		0
20262 	/*
20263 	 * If value is 0, this register is located in PCIe config space.
20264 	 * Drivers have to map appropriate window to access this
20265 	 * register.
20266 	 */
20267 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_PCIE_CFG \
20268 		UINT32_C(0x0)
20269 	/*
20270 	 * If value is 1, this register is located in GRC address space.
20271 	 * Drivers have to map appropriate window to access this
20272 	 * register.
20273 	 */
20274 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_GRC \
20275 		UINT32_C(0x1)
20276 	/*
20277 	 * If value is 2, this register is located in first BAR address
20278 	 * space. Drivers have to map appropriate window to access this
20279 	 * register.
20280 	 */
20281 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_BAR0 \
20282 		UINT32_C(0x2)
20283 	/*
20284 	 * If value is 3, this register is located in second BAR address
20285 	 * space. Drivers have to map appropriate window to access this
20286 	 * register.
20287 	 */
20288 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_BAR1 \
20289 		UINT32_C(0x3)
20290 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_LAST \
20291 		HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_BAR1
20292 	/* Upper 30bits of the register address. */
20293 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_MASK \
20294 		UINT32_C(0xfffffffc)
20295 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SFT \
20296 		2
20297 	/*
20298 	 * Reset Inprogress Register address for PFs.
20299 	 * Lower 2 bits indicates address space location and upper 30 bits
20300 	 * indicates actual address.
20301 	 * A value of 0xFFFF-FFFF indicates this register does not exist.
20302 	 */
20303 	uint32_t	reset_inprogress_reg;
20304 	/* Lower 2 bits indicates address space location. */
20305 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_MASK \
20306 		UINT32_C(0x3)
20307 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_SFT \
20308 		0
20309 	/*
20310 	 * If value is 0, this register is located in PCIe config space.
20311 	 * Drivers have to map appropriate window to access this
20312 	 * register.
20313 	 */
20314 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_PCIE_CFG \
20315 		UINT32_C(0x0)
20316 	/*
20317 	 * If value is 1, this register is located in GRC address space.
20318 	 * Drivers have to map appropriate window to access this
20319 	 * register.
20320 	 */
20321 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_GRC \
20322 		UINT32_C(0x1)
20323 	/*
20324 	 * If value is 2, this register is located in first BAR address
20325 	 * space. Drivers have to map appropriate window to access this
20326 	 * register.
20327 	 */
20328 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_BAR0 \
20329 		UINT32_C(0x2)
20330 	/*
20331 	 * If value is 3, this register is located in second BAR address
20332 	 * space. Drivers have to map appropriate window to access this
20333 	 * register.
20334 	 */
20335 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_BAR1 \
20336 		UINT32_C(0x3)
20337 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_LAST \
20338 		HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_BAR1
20339 	/* Upper 30bits of the register address. */
20340 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_MASK \
20341 		UINT32_C(0xfffffffc)
20342 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SFT \
20343 		2
20344 	/* This field indicates the mask value for reset_inprogress_reg. */
20345 	uint32_t	reset_inprogress_reg_mask;
20346 	uint8_t	unused_0[3];
20347 	/*
20348 	 * Array of registers and value count to reset the Chip
20349 	 * Each array count has reset_reg, reset_reg_val, delay_after_reset
20350 	 * in TLV format. Depending upon Chip type, number of reset registers
20351 	 * will vary. Drivers have to write reset_reg_val in the reset_reg
20352 	 * location in the same sequence in order to recover from a fatal
20353 	 * error.
20354 	 */
20355 	uint8_t	reg_array_cnt;
20356 	/*
20357 	 * Reset register.
20358 	 * Lower 2 bits indicates address space location and upper 30 bits
20359 	 * indicates actual address.
20360 	 * A value of 0xFFFF-FFFF indicates this register does not exist.
20361 	 */
20362 	uint32_t	reset_reg[16];
20363 	/* Lower 2 bits indicates address space location. */
20364 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_MASK \
20365 		UINT32_C(0x3)
20366 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_SFT     0
20367 	/*
20368 	 * If value is 0, this register is located in PCIe config space.
20369 	 * Drivers have to map appropriate window to access this
20370 	 * register.
20371 	 */
20372 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_PCIE_CFG \
20373 		UINT32_C(0x0)
20374 	/*
20375 	 * If value is 1, this register is located in GRC address space.
20376 	 * Drivers have to map appropriate window to access this
20377 	 * register.
20378 	 */
20379 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_GRC \
20380 		UINT32_C(0x1)
20381 	/*
20382 	 * If value is 2, this register is located in first BAR address
20383 	 * space. Drivers have to map appropriate window to access this
20384 	 * register.
20385 	 */
20386 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_BAR0 \
20387 		UINT32_C(0x2)
20388 	/*
20389 	 * If value is 3, this register is located in second BAR address
20390 	 * space. Drivers have to map appropriate window to access this
20391 	 * register.
20392 	 */
20393 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_BAR1 \
20394 		UINT32_C(0x3)
20395 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_LAST \
20396 		HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_BAR1
20397 	/* Upper 30bits of the register address. */
20398 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_MASK \
20399 		UINT32_C(0xfffffffc)
20400 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SFT           2
20401 	/* Value to be written in reset_reg to reset the controller. */
20402 	uint32_t	reset_reg_val[16];
20403 	/*
20404 	 * This value is in units of 1msec.
20405 	 * Typical value would be 10 to indicate 10msec.
20406 	 * Some of the operations like Core reset require delay before
20407 	 * accessing PCIE MMIO register space.
20408 	 * If this value is non-zero, drivers have to wait for
20409 	 * this much time after writing reset_reg_val in reset_reg.
20410 	 */
20411 	uint8_t	delay_after_reset[16];
20412 	/*
20413 	 * Error recovery counter.
20414 	 * Lower 2 bits indicates address space location and upper 30 bits
20415 	 * indicates actual address.
20416 	 * A value of 0xFFFF-FFFF indicates this register does not exist.
20417 	 */
20418 	uint32_t	err_recovery_cnt_reg;
20419 	/* Lower 2 bits indicates address space location. */
20420 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_MASK \
20421 		UINT32_C(0x3)
20422 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_SFT \
20423 		0
20424 	/*
20425 	 * If value is 0, this register is located in PCIe config space.
20426 	 * Drivers have to map appropriate window to access this
20427 	 * register.
20428 	 */
20429 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_PCIE_CFG \
20430 		UINT32_C(0x0)
20431 	/*
20432 	 * If value is 1, this register is located in GRC address space.
20433 	 * Drivers have to map appropriate window to access this
20434 	 * register.
20435 	 */
20436 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_GRC \
20437 		UINT32_C(0x1)
20438 	/*
20439 	 * If value is 2, this register is located in first BAR address
20440 	 * space. Drivers have to map appropriate window to access this
20441 	 * register.
20442 	 */
20443 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_BAR0 \
20444 		UINT32_C(0x2)
20445 	/*
20446 	 * If value is 3, this register is located in second BAR address
20447 	 * space. Drivers have to map appropriate window to access this
20448 	 * register.
20449 	 */
20450 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_BAR1 \
20451 		UINT32_C(0x3)
20452 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_LAST \
20453 		HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_BAR1
20454 	/* Upper 30bits of the register address. */
20455 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_MASK \
20456 		UINT32_C(0xfffffffc)
20457 	#define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SFT \
20458 		2
20459 	uint8_t	unused_1[3];
20460 	/*
20461 	 * This field is used in Output records to indicate that the output
20462 	 * is completely written to RAM.  This field should be read as '1'
20463 	 * to indicate that the output has been completely written.
20464 	 * When writing a command completion or response to an internal
20465 	 * processor, the order of writes has to be such that this field
20466 	 * is written last.
20467 	 */
20468 	uint8_t	valid;
20469 } __rte_packed;
20470 
20471 /***************************
20472  * hwrm_func_echo_response *
20473  ***************************/
20474 
20475 
20476 /* hwrm_func_echo_response_input (size:192b/24B) */
20477 struct hwrm_func_echo_response_input {
20478 	/* The HWRM command request type. */
20479 	uint16_t	req_type;
20480 	/*
20481 	 * The completion ring to send the completion event on. This should
20482 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
20483 	 */
20484 	uint16_t	cmpl_ring;
20485 	/*
20486 	 * The sequence ID is used by the driver for tracking multiple
20487 	 * commands. This ID is treated as opaque data by the firmware and
20488 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
20489 	 */
20490 	uint16_t	seq_id;
20491 	/*
20492 	 * The target ID of the command:
20493 	 * * 0x0-0xFFF8 - The function ID
20494 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
20495 	 * * 0xFFFD - Reserved for user-space HWRM interface
20496 	 * * 0xFFFF - HWRM
20497 	 */
20498 	uint16_t	target_id;
20499 	/*
20500 	 * A physical address pointer pointing to a host buffer that the
20501 	 * command's response data will be written. This can be either a host
20502 	 * physical address (HPA) or a guest physical address (GPA) and must
20503 	 * point to a physically contiguous block of memory.
20504 	 */
20505 	uint64_t	resp_addr;
20506 	uint32_t	event_data1;
20507 	uint32_t	event_data2;
20508 } __rte_packed;
20509 
20510 /* hwrm_func_echo_response_output (size:128b/16B) */
20511 struct hwrm_func_echo_response_output {
20512 	/* The specific error status for the command. */
20513 	uint16_t	error_code;
20514 	/* The HWRM command request type. */
20515 	uint16_t	req_type;
20516 	/* The sequence ID from the original command. */
20517 	uint16_t	seq_id;
20518 	/* The length of the response data in number of bytes. */
20519 	uint16_t	resp_len;
20520 	uint8_t	unused_0[7];
20521 	/*
20522 	 * This field is used in Output records to indicate that the output
20523 	 * is completely written to RAM.  This field should be read as '1'
20524 	 * to indicate that the output has been completely written.
20525 	 * When writing a command completion or response to an internal processor,
20526 	 * the order of writes has to be such that this field is written last.
20527 	 */
20528 	uint8_t	valid;
20529 } __rte_packed;
20530 
20531 /**************************
20532  * hwrm_func_ptp_pin_qcfg *
20533  **************************/
20534 
20535 
20536 /* hwrm_func_ptp_pin_qcfg_input (size:192b/24B) */
20537 struct hwrm_func_ptp_pin_qcfg_input {
20538 	/* The HWRM command request type. */
20539 	uint16_t	req_type;
20540 	/*
20541 	 * The completion ring to send the completion event on. This should
20542 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
20543 	 */
20544 	uint16_t	cmpl_ring;
20545 	/*
20546 	 * The sequence ID is used by the driver for tracking multiple
20547 	 * commands. This ID is treated as opaque data by the firmware and
20548 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
20549 	 */
20550 	uint16_t	seq_id;
20551 	/*
20552 	 * The target ID of the command:
20553 	 * * 0x0-0xFFF8 - The function ID
20554 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
20555 	 * * 0xFFFD - Reserved for user-space HWRM interface
20556 	 * * 0xFFFF - HWRM
20557 	 */
20558 	uint16_t	target_id;
20559 	/*
20560 	 * A physical address pointer pointing to a host buffer that the
20561 	 * command's response data will be written. This can be either a host
20562 	 * physical address (HPA) or a guest physical address (GPA) and must
20563 	 * point to a physically contiguous block of memory.
20564 	 */
20565 	uint64_t	resp_addr;
20566 	uint8_t	unused_0[8];
20567 } __rte_packed;
20568 
20569 /* hwrm_func_ptp_pin_qcfg_output (size:128b/16B) */
20570 struct hwrm_func_ptp_pin_qcfg_output {
20571 	/* The specific error status for the command. */
20572 	uint16_t	error_code;
20573 	/* The HWRM command request type. */
20574 	uint16_t	req_type;
20575 	/* The sequence ID from the original command. */
20576 	uint16_t	seq_id;
20577 	/* The length of the response data in number of bytes. */
20578 	uint16_t	resp_len;
20579 	/*
20580 	 * The number of TSIO pins that are configured on this board
20581 	 * Up to 4 pins can be returned in the response.
20582 	 */
20583 	uint8_t	num_pins;
20584 	/* Pin state */
20585 	uint8_t	state;
20586 	/*
20587 	 * When this bit is '1', TSIO pin 0 is enabled.
20588 	 * When this bit is '0', TSIO pin 0 is disabled.
20589 	 */
20590 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_STATE_PIN0_ENABLED \
20591 		UINT32_C(0x1)
20592 	/*
20593 	 * When this bit is '1', TSIO pin 1 is enabled.
20594 	 * When this bit is '0', TSIO pin 1 is disabled.
20595 	 */
20596 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_STATE_PIN1_ENABLED \
20597 		UINT32_C(0x2)
20598 	/*
20599 	 * When this bit is '1', TSIO pin 2 is enabled.
20600 	 * When this bit is '0', TSIO pin 2 is disabled.
20601 	 */
20602 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_STATE_PIN2_ENABLED \
20603 		UINT32_C(0x4)
20604 	/*
20605 	 * When this bit is '1', TSIO pin 3 is enabled.
20606 	 * When this bit is '0', TSIO pin 3 is disabled.
20607 	 */
20608 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_STATE_PIN3_ENABLED \
20609 		UINT32_C(0x8)
20610 	/* Type of function for Pin #0. */
20611 	uint8_t	pin0_usage;
20612 	/* No function is configured. */
20613 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN0_USAGE_NONE     UINT32_C(0x0)
20614 	/* PPS IN is configured. */
20615 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN0_USAGE_PPS_IN   UINT32_C(0x1)
20616 	/* PPS OUT is configured. */
20617 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN0_USAGE_PPS_OUT  UINT32_C(0x2)
20618 	/* SYNC IN is configured. */
20619 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN0_USAGE_SYNC_IN  UINT32_C(0x3)
20620 	/* SYNC OUT is configured. */
20621 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN0_USAGE_SYNC_OUT UINT32_C(0x4)
20622 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN0_USAGE_LAST \
20623 		HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN0_USAGE_SYNC_OUT
20624 	/* Type of function for Pin #1. */
20625 	uint8_t	pin1_usage;
20626 	/* No function is configured. */
20627 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN1_USAGE_NONE     UINT32_C(0x0)
20628 	/* PPS IN is configured. */
20629 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN1_USAGE_PPS_IN   UINT32_C(0x1)
20630 	/* PPS OUT is configured. */
20631 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN1_USAGE_PPS_OUT  UINT32_C(0x2)
20632 	/* SYNC IN is configured. */
20633 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN1_USAGE_SYNC_IN  UINT32_C(0x3)
20634 	/* SYNC OUT is configured. */
20635 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN1_USAGE_SYNC_OUT UINT32_C(0x4)
20636 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN1_USAGE_LAST \
20637 		HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN1_USAGE_SYNC_OUT
20638 	/* Type of function for Pin #2. */
20639 	uint8_t	pin2_usage;
20640 	/* No function is configured. */
20641 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN2_USAGE_NONE     UINT32_C(0x0)
20642 	/* PPS IN is configured. */
20643 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN2_USAGE_PPS_IN   UINT32_C(0x1)
20644 	/* PPS OUT is configured. */
20645 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN2_USAGE_PPS_OUT  UINT32_C(0x2)
20646 	/* SYNC IN is configured. */
20647 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN2_USAGE_SYNC_IN  UINT32_C(0x3)
20648 	/* SYNC OUT is configured. */
20649 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN2_USAGE_SYNC_OUT UINT32_C(0x4)
20650 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN2_USAGE_LAST \
20651 		HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN2_USAGE_SYNC_OUT
20652 	/* Type of function for Pin #3. */
20653 	uint8_t	pin3_usage;
20654 	/* No function is configured. */
20655 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN3_USAGE_NONE     UINT32_C(0x0)
20656 	/* PPS IN is configured. */
20657 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN3_USAGE_PPS_IN   UINT32_C(0x1)
20658 	/* PPS OUT is configured. */
20659 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN3_USAGE_PPS_OUT  UINT32_C(0x2)
20660 	/* SYNC IN is configured. */
20661 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN3_USAGE_SYNC_IN  UINT32_C(0x3)
20662 	/* SYNC OUT is configured. */
20663 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN3_USAGE_SYNC_OUT UINT32_C(0x4)
20664 	#define HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN3_USAGE_LAST \
20665 		HWRM_FUNC_PTP_PIN_QCFG_OUTPUT_PIN3_USAGE_SYNC_OUT
20666 	uint8_t	unused_0;
20667 	/*
20668 	 * This field is used in Output records to indicate that the output
20669 	 * is completely written to RAM.  This field should be read as '1'
20670 	 * to indicate that the output has been completely written.
20671 	 * When writing a command completion or response to an internal processor,
20672 	 * the order of writes has to be such that this field is written last.
20673 	 */
20674 	uint8_t	valid;
20675 } __rte_packed;
20676 
20677 /*************************
20678  * hwrm_func_ptp_pin_cfg *
20679  *************************/
20680 
20681 
20682 /* hwrm_func_ptp_pin_cfg_input (size:256b/32B) */
20683 struct hwrm_func_ptp_pin_cfg_input {
20684 	/* The HWRM command request type. */
20685 	uint16_t	req_type;
20686 	/*
20687 	 * The completion ring to send the completion event on. This should
20688 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
20689 	 */
20690 	uint16_t	cmpl_ring;
20691 	/*
20692 	 * The sequence ID is used by the driver for tracking multiple
20693 	 * commands. This ID is treated as opaque data by the firmware and
20694 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
20695 	 */
20696 	uint16_t	seq_id;
20697 	/*
20698 	 * The target ID of the command:
20699 	 * * 0x0-0xFFF8 - The function ID
20700 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
20701 	 * * 0xFFFD - Reserved for user-space HWRM interface
20702 	 * * 0xFFFF - HWRM
20703 	 */
20704 	uint16_t	target_id;
20705 	/*
20706 	 * A physical address pointer pointing to a host buffer that the
20707 	 * command's response data will be written. This can be either a host
20708 	 * physical address (HPA) or a guest physical address (GPA) and must
20709 	 * point to a physically contiguous block of memory.
20710 	 */
20711 	uint64_t	resp_addr;
20712 	uint32_t	enables;
20713 	/*
20714 	 * This bit must be '1' for the pin0_state field to be
20715 	 * configured.
20716 	 */
20717 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_ENABLES_PIN0_STATE \
20718 		UINT32_C(0x1)
20719 	/*
20720 	 * This bit must be '1' for the pin0_usage field to be
20721 	 * configured.
20722 	 */
20723 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_ENABLES_PIN0_USAGE \
20724 		UINT32_C(0x2)
20725 	/*
20726 	 * This bit must be '1' for the pin1_state field to be
20727 	 * configured.
20728 	 */
20729 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_ENABLES_PIN1_STATE \
20730 		UINT32_C(0x4)
20731 	/*
20732 	 * This bit must be '1' for the pin1_usage field to be
20733 	 * configured.
20734 	 */
20735 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_ENABLES_PIN1_USAGE \
20736 		UINT32_C(0x8)
20737 	/*
20738 	 * This bit must be '1' for the pin2_state field to be
20739 	 * configured.
20740 	 */
20741 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_ENABLES_PIN2_STATE \
20742 		UINT32_C(0x10)
20743 	/*
20744 	 * This bit must be '1' for the pin2_usage field to be
20745 	 * configured.
20746 	 */
20747 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_ENABLES_PIN2_USAGE \
20748 		UINT32_C(0x20)
20749 	/*
20750 	 * This bit must be '1' for the pin3_state field to be
20751 	 * configured.
20752 	 */
20753 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_ENABLES_PIN3_STATE \
20754 		UINT32_C(0x40)
20755 	/*
20756 	 * This bit must be '1' for the pin3_usage field to be
20757 	 * configured.
20758 	 */
20759 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_ENABLES_PIN3_USAGE \
20760 		UINT32_C(0x80)
20761 	/* Enable or disable functionality of Pin #0. */
20762 	uint8_t	pin0_state;
20763 	/* Disabled */
20764 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN0_STATE_DISABLED UINT32_C(0x0)
20765 	/* Enabled */
20766 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN0_STATE_ENABLED  UINT32_C(0x1)
20767 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN0_STATE_LAST \
20768 		HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN0_STATE_ENABLED
20769 	/* Configure function for TSIO pin#0. */
20770 	uint8_t	pin0_usage;
20771 	/* No function is configured. */
20772 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN0_USAGE_NONE     UINT32_C(0x0)
20773 	/* PPS IN is configured. */
20774 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN0_USAGE_PPS_IN   UINT32_C(0x1)
20775 	/* PPS OUT is configured. */
20776 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN0_USAGE_PPS_OUT  UINT32_C(0x2)
20777 	/* SYNC IN is configured. */
20778 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN0_USAGE_SYNC_IN  UINT32_C(0x3)
20779 	/* SYNC OUT is configured. */
20780 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN0_USAGE_SYNC_OUT UINT32_C(0x4)
20781 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN0_USAGE_LAST \
20782 		HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN0_USAGE_SYNC_OUT
20783 	/* Enable or disable functionality of Pin #1. */
20784 	uint8_t	pin1_state;
20785 	/* Disabled */
20786 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN1_STATE_DISABLED UINT32_C(0x0)
20787 	/* Enabled */
20788 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN1_STATE_ENABLED  UINT32_C(0x1)
20789 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN1_STATE_LAST \
20790 		HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN1_STATE_ENABLED
20791 	/* Configure function for TSIO pin#1. */
20792 	uint8_t	pin1_usage;
20793 	/* No function is configured. */
20794 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN1_USAGE_NONE     UINT32_C(0x0)
20795 	/* PPS IN is configured. */
20796 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN1_USAGE_PPS_IN   UINT32_C(0x1)
20797 	/* PPS OUT is configured. */
20798 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN1_USAGE_PPS_OUT  UINT32_C(0x2)
20799 	/* SYNC IN is configured. */
20800 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN1_USAGE_SYNC_IN  UINT32_C(0x3)
20801 	/* SYNC OUT is configured. */
20802 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN1_USAGE_SYNC_OUT UINT32_C(0x4)
20803 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN1_USAGE_LAST \
20804 		HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN1_USAGE_SYNC_OUT
20805 	/* Enable or disable functionality of Pin #2. */
20806 	uint8_t	pin2_state;
20807 	/* Disabled */
20808 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN2_STATE_DISABLED UINT32_C(0x0)
20809 	/* Enabled */
20810 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN2_STATE_ENABLED  UINT32_C(0x1)
20811 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN2_STATE_LAST \
20812 		HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN2_STATE_ENABLED
20813 	/* Configure function for TSIO pin#2. */
20814 	uint8_t	pin2_usage;
20815 	/* No function is configured. */
20816 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN2_USAGE_NONE     UINT32_C(0x0)
20817 	/* PPS IN is configured. */
20818 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN2_USAGE_PPS_IN   UINT32_C(0x1)
20819 	/* PPS OUT is configured. */
20820 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN2_USAGE_PPS_OUT  UINT32_C(0x2)
20821 	/* SYNC IN is configured. */
20822 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN2_USAGE_SYNC_IN  UINT32_C(0x3)
20823 	/* SYNC OUT is configured. */
20824 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN2_USAGE_SYNC_OUT UINT32_C(0x4)
20825 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN2_USAGE_LAST \
20826 		HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN2_USAGE_SYNC_OUT
20827 	/* Enable or disable functionality of Pin #3. */
20828 	uint8_t	pin3_state;
20829 	/* Disabled */
20830 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN3_STATE_DISABLED UINT32_C(0x0)
20831 	/* Enabled */
20832 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN3_STATE_ENABLED  UINT32_C(0x1)
20833 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN3_STATE_LAST \
20834 		HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN3_STATE_ENABLED
20835 	/* Configure function for TSIO pin#3. */
20836 	uint8_t	pin3_usage;
20837 	/* No function is configured. */
20838 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN3_USAGE_NONE     UINT32_C(0x0)
20839 	/* PPS IN is configured. */
20840 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN3_USAGE_PPS_IN   UINT32_C(0x1)
20841 	/* PPS OUT is configured. */
20842 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN3_USAGE_PPS_OUT  UINT32_C(0x2)
20843 	/* SYNC IN is configured. */
20844 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN3_USAGE_SYNC_IN  UINT32_C(0x3)
20845 	/* SYNC OUT is configured. */
20846 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN3_USAGE_SYNC_OUT UINT32_C(0x4)
20847 	#define HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN3_USAGE_LAST \
20848 		HWRM_FUNC_PTP_PIN_CFG_INPUT_PIN3_USAGE_SYNC_OUT
20849 	uint8_t	unused_0[4];
20850 } __rte_packed;
20851 
20852 /* hwrm_func_ptp_pin_cfg_output (size:128b/16B) */
20853 struct hwrm_func_ptp_pin_cfg_output {
20854 	/* The specific error status for the command. */
20855 	uint16_t	error_code;
20856 	/* The HWRM command request type. */
20857 	uint16_t	req_type;
20858 	/* The sequence ID from the original command. */
20859 	uint16_t	seq_id;
20860 	/* The length of the response data in number of bytes. */
20861 	uint16_t	resp_len;
20862 	uint8_t	unused_0[7];
20863 	/*
20864 	 * This field is used in Output records to indicate that the output
20865 	 * is completely written to RAM.  This field should be read as '1'
20866 	 * to indicate that the output has been completely written.
20867 	 * When writing a command completion or response to an internal processor,
20868 	 * the order of writes has to be such that this field is written last.
20869 	 */
20870 	uint8_t	valid;
20871 } __rte_packed;
20872 
20873 /*********************
20874  * hwrm_func_ptp_cfg *
20875  *********************/
20876 
20877 
20878 /* hwrm_func_ptp_cfg_input (size:384b/48B) */
20879 struct hwrm_func_ptp_cfg_input {
20880 	/* The HWRM command request type. */
20881 	uint16_t	req_type;
20882 	/*
20883 	 * The completion ring to send the completion event on. This should
20884 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
20885 	 */
20886 	uint16_t	cmpl_ring;
20887 	/*
20888 	 * The sequence ID is used by the driver for tracking multiple
20889 	 * commands. This ID is treated as opaque data by the firmware and
20890 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
20891 	 */
20892 	uint16_t	seq_id;
20893 	/*
20894 	 * The target ID of the command:
20895 	 * * 0x0-0xFFF8 - The function ID
20896 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
20897 	 * * 0xFFFD - Reserved for user-space HWRM interface
20898 	 * * 0xFFFF - HWRM
20899 	 */
20900 	uint16_t	target_id;
20901 	/*
20902 	 * A physical address pointer pointing to a host buffer that the
20903 	 * command's response data will be written. This can be either a host
20904 	 * physical address (HPA) or a guest physical address (GPA) and must
20905 	 * point to a physically contiguous block of memory.
20906 	 */
20907 	uint64_t	resp_addr;
20908 	uint16_t	enables;
20909 	/*
20910 	 * This bit must be '1' for the ptp_pps_event field to be
20911 	 * configured.
20912 	 */
20913 	#define HWRM_FUNC_PTP_CFG_INPUT_ENABLES_PTP_PPS_EVENT \
20914 		UINT32_C(0x1)
20915 	/*
20916 	 * This bit must be '1' for the ptp_freq_adj_dll_source field to be
20917 	 * configured.
20918 	 */
20919 	#define HWRM_FUNC_PTP_CFG_INPUT_ENABLES_PTP_FREQ_ADJ_DLL_SOURCE \
20920 		UINT32_C(0x2)
20921 	/*
20922 	 * This bit must be '1' for the ptp_freq_adj_dll_phase field to be
20923 	 * configured.
20924 	 */
20925 	#define HWRM_FUNC_PTP_CFG_INPUT_ENABLES_PTP_FREQ_ADJ_DLL_PHASE \
20926 		UINT32_C(0x4)
20927 	/*
20928 	 * This bit must be '1' for the ptp_freq_adj_ext_period field to be
20929 	 * configured.
20930 	 */
20931 	#define HWRM_FUNC_PTP_CFG_INPUT_ENABLES_PTP_FREQ_ADJ_EXT_PERIOD \
20932 		UINT32_C(0x8)
20933 	/*
20934 	 * This bit must be '1' for the ptp_freq_adj_ext_up field to be
20935 	 * configured.
20936 	 */
20937 	#define HWRM_FUNC_PTP_CFG_INPUT_ENABLES_PTP_FREQ_ADJ_EXT_UP \
20938 		UINT32_C(0x10)
20939 	/*
20940 	 * This bit must be '1' for the ptp_freq_adj_ext_phase field to be
20941 	 * configured.
20942 	 */
20943 	#define HWRM_FUNC_PTP_CFG_INPUT_ENABLES_PTP_FREQ_ADJ_EXT_PHASE \
20944 		UINT32_C(0x20)
20945 	/* This bit must be '1' for ptp_set_time field to be configured. */
20946 	#define HWRM_FUNC_PTP_CFG_INPUT_ENABLES_PTP_SET_TIME \
20947 		UINT32_C(0x40)
20948 	/* This field is used to enable interrupt for a specific PPS event. */
20949 	uint8_t	ptp_pps_event;
20950 	/*
20951 	 * When this bit is set to '1', interrupt is enabled for internal
20952 	 * PPS event. Latches timestamp on PPS_OUT TSIO Pin. If user does
20953 	 * not configure PPS_OUT on a TSIO pin, then firmware will allocate
20954 	 * PPS_OUT to an unallocated pin.
20955 	 */
20956 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_PPS_EVENT_INTERNAL \
20957 		UINT32_C(0x1)
20958 	/*
20959 	 * When this bit is set to '1', interrupt is enabled for external
20960 	 * PPS event. Latches timestamp on PPS_IN TSIO pin.
20961 	 */
20962 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_PPS_EVENT_EXTERNAL \
20963 		UINT32_C(0x2)
20964 	/*
20965 	 * This field is used to set the source signal used to discipline
20966 	 * PHC (PTP Hardware Clock)
20967 	 */
20968 	uint8_t	ptp_freq_adj_dll_source;
20969 	/* No source is selected. Use servo to discipline PHC */
20970 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_SOURCE_NONE \
20971 		UINT32_C(0x0)
20972 	/* TSIO Pin #0 is selected as source signal. */
20973 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_SOURCE_TSIO_0 \
20974 		UINT32_C(0x1)
20975 	/* TSIO Pin #1 is selected as source signal. */
20976 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_SOURCE_TSIO_1 \
20977 		UINT32_C(0x2)
20978 	/* TSIO Pin #2 is selected as source signal. */
20979 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_SOURCE_TSIO_2 \
20980 		UINT32_C(0x3)
20981 	/* TSIO Pin #3 is selected as source signal. */
20982 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_SOURCE_TSIO_3 \
20983 		UINT32_C(0x4)
20984 	/* Port #0 is selected as source signal. */
20985 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_SOURCE_PORT_0 \
20986 		UINT32_C(0x5)
20987 	/* Port #1 is selected as source signal. */
20988 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_SOURCE_PORT_1 \
20989 		UINT32_C(0x6)
20990 	/* Port #2 is selected as source signal. */
20991 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_SOURCE_PORT_2 \
20992 		UINT32_C(0x7)
20993 	/* Port #3 is selected as source signal. */
20994 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_SOURCE_PORT_3 \
20995 		UINT32_C(0x8)
20996 	/* Invalid signal. */
20997 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_SOURCE_INVALID \
20998 		UINT32_C(0xff)
20999 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_SOURCE_LAST \
21000 		HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_SOURCE_INVALID
21001 	/*
21002 	 * This field is used to provide phase adjustment for DLL
21003 	 * used to discipline PHC (PTP Hardware clock)
21004 	 */
21005 	uint8_t	ptp_freq_adj_dll_phase;
21006 	/* No Phase adjustment. */
21007 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_PHASE_NONE \
21008 		UINT32_C(0x0)
21009 	/* 4Khz sync in frequency. */
21010 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_PHASE_4K \
21011 		UINT32_C(0x1)
21012 	/* 8Khz sync in frequency. */
21013 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_PHASE_8K \
21014 		UINT32_C(0x2)
21015 	/* 10Mhz sync in frequency. */
21016 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_PHASE_10M \
21017 		UINT32_C(0x3)
21018 	#define HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_PHASE_LAST \
21019 		HWRM_FUNC_PTP_CFG_INPUT_PTP_FREQ_ADJ_DLL_PHASE_10M
21020 	uint8_t	unused_0[3];
21021 	/*
21022 	 * Period in nanoseconds (ns) for external signal
21023 	 * input.
21024 	 */
21025 	uint32_t	ptp_freq_adj_ext_period;
21026 	/*
21027 	 * Up time in nanoseconds (ns) of the duty cycle
21028 	 * of the external signal. This value should be
21029 	 * less than ptp_freq_adj_ext_period.
21030 	 */
21031 	uint32_t	ptp_freq_adj_ext_up;
21032 	/*
21033 	 * Phase value is provided. This field provides the
21034 	 * least significant 32 bits of the phase input. The
21035 	 * most significant 16 bits come from
21036 	 * ptp_freq_adj_ext_phase_upper field. Setting this
21037 	 * field requires setting ptp_freq_adj_ext_period
21038 	 * field as well to identify the external signal
21039 	 * pin.
21040 	 */
21041 	uint32_t	ptp_freq_adj_ext_phase_lower;
21042 	/*
21043 	 * Phase value is provided. The lower 16 bits of this field is used
21044 	 * with the 32 bit value from ptp_freq_adj_ext_phase_lower
21045 	 * to provide a 48 bit value input for Phase.
21046 	 */
21047 	uint32_t	ptp_freq_adj_ext_phase_upper;
21048 	/*
21049 	 * Allows driver to set the full 64bit time in FW. The upper 16 bits
21050 	 * will be stored in FW and the lower 48bits will be programmed in
21051 	 * PHC. Firmware will send a broadcast async event to all functions
21052 	 * to indicate the programmed upper 16 bits.
21053 	 */
21054 	uint64_t	ptp_set_time;
21055 } __rte_packed;
21056 
21057 /* hwrm_func_ptp_cfg_output (size:128b/16B) */
21058 struct hwrm_func_ptp_cfg_output {
21059 	/* The specific error status for the command. */
21060 	uint16_t	error_code;
21061 	/* The HWRM command request type. */
21062 	uint16_t	req_type;
21063 	/* The sequence ID from the original command. */
21064 	uint16_t	seq_id;
21065 	/* The length of the response data in number of bytes. */
21066 	uint16_t	resp_len;
21067 	uint8_t	unused_0[7];
21068 	/*
21069 	 * This field is used in Output records to indicate that the output
21070 	 * is completely written to RAM.  This field should be read as '1'
21071 	 * to indicate that the output has been completely written.
21072 	 * When writing a command completion or response to an internal processor,
21073 	 * the order of writes has to be such that this field is written last.
21074 	 */
21075 	uint8_t	valid;
21076 } __rte_packed;
21077 
21078 /**************************
21079  * hwrm_func_ptp_ts_query *
21080  **************************/
21081 
21082 
21083 /* hwrm_func_ptp_ts_query_input (size:192b/24B) */
21084 struct hwrm_func_ptp_ts_query_input {
21085 	/* The HWRM command request type. */
21086 	uint16_t	req_type;
21087 	/*
21088 	 * The completion ring to send the completion event on. This should
21089 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
21090 	 */
21091 	uint16_t	cmpl_ring;
21092 	/*
21093 	 * The sequence ID is used by the driver for tracking multiple
21094 	 * commands. This ID is treated as opaque data by the firmware and
21095 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
21096 	 */
21097 	uint16_t	seq_id;
21098 	/*
21099 	 * The target ID of the command:
21100 	 * * 0x0-0xFFF8 - The function ID
21101 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
21102 	 * * 0xFFFD - Reserved for user-space HWRM interface
21103 	 * * 0xFFFF - HWRM
21104 	 */
21105 	uint16_t	target_id;
21106 	/*
21107 	 * A physical address pointer pointing to a host buffer that the
21108 	 * command's response data will be written. This can be either a host
21109 	 * physical address (HPA) or a guest physical address (GPA) and must
21110 	 * point to a physically contiguous block of memory.
21111 	 */
21112 	uint64_t	resp_addr;
21113 	uint32_t	flags;
21114 	/* If set, the response includes PPS event timestamps */
21115 	#define HWRM_FUNC_PTP_TS_QUERY_INPUT_FLAGS_PPS_TIME     UINT32_C(0x1)
21116 	/* If set, the response includes PTM timestamps */
21117 	#define HWRM_FUNC_PTP_TS_QUERY_INPUT_FLAGS_PTM_TIME     UINT32_C(0x2)
21118 	uint8_t	unused_0[4];
21119 } __rte_packed;
21120 
21121 /* hwrm_func_ptp_ts_query_output (size:320b/40B) */
21122 struct hwrm_func_ptp_ts_query_output {
21123 	/* The specific error status for the command. */
21124 	uint16_t	error_code;
21125 	/* The HWRM command request type. */
21126 	uint16_t	req_type;
21127 	/* The sequence ID from the original command. */
21128 	uint16_t	seq_id;
21129 	/* The length of the response data in number of bytes. */
21130 	uint16_t	resp_len;
21131 	/* Timestamp value of last PPS event latched. */
21132 	uint64_t	pps_event_ts;
21133 	/* PTM local timestamp value. */
21134 	uint64_t	ptm_res_local_ts;
21135 	/* PTM Master timestamp value. */
21136 	uint64_t	ptm_pmstr_ts;
21137 	/* PTM Master propagation delay */
21138 	uint32_t	ptm_mstr_prop_dly;
21139 	uint8_t	unused_0[3];
21140 	/*
21141 	 * This field is used in Output records to indicate that the output
21142 	 * is completely written to RAM.  This field should be read as '1'
21143 	 * to indicate that the output has been completely written.
21144 	 * When writing a command completion or response to an internal processor,
21145 	 * the order of writes has to be such that this field is written last.
21146 	 */
21147 	uint8_t	valid;
21148 } __rte_packed;
21149 
21150 /*************************
21151  * hwrm_func_ptp_ext_cfg *
21152  *************************/
21153 
21154 
21155 /* hwrm_func_ptp_ext_cfg_input (size:256b/32B) */
21156 struct hwrm_func_ptp_ext_cfg_input {
21157 	/* The HWRM command request type. */
21158 	uint16_t	req_type;
21159 	/*
21160 	 * The completion ring to send the completion event on. This should
21161 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
21162 	 */
21163 	uint16_t	cmpl_ring;
21164 	/*
21165 	 * The sequence ID is used by the driver for tracking multiple
21166 	 * commands. This ID is treated as opaque data by the firmware and
21167 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
21168 	 */
21169 	uint16_t	seq_id;
21170 	/*
21171 	 * The target ID of the command:
21172 	 * * 0x0-0xFFF8 - The function ID
21173 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
21174 	 * * 0xFFFD - Reserved for user-space HWRM interface
21175 	 * * 0xFFFF - HWRM
21176 	 */
21177 	uint16_t	target_id;
21178 	/*
21179 	 * A physical address pointer pointing to a host buffer that the
21180 	 * command's response data will be written. This can be either a host
21181 	 * physical address (HPA) or a guest physical address (GPA) and must
21182 	 * point to a physically contiguous block of memory.
21183 	 */
21184 	uint64_t	resp_addr;
21185 	uint16_t	enables;
21186 	/*
21187 	 * This bit must be '1' for the phc_master_fid field to be
21188 	 * configured.
21189 	 */
21190 	#define HWRM_FUNC_PTP_EXT_CFG_INPUT_ENABLES_PHC_MASTER_FID \
21191 		UINT32_C(0x1)
21192 	/*
21193 	 * This bit must be '1' for the phc_sec_fid field to be
21194 	 * configured.
21195 	 */
21196 	#define HWRM_FUNC_PTP_EXT_CFG_INPUT_ENABLES_PHC_SEC_FID \
21197 		UINT32_C(0x2)
21198 	/*
21199 	 * This bit must be '1' for the phc_sec_mode field to be
21200 	 * configured.
21201 	 */
21202 	#define HWRM_FUNC_PTP_EXT_CFG_INPUT_ENABLES_PHC_SEC_MODE \
21203 		UINT32_C(0x4)
21204 	/*
21205 	 * This bit must be '1' for the failover_timer field to be
21206 	 * configured.
21207 	 */
21208 	#define HWRM_FUNC_PTP_EXT_CFG_INPUT_ENABLES_FAILOVER_TIMER \
21209 		UINT32_C(0x8)
21210 	/*
21211 	 * This field is used to configure the Master function. Only this
21212 	 * function can modify or condition the PHC. Only driver calls from
21213 	 * this function are allowed to adjust frequency of PHC or configure
21214 	 * PPS functionality.
21215 	 * If driver does not specify this FID, then firmware will auto select
21216 	 * the first function that makes the call to modify PHC as the Master.
21217 	 */
21218 	uint16_t	phc_master_fid;
21219 	/*
21220 	 * This field is used to configure the secondary function. This
21221 	 * function becomes the Master function in case of failover from
21222 	 * Master function.
21223 	 * If driver does not specify this FID, firmware will auto select
21224 	 * the last non-master function to make a call to condition PHC as
21225 	 * secondary.
21226 	 */
21227 	uint16_t	phc_sec_fid;
21228 	/*
21229 	 * This field is used to configure conditions under which a function
21230 	 * can become a secondary function.
21231 	 */
21232 	uint8_t	phc_sec_mode;
21233 	/*
21234 	 * Immediately failover to the current secondary function. If there
21235 	 * is no secondary function available, failover does not happen.
21236 	 */
21237 	#define HWRM_FUNC_PTP_EXT_CFG_INPUT_PHC_SEC_MODE_SWITCH  UINT32_C(0x0)
21238 	/*
21239 	 * All functions (PF and VF) can be used during auto selection
21240 	 * of a secondary function. This is not used in case of admin
21241 	 * configured secondary function.
21242 	 */
21243 	#define HWRM_FUNC_PTP_EXT_CFG_INPUT_PHC_SEC_MODE_ALL     UINT32_C(0x1)
21244 	/*
21245 	 * Only PF's can be selected as a secondary function during auto
21246 	 * selection. This is not used in case of admin configured secondary
21247 	 * function.
21248 	 */
21249 	#define HWRM_FUNC_PTP_EXT_CFG_INPUT_PHC_SEC_MODE_PF_ONLY UINT32_C(0x2)
21250 	#define HWRM_FUNC_PTP_EXT_CFG_INPUT_PHC_SEC_MODE_LAST \
21251 		HWRM_FUNC_PTP_EXT_CFG_INPUT_PHC_SEC_MODE_PF_ONLY
21252 	uint8_t	unused_0;
21253 	/*
21254 	 * This field indicates the failover time is milliseconds. If the
21255 	 * timeout expires, firmware will failover PTP configurability from
21256 	 * current master to secondary fid.
21257 	 * 0 - Failover timer is automatically selected based on the last
21258 	 * adjFreq() call. If adjFreq() is not called for 3 * (last interval)
21259 	 * the failover kicks in. For example, if last interval between
21260 	 * adjFreq() calls was 2 seconds and the next adjFreq() is not made for
21261 	 * at least 6 seconds, then secondary takes over as master to condition
21262 	 * PHC. Firmware rounds up the failover timer to be a multiple of 250
21263 	 * ms. Firmware checks every 250 ms to see if timer expired.
21264 	 * 0xFFFFFFFF - If driver specifies this value, then failover never
21265 	 * happens. Admin or auto selected Master will always be used for
21266 	 * conditioning PHC.
21267 	 * X - If driver specifies any other value, this is admin indicated
21268 	 * failover timeout. If no adjFreq() call is made within this timeout
21269 	 * value, then failover happens. This value should be a multiple of
21270 	 * 250 ms. Firmware checks every 250 ms to see if timer expired.
21271 	 */
21272 	uint32_t	failover_timer;
21273 	uint8_t	unused_1[4];
21274 } __rte_packed;
21275 
21276 /* hwrm_func_ptp_ext_cfg_output (size:128b/16B) */
21277 struct hwrm_func_ptp_ext_cfg_output {
21278 	/* The specific error status for the command. */
21279 	uint16_t	error_code;
21280 	/* The HWRM command request type. */
21281 	uint16_t	req_type;
21282 	/* The sequence ID from the original command. */
21283 	uint16_t	seq_id;
21284 	/* The length of the response data in number of bytes. */
21285 	uint16_t	resp_len;
21286 	uint8_t	unused_0[7];
21287 	/*
21288 	 * This field is used in Output records to indicate that the output
21289 	 * is completely written to RAM.  This field should be read as '1'
21290 	 * to indicate that the output has been completely written.
21291 	 * When writing a command completion or response to an internal processor,
21292 	 * the order of writes has to be such that this field is written last.
21293 	 */
21294 	uint8_t	valid;
21295 } __rte_packed;
21296 
21297 /**************************
21298  * hwrm_func_ptp_ext_qcfg *
21299  **************************/
21300 
21301 
21302 /* hwrm_func_ptp_ext_qcfg_input (size:192b/24B) */
21303 struct hwrm_func_ptp_ext_qcfg_input {
21304 	/* The HWRM command request type. */
21305 	uint16_t	req_type;
21306 	/*
21307 	 * The completion ring to send the completion event on. This should
21308 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
21309 	 */
21310 	uint16_t	cmpl_ring;
21311 	/*
21312 	 * The sequence ID is used by the driver for tracking multiple
21313 	 * commands. This ID is treated as opaque data by the firmware and
21314 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
21315 	 */
21316 	uint16_t	seq_id;
21317 	/*
21318 	 * The target ID of the command:
21319 	 * * 0x0-0xFFF8 - The function ID
21320 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
21321 	 * * 0xFFFD - Reserved for user-space HWRM interface
21322 	 * * 0xFFFF - HWRM
21323 	 */
21324 	uint16_t	target_id;
21325 	/*
21326 	 * A physical address pointer pointing to a host buffer that the
21327 	 * command's response data will be written. This can be either a host
21328 	 * physical address (HPA) or a guest physical address (GPA) and must
21329 	 * point to a physically contiguous block of memory.
21330 	 */
21331 	uint64_t	resp_addr;
21332 	uint8_t	unused_0[8];
21333 } __rte_packed;
21334 
21335 /* hwrm_func_ptp_ext_qcfg_output (size:256b/32B) */
21336 struct hwrm_func_ptp_ext_qcfg_output {
21337 	/* The specific error status for the command. */
21338 	uint16_t	error_code;
21339 	/* The HWRM command request type. */
21340 	uint16_t	req_type;
21341 	/* The sequence ID from the original command. */
21342 	uint16_t	seq_id;
21343 	/* The length of the response data in number of bytes. */
21344 	uint16_t	resp_len;
21345 	/*
21346 	 * Firmware returns the current PHC master function. This function
21347 	 * could either be admin selected or auto selected.
21348 	 */
21349 	uint16_t	phc_master_fid;
21350 	/*
21351 	 * Firmware returns the current PHC secondary function. This function
21352 	 * could either be admin selected or auto selected.
21353 	 */
21354 	uint16_t	phc_sec_fid;
21355 	/*
21356 	 * Firmware returns the last non-master/non-secondary function to
21357 	 * make a call to condition PHC.
21358 	 */
21359 	uint16_t	phc_active_fid0;
21360 	/*
21361 	 * Firmware returns the second last non-master/non-secondary function
21362 	 * to make a call to condition PHC.
21363 	 */
21364 	uint16_t	phc_active_fid1;
21365 	/*
21366 	 * Timestamp indicating the last time a failover happened. The master
21367 	 * and secondary functions in the failover event is indicated in the
21368 	 * next two fields.
21369 	 */
21370 	uint32_t	last_failover_event;
21371 	/*
21372 	 * Last failover happened from this function. This was the master
21373 	 * function at the time of failover.
21374 	 */
21375 	uint16_t	from_fid;
21376 	/*
21377 	 * Last failover happened to this function. This was the secondary
21378 	 * function at the time of failover.
21379 	 */
21380 	uint16_t	to_fid;
21381 	uint8_t	unused_0[7];
21382 	/*
21383 	 * This field is used in Output records to indicate that the output
21384 	 * is completely written to RAM.  This field should be read as '1'
21385 	 * to indicate that the output has been completely written.
21386 	 * When writing a command completion or response to an internal processor,
21387 	 * the order of writes has to be such that this field is written last.
21388 	 */
21389 	uint8_t	valid;
21390 } __rte_packed;
21391 
21392 /***************************
21393  * hwrm_func_key_ctx_alloc *
21394  ***************************/
21395 
21396 
21397 /* hwrm_func_key_ctx_alloc_input (size:320b/40B) */
21398 struct hwrm_func_key_ctx_alloc_input {
21399 	/* The HWRM command request type. */
21400 	uint16_t	req_type;
21401 	/*
21402 	 * The completion ring to send the completion event on. This should
21403 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
21404 	 */
21405 	uint16_t	cmpl_ring;
21406 	/*
21407 	 * The sequence ID is used by the driver for tracking multiple
21408 	 * commands. This ID is treated as opaque data by the firmware and
21409 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
21410 	 */
21411 	uint16_t	seq_id;
21412 	/*
21413 	 * The target ID of the command:
21414 	 * * 0x0-0xFFF8 - The function ID
21415 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
21416 	 * * 0xFFFD - Reserved for user-space HWRM interface
21417 	 * * 0xFFFF - HWRM
21418 	 */
21419 	uint16_t	target_id;
21420 	/*
21421 	 * A physical address pointer pointing to a host buffer that the
21422 	 * command's response data will be written. This can be either a host
21423 	 * physical address (HPA) or a guest physical address (GPA) and must
21424 	 * point to a physically contiguous block of memory.
21425 	 */
21426 	uint64_t	resp_addr;
21427 	/* Function ID. */
21428 	uint16_t	fid;
21429 	/* Number of Key Contexts to be allocated. */
21430 	uint16_t	num_key_ctxs;
21431 	/* DMA buffer size in bytes. */
21432 	uint32_t	dma_bufr_size_bytes;
21433 	/* Key Context type. */
21434 	uint8_t	key_ctx_type;
21435 	/* KTLS Tx Key Context type. */
21436 	#define HWRM_FUNC_KEY_CTX_ALLOC_INPUT_KEY_CTX_TYPE_TX \
21437 		UINT32_C(0x0)
21438 	/* KTLS Rx Key Context type. */
21439 	#define HWRM_FUNC_KEY_CTX_ALLOC_INPUT_KEY_CTX_TYPE_RX \
21440 		UINT32_C(0x1)
21441 	/* QUIC Tx Key Context type. */
21442 	#define HWRM_FUNC_KEY_CTX_ALLOC_INPUT_KEY_CTX_TYPE_QUIC_TX \
21443 		UINT32_C(0x2)
21444 	/* QUIC Rx Key Context type. */
21445 	#define HWRM_FUNC_KEY_CTX_ALLOC_INPUT_KEY_CTX_TYPE_QUIC_RX \
21446 		UINT32_C(0x3)
21447 	#define HWRM_FUNC_KEY_CTX_ALLOC_INPUT_KEY_CTX_TYPE_LAST \
21448 		HWRM_FUNC_KEY_CTX_ALLOC_INPUT_KEY_CTX_TYPE_QUIC_RX
21449 	uint8_t	unused_0[7];
21450 	/* Host DMA address to send back KTLS context IDs. */
21451 	uint64_t	host_dma_addr;
21452 } __rte_packed;
21453 
21454 /* hwrm_func_key_ctx_alloc_output (size:128b/16B) */
21455 struct hwrm_func_key_ctx_alloc_output {
21456 	/* The specific error status for the command. */
21457 	uint16_t	error_code;
21458 	/* The HWRM command request type. */
21459 	uint16_t	req_type;
21460 	/* The sequence ID from the original command. */
21461 	uint16_t	seq_id;
21462 	/* The length of the response data in number of bytes. */
21463 	uint16_t	resp_len;
21464 	/* Actual number of Key Contexts allocated. */
21465 	uint16_t	num_key_ctxs_allocated;
21466 	uint8_t	unused_0[5];
21467 	/*
21468 	 * This field is used in Output records to indicate that the output
21469 	 * is completely written to RAM.  This field should be read as '1'
21470 	 * to indicate that the output has been completely written.
21471 	 * When writing a command completion or response to an internal processor,
21472 	 * the order of writes has to be such that this field is written last.
21473 	 */
21474 	uint8_t	valid;
21475 } __rte_packed;
21476 
21477 /**********************************
21478  * hwrm_func_backing_store_cfg_v2 *
21479  **********************************/
21480 
21481 
21482 /* hwrm_func_backing_store_cfg_v2_input (size:448b/56B) */
21483 struct hwrm_func_backing_store_cfg_v2_input {
21484 	/* The HWRM command request type. */
21485 	uint16_t	req_type;
21486 	/*
21487 	 * The completion ring to send the completion event on. This should
21488 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
21489 	 */
21490 	uint16_t	cmpl_ring;
21491 	/*
21492 	 * The sequence ID is used by the driver for tracking multiple
21493 	 * commands. This ID is treated as opaque data by the firmware and
21494 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
21495 	 */
21496 	uint16_t	seq_id;
21497 	/*
21498 	 * The target ID of the command:
21499 	 * * 0x0-0xFFF8 - The function ID
21500 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
21501 	 * * 0xFFFD - Reserved for user-space HWRM interface
21502 	 * * 0xFFFF - HWRM
21503 	 */
21504 	uint16_t	target_id;
21505 	/*
21506 	 * A physical address pointer pointing to a host buffer that the
21507 	 * command's response data will be written. This can be either a host
21508 	 * physical address (HPA) or a guest physical address (GPA) and must
21509 	 * point to a physically contiguous block of memory.
21510 	 */
21511 	uint64_t	resp_addr;
21512 	/* Type of backing store to be configured. */
21513 	uint16_t	type;
21514 	/* Queue pair. */
21515 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_QP \
21516 		UINT32_C(0x0)
21517 	/* Shared receive queue. */
21518 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_SRQ \
21519 		UINT32_C(0x1)
21520 	/* Completion queue. */
21521 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_CQ \
21522 		UINT32_C(0x2)
21523 	/* Virtual NIC. */
21524 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_VNIC \
21525 		UINT32_C(0x3)
21526 	/* Statistic context. */
21527 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_STAT \
21528 		UINT32_C(0x4)
21529 	/* Slow-path TQM ring. */
21530 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_SP_TQM_RING \
21531 		UINT32_C(0x5)
21532 	/* Fast-path TQM ring. */
21533 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_FP_TQM_RING \
21534 		UINT32_C(0x6)
21535 	/* Memory Region and Memory Address Vector Context. */
21536 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_MRAV \
21537 		UINT32_C(0xe)
21538 	/* TIM. */
21539 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_TIM \
21540 		UINT32_C(0xf)
21541 	/* Tx key context. */
21542 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_TKC \
21543 		UINT32_C(0x13)
21544 	/* Rx key context. */
21545 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_RKC \
21546 		UINT32_C(0x14)
21547 	/* Mid-path TQM ring. */
21548 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_MP_TQM_RING \
21549 		UINT32_C(0x15)
21550 	/* SQ Doorbell shadow region. */
21551 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_SQ_DB_SHADOW \
21552 		UINT32_C(0x16)
21553 	/* RQ Doorbell shadow region. */
21554 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_RQ_DB_SHADOW \
21555 		UINT32_C(0x17)
21556 	/* SRQ Doorbell shadow region. */
21557 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_SRQ_DB_SHADOW \
21558 		UINT32_C(0x18)
21559 	/* CQ Doorbell shadow region. */
21560 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_CQ_DB_SHADOW \
21561 		UINT32_C(0x19)
21562 	/* QUIC Tx key context. */
21563 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_QUIC_TKC \
21564 		UINT32_C(0x1a)
21565 	/* QUIC Rx key context. */
21566 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_QUIC_RKC \
21567 		UINT32_C(0x1b)
21568 	/* Invalid type. */
21569 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_INVALID \
21570 		UINT32_C(0xffff)
21571 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_LAST \
21572 		HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_TYPE_INVALID
21573 	/*
21574 	 * Instance of the backing store type. It is zero-based,
21575 	 * which means "0" indicates the first instance. For backing
21576 	 * stores with single instance only, leave this field to 0.
21577 	 */
21578 	uint16_t	instance;
21579 	/* Control flags. */
21580 	uint32_t	flags;
21581 	/*
21582 	 * When set, the firmware only uses on-chip resources and
21583 	 * does not expect any backing store to be provided by the
21584 	 * host driver. This mode provides minimal L2 functionality
21585 	 * (e.g. limited L2 resources, no RoCE).
21586 	 */
21587 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_FLAGS_PREBOOT_MODE \
21588 		UINT32_C(0x1)
21589 	/* Page directory. */
21590 	uint64_t	page_dir;
21591 	/* Number of entries */
21592 	uint32_t	num_entries;
21593 	/* Number of bytes allocated for each entry */
21594 	uint16_t	entry_size;
21595 	/* Page size and pbl level. */
21596 	uint8_t	page_size_pbl_level;
21597 	/* PBL indirect levels. */
21598 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PBL_LEVEL_MASK \
21599 		UINT32_C(0xf)
21600 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PBL_LEVEL_SFT   0
21601 	/* PBL pointer is physical start address. */
21602 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PBL_LEVEL_LVL_0 \
21603 		UINT32_C(0x0)
21604 	/* PBL pointer points to PTE table. */
21605 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PBL_LEVEL_LVL_1 \
21606 		UINT32_C(0x1)
21607 	/*
21608 	 * PBL pointer points to PDE table with each entry pointing to
21609 	 * PTE tables.
21610 	 */
21611 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PBL_LEVEL_LVL_2 \
21612 		UINT32_C(0x2)
21613 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PBL_LEVEL_LAST \
21614 		HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PBL_LEVEL_LVL_2
21615 	/* Page size. */
21616 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PAGE_SIZE_MASK \
21617 		UINT32_C(0xf0)
21618 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PAGE_SIZE_SFT   4
21619 	/* 4KB. */
21620 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PAGE_SIZE_PG_4K \
21621 		(UINT32_C(0x0) << 4)
21622 	/* 8KB. */
21623 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PAGE_SIZE_PG_8K \
21624 		(UINT32_C(0x1) << 4)
21625 	/* 64KB. */
21626 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PAGE_SIZE_PG_64K \
21627 		(UINT32_C(0x2) << 4)
21628 	/* 2MB. */
21629 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PAGE_SIZE_PG_2M \
21630 		(UINT32_C(0x3) << 4)
21631 	/* 8MB. */
21632 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PAGE_SIZE_PG_8M \
21633 		(UINT32_C(0x4) << 4)
21634 	/* 1GB. */
21635 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PAGE_SIZE_PG_1G \
21636 		(UINT32_C(0x5) << 4)
21637 	#define HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PAGE_SIZE_LAST \
21638 		HWRM_FUNC_BACKING_STORE_CFG_V2_INPUT_PAGE_SIZE_PG_1G
21639 	/*
21640 	 * This field counts how many split entries contain valid data.
21641 	 * Below is the table that maps the count value:
21642 	 * | Count |                     Indication                     |
21643 	 * | ----- | -------------------------------------------------- |
21644 	 * |   0   | None of the split entries has valid data.          |
21645 	 * |   1   | Only "split_entry_0" contains valid data.          |
21646 	 * |   2   | Only "split_entry_0" and "1" have valid data.      |
21647 	 * |   3   | Only "split_entry_0", "1" and "2" have valid data. |
21648 	 * |   4   | All four split entries have valid data.            |
21649 	 */
21650 	uint8_t	subtype_valid_cnt;
21651 	/*
21652 	 * Split entry #0. Note that the four split entries (as a group)
21653 	 * must be cast to a type-specific data structure first before
21654 	 * accessing it! Below is the table that maps a backing store
21655 	 * type to the associated split entry casting data structure.
21656 	 * | Type |       Split Entry Casting Data Structure           |
21657 	 * | ---- | -------------------------------------------------- |
21658 	 * | QPC  |             qpc_split_entries                      |
21659 	 * | SRQ  |             srq_split_entries                      |
21660 	 * | CQ   |             cq_split_entries                       |
21661 	 * | VINC |            vnic_split_entries                      |
21662 	 * | MRAV |            marv_split_entries                      |
21663 	 */
21664 	uint32_t	split_entry_0;
21665 	/* Split entry #1. */
21666 	uint32_t	split_entry_1;
21667 	/* Split entry #2. */
21668 	uint32_t	split_entry_2;
21669 	/* Split entry #3. */
21670 	uint32_t	split_entry_3;
21671 } __rte_packed;
21672 
21673 /* hwrm_func_backing_store_cfg_v2_output (size:128b/16B) */
21674 struct hwrm_func_backing_store_cfg_v2_output {
21675 	/* The specific error status for the command. */
21676 	uint16_t	error_code;
21677 	/* The HWRM command request type. */
21678 	uint16_t	req_type;
21679 	/* The sequence ID from the original command. */
21680 	uint16_t	seq_id;
21681 	/* The length of the response data in number of bytes. */
21682 	uint16_t	resp_len;
21683 	uint8_t	rsvd0[7];
21684 	/*
21685 	 * This field is used in Output records to indicate that the
21686 	 * output is completely written to RAM.  This field should be
21687 	 * read as '1' to indicate that the output has been completely
21688 	 * written. When writing a command completion or response to
21689 	 * an internal processor, the order of writes has to be such
21690 	 * that this field is written last.
21691 	 */
21692 	uint8_t	valid;
21693 } __rte_packed;
21694 
21695 /***********************************
21696  * hwrm_func_backing_store_qcfg_v2 *
21697  ***********************************/
21698 
21699 
21700 /* hwrm_func_backing_store_qcfg_v2_input (size:192b/24B) */
21701 struct hwrm_func_backing_store_qcfg_v2_input {
21702 	/* The HWRM command request type. */
21703 	uint16_t	req_type;
21704 	/*
21705 	 * The completion ring to send the completion event on. This should
21706 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
21707 	 */
21708 	uint16_t	cmpl_ring;
21709 	/*
21710 	 * The sequence ID is used by the driver for tracking multiple
21711 	 * commands. This ID is treated as opaque data by the firmware and
21712 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
21713 	 */
21714 	uint16_t	seq_id;
21715 	/*
21716 	 * The target ID of the command:
21717 	 * * 0x0-0xFFF8 - The function ID
21718 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
21719 	 * * 0xFFFD - Reserved for user-space HWRM interface
21720 	 * * 0xFFFF - HWRM
21721 	 */
21722 	uint16_t	target_id;
21723 	/*
21724 	 * A physical address pointer pointing to a host buffer that the
21725 	 * command's response data will be written. This can be either a host
21726 	 * physical address (HPA) or a guest physical address (GPA) and must
21727 	 * point to a physically contiguous block of memory.
21728 	 */
21729 	uint64_t	resp_addr;
21730 	/* Type of backing store to be configured. */
21731 	uint16_t	type;
21732 	/* Queue pair. */
21733 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_QP \
21734 		UINT32_C(0x0)
21735 	/* Shared receive queue. */
21736 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_SRQ \
21737 		UINT32_C(0x1)
21738 	/* Completion queue. */
21739 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_CQ \
21740 		UINT32_C(0x2)
21741 	/* Virtual NIC. */
21742 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_VNIC \
21743 		UINT32_C(0x3)
21744 	/* Statistic context. */
21745 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_STAT \
21746 		UINT32_C(0x4)
21747 	/* Slow-path TQM ring. */
21748 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_SP_TQM_RING \
21749 		UINT32_C(0x5)
21750 	/* Fast-path TQM ring. */
21751 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_FP_TQM_RING \
21752 		UINT32_C(0x6)
21753 	/* Memory Region and Memory Address Vector Context. */
21754 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_MRAV \
21755 		UINT32_C(0xe)
21756 	/* TIM. */
21757 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_TIM \
21758 		UINT32_C(0xf)
21759 	/* Tx key context. */
21760 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_TKC \
21761 		UINT32_C(0x13)
21762 	/* Rx key context. */
21763 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_RKC \
21764 		UINT32_C(0x14)
21765 	/* Mid-path TQM ring. */
21766 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_MP_TQM_RING \
21767 		UINT32_C(0x15)
21768 	/* SQ Doorbell shadow region. */
21769 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_SQ_DB_SHADOW \
21770 		UINT32_C(0x16)
21771 	/* RQ Doorbell shadow region. */
21772 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_RQ_DB_SHADOW \
21773 		UINT32_C(0x17)
21774 	/* SRQ Doorbell shadow region. */
21775 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_SRQ_DB_SHADOW \
21776 		UINT32_C(0x18)
21777 	/* CQ Doorbell shadow region. */
21778 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_CQ_DB_SHADOW \
21779 		UINT32_C(0x19)
21780 	/* QUIC Tx key context. */
21781 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_QUIC_TKC \
21782 		UINT32_C(0x1a)
21783 	/* QUIC Rx key context. */
21784 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_QUIC_RKC \
21785 		UINT32_C(0x1b)
21786 	/* Invalid type. */
21787 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_INVALID \
21788 		UINT32_C(0xffff)
21789 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_LAST \
21790 		HWRM_FUNC_BACKING_STORE_QCFG_V2_INPUT_TYPE_INVALID
21791 	/*
21792 	 * Instance of the backing store type. It is zero-based,
21793 	 * which means "0" indicates the first instance. For backing
21794 	 * stores with single instance only, leave this field to 0.
21795 	 */
21796 	uint16_t	instance;
21797 	uint8_t	rsvd[4];
21798 } __rte_packed;
21799 
21800 /* hwrm_func_backing_store_qcfg_v2_output (size:448b/56B) */
21801 struct hwrm_func_backing_store_qcfg_v2_output {
21802 	/* The specific error status for the command. */
21803 	uint16_t	error_code;
21804 	/* The HWRM command request type. */
21805 	uint16_t	req_type;
21806 	/* The sequence ID from the original command. */
21807 	uint16_t	seq_id;
21808 	/* The length of the response data in number of bytes. */
21809 	uint16_t	resp_len;
21810 	/* Type of backing store to be configured. */
21811 	uint16_t	type;
21812 	/* Queue pair. */
21813 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_QP \
21814 		UINT32_C(0x0)
21815 	/* Shared receive queue. */
21816 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_SRQ \
21817 		UINT32_C(0x1)
21818 	/* Completion queue. */
21819 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_CQ \
21820 		UINT32_C(0x2)
21821 	/* Virtual NIC. */
21822 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_VNIC \
21823 		UINT32_C(0x3)
21824 	/* Statistic context. */
21825 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_STAT \
21826 		UINT32_C(0x4)
21827 	/* Slow-path TQM ring. */
21828 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_SP_TQM_RING \
21829 		UINT32_C(0x5)
21830 	/* Fast-path TQM ring. */
21831 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_FP_TQM_RING \
21832 		UINT32_C(0x6)
21833 	/* Memory Region and Memory Address Vector Context. */
21834 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_MRAV \
21835 		UINT32_C(0xe)
21836 	/* TIM. */
21837 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_TIM \
21838 		UINT32_C(0xf)
21839 	/* Tx key context. */
21840 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_TKC \
21841 		UINT32_C(0x13)
21842 	/* Rx key context. */
21843 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_RKC \
21844 		UINT32_C(0x14)
21845 	/* Mid-path TQM ring. */
21846 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_MP_TQM_RING \
21847 		UINT32_C(0x15)
21848 	/* QUIC Tx key context. */
21849 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_QUIC_TKC \
21850 		UINT32_C(0x1a)
21851 	/* QUIC Rx key context. */
21852 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_QUIC_RKC \
21853 		UINT32_C(0x1b)
21854 	/* Invalid type. */
21855 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_INVALID \
21856 		UINT32_C(0xffff)
21857 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_LAST \
21858 		HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_TYPE_INVALID
21859 	/*
21860 	 * Instance of the backing store type. It is zero-based,
21861 	 * which means "0" indicates the first instance. For backing
21862 	 * stores with single instance only, leave this field to 0.
21863 	 */
21864 	uint16_t	instance;
21865 	/* Control flags. */
21866 	uint32_t	flags;
21867 	/* Page directory. */
21868 	uint64_t	page_dir;
21869 	/* Number of entries */
21870 	uint32_t	num_entries;
21871 	/* Page size and pbl level. */
21872 	uint8_t	page_size_pbl_level;
21873 	/* PBL indirect levels. */
21874 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PBL_LEVEL_MASK \
21875 		UINT32_C(0xf)
21876 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PBL_LEVEL_SFT   0
21877 	/* PBL pointer is physical start address. */
21878 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PBL_LEVEL_LVL_0 \
21879 		UINT32_C(0x0)
21880 	/* PBL pointer points to PTE table. */
21881 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PBL_LEVEL_LVL_1 \
21882 		UINT32_C(0x1)
21883 	/*
21884 	 * PBL pointer points to PDE table with each entry pointing to
21885 	 * PTE tables.
21886 	 */
21887 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PBL_LEVEL_LVL_2 \
21888 		UINT32_C(0x2)
21889 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PBL_LEVEL_LAST \
21890 		HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PBL_LEVEL_LVL_2
21891 	/* Page size. */
21892 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PAGE_SIZE_MASK \
21893 		UINT32_C(0xf0)
21894 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PAGE_SIZE_SFT   4
21895 	/* 4KB. */
21896 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PAGE_SIZE_PG_4K \
21897 		(UINT32_C(0x0) << 4)
21898 	/* 8KB. */
21899 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PAGE_SIZE_PG_8K \
21900 		(UINT32_C(0x1) << 4)
21901 	/* 64KB. */
21902 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PAGE_SIZE_PG_64K \
21903 		(UINT32_C(0x2) << 4)
21904 	/* 2MB. */
21905 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PAGE_SIZE_PG_2M \
21906 		(UINT32_C(0x3) << 4)
21907 	/* 8MB. */
21908 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PAGE_SIZE_PG_8M \
21909 		(UINT32_C(0x4) << 4)
21910 	/* 1GB. */
21911 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PAGE_SIZE_PG_1G \
21912 		(UINT32_C(0x5) << 4)
21913 	#define HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PAGE_SIZE_LAST \
21914 		HWRM_FUNC_BACKING_STORE_QCFG_V2_OUTPUT_PAGE_SIZE_PG_1G
21915 	/*
21916 	 * This field counts how many split entries contain valid data.
21917 	 * Below is the table that maps the count value:
21918 	 * | count |                     Indication                     |
21919 	 * | ----- | -------------------------------------------------- |
21920 	 * |   0   | None of the split entries has valid data.          |
21921 	 * |   1   | Only "split_entry_0" contains valid data.          |
21922 	 * |   2   | Only "split_entry_0" and "1" have valid data.      |
21923 	 * |   3   | Only "split_entry_0", "1" and "2" have valid data. |
21924 	 * |   4   | All four split entries have valid data.            |
21925 	 */
21926 	uint8_t	subtype_valid_cnt;
21927 	uint8_t	rsvd[2];
21928 	/*
21929 	 * Split entry #0. Note that the four split entries (as a group)
21930 	 * must be cast to a type-specific data structure first before
21931 	 * accessing it! Below is the table that maps a backing store
21932 	 * type to the associated split entry casting data structure.
21933 	 * | Type |       Split Entry Casting Data Structure           |
21934 	 * | ---- | -------------------------------------------------- |
21935 	 * | QPC  |             qpc_split_entries                      |
21936 	 * | SRQ  |             srq_split_entries                      |
21937 	 * | CQ   |             cq_split_entries                       |
21938 	 * | VINC |            vnic_split_entries                      |
21939 	 * | MRAV |            marv_split_entries                      |
21940 	 */
21941 	uint32_t	split_entry_0;
21942 	/* Split entry #1. */
21943 	uint32_t	split_entry_1;
21944 	/* Split entry #2. */
21945 	uint32_t	split_entry_2;
21946 	/* Split entry #3. */
21947 	uint32_t	split_entry_3;
21948 	uint8_t	rsvd2[7];
21949 	/*
21950 	 * This field is used in Output records to indicate that the
21951 	 * output is completely written to RAM.  This field should be
21952 	 * read as '1' to indicate that the output has been completely
21953 	 * written. When writing a command completion or response to
21954 	 * an internal processor, the order of writes has to be such
21955 	 * that this field is written last.
21956 	 */
21957 	uint8_t	valid;
21958 } __rte_packed;
21959 
21960 /************************************
21961  * hwrm_func_backing_store_qcaps_v2 *
21962  ************************************/
21963 
21964 
21965 /* hwrm_func_backing_store_qcaps_v2_input (size:192b/24B) */
21966 struct hwrm_func_backing_store_qcaps_v2_input {
21967 	/* The HWRM command request type. */
21968 	uint16_t	req_type;
21969 	/*
21970 	 * The completion ring to send the completion event on. This should
21971 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
21972 	 */
21973 	uint16_t	cmpl_ring;
21974 	/*
21975 	 * The sequence ID is used by the driver for tracking multiple
21976 	 * commands. This ID is treated as opaque data by the firmware and
21977 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
21978 	 */
21979 	uint16_t	seq_id;
21980 	/*
21981 	 * The target ID of the command:
21982 	 * * 0x0-0xFFF8 - The function ID
21983 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
21984 	 * * 0xFFFD - Reserved for user-space HWRM interface
21985 	 * * 0xFFFF - HWRM
21986 	 */
21987 	uint16_t	target_id;
21988 	/*
21989 	 * A physical address pointer pointing to a host buffer that the
21990 	 * command's response data will be written. This can be either a host
21991 	 * physical address (HPA) or a guest physical address (GPA) and must
21992 	 * point to a physically contiguous block of memory.
21993 	 */
21994 	uint64_t	resp_addr;
21995 	/* Type of backing store to be queried. */
21996 	uint16_t	type;
21997 	/* Queue pair. */
21998 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_QP \
21999 		UINT32_C(0x0)
22000 	/* Shared receive queue. */
22001 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_SRQ \
22002 		UINT32_C(0x1)
22003 	/* Completion queue. */
22004 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_CQ \
22005 		UINT32_C(0x2)
22006 	/* Virtual NIC. */
22007 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_VNIC \
22008 		UINT32_C(0x3)
22009 	/* Statistic context. */
22010 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_STAT \
22011 		UINT32_C(0x4)
22012 	/* Slow-path TQM ring. */
22013 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_SP_TQM_RING \
22014 		UINT32_C(0x5)
22015 	/* Fast-path TQM ring. */
22016 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_FP_TQM_RING \
22017 		UINT32_C(0x6)
22018 	/* Memory Region and Memory Address Vector Context. */
22019 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_MRAV \
22020 		UINT32_C(0xe)
22021 	/* TIM. */
22022 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_TIM \
22023 		UINT32_C(0xf)
22024 	/* Tx key context. */
22025 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_TKC \
22026 		UINT32_C(0x13)
22027 	/* Rx key context. */
22028 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_RKC \
22029 		UINT32_C(0x14)
22030 	/* Mid-path TQM ring. */
22031 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_MP_TQM_RING \
22032 		UINT32_C(0x15)
22033 	/* SQ Doorbell shadow region. */
22034 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_SQ_DB_SHADOW \
22035 		UINT32_C(0x16)
22036 	/* RQ Doorbell shadow region. */
22037 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_RQ_DB_SHADOW \
22038 		UINT32_C(0x17)
22039 	/* SRQ Doorbell shadow region. */
22040 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_SRQ_DB_SHADOW \
22041 		UINT32_C(0x18)
22042 	/* CQ Doorbell shadow region. */
22043 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_CQ_DB_SHADOW \
22044 		UINT32_C(0x19)
22045 	/* QUIC Tx key context. */
22046 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_QUIC_TKC \
22047 		UINT32_C(0x1a)
22048 	/* QUIC Rx key context. */
22049 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_QUIC_RKC \
22050 		UINT32_C(0x1b)
22051 	/* Invalid type. */
22052 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_INVALID \
22053 		UINT32_C(0xffff)
22054 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_LAST \
22055 		HWRM_FUNC_BACKING_STORE_QCAPS_V2_INPUT_TYPE_INVALID
22056 	uint8_t	rsvd[6];
22057 } __rte_packed;
22058 
22059 /* hwrm_func_backing_store_qcaps_v2_output (size:448b/56B) */
22060 struct hwrm_func_backing_store_qcaps_v2_output {
22061 	/* The specific error status for the command. */
22062 	uint16_t	error_code;
22063 	/* The HWRM command request type. */
22064 	uint16_t	req_type;
22065 	/* The sequence ID from the original command. */
22066 	uint16_t	seq_id;
22067 	/* The length of the response data in number of bytes. */
22068 	uint16_t	resp_len;
22069 	/* Type of backing store to be queried. */
22070 	uint16_t	type;
22071 	/* Queue pair. */
22072 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_QP \
22073 		UINT32_C(0x0)
22074 	/* Shared receive queue. */
22075 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_SRQ \
22076 		UINT32_C(0x1)
22077 	/* Completion queue. */
22078 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_CQ \
22079 		UINT32_C(0x2)
22080 	/* Virtual NIC. */
22081 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_VNIC \
22082 		UINT32_C(0x3)
22083 	/* Statistic context. */
22084 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_STAT \
22085 		UINT32_C(0x4)
22086 	/* Slow-path TQM ring. */
22087 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_SP_TQM_RING \
22088 		UINT32_C(0x5)
22089 	/* Fast-path TQM ring. */
22090 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_FP_TQM_RING \
22091 		UINT32_C(0x6)
22092 	/* Memory Region and Memory Address Vector Context. */
22093 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_MRAV \
22094 		UINT32_C(0xe)
22095 	/* TIM. */
22096 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_TIM \
22097 		UINT32_C(0xf)
22098 	/* KTLS Tx key context. */
22099 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_TKC \
22100 		UINT32_C(0x13)
22101 	/* KTLS Rx key context. */
22102 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_RKC \
22103 		UINT32_C(0x14)
22104 	/* Mid-path TQM ring. */
22105 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_MP_TQM_RING \
22106 		UINT32_C(0x15)
22107 	/* SQ Doorbell shadow region. */
22108 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_SQ_DB_SHADOW \
22109 		UINT32_C(0x16)
22110 	/* RQ Doorbell shadow region. */
22111 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_RQ_DB_SHADOW \
22112 		UINT32_C(0x17)
22113 	/* SRQ Doorbell shadow region. */
22114 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_SRQ_DB_SHADOW \
22115 		UINT32_C(0x18)
22116 	/* CQ Doorbell shadow region. */
22117 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_CQ_DB_SHADOW \
22118 		UINT32_C(0x19)
22119 	/* QUIC Tx key context. */
22120 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_QUIC_TKC \
22121 		UINT32_C(0x1a)
22122 	/* QUIC Rx key context. */
22123 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_QUIC_RKC \
22124 		UINT32_C(0x1b)
22125 	/* Invalid type. */
22126 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_INVALID \
22127 		UINT32_C(0xffff)
22128 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_LAST \
22129 		HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_TYPE_INVALID
22130 	/* Number of bytes per backing store entry. */
22131 	uint16_t	entry_size;
22132 	/* Control flags. */
22133 	uint32_t	flags;
22134 	/*
22135 	 * When set, it indicates the context type should be initialized
22136 	 * with the “ctx_init_value” at the specified offset.
22137 	 */
22138 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_FLAGS_ENABLE_CTX_KIND_INIT \
22139 		UINT32_C(0x1)
22140 	/* When set, it indicates the context type is valid. */
22141 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_FLAGS_TYPE_VALID \
22142 		UINT32_C(0x2)
22143 	/*
22144 	 * When set, it indicates the region for this type is not a regular
22145 	 * context memory but a driver managed memory that is created,
22146 	 * initialized and managed by the driver.
22147 	 */
22148 	#define HWRM_FUNC_BACKING_STORE_QCAPS_V2_OUTPUT_FLAGS_DRIVER_MANAGED_MEMORY \
22149 		UINT32_C(0x4)
22150 	/*
22151 	 * Bit map of the valid instances associated with the
22152 	 * backing store type.
22153 	 */
22154 	uint32_t	instance_bit_map;
22155 	/*
22156 	 * Initializer to be used by drivers to initialize context memory
22157 	 * to ensure context subsystem flags an error for an attack before
22158 	 * the first time context load.
22159 	 */
22160 	uint8_t	ctx_init_value;
22161 	/*
22162 	 * Specifies the doubleword offset of ctx_init_value for this
22163 	 * context type.
22164 	 */
22165 	uint8_t	ctx_init_offset;
22166 	/*
22167 	 * Some backing store types, e.g., TQM rings, require the number
22168 	 * of entries to be a multiple of this value to prevent any
22169 	 * resource allocation limitations. If not applicable, leave
22170 	 * this field with "0".
22171 	 */
22172 	uint8_t	entry_multiple;
22173 	uint8_t	rsvd;
22174 	/* Maximum number of backing store entries supported for this type. */
22175 	uint32_t	max_num_entries;
22176 	/*
22177 	 * Minimum number of backing store entries required for this type.
22178 	 * This field is only valid for some backing store types, e.g.,
22179 	 * TQM rings. If not applicable, leave this field with "0".
22180 	 */
22181 	uint32_t	min_num_entries;
22182 	/*
22183 	 * Next valid backing store type. If current type queried is already
22184 	 * the last valid type, firmware must set this field to invalid type.
22185 	 */
22186 	uint16_t	next_valid_type;
22187 	/*
22188 	 * This field counts how many split entries contain valid data.
22189 	 * Below is the table that maps the count value:
22190 	 * | count |                     Indication                     |
22191 	 * | ----- | -------------------------------------------------- |
22192 	 * |   0   | None of the split entries has valid data.          |
22193 	 * |   1   | Only "split_entry_0" contains valid data.          |
22194 	 * |   2   | Only "split_entry_0" and "1" have valid data.      |
22195 	 * |   3   | Only "split_entry_0", "1" and "2" have valid data. |
22196 	 * |   4   | All four split entries have valid data.            |
22197 	 */
22198 	uint8_t	subtype_valid_cnt;
22199 	uint8_t	rsvd2;
22200 	/*
22201 	 * Split entry #0. Note that the four split entries (as a group)
22202 	 * must be cast to a type-specific data structure first before
22203 	 * accessing it! Below is the table that maps a backing store
22204 	 * type to the associated split entry casting data structure.
22205 	 * | Type |       Split Entry Casting Data Structure           |
22206 	 * | ---- | -------------------------------------------------- |
22207 	 * | QPC  |             qpc_split_entries                      |
22208 	 * | SRQ  |             srq_split_entries                      |
22209 	 * | CQ   |             cq_split_entries                       |
22210 	 * | VINC |            vnic_split_entries                      |
22211 	 * | MRAV |            marv_split_entries                      |
22212 	 */
22213 	uint32_t	split_entry_0;
22214 	/* Split entry #1. */
22215 	uint32_t	split_entry_1;
22216 	/* Split entry #2. */
22217 	uint32_t	split_entry_2;
22218 	/* Split entry #3. */
22219 	uint32_t	split_entry_3;
22220 	uint8_t	rsvd3[3];
22221 	/*
22222 	 * This field is used in Output records to indicate that the
22223 	 * output is completely written to RAM.  This field should be
22224 	 * read as '1' to indicate that the output has been completely
22225 	 * written. When writing a command completion or response to
22226 	 * an internal processor, the order of writes has to be such
22227 	 * that this field is written last.
22228 	 */
22229 	uint8_t	valid;
22230 } __rte_packed;
22231 
22232 /****************************
22233  * hwrm_func_dbr_pacing_cfg *
22234  ****************************/
22235 
22236 
22237 /* hwrm_func_dbr_pacing_cfg_input (size:320b/40B) */
22238 struct hwrm_func_dbr_pacing_cfg_input {
22239 	/* The HWRM command request type. */
22240 	uint16_t	req_type;
22241 	/*
22242 	 * The completion ring to send the completion event on. This should
22243 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
22244 	 */
22245 	uint16_t	cmpl_ring;
22246 	/*
22247 	 * The sequence ID is used by the driver for tracking multiple
22248 	 * commands. This ID is treated as opaque data by the firmware and
22249 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
22250 	 */
22251 	uint16_t	seq_id;
22252 	/*
22253 	 * The target ID of the command:
22254 	 * * 0x0-0xFFF8 - The function ID
22255 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
22256 	 * * 0xFFFD - Reserved for user-space HWRM interface
22257 	 * * 0xFFFF - HWRM
22258 	 */
22259 	uint16_t	target_id;
22260 	/*
22261 	 * A physical address pointer pointing to a host buffer that the
22262 	 * command's response data will be written. This can be either a host
22263 	 * physical address (HPA) or a guest physical address (GPA) and must
22264 	 * point to a physically contiguous block of memory.
22265 	 */
22266 	uint64_t	resp_addr;
22267 	uint8_t	flags;
22268 	/*
22269 	 * This bit must be '1' to enable DBR NQ events. The NQ ID to
22270 	 * receive the events must be specified in the primary_nq_id
22271 	 * field.
22272 	 */
22273 	#define HWRM_FUNC_DBR_PACING_CFG_INPUT_FLAGS_DBR_NQ_EVENT_ENABLE \
22274 		UINT32_C(0x1)
22275 	/* This bit must be '1' to disable DBR NQ events. */
22276 	#define HWRM_FUNC_DBR_PACING_CFG_INPUT_FLAGS_DBR_NQ_EVENT_DISABLE \
22277 		UINT32_C(0x2)
22278 	uint8_t	unused_0[7];
22279 	uint32_t	enables;
22280 	/*
22281 	 * This bit must be '1' for the primary_nq_id field to be
22282 	 * configured.
22283 	 */
22284 	#define HWRM_FUNC_DBR_PACING_CFG_INPUT_ENABLES_PRIMARY_NQ_ID_VALID \
22285 		UINT32_C(0x1)
22286 	/*
22287 	 * This bit must be '1' for the pacing_threshold field to be
22288 	 * configured.
22289 	 */
22290 	#define HWRM_FUNC_DBR_PACING_CFG_INPUT_ENABLES_PACING_THRESHOLD_VALID \
22291 		UINT32_C(0x2)
22292 	/*
22293 	 * Specify primary function’s NQ ID to receive the doorbell pacing
22294 	 * threshold crossing events.
22295 	 */
22296 	uint32_t	primary_nq_id;
22297 	/*
22298 	 * Specify pacing threshold value, as a percentage of the max
22299 	 * doorbell FIFO depth. The range is 1 to 36.
22300 	 */
22301 	uint32_t	pacing_threshold;
22302 	uint8_t	unused_1[4];
22303 } __rte_packed;
22304 
22305 /* hwrm_func_dbr_pacing_cfg_output (size:128b/16B) */
22306 struct hwrm_func_dbr_pacing_cfg_output {
22307 	/* The specific error status for the command. */
22308 	uint16_t	error_code;
22309 	/* The HWRM command request type. */
22310 	uint16_t	req_type;
22311 	/* The sequence ID from the original command. */
22312 	uint16_t	seq_id;
22313 	/* The length of the response data in number of bytes. */
22314 	uint16_t	resp_len;
22315 	uint8_t	unused_0[7];
22316 	/*
22317 	 * This field is used in Output records to indicate that the output
22318 	 * is completely written to RAM.  This field should be read as '1'
22319 	 * to indicate that the output has been completely written.
22320 	 * When writing a command completion or response to an internal
22321 	 * processor, the order of writes has to be such that this field is
22322 	 * written last.
22323 	 */
22324 	uint8_t	valid;
22325 } __rte_packed;
22326 
22327 /*****************************
22328  * hwrm_func_dbr_pacing_qcfg *
22329  *****************************/
22330 
22331 
22332 /* hwrm_func_dbr_pacing_qcfg_input (size:128b/16B) */
22333 struct hwrm_func_dbr_pacing_qcfg_input {
22334 	/* The HWRM command request type. */
22335 	uint16_t	req_type;
22336 	/*
22337 	 * The completion ring to send the completion event on. This should
22338 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
22339 	 */
22340 	uint16_t	cmpl_ring;
22341 	/*
22342 	 * The sequence ID is used by the driver for tracking multiple
22343 	 * commands. This ID is treated as opaque data by the firmware and
22344 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
22345 	 */
22346 	uint16_t	seq_id;
22347 	/*
22348 	 * The target ID of the command:
22349 	 * * 0x0-0xFFF8 - The function ID
22350 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
22351 	 * * 0xFFFD - Reserved for user-space HWRM interface
22352 	 * * 0xFFFF - HWRM
22353 	 */
22354 	uint16_t	target_id;
22355 	/*
22356 	 * A physical address pointer pointing to a host buffer that the
22357 	 * command's response data will be written. This can be either a host
22358 	 * physical address (HPA) or a guest physical address (GPA) and must
22359 	 * point to a physically contiguous block of memory.
22360 	 */
22361 	uint64_t	resp_addr;
22362 } __rte_packed;
22363 
22364 /* hwrm_func_dbr_pacing_qcfg_output (size:512b/64B) */
22365 struct hwrm_func_dbr_pacing_qcfg_output {
22366 	/* The specific error status for the command. */
22367 	uint16_t	error_code;
22368 	/* The HWRM command request type. */
22369 	uint16_t	req_type;
22370 	/* The sequence ID from the original command. */
22371 	uint16_t	seq_id;
22372 	/* The length of the response data in number of bytes. */
22373 	uint16_t	resp_len;
22374 	uint8_t	flags;
22375 	/* When this bit is '1', it indicates DBR NQ events are enabled. */
22376 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_FLAGS_DBR_NQ_EVENT_ENABLED \
22377 		UINT32_C(0x1)
22378 	uint8_t	unused_0[7];
22379 	/*
22380 	 * The Doorbell global FIFO occupancy register. This field should be
22381 	 * used by the driver and user library in the doorbell pacing
22382 	 * algorithm. Lower 2 bits indicates address space location and upper
22383 	 * 30 bits indicates upper 30bits of the register address. A value of
22384 	 * 0xFFFF-FFFF indicates this register does not exist.
22385 	 */
22386 	uint32_t	dbr_stat_db_fifo_reg;
22387 	/* Lower 2 bits indicates address space location. */
22388 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_STAT_DB_FIFO_REG_ADDR_SPACE_MASK \
22389 		UINT32_C(0x3)
22390 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_STAT_DB_FIFO_REG_ADDR_SPACE_SFT \
22391 		0
22392 	/*
22393 	 * If value is 0, this register is located in PCIe config space.
22394 	 * Drivers have to map appropriate window to access this
22395 	 * register.
22396 	 */
22397 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_STAT_DB_FIFO_REG_ADDR_SPACE_PCIE_CFG \
22398 		UINT32_C(0x0)
22399 	/*
22400 	 * If value is 1, this register is located in GRC address space.
22401 	 * Drivers have to map appropriate window to access this
22402 	 * register.
22403 	 */
22404 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_STAT_DB_FIFO_REG_ADDR_SPACE_GRC \
22405 		UINT32_C(0x1)
22406 	/*
22407 	 * If value is 2, this register is located in first BAR address
22408 	 * space. Drivers have to map appropriate window to access this
22409 	 * register.
22410 	 */
22411 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_STAT_DB_FIFO_REG_ADDR_SPACE_BAR0 \
22412 		UINT32_C(0x2)
22413 	/*
22414 	 * If value is 3, this register is located in second BAR address
22415 	 * space. Drivers have to map appropriate window to access this
22416 	 * Drivers have to map appropriate window to access this
22417 	 * register.
22418 	 */
22419 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_STAT_DB_FIFO_REG_ADDR_SPACE_BAR1 \
22420 		UINT32_C(0x3)
22421 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_STAT_DB_FIFO_REG_ADDR_SPACE_LAST \
22422 		HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_STAT_DB_FIFO_REG_ADDR_SPACE_BAR1
22423 	/* Upper 30bits of the register address. */
22424 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_STAT_DB_FIFO_REG_ADDR_MASK \
22425 		UINT32_C(0xfffffffc)
22426 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_STAT_DB_FIFO_REG_ADDR_SFT \
22427 		2
22428 	/*
22429 	 * This field indicates the mask value for dbr_stat_db_fifo_reg
22430 	 * to get the high watermark for doorbell FIFO.
22431 	 */
22432 	uint32_t	dbr_stat_db_fifo_reg_watermark_mask;
22433 	/*
22434 	 * This field indicates the shift value for dbr_stat_db_fifo_reg
22435 	 * to get the high watermark for doorbell FIFO.
22436 	 */
22437 	uint8_t	dbr_stat_db_fifo_reg_watermark_shift;
22438 	uint8_t	unused_1[3];
22439 	/*
22440 	 * This field indicates the mask value for dbr_stat_db_fifo_reg
22441 	 * to get the amount of room left for doorbell FIFO.
22442 	 */
22443 	uint32_t	dbr_stat_db_fifo_reg_fifo_room_mask;
22444 	/*
22445 	 * This field indicates the shift value for dbr_stat_db_fifo_reg
22446 	 * to get the amount of room left for doorbell FIFO.
22447 	 */
22448 	uint8_t	dbr_stat_db_fifo_reg_fifo_room_shift;
22449 	uint8_t	unused_2[3];
22450 	/*
22451 	 * DBR_REG_AEQ_ARM register. This field should be used by the driver
22452 	 * to rearm the interrupt for regeneration of a notification to the
22453 	 * host from the hardware when the global doorbell occupancy threshold
22454 	 * is above the threshold value. Lower 2 bits indicates address space
22455 	 * location and upper 30 bits indicates upper 30bits of the register
22456 	 * address. A value of 0xFFFF-FFFF indicates this register does not
22457 	 * exist.
22458 	 */
22459 	uint32_t	dbr_throttling_aeq_arm_reg;
22460 	/* Lower 2 bits indicates address space location. */
22461 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_THROTTLING_AEQ_ARM_REG_ADDR_SPACE_MASK \
22462 		UINT32_C(0x3)
22463 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_THROTTLING_AEQ_ARM_REG_ADDR_SPACE_SFT \
22464 		0
22465 	/*
22466 	 * If value is 0, this register is located in PCIe config space.
22467 	 * Drivers have to map appropriate window to access this
22468 	 * register.
22469 	 */
22470 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_THROTTLING_AEQ_ARM_REG_ADDR_SPACE_PCIE_CFG \
22471 		UINT32_C(0x0)
22472 	/*
22473 	 * If value is 1, this register is located in GRC address space.
22474 	 * Drivers have to map appropriate window to access this
22475 	 * register.
22476 	 */
22477 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_THROTTLING_AEQ_ARM_REG_ADDR_SPACE_GRC \
22478 		UINT32_C(0x1)
22479 	/*
22480 	 * If value is 2, this register is located in first BAR address
22481 	 * space. Drivers have to map appropriate window to access this
22482 	 * register.
22483 	 */
22484 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_THROTTLING_AEQ_ARM_REG_ADDR_SPACE_BAR0 \
22485 		UINT32_C(0x2)
22486 	/*
22487 	 * If value is 3, this register is located in second BAR address
22488 	 * space. Drivers have to map appropriate window to access this
22489 	 * Drivers have to map appropriate window to access this
22490 	 * register.
22491 	 */
22492 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_THROTTLING_AEQ_ARM_REG_ADDR_SPACE_BAR1 \
22493 		UINT32_C(0x3)
22494 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_THROTTLING_AEQ_ARM_REG_ADDR_SPACE_LAST \
22495 		HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_THROTTLING_AEQ_ARM_REG_ADDR_SPACE_BAR1
22496 	/* Upper 30bits of the register address. */
22497 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_THROTTLING_AEQ_ARM_REG_ADDR_MASK \
22498 		UINT32_C(0xfffffffc)
22499 	#define HWRM_FUNC_DBR_PACING_QCFG_OUTPUT_DBR_THROTTLING_AEQ_ARM_REG_ADDR_SFT \
22500 		2
22501 	/*
22502 	 * This field indicates the value to be written for
22503 	 * dbr_throttling_aeq_arm_reg register.
22504 	 */
22505 	uint8_t	dbr_throttling_aeq_arm_reg_val;
22506 	uint8_t	unused_3[7];
22507 	/*
22508 	 * Specifies primary function’s NQ ID.
22509 	 * A value of 0xFFFF indicates NQ ID is invalid.
22510 	 */
22511 	uint32_t	primary_nq_id;
22512 	/*
22513 	 * Specifies the pacing threshold value, as a percentage of the
22514 	 * max doorbell FIFO depth. The range is 1 to 100.
22515 	 */
22516 	uint32_t	pacing_threshold;
22517 	uint8_t	unused_4[7];
22518 	/*
22519 	 * This field is used in Output records to indicate that the output
22520 	 * is completely written to RAM.  This field should be read as '1'
22521 	 * to indicate that the output has been completely written.
22522 	 * When writing a command completion or response to an internal
22523 	 * processor, the order of writes has to be such that this field is
22524 	 * written last.
22525 	 */
22526 	uint8_t	valid;
22527 } __rte_packed;
22528 
22529 /****************************************
22530  * hwrm_func_dbr_pacing_broadcast_event *
22531  ****************************************/
22532 
22533 
22534 /* hwrm_func_dbr_pacing_broadcast_event_input (size:128b/16B) */
22535 struct hwrm_func_dbr_pacing_broadcast_event_input {
22536 	/* The HWRM command request type. */
22537 	uint16_t	req_type;
22538 	/*
22539 	 * The completion ring to send the completion event on. This should
22540 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
22541 	 */
22542 	uint16_t	cmpl_ring;
22543 	/*
22544 	 * The sequence ID is used by the driver for tracking multiple
22545 	 * commands. This ID is treated as opaque data by the firmware and
22546 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
22547 	 */
22548 	uint16_t	seq_id;
22549 	/*
22550 	 * The target ID of the command:
22551 	 * * 0x0-0xFFF8 - The function ID
22552 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
22553 	 * * 0xFFFD - Reserved for user-space HWRM interface
22554 	 * * 0xFFFF - HWRM
22555 	 */
22556 	uint16_t	target_id;
22557 	/*
22558 	 * A physical address pointer pointing to a host buffer that the
22559 	 * command's response data will be written. This can be either a host
22560 	 * physical address (HPA) or a guest physical address (GPA) and must
22561 	 * point to a physically contiguous block of memory.
22562 	 */
22563 	uint64_t	resp_addr;
22564 } __rte_packed;
22565 
22566 /* hwrm_func_dbr_pacing_broadcast_event_output (size:128b/16B) */
22567 struct hwrm_func_dbr_pacing_broadcast_event_output {
22568 	/* The specific error status for the command. */
22569 	uint16_t	error_code;
22570 	/* The HWRM command request type. */
22571 	uint16_t	req_type;
22572 	/* The sequence ID from the original command. */
22573 	uint16_t	seq_id;
22574 	/* The length of the response data in number of bytes. */
22575 	uint16_t	resp_len;
22576 	uint8_t	unused_0[7];
22577 	/*
22578 	 * This field is used in Output records to indicate that the output
22579 	 * is completely written to RAM.  This field should be read as '1'
22580 	 * to indicate that the output has been completely written.
22581 	 * When writing a command completion or response to an internal
22582 	 * processor, the order of writes has to be such that this field is
22583 	 * written last.
22584 	 */
22585 	uint8_t	valid;
22586 } __rte_packed;
22587 
22588 /***********************
22589  * hwrm_func_vlan_qcfg *
22590  ***********************/
22591 
22592 
22593 /* hwrm_func_vlan_qcfg_input (size:192b/24B) */
22594 struct hwrm_func_vlan_qcfg_input {
22595 	/* The HWRM command request type. */
22596 	uint16_t	req_type;
22597 	/*
22598 	 * The completion ring to send the completion event on. This should
22599 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
22600 	 */
22601 	uint16_t	cmpl_ring;
22602 	/*
22603 	 * The sequence ID is used by the driver for tracking multiple
22604 	 * commands. This ID is treated as opaque data by the firmware and
22605 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
22606 	 */
22607 	uint16_t	seq_id;
22608 	/*
22609 	 * The target ID of the command:
22610 	 * * 0x0-0xFFF8 - The function ID
22611 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
22612 	 * * 0xFFFD - Reserved for user-space HWRM interface
22613 	 * * 0xFFFF - HWRM
22614 	 */
22615 	uint16_t	target_id;
22616 	/*
22617 	 * A physical address pointer pointing to a host buffer that the
22618 	 * command's response data will be written. This can be either a host
22619 	 * physical address (HPA) or a guest physical address (GPA) and must
22620 	 * point to a physically contiguous block of memory.
22621 	 */
22622 	uint64_t	resp_addr;
22623 	/*
22624 	 * Function ID of the function that is being
22625 	 * configured.
22626 	 * If set to 0xFF... (All Fs), then the configuration is
22627 	 * for the requesting function.
22628 	 */
22629 	uint16_t	fid;
22630 	uint8_t	unused_0[6];
22631 } __rte_packed;
22632 
22633 /* hwrm_func_vlan_qcfg_output (size:320b/40B) */
22634 struct hwrm_func_vlan_qcfg_output {
22635 	/* The specific error status for the command. */
22636 	uint16_t	error_code;
22637 	/* The HWRM command request type. */
22638 	uint16_t	req_type;
22639 	/* The sequence ID from the original command. */
22640 	uint16_t	seq_id;
22641 	/* The length of the response data in number of bytes. */
22642 	uint16_t	resp_len;
22643 	uint64_t	unused_0;
22644 	/* S-TAG VLAN identifier configured for the function. */
22645 	uint16_t	stag_vid;
22646 	/* S-TAG PCP value configured for the function. */
22647 	uint8_t	stag_pcp;
22648 	uint8_t	unused_1;
22649 	/*
22650 	 * S-TAG TPID value configured for the function. This field is specified in
22651 	 * network byte order.
22652 	 */
22653 	uint16_t	stag_tpid;
22654 	/* C-TAG VLAN identifier configured for the function. */
22655 	uint16_t	ctag_vid;
22656 	/* C-TAG PCP value configured for the function. */
22657 	uint8_t	ctag_pcp;
22658 	uint8_t	unused_2;
22659 	/*
22660 	 * C-TAG TPID value configured for the function. This field is specified in
22661 	 * network byte order.
22662 	 */
22663 	uint16_t	ctag_tpid;
22664 	/* Future use. */
22665 	uint32_t	rsvd2;
22666 	/* Future use. */
22667 	uint32_t	rsvd3;
22668 	uint8_t	unused_3[3];
22669 	/*
22670 	 * This field is used in Output records to indicate that the output
22671 	 * is completely written to RAM.  This field should be read as '1'
22672 	 * to indicate that the output has been completely written.
22673 	 * When writing a command completion or response to an internal processor,
22674 	 * the order of writes has to be such that this field is written last.
22675 	 */
22676 	uint8_t	valid;
22677 } __rte_packed;
22678 
22679 /**********************
22680  * hwrm_func_vlan_cfg *
22681  **********************/
22682 
22683 
22684 /* hwrm_func_vlan_cfg_input (size:384b/48B) */
22685 struct hwrm_func_vlan_cfg_input {
22686 	/* The HWRM command request type. */
22687 	uint16_t	req_type;
22688 	/*
22689 	 * The completion ring to send the completion event on. This should
22690 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
22691 	 */
22692 	uint16_t	cmpl_ring;
22693 	/*
22694 	 * The sequence ID is used by the driver for tracking multiple
22695 	 * commands. This ID is treated as opaque data by the firmware and
22696 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
22697 	 */
22698 	uint16_t	seq_id;
22699 	/*
22700 	 * The target ID of the command:
22701 	 * * 0x0-0xFFF8 - The function ID
22702 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
22703 	 * * 0xFFFD - Reserved for user-space HWRM interface
22704 	 * * 0xFFFF - HWRM
22705 	 */
22706 	uint16_t	target_id;
22707 	/*
22708 	 * A physical address pointer pointing to a host buffer that the
22709 	 * command's response data will be written. This can be either a host
22710 	 * physical address (HPA) or a guest physical address (GPA) and must
22711 	 * point to a physically contiguous block of memory.
22712 	 */
22713 	uint64_t	resp_addr;
22714 	/*
22715 	 * Function ID of the function that is being
22716 	 * configured.
22717 	 * If set to 0xFF... (All Fs), then the configuration is
22718 	 * for the requesting function.
22719 	 */
22720 	uint16_t	fid;
22721 	uint8_t	unused_0[2];
22722 	uint32_t	enables;
22723 	/*
22724 	 * This bit must be '1' for the stag_vid field to be
22725 	 * configured.
22726 	 */
22727 	#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_VID      UINT32_C(0x1)
22728 	/*
22729 	 * This bit must be '1' for the ctag_vid field to be
22730 	 * configured.
22731 	 */
22732 	#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_VID      UINT32_C(0x2)
22733 	/*
22734 	 * This bit must be '1' for the stag_pcp field to be
22735 	 * configured.
22736 	 */
22737 	#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_PCP      UINT32_C(0x4)
22738 	/*
22739 	 * This bit must be '1' for the ctag_pcp field to be
22740 	 * configured.
22741 	 */
22742 	#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_PCP      UINT32_C(0x8)
22743 	/*
22744 	 * This bit must be '1' for the stag_tpid field to be
22745 	 * configured.
22746 	 */
22747 	#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_TPID     UINT32_C(0x10)
22748 	/*
22749 	 * This bit must be '1' for the ctag_tpid field to be
22750 	 * configured.
22751 	 */
22752 	#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_TPID     UINT32_C(0x20)
22753 	/* S-TAG VLAN identifier configured for the function. */
22754 	uint16_t	stag_vid;
22755 	/* S-TAG PCP value configured for the function. */
22756 	uint8_t	stag_pcp;
22757 	uint8_t	unused_1;
22758 	/*
22759 	 * S-TAG TPID value configured for the function. This field is specified in
22760 	 * network byte order.
22761 	 */
22762 	uint16_t	stag_tpid;
22763 	/* C-TAG VLAN identifier configured for the function. */
22764 	uint16_t	ctag_vid;
22765 	/* C-TAG PCP value configured for the function. */
22766 	uint8_t	ctag_pcp;
22767 	uint8_t	unused_2;
22768 	/*
22769 	 * C-TAG TPID value configured for the function. This field is specified in
22770 	 * network byte order.
22771 	 */
22772 	uint16_t	ctag_tpid;
22773 	/* Future use. */
22774 	uint32_t	rsvd1;
22775 	/* Future use. */
22776 	uint32_t	rsvd2;
22777 	uint8_t	unused_3[4];
22778 } __rte_packed;
22779 
22780 /* hwrm_func_vlan_cfg_output (size:128b/16B) */
22781 struct hwrm_func_vlan_cfg_output {
22782 	/* The specific error status for the command. */
22783 	uint16_t	error_code;
22784 	/* The HWRM command request type. */
22785 	uint16_t	req_type;
22786 	/* The sequence ID from the original command. */
22787 	uint16_t	seq_id;
22788 	/* The length of the response data in number of bytes. */
22789 	uint16_t	resp_len;
22790 	uint8_t	unused_0[7];
22791 	/*
22792 	 * This field is used in Output records to indicate that the output
22793 	 * is completely written to RAM.  This field should be read as '1'
22794 	 * to indicate that the output has been completely written.
22795 	 * When writing a command completion or response to an internal processor,
22796 	 * the order of writes has to be such that this field is written last.
22797 	 */
22798 	uint8_t	valid;
22799 } __rte_packed;
22800 
22801 /*******************************
22802  * hwrm_func_vf_vnic_ids_query *
22803  *******************************/
22804 
22805 
22806 /* hwrm_func_vf_vnic_ids_query_input (size:256b/32B) */
22807 struct hwrm_func_vf_vnic_ids_query_input {
22808 	/* The HWRM command request type. */
22809 	uint16_t	req_type;
22810 	/*
22811 	 * The completion ring to send the completion event on. This should
22812 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
22813 	 */
22814 	uint16_t	cmpl_ring;
22815 	/*
22816 	 * The sequence ID is used by the driver for tracking multiple
22817 	 * commands. This ID is treated as opaque data by the firmware and
22818 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
22819 	 */
22820 	uint16_t	seq_id;
22821 	/*
22822 	 * The target ID of the command:
22823 	 * * 0x0-0xFFF8 - The function ID
22824 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
22825 	 * * 0xFFFD - Reserved for user-space HWRM interface
22826 	 * * 0xFFFF - HWRM
22827 	 */
22828 	uint16_t	target_id;
22829 	/*
22830 	 * A physical address pointer pointing to a host buffer that the
22831 	 * command's response data will be written. This can be either a host
22832 	 * physical address (HPA) or a guest physical address (GPA) and must
22833 	 * point to a physically contiguous block of memory.
22834 	 */
22835 	uint64_t	resp_addr;
22836 	/*
22837 	 * This value is used to identify a Virtual Function (VF).
22838 	 * The scope of VF ID is local within a PF.
22839 	 */
22840 	uint16_t	vf_id;
22841 	uint8_t	unused_0[2];
22842 	/* Max number of vnic ids in vnic id table */
22843 	uint32_t	max_vnic_id_cnt;
22844 	/* This is the address for VF VNIC ID table */
22845 	uint64_t	vnic_id_tbl_addr;
22846 } __rte_packed;
22847 
22848 /* hwrm_func_vf_vnic_ids_query_output (size:128b/16B) */
22849 struct hwrm_func_vf_vnic_ids_query_output {
22850 	/* The specific error status for the command. */
22851 	uint16_t	error_code;
22852 	/* The HWRM command request type. */
22853 	uint16_t	req_type;
22854 	/* The sequence ID from the original command. */
22855 	uint16_t	seq_id;
22856 	/* The length of the response data in number of bytes. */
22857 	uint16_t	resp_len;
22858 	/*
22859 	 * Actual number of vnic ids
22860 	 *
22861 	 * Each VNIC ID is written as a 32-bit number.
22862 	 */
22863 	uint32_t	vnic_id_cnt;
22864 	uint8_t	unused_0[3];
22865 	/*
22866 	 * This field is used in Output records to indicate that the output
22867 	 * is completely written to RAM.  This field should be read as '1'
22868 	 * to indicate that the output has been completely written.
22869 	 * When writing a command completion or response to an internal processor,
22870 	 * the order of writes has to be such that this field is written last.
22871 	 */
22872 	uint8_t	valid;
22873 } __rte_packed;
22874 
22875 /***********************
22876  * hwrm_func_vf_bw_cfg *
22877  ***********************/
22878 
22879 
22880 /* hwrm_func_vf_bw_cfg_input (size:960b/120B) */
22881 struct hwrm_func_vf_bw_cfg_input {
22882 	/* The HWRM command request type. */
22883 	uint16_t	req_type;
22884 	/*
22885 	 * The completion ring to send the completion event on. This should
22886 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
22887 	 */
22888 	uint16_t	cmpl_ring;
22889 	/*
22890 	 * The sequence ID is used by the driver for tracking multiple
22891 	 * commands. This ID is treated as opaque data by the firmware and
22892 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
22893 	 */
22894 	uint16_t	seq_id;
22895 	/*
22896 	 * The target ID of the command:
22897 	 * * 0x0-0xFFF8 - The function ID
22898 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
22899 	 * * 0xFFFD - Reserved for user-space HWRM interface
22900 	 * * 0xFFFF - HWRM
22901 	 */
22902 	uint16_t	target_id;
22903 	/*
22904 	 * A physical address pointer pointing to a host buffer that the
22905 	 * command's response data will be written. This can be either a host
22906 	 * physical address (HPA) or a guest physical address (GPA) and must
22907 	 * point to a physically contiguous block of memory.
22908 	 */
22909 	uint64_t	resp_addr;
22910 	/*
22911 	 * The number of VF functions that are being configured.
22912 	 * The cmd space allows up to 50 VFs' BW to be configured with one cmd.
22913 	 */
22914 	uint16_t	num_vfs;
22915 	uint16_t	unused[3];
22916 	/* These 16-bit fields contain the VF fid and the rate scale percentage. */
22917 	uint16_t	vfn[48];
22918 	/* The physical VF id the adjustment will be made to. */
22919 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_VFID_MASK     UINT32_C(0xfff)
22920 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_VFID_SFT      0
22921 	/*
22922 	 * This field configures the rate scale percentage of the VF as specified
22923 	 * by the physical VF id.
22924 	 */
22925 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_MASK     UINT32_C(0xf000)
22926 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_SFT      12
22927 	/* 0% of the max tx rate */
22928 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_0 \
22929 		(UINT32_C(0x0) << 12)
22930 	/* 6.66% of the max tx rate */
22931 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_6_66 \
22932 		(UINT32_C(0x1) << 12)
22933 	/* 13.33% of the max tx rate */
22934 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_13_33 \
22935 		(UINT32_C(0x2) << 12)
22936 	/* 20% of the max tx rate */
22937 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_20 \
22938 		(UINT32_C(0x3) << 12)
22939 	/* 26.66% of the max tx rate */
22940 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_26_66 \
22941 		(UINT32_C(0x4) << 12)
22942 	/* 33% of the max tx rate */
22943 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_33_33 \
22944 		(UINT32_C(0x5) << 12)
22945 	/* 40% of the max tx rate */
22946 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_40 \
22947 		(UINT32_C(0x6) << 12)
22948 	/* 46.66% of the max tx rate */
22949 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_46_66 \
22950 		(UINT32_C(0x7) << 12)
22951 	/* 53.33% of the max tx rate */
22952 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_53_33 \
22953 		(UINT32_C(0x8) << 12)
22954 	/* 60% of the max tx rate */
22955 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_60 \
22956 		(UINT32_C(0x9) << 12)
22957 	/* 66.66% of the max tx rate */
22958 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_66_66 \
22959 		(UINT32_C(0xa) << 12)
22960 	/* 53.33% of the max tx rate */
22961 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_73_33 \
22962 		(UINT32_C(0xb) << 12)
22963 	/* 80% of the max tx rate */
22964 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_80 \
22965 		(UINT32_C(0xc) << 12)
22966 	/* 86.66% of the max tx rate */
22967 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_86_66 \
22968 		(UINT32_C(0xd) << 12)
22969 	/* 93.33% of the max tx rate */
22970 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_93_33 \
22971 		(UINT32_C(0xe) << 12)
22972 	/* 100% of the max tx rate */
22973 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_100 \
22974 		(UINT32_C(0xf) << 12)
22975 	#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_LAST \
22976 		HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_100
22977 } __rte_packed;
22978 
22979 /* hwrm_func_vf_bw_cfg_output (size:128b/16B) */
22980 struct hwrm_func_vf_bw_cfg_output {
22981 	/* The specific error status for the command. */
22982 	uint16_t	error_code;
22983 	/* The HWRM command request type. */
22984 	uint16_t	req_type;
22985 	/* The sequence ID from the original command. */
22986 	uint16_t	seq_id;
22987 	/* The length of the response data in number of bytes. */
22988 	uint16_t	resp_len;
22989 	uint8_t	unused_0[7];
22990 	/*
22991 	 * This field is used in Output records to indicate that the output
22992 	 * is completely written to RAM.  This field should be read as '1'
22993 	 * to indicate that the output has been completely written.
22994 	 * When writing a command completion or response to an internal processor,
22995 	 * the order of writes has to be such that this field is written last.
22996 	 */
22997 	uint8_t	valid;
22998 } __rte_packed;
22999 
23000 /************************
23001  * hwrm_func_vf_bw_qcfg *
23002  ************************/
23003 
23004 
23005 /* hwrm_func_vf_bw_qcfg_input (size:960b/120B) */
23006 struct hwrm_func_vf_bw_qcfg_input {
23007 	/* The HWRM command request type. */
23008 	uint16_t	req_type;
23009 	/*
23010 	 * The completion ring to send the completion event on. This should
23011 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
23012 	 */
23013 	uint16_t	cmpl_ring;
23014 	/*
23015 	 * The sequence ID is used by the driver for tracking multiple
23016 	 * commands. This ID is treated as opaque data by the firmware and
23017 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
23018 	 */
23019 	uint16_t	seq_id;
23020 	/*
23021 	 * The target ID of the command:
23022 	 * * 0x0-0xFFF8 - The function ID
23023 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
23024 	 * * 0xFFFD - Reserved for user-space HWRM interface
23025 	 * * 0xFFFF - HWRM
23026 	 */
23027 	uint16_t	target_id;
23028 	/*
23029 	 * A physical address pointer pointing to a host buffer that the
23030 	 * command's response data will be written. This can be either a host
23031 	 * physical address (HPA) or a guest physical address (GPA) and must
23032 	 * point to a physically contiguous block of memory.
23033 	 */
23034 	uint64_t	resp_addr;
23035 	/*
23036 	 * The number of VF functions that are being queried.
23037 	 * The inline response space allows the host to query up to 50 VFs'
23038 	 * rate scale percentage
23039 	 */
23040 	uint16_t	num_vfs;
23041 	uint16_t	unused[3];
23042 	/* These 16-bit fields contain the VF fid */
23043 	uint16_t	vfn[48];
23044 	/* The physical VF id of interest */
23045 	#define HWRM_FUNC_VF_BW_QCFG_INPUT_VFN_VFID_MASK UINT32_C(0xfff)
23046 	#define HWRM_FUNC_VF_BW_QCFG_INPUT_VFN_VFID_SFT 0
23047 } __rte_packed;
23048 
23049 /* hwrm_func_vf_bw_qcfg_output (size:960b/120B) */
23050 struct hwrm_func_vf_bw_qcfg_output {
23051 	/* The specific error status for the command. */
23052 	uint16_t	error_code;
23053 	/* The HWRM command request type. */
23054 	uint16_t	req_type;
23055 	/* The sequence ID from the original command. */
23056 	uint16_t	seq_id;
23057 	/* The length of the response data in number of bytes. */
23058 	uint16_t	resp_len;
23059 	/*
23060 	 * The number of VF functions that are being queried.
23061 	 * The inline response space allows the host to query up to 50 VFs' rate
23062 	 * scale percentage
23063 	 */
23064 	uint16_t	num_vfs;
23065 	uint16_t	unused[3];
23066 	/* These 16-bit fields contain the VF fid and the rate scale percentage. */
23067 	uint16_t	vfn[48];
23068 	/* The physical VF id the adjustment will be made to. */
23069 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_VFID_MASK     UINT32_C(0xfff)
23070 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_VFID_SFT      0
23071 	/*
23072 	 * This field configures the rate scale percentage of the VF as specified
23073 	 * by the physical VF id.
23074 	 */
23075 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_MASK     UINT32_C(0xf000)
23076 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_SFT      12
23077 	/* 0% of the max tx rate */
23078 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_0 \
23079 		(UINT32_C(0x0) << 12)
23080 	/* 6.66% of the max tx rate */
23081 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_6_66 \
23082 		(UINT32_C(0x1) << 12)
23083 	/* 13.33% of the max tx rate */
23084 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_13_33 \
23085 		(UINT32_C(0x2) << 12)
23086 	/* 20% of the max tx rate */
23087 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_20 \
23088 		(UINT32_C(0x3) << 12)
23089 	/* 26.66% of the max tx rate */
23090 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_26_66 \
23091 		(UINT32_C(0x4) << 12)
23092 	/* 33% of the max tx rate */
23093 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_33_33 \
23094 		(UINT32_C(0x5) << 12)
23095 	/* 40% of the max tx rate */
23096 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_40 \
23097 		(UINT32_C(0x6) << 12)
23098 	/* 46.66% of the max tx rate */
23099 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_46_66 \
23100 		(UINT32_C(0x7) << 12)
23101 	/* 53.33% of the max tx rate */
23102 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_53_33 \
23103 		(UINT32_C(0x8) << 12)
23104 	/* 60% of the max tx rate */
23105 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_60 \
23106 		(UINT32_C(0x9) << 12)
23107 	/* 66.66% of the max tx rate */
23108 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_66_66 \
23109 		(UINT32_C(0xa) << 12)
23110 	/* 53.33% of the max tx rate */
23111 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_73_33 \
23112 		(UINT32_C(0xb) << 12)
23113 	/* 80% of the max tx rate */
23114 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_80 \
23115 		(UINT32_C(0xc) << 12)
23116 	/* 86.66% of the max tx rate */
23117 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_86_66 \
23118 		(UINT32_C(0xd) << 12)
23119 	/* 93.33% of the max tx rate */
23120 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_93_33 \
23121 		(UINT32_C(0xe) << 12)
23122 	/* 100% of the max tx rate */
23123 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_100 \
23124 		(UINT32_C(0xf) << 12)
23125 	#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_LAST \
23126 		HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_100
23127 	uint8_t	unused_0[7];
23128 	/*
23129 	 * This field is used in Output records to indicate that the output
23130 	 * is completely written to RAM.  This field should be read as '1'
23131 	 * to indicate that the output has been completely written.
23132 	 * When writing a command completion or response to an internal processor,
23133 	 * the order of writes has to be such that this field is written last.
23134 	 */
23135 	uint8_t	valid;
23136 } __rte_packed;
23137 
23138 /***************************
23139  * hwrm_func_drv_if_change *
23140  ***************************/
23141 
23142 
23143 /* hwrm_func_drv_if_change_input (size:192b/24B) */
23144 struct hwrm_func_drv_if_change_input {
23145 	/* The HWRM command request type. */
23146 	uint16_t	req_type;
23147 	/*
23148 	 * The completion ring to send the completion event on. This should
23149 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
23150 	 */
23151 	uint16_t	cmpl_ring;
23152 	/*
23153 	 * The sequence ID is used by the driver for tracking multiple
23154 	 * commands. This ID is treated as opaque data by the firmware and
23155 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
23156 	 */
23157 	uint16_t	seq_id;
23158 	/*
23159 	 * The target ID of the command:
23160 	 * * 0x0-0xFFF8 - The function ID
23161 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
23162 	 * * 0xFFFD - Reserved for user-space HWRM interface
23163 	 * * 0xFFFF - HWRM
23164 	 */
23165 	uint16_t	target_id;
23166 	/*
23167 	 * A physical address pointer pointing to a host buffer that the
23168 	 * command's response data will be written. This can be either a host
23169 	 * physical address (HPA) or a guest physical address (GPA) and must
23170 	 * point to a physically contiguous block of memory.
23171 	 */
23172 	uint64_t	resp_addr;
23173 	uint32_t	flags;
23174 	/*
23175 	 * When this bit is '1', the function driver is indicating
23176 	 * that the IF state is changing to UP state.  The call should
23177 	 * be made at the beginning of the driver's open call before
23178 	 * resources are allocated.  After making the call, the driver
23179 	 * should check the response to see if any resources may have
23180 	 * changed (see the response below).  If the driver fails
23181 	 * the open call, the driver should make this call again with
23182 	 * this bit cleared to indicate that the IF state is not UP.
23183 	 * During the driver's close call when the IF state is changing
23184 	 * to DOWN, the driver should make this call with the bit cleared
23185 	 * after all resources have been freed.
23186 	 */
23187 	#define HWRM_FUNC_DRV_IF_CHANGE_INPUT_FLAGS_UP     UINT32_C(0x1)
23188 	uint32_t	unused;
23189 } __rte_packed;
23190 
23191 /* hwrm_func_drv_if_change_output (size:128b/16B) */
23192 struct hwrm_func_drv_if_change_output {
23193 	/* The specific error status for the command. */
23194 	uint16_t	error_code;
23195 	/* The HWRM command request type. */
23196 	uint16_t	req_type;
23197 	/* The sequence ID from the original command. */
23198 	uint16_t	seq_id;
23199 	/* The length of the response data in number of bytes. */
23200 	uint16_t	resp_len;
23201 	uint32_t	flags;
23202 	/*
23203 	 * When this bit is '1', it indicates that the resources reserved
23204 	 * for this function may have changed.  The driver should check
23205 	 * resource capabilities and reserve resources again before
23206 	 * allocating resources.
23207 	 */
23208 	#define HWRM_FUNC_DRV_IF_CHANGE_OUTPUT_FLAGS_RESC_CHANGE \
23209 		UINT32_C(0x1)
23210 	/*
23211 	 * When this bit is '1', it indicates that the firmware got changed / reset.
23212 	 * The driver should do complete re-initialization when that bit is set.
23213 	 */
23214 	#define HWRM_FUNC_DRV_IF_CHANGE_OUTPUT_FLAGS_HOT_FW_RESET_DONE \
23215 		UINT32_C(0x2)
23216 	uint8_t	unused_0[3];
23217 	/*
23218 	 * This field is used in Output records to indicate that the output
23219 	 * is completely written to RAM.  This field should be read as '1'
23220 	 * to indicate that the output has been completely written.
23221 	 * When writing a command completion or response to an internal processor,
23222 	 * the order of writes has to be such that this field is written last.
23223 	 */
23224 	uint8_t	valid;
23225 } __rte_packed;
23226 
23227 /*******************************
23228  * hwrm_func_host_pf_ids_query *
23229  *******************************/
23230 
23231 
23232 /* hwrm_func_host_pf_ids_query_input (size:192b/24B) */
23233 struct hwrm_func_host_pf_ids_query_input {
23234 	/* The HWRM command request type. */
23235 	uint16_t	req_type;
23236 	/*
23237 	 * The completion ring to send the completion event on. This should
23238 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
23239 	 */
23240 	uint16_t	cmpl_ring;
23241 	/*
23242 	 * The sequence ID is used by the driver for tracking multiple
23243 	 * commands. This ID is treated as opaque data by the firmware and
23244 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
23245 	 */
23246 	uint16_t	seq_id;
23247 	/*
23248 	 * The target ID of the command:
23249 	 * * 0x0-0xFFF8 - The function ID
23250 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
23251 	 * * 0xFFFD - Reserved for user-space HWRM interface
23252 	 * * 0xFFFF - HWRM
23253 	 */
23254 	uint16_t	target_id;
23255 	/*
23256 	 * A physical address pointer pointing to a host buffer that the
23257 	 * command's response data will be written. This can be either a host
23258 	 * physical address (HPA) or a guest physical address (GPA) and must
23259 	 * point to a physically contiguous block of memory.
23260 	 */
23261 	uint64_t	resp_addr;
23262 	uint8_t	host;
23263 	/*
23264 	 * # If this bit is set to '1', the query will contain PF(s)
23265 	 * belongs to SOC host.
23266 	 */
23267 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_SOC      UINT32_C(0x1)
23268 	/*
23269 	 * # If this bit is set to '1', the query will contain PF(s)
23270 	 * belongs to EP0 host.
23271 	 */
23272 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_EP_0     UINT32_C(0x2)
23273 	/*
23274 	 * # If this bit is set to '1', the query will contain PF(s)
23275 	 * belongs to EP1 host.
23276 	 */
23277 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_EP_1     UINT32_C(0x4)
23278 	/*
23279 	 * # If this bit is set to '1', the query will contain PF(s)
23280 	 * belongs to EP2 host.
23281 	 */
23282 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_EP_2     UINT32_C(0x8)
23283 	/*
23284 	 * # If this bit is set to '1', the query will contain PF(s)
23285 	 * belongs to EP3 host.
23286 	 */
23287 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_EP_3     UINT32_C(0x10)
23288 	/*
23289 	 * This provides a filter of what PF(s) will be returned in the
23290 	 * query..
23291 	 */
23292 	uint8_t	filter;
23293 	/*
23294 	 * all available PF(s) belong to the host(s) (defined in the
23295 	 * host field). This includes the hidden PFs.
23296 	 */
23297 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_ALL  UINT32_C(0x0)
23298 	/*
23299 	 * all available PF(s) belong to the host(s) (defined in the
23300 	 * host field) that is available for L2 traffic.
23301 	 */
23302 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_L2   UINT32_C(0x1)
23303 	/*
23304 	 * all available PF(s) belong to the host(s) (defined in the
23305 	 * host field) that is available for ROCE traffic.
23306 	 */
23307 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_ROCE UINT32_C(0x2)
23308 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_LAST \
23309 		HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_ROCE
23310 	uint8_t	unused_1[6];
23311 } __rte_packed;
23312 
23313 /* hwrm_func_host_pf_ids_query_output (size:128b/16B) */
23314 struct hwrm_func_host_pf_ids_query_output {
23315 	/* The specific error status for the command. */
23316 	uint16_t	error_code;
23317 	/* The HWRM command request type. */
23318 	uint16_t	req_type;
23319 	/* The sequence ID from the original command. */
23320 	uint16_t	seq_id;
23321 	/* The length of the response data in number of bytes. */
23322 	uint16_t	resp_len;
23323 	/* This provides the first PF ID of the device. */
23324 	uint16_t	first_pf_id;
23325 	uint16_t	pf_ordinal_mask;
23326 	/*
23327 	 * When this bit is '1', it indicates first PF belongs to one of
23328 	 * the hosts defined in the input request.
23329 	 */
23330 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_0 \
23331 		UINT32_C(0x1)
23332 	/*
23333 	 * When this bit is '1', it indicates 2nd PF belongs to one of the
23334 	 * hosts defined in the input request.
23335 	 */
23336 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_1 \
23337 		UINT32_C(0x2)
23338 	/*
23339 	 * When this bit is '1', it indicates 3rd PF belongs to one of the
23340 	 * hosts defined in the input request.
23341 	 */
23342 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_2 \
23343 		UINT32_C(0x4)
23344 	/*
23345 	 * When this bit is '1', it indicates 4th PF belongs to one of the
23346 	 * hosts defined in the input request.
23347 	 */
23348 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_3 \
23349 		UINT32_C(0x8)
23350 	/*
23351 	 * When this bit is '1', it indicates 5th PF belongs to one of the
23352 	 * hosts defined in the input request.
23353 	 */
23354 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_4 \
23355 		UINT32_C(0x10)
23356 	/*
23357 	 * When this bit is '1', it indicates 6th PF belongs to one of the
23358 	 * hosts defined in the input request.
23359 	 */
23360 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_5 \
23361 		UINT32_C(0x20)
23362 	/*
23363 	 * When this bit is '1', it indicates 7th PF belongs to one of the
23364 	 * hosts defined in the input request.
23365 	 */
23366 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_6 \
23367 		UINT32_C(0x40)
23368 	/*
23369 	 * When this bit is '1', it indicates 8th PF belongs to one of the
23370 	 * hosts defined in the input request.
23371 	 */
23372 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_7 \
23373 		UINT32_C(0x80)
23374 	/*
23375 	 * When this bit is '1', it indicates 9th PF belongs to one of the
23376 	 * hosts defined in the input request.
23377 	 */
23378 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_8 \
23379 		UINT32_C(0x100)
23380 	/*
23381 	 * When this bit is '1', it indicates 10th PF belongs to one of the
23382 	 * hosts defined in the input request.
23383 	 */
23384 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_9 \
23385 		UINT32_C(0x200)
23386 	/*
23387 	 * When this bit is '1', it indicates 11th PF belongs to one of the
23388 	 * hosts defined in the input request.
23389 	 */
23390 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_10 \
23391 		UINT32_C(0x400)
23392 	/*
23393 	 * When this bit is '1', it indicates 12th PF belongs to one of the
23394 	 * hosts defined in the input request.
23395 	 */
23396 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_11 \
23397 		UINT32_C(0x800)
23398 	/*
23399 	 * When this bit is '1', it indicates 13th PF belongs to one of the
23400 	 * hosts defined in the input request.
23401 	 */
23402 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_12 \
23403 		UINT32_C(0x1000)
23404 	/*
23405 	 * When this bit is '1', it indicates 14th PF belongs to one of the
23406 	 * hosts defined in the input request.
23407 	 */
23408 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_13 \
23409 		UINT32_C(0x2000)
23410 	/*
23411 	 * When this bit is '1', it indicates 15th PF belongs to one of the
23412 	 * hosts defined in the input request.
23413 	 */
23414 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_14 \
23415 		UINT32_C(0x4000)
23416 	/*
23417 	 * When this bit is '1', it indicates 16th PF belongs to one of the
23418 	 * hosts defined in the input request.
23419 	 */
23420 	#define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_15 \
23421 		UINT32_C(0x8000)
23422 	uint8_t	unused_1[3];
23423 	/*
23424 	 * This field is used in Output records to indicate that the output
23425 	 * is completely written to RAM.  This field should be read as '1'
23426 	 * to indicate that the output has been completely written.
23427 	 * When writing a command completion or response to an internal processor,
23428 	 * the order of writes has to be such that this field is written last.
23429 	 */
23430 	uint8_t	valid;
23431 } __rte_packed;
23432 
23433 /*********************
23434  * hwrm_func_spd_cfg *
23435  *********************/
23436 
23437 
23438 /* hwrm_func_spd_cfg_input (size:384b/48B) */
23439 struct hwrm_func_spd_cfg_input {
23440 	/* The HWRM command request type. */
23441 	uint16_t	req_type;
23442 	/*
23443 	 * The completion ring to send the completion event on. This should
23444 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
23445 	 */
23446 	uint16_t	cmpl_ring;
23447 	/*
23448 	 * The sequence ID is used by the driver for tracking multiple
23449 	 * commands. This ID is treated as opaque data by the firmware and
23450 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
23451 	 */
23452 	uint16_t	seq_id;
23453 	/*
23454 	 * The target ID of the command:
23455 	 * * 0x0-0xFFF8 - The function ID
23456 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
23457 	 * * 0xFFFD - Reserved for user-space HWRM interface
23458 	 * * 0xFFFF - HWRM
23459 	 */
23460 	uint16_t	target_id;
23461 	/*
23462 	 * A physical address pointer pointing to a host buffer that the
23463 	 * command's response data will be written. This can be either a host
23464 	 * physical address (HPA) or a guest physical address (GPA) and must
23465 	 * point to a physically contiguous block of memory.
23466 	 */
23467 	uint64_t	resp_addr;
23468 	uint32_t	flags;
23469 	/* Set this bit is '1' to enable the SPD datapath forwarding. */
23470 	#define HWRM_FUNC_SPD_CFG_INPUT_FLAGS_FWD_ENABLE       UINT32_C(0x1)
23471 	/* Set this bit is '1' to disable the SPD datapath forwarding. */
23472 	#define HWRM_FUNC_SPD_CFG_INPUT_FLAGS_FWD_DISABLE      UINT32_C(0x2)
23473 	/*
23474 	 * Set this bit is '1' to enable the SPD datapath checksum
23475 	 * feature.
23476 	 */
23477 	#define HWRM_FUNC_SPD_CFG_INPUT_FLAGS_CSUM_ENABLE      UINT32_C(0x4)
23478 	/*
23479 	 * Set this bit is '1' to disable the SPD datapath checksum
23480 	 * feature.
23481 	 */
23482 	#define HWRM_FUNC_SPD_CFG_INPUT_FLAGS_CSUM_DISABLE     UINT32_C(0x8)
23483 	/*
23484 	 * Set this bit is '1' to enable the SPD datapath debug
23485 	 * feature.
23486 	 */
23487 	#define HWRM_FUNC_SPD_CFG_INPUT_FLAGS_DBG_ENABLE       UINT32_C(0x10)
23488 	/*
23489 	 * Set this bit is '1' to disable the SPD datapath debug
23490 	 * feature.
23491 	 */
23492 	#define HWRM_FUNC_SPD_CFG_INPUT_FLAGS_DBG_DISABLE      UINT32_C(0x20)
23493 	uint32_t	enables;
23494 	/*
23495 	 * This bit must be '1' for the ethertype field to be
23496 	 * configured.
23497 	 */
23498 	#define HWRM_FUNC_SPD_CFG_INPUT_ENABLES_ETHERTYPE \
23499 		UINT32_C(0x1)
23500 	/*
23501 	 * This bit must be '1' for the hash_mode_flags field to be
23502 	 * configured.
23503 	 */
23504 	#define HWRM_FUNC_SPD_CFG_INPUT_ENABLES_HASH_MODE_FLAGS \
23505 		UINT32_C(0x2)
23506 	/*
23507 	 * This bit must be '1' for the hash_type field to be
23508 	 * configured.
23509 	 */
23510 	#define HWRM_FUNC_SPD_CFG_INPUT_ENABLES_HASH_TYPE \
23511 		UINT32_C(0x4)
23512 	/*
23513 	 * This bit must be '1' for the ring_tbl_addr field to be
23514 	 * configured.
23515 	 */
23516 	#define HWRM_FUNC_SPD_CFG_INPUT_ENABLES_RING_TBL_ADDR \
23517 		UINT32_C(0x8)
23518 	/*
23519 	 * This bit must be '1' for the hash_key_tbl_addr field to be
23520 	 * configured.
23521 	 */
23522 	#define HWRM_FUNC_SPD_CFG_INPUT_ENABLES_HASH_KEY_TBL_ADDR \
23523 		UINT32_C(0x10)
23524 	/*
23525 	 * Ethertype value used in the encapsulated SPD packet header.
23526 	 * The user must choose a value that is not conflicting with
23527 	 * publicly defined ethertype values. By default, the ethertype
23528 	 * value of 0xffff is used if there is no user specified value.
23529 	 */
23530 	uint16_t	ethertype;
23531 	/* Flags to specify different RSS hash modes. */
23532 	uint8_t	hash_mode_flags;
23533 	/*
23534 	 * When this bit is '1', it indicates using current RSS
23535 	 * hash mode setting configured in the device.
23536 	 */
23537 	#define HWRM_FUNC_SPD_CFG_INPUT_HASH_MODE_FLAGS_DEFAULT \
23538 		UINT32_C(0x1)
23539 	/*
23540 	 * When this bit is '1', it indicates requesting support of
23541 	 * RSS hashing over innermost 4 tuples {l3.src, l3.dest,
23542 	 * l4.src, l4.dest} for tunnel packets. For none-tunnel
23543 	 * packets, the RSS hash is computed over the normal
23544 	 * src/dest l3 and src/dest l4 headers.
23545 	 */
23546 	#define HWRM_FUNC_SPD_CFG_INPUT_HASH_MODE_FLAGS_INNERMOST_4 \
23547 		UINT32_C(0x2)
23548 	/*
23549 	 * When this bit is '1', it indicates requesting support of
23550 	 * RSS hashing over innermost 2 tuples {l3.src, l3.dest} for
23551 	 * tunnel packets. For none-tunnel packets, the RSS hash is
23552 	 * computed over the normal src/dest l3 headers.
23553 	 */
23554 	#define HWRM_FUNC_SPD_CFG_INPUT_HASH_MODE_FLAGS_INNERMOST_2 \
23555 		UINT32_C(0x4)
23556 	/*
23557 	 * When this bit is '1', it indicates requesting support of
23558 	 * RSS hashing over outermost 4 tuples {t_l3.src, t_l3.dest,
23559 	 * t_l4.src, t_l4.dest} for tunnel packets. For none-tunnel
23560 	 * packets, the RSS hash is computed over the normal
23561 	 * src/dest l3 and src/dest l4 headers.
23562 	 */
23563 	#define HWRM_FUNC_SPD_CFG_INPUT_HASH_MODE_FLAGS_OUTERMOST_4 \
23564 		UINT32_C(0x8)
23565 	/*
23566 	 * When this bit is '1', it indicates requesting support of
23567 	 * RSS hashing over outermost 2 tuples {t_l3.src, t_l3.dest} for
23568 	 * tunnel packets. For none-tunnel packets, the RSS hash is
23569 	 * computed over the normal src/dest l3 headers.
23570 	 */
23571 	#define HWRM_FUNC_SPD_CFG_INPUT_HASH_MODE_FLAGS_OUTERMOST_2 \
23572 		UINT32_C(0x10)
23573 	uint8_t	unused_1;
23574 	uint32_t	hash_type;
23575 	/*
23576 	 * When this bit is '1', the RSS hash shall be computed
23577 	 * over source and destination IPv4 addresses of IPv4
23578 	 * packets.
23579 	 */
23580 	#define HWRM_FUNC_SPD_CFG_INPUT_HASH_TYPE_IPV4         UINT32_C(0x1)
23581 	/*
23582 	 * When this bit is '1', the RSS hash shall be computed
23583 	 * over source/destination IPv4 addresses and
23584 	 * source/destination ports of TCP/IPv4 packets.
23585 	 */
23586 	#define HWRM_FUNC_SPD_CFG_INPUT_HASH_TYPE_TCP_IPV4     UINT32_C(0x2)
23587 	/*
23588 	 * When this bit is '1', the RSS hash shall be computed
23589 	 * over source/destination IPv4 addresses and
23590 	 * source/destination ports of UDP/IPv4 packets.
23591 	 */
23592 	#define HWRM_FUNC_SPD_CFG_INPUT_HASH_TYPE_UDP_IPV4     UINT32_C(0x4)
23593 	/*
23594 	 * When this bit is '1', the RSS hash shall be computed
23595 	 * over source and destination IPv4 addresses of IPv6
23596 	 * packets.
23597 	 */
23598 	#define HWRM_FUNC_SPD_CFG_INPUT_HASH_TYPE_IPV6         UINT32_C(0x8)
23599 	/*
23600 	 * When this bit is '1', the RSS hash shall be computed
23601 	 * over source/destination IPv6 addresses and
23602 	 * source/destination ports of TCP/IPv6 packets.
23603 	 */
23604 	#define HWRM_FUNC_SPD_CFG_INPUT_HASH_TYPE_TCP_IPV6     UINT32_C(0x10)
23605 	/*
23606 	 * When this bit is '1', the RSS hash shall be computed
23607 	 * over source/destination IPv6 addresses and
23608 	 * source/destination ports of UDP/IPv6 packets.
23609 	 */
23610 	#define HWRM_FUNC_SPD_CFG_INPUT_HASH_TYPE_UDP_IPV6     UINT32_C(0x20)
23611 	/* This is the address for rss ring group table */
23612 	uint64_t	ring_grp_tbl_addr;
23613 	/* This is the address for rss hash key table */
23614 	uint64_t	hash_key_tbl_addr;
23615 } __rte_packed;
23616 
23617 /* hwrm_func_spd_cfg_output (size:128b/16B) */
23618 struct hwrm_func_spd_cfg_output {
23619 	/* The specific error status for the command. */
23620 	uint16_t	error_code;
23621 	/* The HWRM command request type. */
23622 	uint16_t	req_type;
23623 	/* The sequence ID from the original command. */
23624 	uint16_t	seq_id;
23625 	/* The length of the response data in number of bytes. */
23626 	uint16_t	resp_len;
23627 	uint8_t	unused_0[7];
23628 	/*
23629 	 * This field is used in Output records to indicate that the output
23630 	 * is completely written to RAM.  This field should be read as '1'
23631 	 * to indicate that the output has been completely written.
23632 	 * When writing a command completion or response to an internal processor,
23633 	 * the order of writes has to be such that this field is written last.
23634 	 */
23635 	uint8_t	valid;
23636 } __rte_packed;
23637 
23638 /**********************
23639  * hwrm_func_spd_qcfg *
23640  **********************/
23641 
23642 
23643 /* hwrm_func_spd_qcfg_input (size:128b/16B) */
23644 struct hwrm_func_spd_qcfg_input {
23645 	/* The HWRM command request type. */
23646 	uint16_t	req_type;
23647 	/*
23648 	 * The completion ring to send the completion event on. This should
23649 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
23650 	 */
23651 	uint16_t	cmpl_ring;
23652 	/*
23653 	 * The sequence ID is used by the driver for tracking multiple
23654 	 * commands. This ID is treated as opaque data by the firmware and
23655 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
23656 	 */
23657 	uint16_t	seq_id;
23658 	/*
23659 	 * The target ID of the command:
23660 	 * * 0x0-0xFFF8 - The function ID
23661 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
23662 	 * * 0xFFFD - Reserved for user-space HWRM interface
23663 	 * * 0xFFFF - HWRM
23664 	 */
23665 	uint16_t	target_id;
23666 	/*
23667 	 * A physical address pointer pointing to a host buffer that the
23668 	 * command's response data will be written. This can be either a host
23669 	 * physical address (HPA) or a guest physical address (GPA) and must
23670 	 * point to a physically contiguous block of memory.
23671 	 */
23672 	uint64_t	resp_addr;
23673 } __rte_packed;
23674 
23675 /* hwrm_func_spd_qcfg_output (size:512b/64B) */
23676 struct hwrm_func_spd_qcfg_output {
23677 	/* The specific error status for the command. */
23678 	uint16_t	error_code;
23679 	/* The HWRM command request type. */
23680 	uint16_t	req_type;
23681 	/* The sequence ID from the original command. */
23682 	uint16_t	seq_id;
23683 	/* The length of the response data in number of bytes. */
23684 	uint16_t	resp_len;
23685 	uint32_t	flags;
23686 	/*
23687 	 * The SPD datapath forwarding is currently enabled when this
23688 	 * flag is set to '1'.
23689 	 */
23690 	#define HWRM_FUNC_SPD_QCFG_OUTPUT_FLAGS_FWD_ENABLED      UINT32_C(0x1)
23691 	/*
23692 	 * The SPD datapath checksum feature is currently enabled when
23693 	 * this flag is set to '1'.
23694 	 */
23695 	#define HWRM_FUNC_SPD_QCFG_OUTPUT_FLAGS_CSUM_ENABLED     UINT32_C(0x2)
23696 	/*
23697 	 * The SPD datapath debug feature is currently enabled when
23698 	 * this flag is set to '1'.
23699 	 */
23700 	#define HWRM_FUNC_SPD_QCFG_OUTPUT_FLAGS_DBG_ENABLED      UINT32_C(0x4)
23701 	uint32_t	hash_type;
23702 	/*
23703 	 * When this bit is '1', the RSS hash shall be computed
23704 	 * over source and destination IPv4 addresses of IPv4
23705 	 * packets.
23706 	 */
23707 	#define HWRM_FUNC_SPD_QCFG_OUTPUT_HASH_TYPE_IPV4         UINT32_C(0x1)
23708 	/*
23709 	 * When this bit is '1', the RSS hash shall be computed
23710 	 * over source/destination IPv4 addresses and
23711 	 * source/destination ports of TCP/IPv4 packets.
23712 	 */
23713 	#define HWRM_FUNC_SPD_QCFG_OUTPUT_HASH_TYPE_TCP_IPV4     UINT32_C(0x2)
23714 	/*
23715 	 * When this bit is '1', the RSS hash shall be computed
23716 	 * over source/destination IPv4 addresses and
23717 	 * source/destination ports of UDP/IPv4 packets.
23718 	 */
23719 	#define HWRM_FUNC_SPD_QCFG_OUTPUT_HASH_TYPE_UDP_IPV4     UINT32_C(0x4)
23720 	/*
23721 	 * When this bit is '1', the RSS hash shall be computed
23722 	 * over source and destination IPv4 addresses of IPv6
23723 	 * packets.
23724 	 */
23725 	#define HWRM_FUNC_SPD_QCFG_OUTPUT_HASH_TYPE_IPV6         UINT32_C(0x8)
23726 	/*
23727 	 * When this bit is '1', the RSS hash shall be computed
23728 	 * over source/destination IPv6 addresses and
23729 	 * source/destination ports of TCP/IPv6 packets.
23730 	 */
23731 	#define HWRM_FUNC_SPD_QCFG_OUTPUT_HASH_TYPE_TCP_IPV6     UINT32_C(0x10)
23732 	/*
23733 	 * When this bit is '1', the RSS hash shall be computed
23734 	 * over source/destination IPv6 addresses and
23735 	 * source/destination ports of UDP/IPv6 packets.
23736 	 */
23737 	#define HWRM_FUNC_SPD_QCFG_OUTPUT_HASH_TYPE_UDP_IPV6     UINT32_C(0x20)
23738 	/* This is the value of rss hash key */
23739 	uint32_t	hash_key[10];
23740 	/* Flags to specify different RSS hash modes. */
23741 	uint8_t	hash_mode_flags;
23742 	/*
23743 	 * When this bit is '1', it indicates using current RSS
23744 	 * hash mode setting configured in the device.
23745 	 */
23746 	#define HWRM_FUNC_SPD_QCFG_OUTPUT_HASH_MODE_FLAGS_DEFAULT \
23747 		UINT32_C(0x1)
23748 	/*
23749 	 * When this bit is '1', it indicates requesting support of
23750 	 * RSS hashing over innermost 4 tuples {l3.src, l3.dest,
23751 	 * l4.src, l4.dest} for tunnel packets. For none-tunnel
23752 	 * packets, the RSS hash is computed over the normal
23753 	 * src/dest l3 and src/dest l4 headers.
23754 	 */
23755 	#define HWRM_FUNC_SPD_QCFG_OUTPUT_HASH_MODE_FLAGS_INNERMOST_4 \
23756 		UINT32_C(0x2)
23757 	/*
23758 	 * When this bit is '1', it indicates requesting support of
23759 	 * RSS hashing over innermost 2 tuples {l3.src, l3.dest} for
23760 	 * tunnel packets. For none-tunnel packets, the RSS hash is
23761 	 * computed over the normal src/dest l3 headers.
23762 	 */
23763 	#define HWRM_FUNC_SPD_QCFG_OUTPUT_HASH_MODE_FLAGS_INNERMOST_2 \
23764 		UINT32_C(0x4)
23765 	/*
23766 	 * When this bit is '1', it indicates requesting support of
23767 	 * RSS hashing over outermost 4 tuples {t_l3.src, t_l3.dest,
23768 	 * t_l4.src, t_l4.dest} for tunnel packets. For none-tunnel
23769 	 * packets, the RSS hash is computed over the normal
23770 	 * src/dest l3 and src/dest l4 headers.
23771 	 */
23772 	#define HWRM_FUNC_SPD_QCFG_OUTPUT_HASH_MODE_FLAGS_OUTERMOST_4 \
23773 		UINT32_C(0x8)
23774 	/*
23775 	 * When this bit is '1', it indicates requesting support of
23776 	 * RSS hashing over outermost 2 tuples {t_l3.src, t_l3.dest} for
23777 	 * tunnel packets. For none-tunnel packets, the RSS hash is
23778 	 * computed over the normal src/dest l3 headers.
23779 	 */
23780 	#define HWRM_FUNC_SPD_QCFG_OUTPUT_HASH_MODE_FLAGS_OUTERMOST_2 \
23781 		UINT32_C(0x10)
23782 	uint8_t	unused_1;
23783 	/*
23784 	 * Ethertype value used in the encapsulated SPD packet header.
23785 	 * The user must choose a value that is not conflicting with
23786 	 * publicly defined ethertype values. By default, the ethertype
23787 	 * value of 0xffff is used if there is no user specified value.
23788 	 */
23789 	uint16_t	ethertype;
23790 	uint8_t	unused_2[3];
23791 	/*
23792 	 * This field is used in Output records to indicate that the output
23793 	 * is completely written to RAM.  This field should be read as '1'
23794 	 * to indicate that the output has been completely written.
23795 	 * When writing a command completion or response to an internal processor,
23796 	 * the order of writes has to be such that this field is written last.
23797 	 */
23798 	uint8_t	valid;
23799 } __rte_packed;
23800 
23801 /*********************
23802  * hwrm_port_phy_cfg *
23803  *********************/
23804 
23805 
23806 /* hwrm_port_phy_cfg_input (size:448b/56B) */
23807 struct hwrm_port_phy_cfg_input {
23808 	/* The HWRM command request type. */
23809 	uint16_t	req_type;
23810 	/*
23811 	 * The completion ring to send the completion event on. This should
23812 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
23813 	 */
23814 	uint16_t	cmpl_ring;
23815 	/*
23816 	 * The sequence ID is used by the driver for tracking multiple
23817 	 * commands. This ID is treated as opaque data by the firmware and
23818 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
23819 	 */
23820 	uint16_t	seq_id;
23821 	/*
23822 	 * The target ID of the command:
23823 	 * * 0x0-0xFFF8 - The function ID
23824 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
23825 	 * * 0xFFFD - Reserved for user-space HWRM interface
23826 	 * * 0xFFFF - HWRM
23827 	 */
23828 	uint16_t	target_id;
23829 	/*
23830 	 * A physical address pointer pointing to a host buffer that the
23831 	 * command's response data will be written. This can be either a host
23832 	 * physical address (HPA) or a guest physical address (GPA) and must
23833 	 * point to a physically contiguous block of memory.
23834 	 */
23835 	uint64_t	resp_addr;
23836 	uint32_t	flags;
23837 	/*
23838 	 * When this bit is set to '1', the PHY for the port shall
23839 	 * be reset.
23840 	 *
23841 	 * # If this bit is set to 1, then the HWRM shall reset the
23842 	 * PHY after applying PHY configuration changes specified
23843 	 * in this command.
23844 	 * # In order to guarantee that PHY configuration changes
23845 	 * specified in this command take effect, the HWRM
23846 	 * client should set this flag to 1.
23847 	 * # If this bit is not set to 1, then the HWRM may reset
23848 	 * the PHY depending on the current PHY configuration and
23849 	 * settings specified in this command.
23850 	 */
23851 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_RESET_PHY \
23852 		UINT32_C(0x1)
23853 	/* deprecated bit.  Do not use!!! */
23854 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_DEPRECATED \
23855 		UINT32_C(0x2)
23856 	/*
23857 	 * When this bit is set to '1', and the force_pam4_link_speed
23858 	 * bit in the 'enables' field is '0', the link shall be forced
23859 	 * to the force_link_speed value.
23860 	 *
23861 	 * When this bit is set to '1', and the force_pam4_link_speed
23862 	 * bit in the 'enables' field is '1', the link shall be forced
23863 	 * to the force_pam4_link_speed value.
23864 	 *
23865 	 * When this bit is set to '1', the HWRM client should
23866 	 * not enable any of the auto negotiation related
23867 	 * fields represented by auto_XXX fields in this command.
23868 	 * When this bit is set to '1' and the HWRM client has
23869 	 * enabled a auto_XXX field in this command, then the
23870 	 * HWRM shall ignore the enabled auto_XXX field.
23871 	 *
23872 	 * When this bit is set to zero, the link
23873 	 * shall be allowed to autoneg.
23874 	 */
23875 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FORCE \
23876 		UINT32_C(0x4)
23877 	/*
23878 	 * When this bit is set to '1', the auto-negotiation process
23879 	 * shall be restarted on the link.
23880 	 */
23881 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_RESTART_AUTONEG \
23882 		UINT32_C(0x8)
23883 	/*
23884 	 * When this bit is set to '1', Energy Efficient Ethernet
23885 	 * (EEE) is requested to be enabled on this link.
23886 	 * If EEE is not supported on this port, then this flag
23887 	 * shall be ignored by the HWRM.
23888 	 */
23889 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_ENABLE \
23890 		UINT32_C(0x10)
23891 	/*
23892 	 * When this bit is set to '1', Energy Efficient Ethernet
23893 	 * (EEE) is requested to be disabled on this link.
23894 	 * If EEE is not supported on this port, then this flag
23895 	 * shall be ignored by the HWRM.
23896 	 */
23897 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_DISABLE \
23898 		UINT32_C(0x20)
23899 	/*
23900 	 * When this bit is set to '1' and EEE is enabled on this
23901 	 * link, then TX LPI is requested to be enabled on the link.
23902 	 * If EEE is not supported on this port, then this flag
23903 	 * shall be ignored by the HWRM.
23904 	 * If EEE is disabled on this port, then this flag shall be
23905 	 * ignored by the HWRM.
23906 	 */
23907 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_TX_LPI_ENABLE \
23908 		UINT32_C(0x40)
23909 	/*
23910 	 * When this bit is set to '1' and EEE is enabled on this
23911 	 * link, then TX LPI is requested to be disabled on the link.
23912 	 * If EEE is not supported on this port, then this flag
23913 	 * shall be ignored by the HWRM.
23914 	 * If EEE is disabled on this port, then this flag shall be
23915 	 * ignored by the HWRM.
23916 	 */
23917 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_TX_LPI_DISABLE \
23918 		UINT32_C(0x80)
23919 	/*
23920 	 * When set to 1, then the HWRM shall enable FEC autonegotitation
23921 	 * on this port if supported.  When enabled, at least one of the
23922 	 * FEC modes must be advertised by enabling the fec_clause_74_enable,
23923 	 * fec_clause_91_enable, fec_rs544_1xn_enable, fec_rs544_ieee_enable,
23924 	 * fec_rs272_1xn_enable, or fec_rs272_ieee_enable flag.  If none
23925 	 * of the FEC mode is currently enabled, the HWRM shall choose
23926 	 * a default advertisement setting.
23927 	 * The default advertisement setting can be queried by calling
23928 	 * hwrm_port_phy_qcfg.  Note that the link speed must be
23929 	 * in autonegotiation mode for FEC autonegotiation to take effect.
23930 	 * When set to 0, then this flag shall be ignored.
23931 	 * If FEC autonegotiation is not supported, then the HWRM shall ignore this
23932 	 * flag.
23933 	 */
23934 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_AUTONEG_ENABLE \
23935 		UINT32_C(0x100)
23936 	/*
23937 	 * When set to 1, then the HWRM shall disable FEC autonegotiation
23938 	 * on this port and use forced FEC mode.  In forced FEC mode, one
23939 	 * or more FEC forced settings under the same clause can be set.
23940 	 * When set to 0, then this flag shall be ignored.
23941 	 * If FEC autonegotiation is not supported, then the HWRM shall ignore this
23942 	 * flag.
23943 	 */
23944 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_AUTONEG_DISABLE \
23945 		UINT32_C(0x200)
23946 	/*
23947 	 * When set to 1, then the HWRM shall enable FEC CLAUSE 74 (Fire Code)
23948 	 * on this port if supported, by advertising FEC CLAUSE 74 if
23949 	 * FEC autonegotiation is enabled or force enabled otherwise.
23950 	 * When set to 0, then this flag shall be ignored.
23951 	 * If FEC CLAUSE 74 is not supported, then the HWRM shall ignore this
23952 	 * flag.
23953 	 */
23954 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE74_ENABLE \
23955 		UINT32_C(0x400)
23956 	/*
23957 	 * When set to 1, then the HWRM shall disable FEC CLAUSE 74 (Fire Code)
23958 	 * on this port if supported, by not advertising FEC CLAUSE 74 if
23959 	 * FEC autonegotiation is enabled or force disabled otherwise.
23960 	 * When set to 0, then this flag shall be ignored.
23961 	 * If FEC CLAUSE 74 is not supported, then the HWRM shall ignore this
23962 	 * flag.
23963 	 */
23964 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE74_DISABLE \
23965 		UINT32_C(0x800)
23966 	/*
23967 	 * When set to 1, then the HWRM shall enable FEC CLAUSE 91
23968 	 * (Reed Solomon RS(528,514) for NRZ) on this port if supported,
23969 	 * by advertising FEC RS(528,514) if FEC autonegotiation is enabled
23970 	 * or force enabled otherwise.  In forced FEC mode, this flag
23971 	 * will only take effect if the speed is NRZ.  Additional
23972 	 * RS544 or RS272 flags (also under clause 91) may be set for PAM4
23973 	 * in forced FEC mode.
23974 	 * When set to 0, then this flag shall be ignored.
23975 	 * If FEC RS(528,514) is not supported, then the HWRM shall ignore
23976 	 * this flag.
23977 	 */
23978 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE91_ENABLE \
23979 		UINT32_C(0x1000)
23980 	/*
23981 	 * When set to 1, then the HWRM shall disable FEC CLAUSE 91
23982 	 * (Reed Solomon RS(528,514) for NRZ) on this port if supported, by
23983 	 * not advertising RS(528,514) if FEC autonegotiation is enabled or
23984 	 * force disabled otherwise.  When set to 0, then this flag shall be
23985 	 * ignored.  If FEC RS(528,514) is not supported, then the HWRM
23986 	 * shall ignore this flag.
23987 	 */
23988 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE91_DISABLE \
23989 		UINT32_C(0x2000)
23990 	/*
23991 	 * When this bit is set to '1', the link shall be forced to
23992 	 * be taken down.
23993 	 *
23994 	 * # When this bit is set to '1", all other
23995 	 * command input settings related to the link speed shall
23996 	 * be ignored.
23997 	 * Once the link state is forced down, it can be
23998 	 * explicitly cleared from that state by setting this flag
23999 	 * to '0'.
24000 	 * # If this flag is set to '0', then the link shall be
24001 	 * cleared from forced down state if the link is in forced
24002 	 * down state.
24003 	 * There may be conditions (e.g. out-of-band or sideband
24004 	 * configuration changes for the link) outside the scope
24005 	 * of the HWRM implementation that may clear forced down
24006 	 * link state.
24007 	 */
24008 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FORCE_LINK_DWN \
24009 		UINT32_C(0x4000)
24010 	/*
24011 	 * When set to 1, then the HWRM shall enable FEC RS544_1XN
24012 	 * on this port if supported, by advertising FEC RS544_1XN if
24013 	 * FEC autonegotiation is enabled or force enabled otherwise.
24014 	 * In forced mode, this flag will only take effect if the speed is
24015 	 * PAM4.  If this flag and fec_rs544_ieee_enable are set, the
24016 	 * HWRM shall choose one of the RS544 modes.
24017 	 * When set to 0, then this flag shall be ignored.
24018 	 * If FEC RS544_1XN is not supported, then the HWRM shall ignore this
24019 	 * flag.
24020 	 */
24021 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS544_1XN_ENABLE \
24022 		UINT32_C(0x8000)
24023 	/*
24024 	 * When set to 1, then the HWRM shall disable FEC RS544_1XN
24025 	 * on this port if supported, by not advertising FEC RS544_1XN if
24026 	 * FEC autonegotiation is enabled or force disabled otherwise.
24027 	 * When set to 0, then this flag shall be ignored.
24028 	 * If FEC RS544_1XN  is not supported, then the HWRM shall ignore this
24029 	 * flag.
24030 	 */
24031 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS544_1XN_DISABLE \
24032 		UINT32_C(0x10000)
24033 	/*
24034 	 * When set to 1, then the HWRM shall enable FEC RS(544,514)
24035 	 * on this port if supported, by advertising FEC RS(544,514) if
24036 	 * FEC autonegotiation is enabled or force enabled otherwise.
24037 	 * In forced mode, this flag will only take effect if the speed is
24038 	 * PAM4.  If this flag and fec_rs544_1xn_enable are set, the
24039 	 * HWRM shall choose one of the RS544 modes.
24040 	 * When set to 0, then this flag shall be ignored.
24041 	 * If FEC RS(544,514) is not supported, then the HWRM shall ignore
24042 	 * this flag.
24043 	 */
24044 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS544_IEEE_ENABLE \
24045 		UINT32_C(0x20000)
24046 	/*
24047 	 * When set to 1, then the HWRM shall disable FEC RS(544,514)
24048 	 * on this port if supported, by not advertising FEC RS(544,514) if
24049 	 * FEC autonegotiation is enabled or force disabled otherwise.
24050 	 * When set to 0, then this flag shall be ignored.
24051 	 * If FEC RS(544,514) is not supported, then the HWRM shall ignore
24052 	 * this flag.
24053 	 */
24054 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS544_IEEE_DISABLE \
24055 		UINT32_C(0x40000)
24056 	/*
24057 	 * When set to 1, then the HWRM shall enable FEC RS272_1XN
24058 	 * on this port if supported, by advertising FEC RS272_1XN if
24059 	 * FEC autonegotiation is enabled or force enabled otherwise.
24060 	 * In forced mode, this flag will only take effect if the speed is
24061 	 * PAM4.  If this flag and fec_rs272_ieee_enable are set, the
24062 	 * HWRM shall choose one of the RS272 modes.  Note that RS272
24063 	 * and RS544 modes cannot be set at the same time in forced FEC mode.
24064 	 * When set to 0, then this flag shall be ignored.
24065 	 * If FEC RS272_1XN is not supported, then the HWRM shall ignore this
24066 	 * flag.
24067 	 */
24068 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS272_1XN_ENABLE \
24069 		UINT32_C(0x80000)
24070 	/*
24071 	 * When set to 1, then the HWRM shall disable FEC RS272_1XN
24072 	 * on this port if supported, by not advertising FEC RS272_1XN if
24073 	 * FEC autonegotiation is enabled or force disabled otherwise.
24074 	 * When set to 0, then this flag shall be ignored.
24075 	 * If FEC RS272_1XN is not supported, then the HWRM shall ignore
24076 	 * this flag.
24077 	 */
24078 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS272_1XN_DISABLE \
24079 		UINT32_C(0x100000)
24080 	/*
24081 	 * When set to 1, then the HWRM shall enable FEC RS(272,257)
24082 	 * on this port if supported, by advertising FEC RS(272,257) if
24083 	 * FEC autonegotiation is enabled or force enabled otherwise.
24084 	 * In forced mode, this flag will only take effect if the speed is
24085 	 * PAM4.  If this flag and fec_rs272_1xn_enable are set, the
24086 	 * HWRM shall choose one of the RS272 modes.  Note that RS272
24087 	 * and RS544 modes cannot be set at the same time in forced FEC mode.
24088 	 * When set to 0, then this flag shall be ignored.
24089 	 * If FEC RS(272,257) is not supported, then the HWRM shall ignore
24090 	 * this flag.
24091 	 */
24092 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS272_IEEE_ENABLE \
24093 		UINT32_C(0x200000)
24094 	/*
24095 	 * When set to 1, then the HWRM shall disable FEC RS(272,257)
24096 	 * on this port if supported, by not advertising FEC RS(272,257) if
24097 	 * FEC autonegotiation is enabled or force disabled otherwise.
24098 	 * When set to 0, then this flag shall be ignored.
24099 	 * If FEC RS(272,257) is not supported, then the HWRM shall ignore
24100 	 * this flag.
24101 	 */
24102 	#define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS272_IEEE_DISABLE \
24103 		UINT32_C(0x400000)
24104 	uint32_t	enables;
24105 	/*
24106 	 * This bit must be '1' for the auto_mode field to be
24107 	 * configured.
24108 	 */
24109 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_MODE \
24110 		UINT32_C(0x1)
24111 	/*
24112 	 * This bit must be '1' for the auto_duplex field to be
24113 	 * configured.
24114 	 */
24115 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_DUPLEX \
24116 		UINT32_C(0x2)
24117 	/*
24118 	 * This bit must be '1' for the auto_pause field to be
24119 	 * configured.
24120 	 */
24121 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_PAUSE \
24122 		UINT32_C(0x4)
24123 	/*
24124 	 * This bit must be '1' for the auto_link_speed field to be
24125 	 * configured.
24126 	 */
24127 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_LINK_SPEED \
24128 		UINT32_C(0x8)
24129 	/*
24130 	 * This bit must be '1' for the auto_link_speed_mask field to be
24131 	 * configured.
24132 	 */
24133 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_LINK_SPEED_MASK \
24134 		UINT32_C(0x10)
24135 	/*
24136 	 * This bit must be '1' for the wirespeed field to be
24137 	 * configured.
24138 	 */
24139 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_WIRESPEED \
24140 		UINT32_C(0x20)
24141 	/*
24142 	 * This bit must be '1' for the lpbk field to be
24143 	 * configured.
24144 	 */
24145 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_LPBK \
24146 		UINT32_C(0x40)
24147 	/*
24148 	 * This bit must be '1' for the preemphasis field to be
24149 	 * configured.
24150 	 */
24151 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_PREEMPHASIS \
24152 		UINT32_C(0x80)
24153 	/*
24154 	 * This bit must be '1' for the force_pause field to be
24155 	 * configured.
24156 	 */
24157 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_FORCE_PAUSE \
24158 		UINT32_C(0x100)
24159 	/*
24160 	 * This bit must be '1' for the eee_link_speed_mask field to be
24161 	 * configured.
24162 	 */
24163 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_EEE_LINK_SPEED_MASK \
24164 		UINT32_C(0x200)
24165 	/*
24166 	 * This bit must be '1' for the tx_lpi_timer field to be
24167 	 * configured.
24168 	 */
24169 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_TX_LPI_TIMER \
24170 		UINT32_C(0x400)
24171 	/*
24172 	 * This bit must be '1' for the force_pam4_link_speed field to be
24173 	 * configured.
24174 	 */
24175 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_FORCE_PAM4_LINK_SPEED \
24176 		UINT32_C(0x800)
24177 	/*
24178 	 * This bit must be '1' for the auto_pam4_link_speed_mask field to
24179 	 * be configured.
24180 	 */
24181 	#define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_PAM4_LINK_SPEED_MASK \
24182 		UINT32_C(0x1000)
24183 	/* Port ID of port that is to be configured. */
24184 	uint16_t	port_id;
24185 	/*
24186 	 * This is the speed that will be used if the force
24187 	 * bit is '1'.  If unsupported speed is selected, an error
24188 	 * will be generated.
24189 	 */
24190 	uint16_t	force_link_speed;
24191 	/* 100Mb link speed */
24192 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_100MB UINT32_C(0x1)
24193 	/* 1Gb link speed */
24194 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_1GB   UINT32_C(0xa)
24195 	/* 2Gb link speed */
24196 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_2GB   UINT32_C(0x14)
24197 	/* 25Gb link speed */
24198 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_2_5GB UINT32_C(0x19)
24199 	/* 10Gb link speed */
24200 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_10GB  UINT32_C(0x64)
24201 	/* 20Mb link speed */
24202 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_20GB  UINT32_C(0xc8)
24203 	/* 25Gb link speed */
24204 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_25GB  UINT32_C(0xfa)
24205 	/* 40Gb link speed */
24206 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_40GB  UINT32_C(0x190)
24207 	/* 50Gb link speed */
24208 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_50GB  UINT32_C(0x1f4)
24209 	/* 100Gb link speed */
24210 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_100GB UINT32_C(0x3e8)
24211 	/* 10Mb link speed */
24212 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_10MB  UINT32_C(0xffff)
24213 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_LAST \
24214 		HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_10MB
24215 	/*
24216 	 * This value is used to identify what autoneg mode is
24217 	 * used when the link speed is not being forced.
24218 	 */
24219 	uint8_t	auto_mode;
24220 	/* Disable autoneg or autoneg disabled. No speeds are selected. */
24221 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_NONE         UINT32_C(0x0)
24222 	/* Select all possible speeds for autoneg mode. */
24223 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_ALL_SPEEDS   UINT32_C(0x1)
24224 	/*
24225 	 * Select only the auto_link_speed speed for autoneg mode. This mode has
24226 	 * been DEPRECATED. An HWRM client should not use this mode.
24227 	 */
24228 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_ONE_SPEED    UINT32_C(0x2)
24229 	/*
24230 	 * Select the auto_link_speed or any speed below that speed for autoneg.
24231 	 * This mode has been DEPRECATED. An HWRM client should not use this mode.
24232 	 */
24233 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_ONE_OR_BELOW UINT32_C(0x3)
24234 	/*
24235 	 * Select the speeds based on the corresponding link speed mask values
24236 	 * that are provided. The included speeds are specified in the
24237 	 * auto_link_speed and auto_pam4_link_speed fields.
24238 	 */
24239 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_SPEED_MASK   UINT32_C(0x4)
24240 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_LAST \
24241 		HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_SPEED_MASK
24242 	/*
24243 	 * This is the duplex setting that will be used if the autoneg_mode
24244 	 * is "one_speed" or "one_or_below".
24245 	 */
24246 	uint8_t	auto_duplex;
24247 	/* Half Duplex will be requested. */
24248 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_HALF UINT32_C(0x0)
24249 	/* Full duplex will be requested. */
24250 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_FULL UINT32_C(0x1)
24251 	/* Both Half and Full duplex will be requested. */
24252 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_BOTH UINT32_C(0x2)
24253 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_LAST \
24254 		HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_BOTH
24255 	/*
24256 	 * This value is used to configure the pause that will be
24257 	 * used for autonegotiation.
24258 	 * Add text on the usage of auto_pause and force_pause.
24259 	 */
24260 	uint8_t	auto_pause;
24261 	/*
24262 	 * When this bit is '1', Generation of tx pause messages
24263 	 * has been requested. Disabled otherwise.
24264 	 */
24265 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_PAUSE_TX \
24266 		UINT32_C(0x1)
24267 	/*
24268 	 * When this bit is '1', Reception of rx pause messages
24269 	 * has been requested. Disabled otherwise.
24270 	 */
24271 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_PAUSE_RX \
24272 		UINT32_C(0x2)
24273 	/*
24274 	 * When set to 1, the advertisement of pause is enabled.
24275 	 *
24276 	 * # When the auto_mode is not set to none and this flag is
24277 	 * set to 1, then the auto_pause bits on this port are being
24278 	 * advertised and autoneg pause results are being interpreted.
24279 	 * # When the auto_mode is not set to none and this
24280 	 * flag is set to 0, the pause is forced as indicated in
24281 	 * force_pause, and also advertised as auto_pause bits, but
24282 	 * the autoneg results are not interpreted since the pause
24283 	 * configuration is being forced.
24284 	 * # When the auto_mode is set to none and this flag is set to
24285 	 * 1, auto_pause bits should be ignored and should be set to 0.
24286 	 */
24287 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_PAUSE_AUTONEG_PAUSE \
24288 		UINT32_C(0x4)
24289 	uint8_t	unused_0;
24290 	/*
24291 	 * This is the speed that will be used if the autoneg_mode
24292 	 * is "one_speed" or "one_or_below".  If an unsupported speed
24293 	 * is selected, an error will be generated.
24294 	 */
24295 	uint16_t	auto_link_speed;
24296 	/* 100Mb link speed */
24297 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_100MB UINT32_C(0x1)
24298 	/* 1Gb link speed */
24299 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_1GB   UINT32_C(0xa)
24300 	/* 2Gb link speed */
24301 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_2GB   UINT32_C(0x14)
24302 	/* 25Gb link speed */
24303 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_2_5GB UINT32_C(0x19)
24304 	/* 10Gb link speed */
24305 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_10GB  UINT32_C(0x64)
24306 	/* 20Mb link speed */
24307 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_20GB  UINT32_C(0xc8)
24308 	/* 25Gb link speed */
24309 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_25GB  UINT32_C(0xfa)
24310 	/* 40Gb link speed */
24311 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_40GB  UINT32_C(0x190)
24312 	/* 50Gb link speed */
24313 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_50GB  UINT32_C(0x1f4)
24314 	/* 100Gb link speed */
24315 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_100GB UINT32_C(0x3e8)
24316 	/* 10Mb link speed */
24317 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_10MB  UINT32_C(0xffff)
24318 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_LAST \
24319 		HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_10MB
24320 	/*
24321 	 * This is a mask of link speeds that will be used if
24322 	 * autoneg_mode is "mask".  If unsupported speed is enabled
24323 	 * an error will be generated.
24324 	 */
24325 	uint16_t	auto_link_speed_mask;
24326 	/* 100Mb link speed (Half-duplex) */
24327 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_100MBHD \
24328 		UINT32_C(0x1)
24329 	/* 100Mb link speed (Full-duplex) */
24330 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_100MB \
24331 		UINT32_C(0x2)
24332 	/* 1Gb link speed (Half-duplex) */
24333 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_1GBHD \
24334 		UINT32_C(0x4)
24335 	/* 1Gb link speed (Full-duplex) */
24336 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_1GB \
24337 		UINT32_C(0x8)
24338 	/* 2Gb link speed */
24339 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_2GB \
24340 		UINT32_C(0x10)
24341 	/* 25Gb link speed */
24342 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_2_5GB \
24343 		UINT32_C(0x20)
24344 	/* 10Gb link speed */
24345 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_10GB \
24346 		UINT32_C(0x40)
24347 	/* 20Gb link speed */
24348 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_20GB \
24349 		UINT32_C(0x80)
24350 	/* 25Gb link speed */
24351 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_25GB \
24352 		UINT32_C(0x100)
24353 	/* 40Gb link speed */
24354 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_40GB \
24355 		UINT32_C(0x200)
24356 	/* 50Gb link speed */
24357 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_50GB \
24358 		UINT32_C(0x400)
24359 	/* 100Gb link speed */
24360 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_100GB \
24361 		UINT32_C(0x800)
24362 	/* 10Mb link speed (Half-duplex) */
24363 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_10MBHD \
24364 		UINT32_C(0x1000)
24365 	/* 10Mb link speed (Full-duplex) */
24366 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_10MB \
24367 		UINT32_C(0x2000)
24368 	/* This value controls the wirespeed feature. */
24369 	uint8_t	wirespeed;
24370 	/* Wirespeed feature is disabled. */
24371 	#define HWRM_PORT_PHY_CFG_INPUT_WIRESPEED_OFF UINT32_C(0x0)
24372 	/* Wirespeed feature is enabled. */
24373 	#define HWRM_PORT_PHY_CFG_INPUT_WIRESPEED_ON  UINT32_C(0x1)
24374 	#define HWRM_PORT_PHY_CFG_INPUT_WIRESPEED_LAST \
24375 		HWRM_PORT_PHY_CFG_INPUT_WIRESPEED_ON
24376 	/* This value controls the loopback setting for the PHY. */
24377 	uint8_t	lpbk;
24378 	/* No loopback is selected.  Normal operation. */
24379 	#define HWRM_PORT_PHY_CFG_INPUT_LPBK_NONE     UINT32_C(0x0)
24380 	/*
24381 	 * The HW will be configured with local loopback such that
24382 	 * host data is sent back to the host without modification.
24383 	 */
24384 	#define HWRM_PORT_PHY_CFG_INPUT_LPBK_LOCAL    UINT32_C(0x1)
24385 	/*
24386 	 * The HW will be configured with remote loopback such that
24387 	 * port logic will send packets back out the transmitter that
24388 	 * are received.
24389 	 */
24390 	#define HWRM_PORT_PHY_CFG_INPUT_LPBK_REMOTE   UINT32_C(0x2)
24391 	/*
24392 	 * The HW will be configured with external loopback such that
24393 	 * host data is sent on the transmitter and based on the external
24394 	 * loopback connection the data will be received without modification.
24395 	 */
24396 	#define HWRM_PORT_PHY_CFG_INPUT_LPBK_EXTERNAL UINT32_C(0x3)
24397 	#define HWRM_PORT_PHY_CFG_INPUT_LPBK_LAST \
24398 		HWRM_PORT_PHY_CFG_INPUT_LPBK_EXTERNAL
24399 	/*
24400 	 * This value is used to configure the pause that will be
24401 	 * used for force mode.
24402 	 */
24403 	uint8_t	force_pause;
24404 	/*
24405 	 * When this bit is '1', Generation of tx pause messages
24406 	 * is supported. Disabled otherwise.
24407 	 */
24408 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAUSE_TX     UINT32_C(0x1)
24409 	/*
24410 	 * When this bit is '1', Reception of rx pause messages
24411 	 * is supported. Disabled otherwise.
24412 	 */
24413 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAUSE_RX     UINT32_C(0x2)
24414 	uint8_t	unused_1;
24415 	/*
24416 	 * This value controls the pre-emphasis to be used for the
24417 	 * link.  Driver should not set this value (use
24418 	 * enable.preemphasis = 0) unless driver is sure of setting.
24419 	 * Normally HWRM FW will determine proper pre-emphasis.
24420 	 */
24421 	uint32_t	preemphasis;
24422 	/*
24423 	 * Setting for link speed mask that is used to
24424 	 * advertise speeds during autonegotiation when EEE is enabled.
24425 	 * This field is valid only when EEE is enabled.
24426 	 * The speeds specified in this field shall be a subset of
24427 	 * speeds specified in auto_link_speed_mask.
24428 	 * If EEE is enabled,then at least one speed shall be provided
24429 	 * in this mask.
24430 	 */
24431 	uint16_t	eee_link_speed_mask;
24432 	/* Reserved */
24433 	#define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD1 \
24434 		UINT32_C(0x1)
24435 	/* 100Mb link speed (Full-duplex) */
24436 	#define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_100MB \
24437 		UINT32_C(0x2)
24438 	/* Reserved */
24439 	#define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD2 \
24440 		UINT32_C(0x4)
24441 	/* 1Gb link speed (Full-duplex) */
24442 	#define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_1GB \
24443 		UINT32_C(0x8)
24444 	/* Reserved */
24445 	#define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD3 \
24446 		UINT32_C(0x10)
24447 	/* Reserved */
24448 	#define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD4 \
24449 		UINT32_C(0x20)
24450 	/* 10Gb link speed */
24451 	#define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_10GB \
24452 		UINT32_C(0x40)
24453 	/*
24454 	 * This is the speed that will be used if the force and force_pam4
24455 	 * bits are '1'.  If unsupported speed is selected, an error
24456 	 * will be generated.
24457 	 */
24458 	uint16_t	force_pam4_link_speed;
24459 	/* 50Gb link speed */
24460 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAM4_LINK_SPEED_50GB \
24461 		UINT32_C(0x1f4)
24462 	/* 100Gb link speed */
24463 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAM4_LINK_SPEED_100GB \
24464 		UINT32_C(0x3e8)
24465 	/* 200Gb link speed */
24466 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAM4_LINK_SPEED_200GB \
24467 		UINT32_C(0x7d0)
24468 	#define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAM4_LINK_SPEED_LAST \
24469 		HWRM_PORT_PHY_CFG_INPUT_FORCE_PAM4_LINK_SPEED_200GB
24470 	/*
24471 	 * Requested setting of TX LPI timer in microseconds.
24472 	 * This field is valid only when EEE is enabled and TX LPI is
24473 	 * enabled.
24474 	 */
24475 	uint32_t	tx_lpi_timer;
24476 	#define HWRM_PORT_PHY_CFG_INPUT_TX_LPI_TIMER_MASK UINT32_C(0xffffff)
24477 	#define HWRM_PORT_PHY_CFG_INPUT_TX_LPI_TIMER_SFT 0
24478 	/* This field specifies which PAM4 speeds are enabled for auto mode. */
24479 	uint16_t	auto_link_pam4_speed_mask;
24480 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_PAM4_SPEED_MASK_50G \
24481 		UINT32_C(0x1)
24482 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_PAM4_SPEED_MASK_100G \
24483 		UINT32_C(0x2)
24484 	#define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_PAM4_SPEED_MASK_200G \
24485 		UINT32_C(0x4)
24486 	uint8_t	unused_2[2];
24487 } __rte_packed;
24488 
24489 /* hwrm_port_phy_cfg_output (size:128b/16B) */
24490 struct hwrm_port_phy_cfg_output {
24491 	/* The specific error status for the command. */
24492 	uint16_t	error_code;
24493 	/* The HWRM command request type. */
24494 	uint16_t	req_type;
24495 	/* The sequence ID from the original command. */
24496 	uint16_t	seq_id;
24497 	/* The length of the response data in number of bytes. */
24498 	uint16_t	resp_len;
24499 	uint8_t	unused_0[7];
24500 	/*
24501 	 * This field is used in Output records to indicate that the output
24502 	 * is completely written to RAM.  This field should be read as '1'
24503 	 * to indicate that the output has been completely written.
24504 	 * When writing a command completion or response to an internal processor,
24505 	 * the order of writes has to be such that this field is written last.
24506 	 */
24507 	uint8_t	valid;
24508 } __rte_packed;
24509 
24510 /* hwrm_port_phy_cfg_cmd_err (size:64b/8B) */
24511 struct hwrm_port_phy_cfg_cmd_err {
24512 	/*
24513 	 * command specific error codes that goes to
24514 	 * the cmd_err field in Common HWRM Error Response.
24515 	 */
24516 	uint8_t	code;
24517 	/* Unknown error */
24518 	#define HWRM_PORT_PHY_CFG_CMD_ERR_CODE_UNKNOWN       UINT32_C(0x0)
24519 	/* Unable to complete operation due to invalid speed */
24520 	#define HWRM_PORT_PHY_CFG_CMD_ERR_CODE_ILLEGAL_SPEED UINT32_C(0x1)
24521 	/*
24522 	 * retry the command since the phy is not ready.
24523 	 * retry count is returned in opaque_0.
24524 	 * This is only valid for the first command and
24525 	 * this value will not change for successive calls.
24526 	 * but if a 0 is returned at any time then this should
24527 	 * be treated as an un recoverable failure,
24528 	 *
24529 	 * retry interval in milli seconds is returned in opaque_1.
24530 	 * This specifies the time that user should wait before
24531 	 * issuing the next port_phy_cfg command.
24532 	 */
24533 	#define HWRM_PORT_PHY_CFG_CMD_ERR_CODE_RETRY         UINT32_C(0x2)
24534 	#define HWRM_PORT_PHY_CFG_CMD_ERR_CODE_LAST \
24535 		HWRM_PORT_PHY_CFG_CMD_ERR_CODE_RETRY
24536 	uint8_t	unused_0[7];
24537 } __rte_packed;
24538 
24539 /**********************
24540  * hwrm_port_phy_qcfg *
24541  **********************/
24542 
24543 
24544 /* hwrm_port_phy_qcfg_input (size:192b/24B) */
24545 struct hwrm_port_phy_qcfg_input {
24546 	/* The HWRM command request type. */
24547 	uint16_t	req_type;
24548 	/*
24549 	 * The completion ring to send the completion event on. This should
24550 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
24551 	 */
24552 	uint16_t	cmpl_ring;
24553 	/*
24554 	 * The sequence ID is used by the driver for tracking multiple
24555 	 * commands. This ID is treated as opaque data by the firmware and
24556 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
24557 	 */
24558 	uint16_t	seq_id;
24559 	/*
24560 	 * The target ID of the command:
24561 	 * * 0x0-0xFFF8 - The function ID
24562 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
24563 	 * * 0xFFFD - Reserved for user-space HWRM interface
24564 	 * * 0xFFFF - HWRM
24565 	 */
24566 	uint16_t	target_id;
24567 	/*
24568 	 * A physical address pointer pointing to a host buffer that the
24569 	 * command's response data will be written. This can be either a host
24570 	 * physical address (HPA) or a guest physical address (GPA) and must
24571 	 * point to a physically contiguous block of memory.
24572 	 */
24573 	uint64_t	resp_addr;
24574 	/* Port ID of port that is to be queried. */
24575 	uint16_t	port_id;
24576 	uint8_t	unused_0[6];
24577 } __rte_packed;
24578 
24579 /* hwrm_port_phy_qcfg_output (size:768b/96B) */
24580 struct hwrm_port_phy_qcfg_output {
24581 	/* The specific error status for the command. */
24582 	uint16_t	error_code;
24583 	/* The HWRM command request type. */
24584 	uint16_t	req_type;
24585 	/* The sequence ID from the original command. */
24586 	uint16_t	seq_id;
24587 	/* The length of the response data in number of bytes. */
24588 	uint16_t	resp_len;
24589 	/* This value indicates the current link status. */
24590 	uint8_t	link;
24591 	/* There is no link or cable detected. */
24592 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_NO_LINK UINT32_C(0x0)
24593 	/* There is no link, but a cable has been detected. */
24594 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SIGNAL  UINT32_C(0x1)
24595 	/* There is a link. */
24596 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_LINK    UINT32_C(0x2)
24597 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_LAST \
24598 		HWRM_PORT_PHY_QCFG_OUTPUT_LINK_LINK
24599 	uint8_t	active_fec_signal_mode;
24600 	/*
24601 	 * This value indicates the current link signaling mode of the
24602 	 * connection.
24603 	 */
24604 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_MASK \
24605 		UINT32_C(0xf)
24606 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_SFT                 0
24607 	/* NRZ signaling */
24608 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_NRZ \
24609 		UINT32_C(0x0)
24610 	/* PAM4 signaling */
24611 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_PAM4 \
24612 		UINT32_C(0x1)
24613 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_LAST \
24614 		HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_PAM4
24615 	/* This value indicates the current active FEC mode. */
24616 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_MASK \
24617 		UINT32_C(0xf0)
24618 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_SFT                  4
24619 	/* No active FEC */
24620 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_NONE_ACTIVE \
24621 		(UINT32_C(0x0) << 4)
24622 	/* FEC CLAUSE 74 (Fire Code) active, autonegotiated or forced. */
24623 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_CLAUSE74_ACTIVE \
24624 		(UINT32_C(0x1) << 4)
24625 	/* FEC CLAUSE 91 RS(528,514) active, autonegoatiated or forced. */
24626 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_CLAUSE91_ACTIVE \
24627 		(UINT32_C(0x2) << 4)
24628 	/* FEC RS544_1XN active, autonegoatiated or forced. */
24629 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_RS544_1XN_ACTIVE \
24630 		(UINT32_C(0x3) << 4)
24631 	/* FEC RS(544,528) active, autonegoatiated or forced. */
24632 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_RS544_IEEE_ACTIVE \
24633 		(UINT32_C(0x4) << 4)
24634 	/* FEC RS272_1XN active, autonegotiated or forced. */
24635 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_RS272_1XN_ACTIVE \
24636 		(UINT32_C(0x5) << 4)
24637 	/* FEC RS(272,257) active, autonegoatiated or forced. */
24638 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_RS272_IEEE_ACTIVE \
24639 		(UINT32_C(0x6) << 4)
24640 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_LAST \
24641 		HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_RS272_IEEE_ACTIVE
24642 	/*
24643 	 * This value indicates the current link speed of the connection.
24644 	 * The signal_mode field indicates if the link is using
24645 	 * NRZ or PAM4 signaling.
24646 	 */
24647 	uint16_t	link_speed;
24648 	/* 100Mb link speed */
24649 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_100MB UINT32_C(0x1)
24650 	/* 1Gb link speed */
24651 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_1GB   UINT32_C(0xa)
24652 	/* 2Gb link speed */
24653 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_2GB   UINT32_C(0x14)
24654 	/* 25Gb link speed */
24655 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_2_5GB UINT32_C(0x19)
24656 	/* 10Gb link speed */
24657 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_10GB  UINT32_C(0x64)
24658 	/* 20Mb link speed */
24659 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_20GB  UINT32_C(0xc8)
24660 	/* 25Gb link speed */
24661 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_25GB  UINT32_C(0xfa)
24662 	/* 40Gb link speed */
24663 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_40GB  UINT32_C(0x190)
24664 	/* 50Gb link speed */
24665 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_50GB  UINT32_C(0x1f4)
24666 	/* 100Gb link speed */
24667 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_100GB UINT32_C(0x3e8)
24668 	/* 200Gb link speed */
24669 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_200GB UINT32_C(0x7d0)
24670 	/* 10Mb link speed */
24671 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_10MB  UINT32_C(0xffff)
24672 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_LAST \
24673 		HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_10MB
24674 	/*
24675 	 * This value is indicates the duplex of the current
24676 	 * configuration.
24677 	 */
24678 	uint8_t	duplex_cfg;
24679 	/* Half Duplex connection. */
24680 	#define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_CFG_HALF UINT32_C(0x0)
24681 	/* Full duplex connection. */
24682 	#define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_CFG_FULL UINT32_C(0x1)
24683 	#define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_CFG_LAST \
24684 		HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_CFG_FULL
24685 	/*
24686 	 * This value is used to indicate the current
24687 	 * pause configuration. When autoneg is enabled, this value
24688 	 * represents the autoneg results of pause configuration.
24689 	 */
24690 	uint8_t	pause;
24691 	/*
24692 	 * When this bit is '1', Generation of tx pause messages
24693 	 * is supported. Disabled otherwise.
24694 	 */
24695 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PAUSE_TX     UINT32_C(0x1)
24696 	/*
24697 	 * When this bit is '1', Reception of rx pause messages
24698 	 * is supported. Disabled otherwise.
24699 	 */
24700 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PAUSE_RX     UINT32_C(0x2)
24701 	/*
24702 	 * The supported speeds for the port. This is a bit mask.
24703 	 * For each speed that is supported, the corresponding
24704 	 * bit will be set to '1'.
24705 	 */
24706 	uint16_t	support_speeds;
24707 	/* 100Mb link speed (Half-duplex) */
24708 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_100MBHD \
24709 		UINT32_C(0x1)
24710 	/* 100Mb link speed (Full-duplex) */
24711 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_100MB \
24712 		UINT32_C(0x2)
24713 	/* 1Gb link speed (Half-duplex) */
24714 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_1GBHD \
24715 		UINT32_C(0x4)
24716 	/* 1Gb link speed (Full-duplex) */
24717 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_1GB \
24718 		UINT32_C(0x8)
24719 	/* 2Gb link speed */
24720 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_2GB \
24721 		UINT32_C(0x10)
24722 	/* 25Gb link speed */
24723 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_2_5GB \
24724 		UINT32_C(0x20)
24725 	/* 10Gb link speed */
24726 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_10GB \
24727 		UINT32_C(0x40)
24728 	/* 20Gb link speed */
24729 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_20GB \
24730 		UINT32_C(0x80)
24731 	/* 25Gb link speed */
24732 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_25GB \
24733 		UINT32_C(0x100)
24734 	/* 40Gb link speed */
24735 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_40GB \
24736 		UINT32_C(0x200)
24737 	/* 50Gb link speed */
24738 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_50GB \
24739 		UINT32_C(0x400)
24740 	/* 100Gb link speed */
24741 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_100GB \
24742 		UINT32_C(0x800)
24743 	/* 10Mb link speed (Half-duplex) */
24744 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_10MBHD \
24745 		UINT32_C(0x1000)
24746 	/* 10Mb link speed (Full-duplex) */
24747 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_10MB \
24748 		UINT32_C(0x2000)
24749 	/*
24750 	 * Current setting of forced link speed.
24751 	 * When the link speed is not being forced, this
24752 	 * value shall be set to 0.
24753 	 */
24754 	uint16_t	force_link_speed;
24755 	/* 100Mb link speed */
24756 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_100MB UINT32_C(0x1)
24757 	/* 1Gb link speed */
24758 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_1GB   UINT32_C(0xa)
24759 	/* 2Gb link speed */
24760 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_2GB   UINT32_C(0x14)
24761 	/* 25Gb link speed */
24762 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_2_5GB UINT32_C(0x19)
24763 	/* 10Gb link speed */
24764 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_10GB  UINT32_C(0x64)
24765 	/* 20Mb link speed */
24766 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_20GB  UINT32_C(0xc8)
24767 	/* 25Gb link speed */
24768 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_25GB  UINT32_C(0xfa)
24769 	/* 40Gb link speed */
24770 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_40GB \
24771 		UINT32_C(0x190)
24772 	/* 50Gb link speed */
24773 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_50GB \
24774 		UINT32_C(0x1f4)
24775 	/* 100Gb link speed */
24776 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_100GB \
24777 		UINT32_C(0x3e8)
24778 	/* 10Mb link speed */
24779 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_10MB \
24780 		UINT32_C(0xffff)
24781 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_LAST \
24782 		HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_10MB
24783 	/* Current setting of auto negotiation mode. */
24784 	uint8_t	auto_mode;
24785 	/* Disable autoneg or autoneg disabled. No speeds are selected. */
24786 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_NONE         UINT32_C(0x0)
24787 	/* Select all possible speeds for autoneg mode. */
24788 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_ALL_SPEEDS   UINT32_C(0x1)
24789 	/*
24790 	 * Select only the auto_link_speed speed for autoneg mode. This mode has
24791 	 * been DEPRECATED. An HWRM client should not use this mode.
24792 	 */
24793 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_ONE_SPEED    UINT32_C(0x2)
24794 	/*
24795 	 * Select the auto_link_speed or any speed below that speed for autoneg.
24796 	 * This mode has been DEPRECATED. An HWRM client should not use this mode.
24797 	 */
24798 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_ONE_OR_BELOW UINT32_C(0x3)
24799 	/*
24800 	 * Select the speeds based on the corresponding link speed mask value
24801 	 * that is provided.
24802 	 */
24803 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_SPEED_MASK   UINT32_C(0x4)
24804 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_LAST \
24805 		HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_SPEED_MASK
24806 	/*
24807 	 * Current setting of pause autonegotiation.
24808 	 * Move autoneg_pause flag here.
24809 	 */
24810 	uint8_t	auto_pause;
24811 	/*
24812 	 * When this bit is '1', Generation of tx pause messages
24813 	 * has been requested. Disabled otherwise.
24814 	 */
24815 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAUSE_TX \
24816 		UINT32_C(0x1)
24817 	/*
24818 	 * When this bit is '1', Reception of rx pause messages
24819 	 * has been requested. Disabled otherwise.
24820 	 */
24821 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAUSE_RX \
24822 		UINT32_C(0x2)
24823 	/*
24824 	 * When set to 1, the advertisement of pause is enabled.
24825 	 *
24826 	 * # When the auto_mode is not set to none and this flag is
24827 	 * set to 1, then the auto_pause bits on this port are being
24828 	 * advertised and autoneg pause results are being interpreted.
24829 	 * # When the auto_mode is not set to none and this
24830 	 * flag is set to 0, the pause is forced as indicated in
24831 	 * force_pause, and also advertised as auto_pause bits, but
24832 	 * the autoneg results are not interpreted since the pause
24833 	 * configuration is being forced.
24834 	 * # When the auto_mode is set to none and this flag is set to
24835 	 * 1, auto_pause bits should be ignored and should be set to 0.
24836 	 */
24837 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAUSE_AUTONEG_PAUSE \
24838 		UINT32_C(0x4)
24839 	/*
24840 	 * Current setting for auto_link_speed. This field is only
24841 	 * valid when auto_mode is set to "one_speed" or "one_or_below".
24842 	 */
24843 	uint16_t	auto_link_speed;
24844 	/* 100Mb link speed */
24845 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_100MB UINT32_C(0x1)
24846 	/* 1Gb link speed */
24847 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_1GB   UINT32_C(0xa)
24848 	/* 2Gb link speed */
24849 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_2GB   UINT32_C(0x14)
24850 	/* 25Gb link speed */
24851 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_2_5GB UINT32_C(0x19)
24852 	/* 10Gb link speed */
24853 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_10GB  UINT32_C(0x64)
24854 	/* 20Mb link speed */
24855 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_20GB  UINT32_C(0xc8)
24856 	/* 25Gb link speed */
24857 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_25GB  UINT32_C(0xfa)
24858 	/* 40Gb link speed */
24859 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_40GB  UINT32_C(0x190)
24860 	/* 50Gb link speed */
24861 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_50GB  UINT32_C(0x1f4)
24862 	/* 100Gb link speed */
24863 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_100GB UINT32_C(0x3e8)
24864 	/* 10Mb link speed */
24865 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_10MB \
24866 		UINT32_C(0xffff)
24867 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_LAST \
24868 		HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_10MB
24869 	/*
24870 	 * Current setting for auto_link_speed_mask that is used to
24871 	 * advertise speeds during autonegotiation.
24872 	 * This field is only valid when auto_mode is set to "mask".
24873 	 * The speeds specified in this field shall be a subset of
24874 	 * supported speeds on this port.
24875 	 */
24876 	uint16_t	auto_link_speed_mask;
24877 	/* 100Mb link speed (Half-duplex) */
24878 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_100MBHD \
24879 		UINT32_C(0x1)
24880 	/* 100Mb link speed (Full-duplex) */
24881 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_100MB \
24882 		UINT32_C(0x2)
24883 	/* 1Gb link speed (Half-duplex) */
24884 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_1GBHD \
24885 		UINT32_C(0x4)
24886 	/* 1Gb link speed (Full-duplex) */
24887 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_1GB \
24888 		UINT32_C(0x8)
24889 	/* 2Gb link speed */
24890 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_2GB \
24891 		UINT32_C(0x10)
24892 	/* 25Gb link speed */
24893 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_2_5GB \
24894 		UINT32_C(0x20)
24895 	/* 10Gb link speed */
24896 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_10GB \
24897 		UINT32_C(0x40)
24898 	/* 20Gb link speed */
24899 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_20GB \
24900 		UINT32_C(0x80)
24901 	/* 25Gb link speed */
24902 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_25GB \
24903 		UINT32_C(0x100)
24904 	/* 40Gb link speed */
24905 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_40GB \
24906 		UINT32_C(0x200)
24907 	/* 50Gb link speed */
24908 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_50GB \
24909 		UINT32_C(0x400)
24910 	/* 100Gb link speed */
24911 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_100GB \
24912 		UINT32_C(0x800)
24913 	/* 10Mb link speed (Half-duplex) */
24914 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_10MBHD \
24915 		UINT32_C(0x1000)
24916 	/* 10Mb link speed (Full-duplex) */
24917 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_10MB \
24918 		UINT32_C(0x2000)
24919 	/* Current setting for wirespeed. */
24920 	uint8_t	wirespeed;
24921 	/* Wirespeed feature is disabled. */
24922 	#define HWRM_PORT_PHY_QCFG_OUTPUT_WIRESPEED_OFF UINT32_C(0x0)
24923 	/* Wirespeed feature is enabled. */
24924 	#define HWRM_PORT_PHY_QCFG_OUTPUT_WIRESPEED_ON  UINT32_C(0x1)
24925 	#define HWRM_PORT_PHY_QCFG_OUTPUT_WIRESPEED_LAST \
24926 		HWRM_PORT_PHY_QCFG_OUTPUT_WIRESPEED_ON
24927 	/* Current setting for loopback. */
24928 	uint8_t	lpbk;
24929 	/* No loopback is selected.  Normal operation. */
24930 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_NONE     UINT32_C(0x0)
24931 	/*
24932 	 * The HW will be configured with local loopback such that
24933 	 * host data is sent back to the host without modification.
24934 	 */
24935 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_LOCAL    UINT32_C(0x1)
24936 	/*
24937 	 * The HW will be configured with remote loopback such that
24938 	 * port logic will send packets back out the transmitter that
24939 	 * are received.
24940 	 */
24941 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_REMOTE   UINT32_C(0x2)
24942 	/*
24943 	 * The HW will be configured with external loopback such that
24944 	 * host data is sent on the transmitter and based on the external
24945 	 * loopback connection the data will be received without modification.
24946 	 */
24947 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_EXTERNAL UINT32_C(0x3)
24948 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_LAST \
24949 		HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_EXTERNAL
24950 	/*
24951 	 * Current setting of forced pause.
24952 	 * When the pause configuration is not being forced, then
24953 	 * this value shall be set to 0.
24954 	 */
24955 	uint8_t	force_pause;
24956 	/*
24957 	 * When this bit is '1', Generation of tx pause messages
24958 	 * is supported. Disabled otherwise.
24959 	 */
24960 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAUSE_TX     UINT32_C(0x1)
24961 	/*
24962 	 * When this bit is '1', Reception of rx pause messages
24963 	 * is supported. Disabled otherwise.
24964 	 */
24965 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAUSE_RX     UINT32_C(0x2)
24966 	/*
24967 	 * This value indicates the current status of the optics module on
24968 	 * this port.
24969 	 */
24970 	uint8_t	module_status;
24971 	/* Module is inserted and accepted */
24972 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NONE \
24973 		UINT32_C(0x0)
24974 	/* Module is rejected and transmit side Laser is disabled. */
24975 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_DISABLETX \
24976 		UINT32_C(0x1)
24977 	/* Module mismatch warning. */
24978 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_WARNINGMSG \
24979 		UINT32_C(0x2)
24980 	/* Module is rejected and powered down. */
24981 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_PWRDOWN \
24982 		UINT32_C(0x3)
24983 	/* Module is not inserted. */
24984 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NOTINSERTED \
24985 		UINT32_C(0x4)
24986 	/* Module is powered down because of over current fault. */
24987 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_CURRENTFAULT \
24988 		UINT32_C(0x5)
24989 	/* Module status is not applicable. */
24990 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NOTAPPLICABLE \
24991 		UINT32_C(0xff)
24992 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_LAST \
24993 		HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NOTAPPLICABLE
24994 	/* Current setting for preemphasis. */
24995 	uint32_t	preemphasis;
24996 	/* This field represents the major version of the PHY. */
24997 	uint8_t	phy_maj;
24998 	/* This field represents the minor version of the PHY. */
24999 	uint8_t	phy_min;
25000 	/* This field represents the build version of the PHY. */
25001 	uint8_t	phy_bld;
25002 	/* This value represents a PHY type. */
25003 	uint8_t	phy_type;
25004 	/* Unknown */
25005 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_UNKNOWN \
25006 		UINT32_C(0x0)
25007 	/* BASE-CR */
25008 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASECR \
25009 		UINT32_C(0x1)
25010 	/* BASE-KR4 (Deprecated) */
25011 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR4 \
25012 		UINT32_C(0x2)
25013 	/* BASE-LR */
25014 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASELR \
25015 		UINT32_C(0x3)
25016 	/* BASE-SR */
25017 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASESR \
25018 		UINT32_C(0x4)
25019 	/* BASE-KR2 (Deprecated) */
25020 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR2 \
25021 		UINT32_C(0x5)
25022 	/* BASE-KX */
25023 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKX \
25024 		UINT32_C(0x6)
25025 	/* BASE-KR */
25026 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR \
25027 		UINT32_C(0x7)
25028 	/* BASE-T */
25029 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASET \
25030 		UINT32_C(0x8)
25031 	/* EEE capable BASE-T */
25032 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASETE \
25033 		UINT32_C(0x9)
25034 	/* SGMII connected external PHY */
25035 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_SGMIIEXTPHY \
25036 		UINT32_C(0xa)
25037 	/* 25G_BASECR_CA_L */
25038 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASECR_CA_L \
25039 		UINT32_C(0xb)
25040 	/* 25G_BASECR_CA_S */
25041 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASECR_CA_S \
25042 		UINT32_C(0xc)
25043 	/* 25G_BASECR_CA_N */
25044 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASECR_CA_N \
25045 		UINT32_C(0xd)
25046 	/* 25G_BASESR */
25047 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASESR \
25048 		UINT32_C(0xe)
25049 	/* 100G_BASECR4 */
25050 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASECR4 \
25051 		UINT32_C(0xf)
25052 	/* 100G_BASESR4 */
25053 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASESR4 \
25054 		UINT32_C(0x10)
25055 	/* 100G_BASELR4 */
25056 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASELR4 \
25057 		UINT32_C(0x11)
25058 	/* 100G_BASEER4 */
25059 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASEER4 \
25060 		UINT32_C(0x12)
25061 	/* 100G_BASESR10 */
25062 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASESR10 \
25063 		UINT32_C(0x13)
25064 	/* 40G_BASECR4 */
25065 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASECR4 \
25066 		UINT32_C(0x14)
25067 	/* 40G_BASESR4 */
25068 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASESR4 \
25069 		UINT32_C(0x15)
25070 	/* 40G_BASELR4 */
25071 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASELR4 \
25072 		UINT32_C(0x16)
25073 	/* 40G_BASEER4 */
25074 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASEER4 \
25075 		UINT32_C(0x17)
25076 	/* 40G_ACTIVE_CABLE */
25077 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_ACTIVE_CABLE \
25078 		UINT32_C(0x18)
25079 	/* 1G_baseT */
25080 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_1G_BASET \
25081 		UINT32_C(0x19)
25082 	/* 1G_baseSX */
25083 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_1G_BASESX \
25084 		UINT32_C(0x1a)
25085 	/* 1G_baseCX */
25086 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_1G_BASECX \
25087 		UINT32_C(0x1b)
25088 	/* 200G_BASECR4 */
25089 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_200G_BASECR4 \
25090 		UINT32_C(0x1c)
25091 	/* 200G_BASESR4 */
25092 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_200G_BASESR4 \
25093 		UINT32_C(0x1d)
25094 	/* 200G_BASELR4 */
25095 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_200G_BASELR4 \
25096 		UINT32_C(0x1e)
25097 	/* 200G_BASEER4 */
25098 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_200G_BASEER4 \
25099 		UINT32_C(0x1f)
25100 	/* 50G_BASECR */
25101 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_50G_BASECR \
25102 		UINT32_C(0x20)
25103 	/* 50G_BASESR */
25104 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_50G_BASESR \
25105 		UINT32_C(0x21)
25106 	/* 50G_BASELR */
25107 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_50G_BASELR \
25108 		UINT32_C(0x22)
25109 	/* 50G_BASEER */
25110 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_50G_BASEER \
25111 		UINT32_C(0x23)
25112 	/* 100G_BASECR2 */
25113 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASECR2 \
25114 		UINT32_C(0x24)
25115 	/* 100G_BASESR2 */
25116 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASESR2 \
25117 		UINT32_C(0x25)
25118 	/* 100G_BASELR2 */
25119 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASELR2 \
25120 		UINT32_C(0x26)
25121 	/* 100G_BASEER2 */
25122 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASEER2 \
25123 		UINT32_C(0x27)
25124 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_LAST \
25125 		HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASEER2
25126 	/* This value represents a media type. */
25127 	uint8_t	media_type;
25128 	/* Unknown */
25129 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_UNKNOWN UINT32_C(0x0)
25130 	/* Twisted Pair */
25131 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_TP      UINT32_C(0x1)
25132 	/* Direct Attached Copper */
25133 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_DAC     UINT32_C(0x2)
25134 	/* Fiber */
25135 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_FIBRE   UINT32_C(0x3)
25136 	#define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_LAST \
25137 		HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_FIBRE
25138 	/* This value represents a transceiver type. */
25139 	uint8_t	xcvr_pkg_type;
25140 	/* PHY and MAC are in the same package */
25141 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_PKG_TYPE_XCVR_INTERNAL \
25142 		UINT32_C(0x1)
25143 	/* PHY and MAC are in different packages */
25144 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_PKG_TYPE_XCVR_EXTERNAL \
25145 		UINT32_C(0x2)
25146 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_PKG_TYPE_LAST \
25147 		HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_PKG_TYPE_XCVR_EXTERNAL
25148 	uint8_t	eee_config_phy_addr;
25149 	/* This field represents PHY address. */
25150 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_ADDR_MASK \
25151 		UINT32_C(0x1f)
25152 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_ADDR_SFT               0
25153 	/*
25154 	 * This field represents flags related to EEE configuration.
25155 	 * These EEE configuration flags are valid only when the
25156 	 * auto_mode is not set to none (in other words autonegotiation
25157 	 * is enabled).
25158 	 */
25159 	#define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_MASK \
25160 		UINT32_C(0xe0)
25161 	#define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_SFT             5
25162 	/*
25163 	 * When set to 1, Energy Efficient Ethernet (EEE) mode is enabled.
25164 	 * Speeds for autoneg with EEE mode enabled
25165 	 * are based on eee_link_speed_mask.
25166 	 */
25167 	#define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_EEE_ENABLED \
25168 		UINT32_C(0x20)
25169 	/*
25170 	 * This flag is valid only when eee_enabled is set to 1.
25171 	 *
25172 	 * # If eee_enabled is set to 0, then EEE mode is disabled
25173 	 * and this flag shall be ignored.
25174 	 * # If eee_enabled is set to 1 and this flag is set to 1,
25175 	 * then Energy Efficient Ethernet (EEE) mode is enabled
25176 	 * and in use.
25177 	 * # If eee_enabled is set to 1 and this flag is set to 0,
25178 	 * then Energy Efficient Ethernet (EEE) mode is enabled
25179 	 * but is currently not in use.
25180 	 */
25181 	#define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_EEE_ACTIVE \
25182 		UINT32_C(0x40)
25183 	/*
25184 	 * This flag is valid only when eee_enabled is set to 1.
25185 	 *
25186 	 * # If eee_enabled is set to 0, then EEE mode is disabled
25187 	 * and this flag shall be ignored.
25188 	 * # If eee_enabled is set to 1 and this flag is set to 1,
25189 	 * then Energy Efficient Ethernet (EEE) mode is enabled
25190 	 * and TX LPI is enabled.
25191 	 * # If eee_enabled is set to 1 and this flag is set to 0,
25192 	 * then Energy Efficient Ethernet (EEE) mode is enabled
25193 	 * but TX LPI is disabled.
25194 	 */
25195 	#define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_EEE_TX_LPI \
25196 		UINT32_C(0x80)
25197 	/*
25198 	 * When set to 1, the parallel detection is used to determine
25199 	 * the speed of the link partner.
25200 	 *
25201 	 * Parallel detection is used when a autonegotiation capable
25202 	 * device is connected to a link partner that is not capable
25203 	 * of autonegotiation.
25204 	 */
25205 	uint8_t	parallel_detect;
25206 	/*
25207 	 * When set to 1, the parallel detection is used to determine
25208 	 * the speed of the link partner.
25209 	 *
25210 	 * Parallel detection is used when a autonegotiation capable
25211 	 * device is connected to a link partner that is not capable
25212 	 * of autonegotiation.
25213 	 */
25214 	#define HWRM_PORT_PHY_QCFG_OUTPUT_PARALLEL_DETECT     UINT32_C(0x1)
25215 	/*
25216 	 * The advertised speeds for the port by the link partner.
25217 	 * Each advertised speed will be set to '1'.
25218 	 */
25219 	uint16_t	link_partner_adv_speeds;
25220 	/* 100Mb link speed (Half-duplex) */
25221 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_100MBHD \
25222 		UINT32_C(0x1)
25223 	/* 100Mb link speed (Full-duplex) */
25224 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_100MB \
25225 		UINT32_C(0x2)
25226 	/* 1Gb link speed (Half-duplex) */
25227 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_1GBHD \
25228 		UINT32_C(0x4)
25229 	/* 1Gb link speed (Full-duplex) */
25230 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_1GB \
25231 		UINT32_C(0x8)
25232 	/* 2Gb link speed */
25233 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_2GB \
25234 		UINT32_C(0x10)
25235 	/* 25Gb link speed */
25236 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_2_5GB \
25237 		UINT32_C(0x20)
25238 	/* 10Gb link speed */
25239 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_10GB \
25240 		UINT32_C(0x40)
25241 	/* 20Gb link speed */
25242 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_20GB \
25243 		UINT32_C(0x80)
25244 	/* 25Gb link speed */
25245 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_25GB \
25246 		UINT32_C(0x100)
25247 	/* 40Gb link speed */
25248 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_40GB \
25249 		UINT32_C(0x200)
25250 	/* 50Gb link speed */
25251 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_50GB \
25252 		UINT32_C(0x400)
25253 	/* 100Gb link speed */
25254 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_100GB \
25255 		UINT32_C(0x800)
25256 	/* 10Mb link speed (Half-duplex) */
25257 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_10MBHD \
25258 		UINT32_C(0x1000)
25259 	/* 10Mb link speed (Full-duplex) */
25260 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_10MB \
25261 		UINT32_C(0x2000)
25262 	/*
25263 	 * The advertised autoneg for the port by the link partner.
25264 	 * This field is deprecated and should be set to 0.
25265 	 */
25266 	uint8_t	link_partner_adv_auto_mode;
25267 	/* Disable autoneg or autoneg disabled. No speeds are selected. */
25268 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_NONE \
25269 		UINT32_C(0x0)
25270 	/* Select all possible speeds for autoneg mode. */
25271 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_ALL_SPEEDS \
25272 		UINT32_C(0x1)
25273 	/*
25274 	 * Select only the auto_link_speed speed for autoneg mode. This mode has
25275 	 * been DEPRECATED. An HWRM client should not use this mode.
25276 	 */
25277 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_ONE_SPEED \
25278 		UINT32_C(0x2)
25279 	/*
25280 	 * Select the auto_link_speed or any speed below that speed for autoneg.
25281 	 * This mode has been DEPRECATED. An HWRM client should not use this mode.
25282 	 */
25283 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_ONE_OR_BELOW \
25284 		UINT32_C(0x3)
25285 	/*
25286 	 * Select the speeds based on the corresponding link speed mask value
25287 	 * that is provided.
25288 	 */
25289 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_SPEED_MASK \
25290 		UINT32_C(0x4)
25291 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_LAST \
25292 		HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_SPEED_MASK
25293 	/* The advertised pause settings on the port by the link partner. */
25294 	uint8_t	link_partner_adv_pause;
25295 	/*
25296 	 * When this bit is '1', Generation of tx pause messages
25297 	 * is supported. Disabled otherwise.
25298 	 */
25299 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_PAUSE_TX \
25300 		UINT32_C(0x1)
25301 	/*
25302 	 * When this bit is '1', Reception of rx pause messages
25303 	 * is supported. Disabled otherwise.
25304 	 */
25305 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_PAUSE_RX \
25306 		UINT32_C(0x2)
25307 	/*
25308 	 * Current setting for link speed mask that is used to
25309 	 * advertise speeds during autonegotiation when EEE is enabled.
25310 	 * This field is valid only when eee_enabled flags is set to 1.
25311 	 * The speeds specified in this field shall be a subset of
25312 	 * speeds specified in auto_link_speed_mask.
25313 	 */
25314 	uint16_t	adv_eee_link_speed_mask;
25315 	/* Reserved */
25316 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD1 \
25317 		UINT32_C(0x1)
25318 	/* 100Mb link speed (Full-duplex) */
25319 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_100MB \
25320 		UINT32_C(0x2)
25321 	/* Reserved */
25322 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD2 \
25323 		UINT32_C(0x4)
25324 	/* 1Gb link speed (Full-duplex) */
25325 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_1GB \
25326 		UINT32_C(0x8)
25327 	/* Reserved */
25328 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD3 \
25329 		UINT32_C(0x10)
25330 	/* Reserved */
25331 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD4 \
25332 		UINT32_C(0x20)
25333 	/* 10Gb link speed */
25334 	#define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_10GB \
25335 		UINT32_C(0x40)
25336 	/*
25337 	 * Current setting for link speed mask that is advertised by
25338 	 * the link partner when EEE is enabled.
25339 	 * This field is valid only when eee_enabled flags is set to 1.
25340 	 */
25341 	uint16_t	link_partner_adv_eee_link_speed_mask;
25342 	/* Reserved */
25343 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD1 \
25344 		UINT32_C(0x1)
25345 	/* 100Mb link speed (Full-duplex) */
25346 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_100MB \
25347 		UINT32_C(0x2)
25348 	/* Reserved */
25349 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD2 \
25350 		UINT32_C(0x4)
25351 	/* 1Gb link speed (Full-duplex) */
25352 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_1GB \
25353 		UINT32_C(0x8)
25354 	/* Reserved */
25355 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD3 \
25356 		UINT32_C(0x10)
25357 	/* Reserved */
25358 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD4 \
25359 		UINT32_C(0x20)
25360 	/* 10Gb link speed */
25361 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_10GB \
25362 		UINT32_C(0x40)
25363 	uint32_t	xcvr_identifier_type_tx_lpi_timer;
25364 	/*
25365 	 * Current setting of TX LPI timer in microseconds.
25366 	 * This field is valid only when_eee_enabled flag is set to 1
25367 	 * and tx_lpi_enabled is set to 1.
25368 	 */
25369 	#define HWRM_PORT_PHY_QCFG_OUTPUT_TX_LPI_TIMER_MASK \
25370 		UINT32_C(0xffffff)
25371 	#define HWRM_PORT_PHY_QCFG_OUTPUT_TX_LPI_TIMER_SFT             0
25372 	/* This value represents transceiver identifier type. */
25373 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_MASK \
25374 		UINT32_C(0xff000000)
25375 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_SFT     24
25376 	/* Unknown */
25377 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_UNKNOWN \
25378 		(UINT32_C(0x0) << 24)
25379 	/* SFP/SFP+/SFP28 */
25380 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_SFP \
25381 		(UINT32_C(0x3) << 24)
25382 	/* QSFP+ */
25383 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFP \
25384 		(UINT32_C(0xc) << 24)
25385 	/* QSFP+ */
25386 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFPPLUS \
25387 		(UINT32_C(0xd) << 24)
25388 	/* QSFP28 */
25389 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFP28 \
25390 		(UINT32_C(0x11) << 24)
25391 	#define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_LAST \
25392 		HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFP28
25393 	/*
25394 	 * This value represents the current configuration of
25395 	 * Forward Error Correction (FEC) on the port.
25396 	 */
25397 	uint16_t	fec_cfg;
25398 	/*
25399 	 * When set to 1, then FEC is not supported on this port. If this flag
25400 	 * is set to 1, then all other FEC configuration flags shall be ignored.
25401 	 * When set to 0, then FEC is supported as indicated by other
25402 	 * configuration flags.
25403 	 */
25404 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_NONE_SUPPORTED \
25405 		UINT32_C(0x1)
25406 	/*
25407 	 * When set to 1, then FEC autonegotiation is supported on this port.
25408 	 * When set to 0, then FEC autonegotiation is not supported on this port.
25409 	 */
25410 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_AUTONEG_SUPPORTED \
25411 		UINT32_C(0x2)
25412 	/*
25413 	 * When set to 1, then FEC autonegotiation is enabled on this port.
25414 	 * When set to 0, then FEC autonegotiation is disabled if supported.
25415 	 * This flag should be ignored if FEC autonegotiation is not supported on this port.
25416 	 */
25417 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_AUTONEG_ENABLED \
25418 		UINT32_C(0x4)
25419 	/*
25420 	 * When set to 1, then FEC CLAUSE 74 (Fire Code) is supported on this port.
25421 	 * When set to 0, then FEC CLAUSE 74 (Fire Code) is not supported on this port.
25422 	 */
25423 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE74_SUPPORTED \
25424 		UINT32_C(0x8)
25425 	/*
25426 	 * When set to 1, then FEC CLAUSE 74 (Fire Code) is enabled on this
25427 	 * port. This means that FEC CLAUSE 74 is either advertised if
25428 	 * FEC autonegotiation is enabled or FEC CLAUSE 74 is force enabled.
25429 	 * When set to 0, then FEC CLAUSE 74 (Fire Code) is disabled if supported.
25430 	 * This flag should be ignored if FEC CLAUSE 74 is not supported on this port.
25431 	 */
25432 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE74_ENABLED \
25433 		UINT32_C(0x10)
25434 	/*
25435 	 * When set to 1, then FEC CLAUSE 91 (Reed Solomon RS(528,514) for
25436 	 * NRZ) is supported on this port.
25437 	 * When set to 0, then FEC RS(528,418) is not supported on this port.
25438 	 */
25439 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE91_SUPPORTED \
25440 		UINT32_C(0x20)
25441 	/*
25442 	 * When set to 1, then FEC CLAUSE 91 (Reed Solomon RS(528,514) for
25443 	 * NRZ) is enabled on this port. This means that FEC RS(528,514) is
25444 	 * either advertised if FEC autonegotiation is enabled or FEC
25445 	 * RS(528,514) is force enabled.  When set to 0, then FEC RS(528,514)
25446 	 * is disabled if supported.
25447 	 * This flag should be ignored if FEC CLAUSE 91 is not supported on this port.
25448 	 */
25449 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE91_ENABLED \
25450 		UINT32_C(0x40)
25451 	/*
25452 	 * When set to 1, then FEC RS544_1XN is supported on this port.
25453 	 * When set to 0, then FEC RS544_1XN is not supported on this port.
25454 	 */
25455 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS544_1XN_SUPPORTED \
25456 		UINT32_C(0x80)
25457 	/*
25458 	 * When set to 1, then RS544_1XN is enabled on this
25459 	 * port. This means that FEC RS544_1XN is either advertised if
25460 	 * FEC autonegotiation is enabled or FEC RS544_1XN is force enabled.
25461 	 * When set to 0, then FEC RS544_1XN is disabled if supported.
25462 	 * This flag should be ignored if FEC RS544_1XN is not supported on this port.
25463 	 */
25464 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS544_1XN_ENABLED \
25465 		UINT32_C(0x100)
25466 	/*
25467 	 * When set to 1, then FEC RS(544,514) is supported on this port.
25468 	 * When set to 0, then FEC RS(544,514) is not supported on this port.
25469 	 */
25470 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS544_IEEE_SUPPORTED \
25471 		UINT32_C(0x200)
25472 	/*
25473 	 * When set to 1, then RS(544,514) is enabled on this
25474 	 * port. This means that FEC RS(544,514) is either advertised if
25475 	 * FEC autonegotiation is enabled or FEC RS(544,514) is force
25476 	 * enabled.  When set to 0, then FEC RS(544,514) is disabled if supported.
25477 	 * This flag should be ignored if FEC RS(544,514) is not supported on this port.
25478 	 */
25479 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS544_IEEE_ENABLED \
25480 		UINT32_C(0x400)
25481 	/*
25482 	 * When set to 1, then FEC RS272_1XN is supported on this port.
25483 	 * When set to 0, then FEC RS272_1XN is not supported on this port.
25484 	 */
25485 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS272_1XN_SUPPORTED \
25486 		UINT32_C(0x800)
25487 	/*
25488 	 * When set to 1, then RS272_1XN is enabled on this
25489 	 * port. This means that FEC RS272_1XN is either advertised if
25490 	 * FEC autonegotiation is enabled or FEC RS272_1XN is force
25491 	 * enabled.  When set to 0, then FEC RS272_1XN is disabled if supported.
25492 	 * This flag should be ignored if FEC RS272_1XN is not supported on this port.
25493 	 */
25494 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS272_1XN_ENABLED \
25495 		UINT32_C(0x1000)
25496 	/*
25497 	 * When set to 1, then FEC RS(272,514) is supported on this port.
25498 	 * When set to 0, then FEC RS(272,514) is not supported on this port.
25499 	 */
25500 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS272_IEEE_SUPPORTED \
25501 		UINT32_C(0x2000)
25502 	/*
25503 	 * When set to 1, then RS(272,257) is enabled on this
25504 	 * port. This means that FEC RS(272,257) is either advertised if
25505 	 * FEC autonegotiation is enabled or FEC RS(272,257) is force
25506 	 * enabled.  When set to 0, then FEC RS(272,257) is disabled if supported.
25507 	 * This flag should be ignored if FEC RS(272,257) is not supported on this port.
25508 	 */
25509 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS272_IEEE_ENABLED \
25510 		UINT32_C(0x4000)
25511 	/*
25512 	 * This value is indicates the duplex of the current
25513 	 * connection state.
25514 	 */
25515 	uint8_t	duplex_state;
25516 	/* Half Duplex connection. */
25517 	#define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_STATE_HALF UINT32_C(0x0)
25518 	/* Full duplex connection. */
25519 	#define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_STATE_FULL UINT32_C(0x1)
25520 	#define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_STATE_LAST \
25521 		HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_STATE_FULL
25522 	/* Option flags fields. */
25523 	uint8_t	option_flags;
25524 	/* When this bit is '1', Media auto detect is enabled. */
25525 	#define HWRM_PORT_PHY_QCFG_OUTPUT_OPTION_FLAGS_MEDIA_AUTO_DETECT \
25526 		UINT32_C(0x1)
25527 	/*
25528 	 * When this bit is '1', active_fec_signal_mode can be
25529 	 * trusted.
25530 	 */
25531 	#define HWRM_PORT_PHY_QCFG_OUTPUT_OPTION_FLAGS_SIGNAL_MODE_KNOWN \
25532 		UINT32_C(0x2)
25533 	/*
25534 	 * Up to 16 bytes of null padded ASCII string representing
25535 	 * PHY vendor.
25536 	 * If the string is set to null, then the vendor name is not
25537 	 * available.
25538 	 */
25539 	char	phy_vendor_name[16];
25540 	/*
25541 	 * Up to 16 bytes of null padded ASCII string that
25542 	 * identifies vendor specific part number of the PHY.
25543 	 * If the string is set to null, then the vendor specific
25544 	 * part number is not available.
25545 	 */
25546 	char	phy_vendor_partnumber[16];
25547 	/*
25548 	 * The supported PAM4 speeds for the port. This is a bit mask.
25549 	 * For each speed that is supported, the corresponding
25550 	 * bit will be set to '1'.
25551 	 */
25552 	uint16_t	support_pam4_speeds;
25553 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_PAM4_SPEEDS_50G \
25554 		UINT32_C(0x1)
25555 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_PAM4_SPEEDS_100G \
25556 		UINT32_C(0x2)
25557 	#define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_PAM4_SPEEDS_200G \
25558 		UINT32_C(0x4)
25559 	/*
25560 	 * Current setting of forced PAM4 link speed.
25561 	 * When the link speed is not being forced, this
25562 	 * value shall be set to 0.
25563 	 */
25564 	uint16_t	force_pam4_link_speed;
25565 	/* 50Gb link speed */
25566 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAM4_LINK_SPEED_50GB \
25567 		UINT32_C(0x1f4)
25568 	/* 100Gb link speed */
25569 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAM4_LINK_SPEED_100GB \
25570 		UINT32_C(0x3e8)
25571 	/* 200Gb link speed */
25572 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAM4_LINK_SPEED_200GB \
25573 		UINT32_C(0x7d0)
25574 	#define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAM4_LINK_SPEED_LAST \
25575 		HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAM4_LINK_SPEED_200GB
25576 	/*
25577 	 * Current setting for auto_pam4_link_speed_mask that is used to
25578 	 * advertise speeds during autonegotiation.
25579 	 * This field is only valid when auto_mode is set to "mask".
25580 	 * The speeds specified in this field shall be a subset of
25581 	 * supported speeds on this port.
25582 	 */
25583 	uint16_t	auto_pam4_link_speed_mask;
25584 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAM4_LINK_SPEED_MASK_50G \
25585 		UINT32_C(0x1)
25586 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAM4_LINK_SPEED_MASK_100G \
25587 		UINT32_C(0x2)
25588 	#define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAM4_LINK_SPEED_MASK_200G \
25589 		UINT32_C(0x4)
25590 	/*
25591 	 * The advertised PAM4 speeds for the port by the link partner.
25592 	 * Each advertised speed will be set to '1'.
25593 	 */
25594 	uint8_t	link_partner_pam4_adv_speeds;
25595 	/* 50Gb link speed */
25596 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_PAM4_ADV_SPEEDS_50GB \
25597 		UINT32_C(0x1)
25598 	/* 100Gb link speed */
25599 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_PAM4_ADV_SPEEDS_100GB \
25600 		UINT32_C(0x2)
25601 	/* 200Gb link speed */
25602 	#define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_PAM4_ADV_SPEEDS_200GB \
25603 		UINT32_C(0x4)
25604 	/*
25605 	 * This field is used in Output records to indicate that the output
25606 	 * is completely written to RAM.  This field should be read as '1'
25607 	 * to indicate that the output has been completely written.
25608 	 * When writing a command completion or response to an internal processor,
25609 	 * the order of writes has to be such that this field is written last.
25610 	 */
25611 	uint8_t	valid;
25612 } __rte_packed;
25613 
25614 /*********************
25615  * hwrm_port_mac_cfg *
25616  *********************/
25617 
25618 
25619 /* hwrm_port_mac_cfg_input (size:448b/56B) */
25620 struct hwrm_port_mac_cfg_input {
25621 	/* The HWRM command request type. */
25622 	uint16_t	req_type;
25623 	/*
25624 	 * The completion ring to send the completion event on. This should
25625 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
25626 	 */
25627 	uint16_t	cmpl_ring;
25628 	/*
25629 	 * The sequence ID is used by the driver for tracking multiple
25630 	 * commands. This ID is treated as opaque data by the firmware and
25631 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
25632 	 */
25633 	uint16_t	seq_id;
25634 	/*
25635 	 * The target ID of the command:
25636 	 * * 0x0-0xFFF8 - The function ID
25637 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
25638 	 * * 0xFFFD - Reserved for user-space HWRM interface
25639 	 * * 0xFFFF - HWRM
25640 	 */
25641 	uint16_t	target_id;
25642 	/*
25643 	 * A physical address pointer pointing to a host buffer that the
25644 	 * command's response data will be written. This can be either a host
25645 	 * physical address (HPA) or a guest physical address (GPA) and must
25646 	 * point to a physically contiguous block of memory.
25647 	 */
25648 	uint64_t	resp_addr;
25649 	/*
25650 	 * In this field, there are a number of CoS mappings related flags
25651 	 * that are used to configure CoS mappings and their corresponding
25652 	 * priorities in the hardware.
25653 	 * For the priorities of CoS mappings, the HWRM uses the following
25654 	 * priority order (high to low) by default:
25655 	 * # vlan pri
25656 	 * # ip_dscp
25657 	 * # tunnel_vlan_pri
25658 	 * # default cos
25659 	 *
25660 	 * A subset of CoS mappings can be enabled.
25661 	 * If a priority is not specified for an enabled CoS mapping, the
25662 	 * priority will be assigned in the above order for the enabled CoS
25663 	 * mappings. For example, if vlan_pri and ip_dscp CoS mappings are
25664 	 * enabled and their priorities are not specified, the following
25665 	 * priority order (high to low) will be used by the HWRM:
25666 	 * # vlan_pri
25667 	 * # ip_dscp
25668 	 * # default cos
25669 	 *
25670 	 * vlan_pri CoS mapping together with default CoS with lower priority
25671 	 * are enabled by default by the HWRM.
25672 	 */
25673 	uint32_t	flags;
25674 	/*
25675 	 * When this bit is '1', this command will configure
25676 	 * the MAC to match the current link state of the PHY.
25677 	 * If the link is not established on the PHY, then this
25678 	 * bit has no effect.
25679 	 */
25680 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_MATCH_LINK \
25681 		UINT32_C(0x1)
25682 	/*
25683 	 * When this bit is set to '1', the inner VLAN PRI to CoS mapping
25684 	 * is requested to be enabled.
25685 	 */
25686 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_VLAN_PRI2COS_ENABLE \
25687 		UINT32_C(0x2)
25688 	/*
25689 	 * When this bit is set to '1', tunnel VLAN PRI field to
25690 	 * CoS mapping is requested to be enabled.
25691 	 */
25692 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_TUNNEL_PRI2COS_ENABLE \
25693 		UINT32_C(0x4)
25694 	/*
25695 	 * When this bit is set to '1', the IP DSCP to CoS mapping is
25696 	 * requested to be enabled.
25697 	 */
25698 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_IP_DSCP2COS_ENABLE \
25699 		UINT32_C(0x8)
25700 	/*
25701 	 * When this bit is '1', the HWRM is requested to
25702 	 * enable timestamp capture capability on the receive side
25703 	 * of this port.
25704 	 */
25705 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_RX_TS_CAPTURE_ENABLE \
25706 		UINT32_C(0x10)
25707 	/*
25708 	 * When this bit is '1', the HWRM is requested to
25709 	 * disable timestamp capture capability on the receive side
25710 	 * of this port.
25711 	 */
25712 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_RX_TS_CAPTURE_DISABLE \
25713 		UINT32_C(0x20)
25714 	/*
25715 	 * When this bit is '1', the HWRM is requested to
25716 	 * enable timestamp capture capability on the transmit side
25717 	 * of this port.
25718 	 */
25719 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_TX_TS_CAPTURE_ENABLE \
25720 		UINT32_C(0x40)
25721 	/*
25722 	 * When this bit is '1', the HWRM is requested to
25723 	 * disable timestamp capture capability on the transmit side
25724 	 * of this port.
25725 	 */
25726 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_TX_TS_CAPTURE_DISABLE \
25727 		UINT32_C(0x80)
25728 	/*
25729 	 * When this bit is '1', the Out-Of-Box WoL is requested to
25730 	 * be enabled on this port.
25731 	 */
25732 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_OOB_WOL_ENABLE \
25733 		UINT32_C(0x100)
25734 	/*
25735 	 * When this bit is '1', the Out-Of-Box WoL is requested to
25736 	 * be disabled on this port.
25737 	 */
25738 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_OOB_WOL_DISABLE \
25739 		UINT32_C(0x200)
25740 	/*
25741 	 * When this bit is set to '1', the inner VLAN PRI to CoS mapping
25742 	 * is requested to be disabled.
25743 	 */
25744 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_VLAN_PRI2COS_DISABLE \
25745 		UINT32_C(0x400)
25746 	/*
25747 	 * When this bit is set to '1', tunnel VLAN PRI field to
25748 	 * CoS mapping is requested to be disabled.
25749 	 */
25750 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_TUNNEL_PRI2COS_DISABLE \
25751 		UINT32_C(0x800)
25752 	/*
25753 	 * When this bit is set to '1', the IP DSCP to CoS mapping is
25754 	 * requested to be disabled.
25755 	 */
25756 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_IP_DSCP2COS_DISABLE \
25757 		UINT32_C(0x1000)
25758 	/*
25759 	 * When this bit is set to '1', and the ptp_tx_ts_capture_enable
25760 	 * bit is set, then the device uses one step Tx timestamping.
25761 	 * This bit is temporary and used for experimental purposes.
25762 	 */
25763 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_ONE_STEP_TX_TS \
25764 		UINT32_C(0x2000)
25765 	/*
25766 	 * When this bit is '1', the controller is requested to enable
25767 	 * timestamp capture capability on all packets (not just PTP)
25768 	 * of the receive side of this port.
25769 	 */
25770 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_ALL_RX_TS_CAPTURE_ENABLE \
25771 		UINT32_C(0x4000)
25772 	/*
25773 	 * When this bit is '1', the controller is requested to disable
25774 	 * timestamp capture capability on all packets (not just PTP)
25775 	 * of the receive side of this port.
25776 	 */
25777 	#define HWRM_PORT_MAC_CFG_INPUT_FLAGS_ALL_RX_TS_CAPTURE_DISABLE \
25778 		UINT32_C(0x8000)
25779 	uint32_t	enables;
25780 	/*
25781 	 * This bit must be '1' for the ipg field to be
25782 	 * configured.
25783 	 */
25784 	#define HWRM_PORT_MAC_CFG_INPUT_ENABLES_IPG \
25785 		UINT32_C(0x1)
25786 	/*
25787 	 * This bit must be '1' for the lpbk field to be
25788 	 * configured.
25789 	 */
25790 	#define HWRM_PORT_MAC_CFG_INPUT_ENABLES_LPBK \
25791 		UINT32_C(0x2)
25792 	/*
25793 	 * This bit must be '1' for the vlan_pri2cos_map_pri field to be
25794 	 * configured.
25795 	 */
25796 	#define HWRM_PORT_MAC_CFG_INPUT_ENABLES_VLAN_PRI2COS_MAP_PRI \
25797 		UINT32_C(0x4)
25798 	/*
25799 	 * This bit must be '1' for the tunnel_pri2cos_map_pri field to be
25800 	 * configured.
25801 	 */
25802 	#define HWRM_PORT_MAC_CFG_INPUT_ENABLES_TUNNEL_PRI2COS_MAP_PRI \
25803 		UINT32_C(0x10)
25804 	/*
25805 	 * This bit must be '1' for the dscp2cos_map_pri field to be
25806 	 * configured.
25807 	 */
25808 	#define HWRM_PORT_MAC_CFG_INPUT_ENABLES_DSCP2COS_MAP_PRI \
25809 		UINT32_C(0x20)
25810 	/*
25811 	 * This bit must be '1' for the rx_ts_capture_ptp_msg_type field to be
25812 	 * configured.
25813 	 */
25814 	#define HWRM_PORT_MAC_CFG_INPUT_ENABLES_RX_TS_CAPTURE_PTP_MSG_TYPE \
25815 		UINT32_C(0x40)
25816 	/*
25817 	 * This bit must be '1' for the tx_ts_capture_ptp_msg_type field to be
25818 	 * configured.
25819 	 */
25820 	#define HWRM_PORT_MAC_CFG_INPUT_ENABLES_TX_TS_CAPTURE_PTP_MSG_TYPE \
25821 		UINT32_C(0x80)
25822 	/*
25823 	 * This bit must be '1' for the cos_field_cfg field to be
25824 	 * configured.
25825 	 */
25826 	#define HWRM_PORT_MAC_CFG_INPUT_ENABLES_COS_FIELD_CFG \
25827 		UINT32_C(0x100)
25828 	/*
25829 	 * This bit must be '1' for the ptp_freq_adj_ppb field to be
25830 	 * configured.
25831 	 */
25832 	#define HWRM_PORT_MAC_CFG_INPUT_ENABLES_PTP_FREQ_ADJ_PPB \
25833 		UINT32_C(0x200)
25834 	/*
25835 	 * This bit must be '1' for the ptp_adj_phase field to be
25836 	 * configured.
25837 	 */
25838 	#define HWRM_PORT_MAC_CFG_INPUT_ENABLES_PTP_ADJ_PHASE \
25839 		UINT32_C(0x400)
25840 	/* Port ID of port that is to be configured. */
25841 	uint16_t	port_id;
25842 	/*
25843 	 * This value is used to configure the minimum IPG that will
25844 	 * be sent between packets by this port.
25845 	 */
25846 	uint8_t	ipg;
25847 	/* This value controls the loopback setting for the MAC. */
25848 	uint8_t	lpbk;
25849 	/* No loopback is selected.  Normal operation. */
25850 	#define HWRM_PORT_MAC_CFG_INPUT_LPBK_NONE   UINT32_C(0x0)
25851 	/*
25852 	 * The HW will be configured with local loopback such that
25853 	 * host data is sent back to the host without modification.
25854 	 */
25855 	#define HWRM_PORT_MAC_CFG_INPUT_LPBK_LOCAL  UINT32_C(0x1)
25856 	/*
25857 	 * The HW will be configured with remote loopback such that
25858 	 * port logic will send packets back out the transmitter that
25859 	 * are received.
25860 	 */
25861 	#define HWRM_PORT_MAC_CFG_INPUT_LPBK_REMOTE UINT32_C(0x2)
25862 	#define HWRM_PORT_MAC_CFG_INPUT_LPBK_LAST \
25863 		HWRM_PORT_MAC_CFG_INPUT_LPBK_REMOTE
25864 	/*
25865 	 * This value controls the priority setting of VLAN PRI to CoS
25866 	 * mapping based on VLAN Tags of inner packet headers of
25867 	 * tunneled packets or packet headers of non-tunneled packets.
25868 	 *
25869 	 * # Each XXX_pri variable shall have a unique priority value
25870 	 * when it is being specified.
25871 	 * # When comparing priorities of mappings, higher value
25872 	 * indicates higher priority.
25873 	 * For example, a value of 0-3 is returned where 0 is being
25874 	 * the lowest priority and 3 is being the highest priority.
25875 	 */
25876 	uint8_t	vlan_pri2cos_map_pri;
25877 	/* Reserved field. */
25878 	uint8_t	reserved1;
25879 	/*
25880 	 * This value controls the priority setting of VLAN PRI to CoS
25881 	 * mapping based on VLAN Tags of tunneled header.
25882 	 * This mapping only applies when tunneled headers
25883 	 * are present.
25884 	 *
25885 	 * # Each XXX_pri variable shall have a unique priority value
25886 	 * when it is being specified.
25887 	 * # When comparing priorities of mappings, higher value
25888 	 * indicates higher priority.
25889 	 * For example, a value of 0-3 is returned where 0 is being
25890 	 * the lowest priority and 3 is being the highest priority.
25891 	 */
25892 	uint8_t	tunnel_pri2cos_map_pri;
25893 	/*
25894 	 * This value controls the priority setting of IP DSCP to CoS
25895 	 * mapping based on inner IP header of tunneled packets or
25896 	 * IP header of non-tunneled packets.
25897 	 *
25898 	 * # Each XXX_pri variable shall have a unique priority value
25899 	 * when it is being specified.
25900 	 * # When comparing priorities of mappings, higher value
25901 	 * indicates higher priority.
25902 	 * For example, a value of 0-3 is returned where 0 is being
25903 	 * the lowest priority and 3 is being the highest priority.
25904 	 */
25905 	uint8_t	dscp2pri_map_pri;
25906 	/*
25907 	 * This is a 16-bit bit mask that is used to request a
25908 	 * specific configuration of time stamp capture of PTP messages
25909 	 * on the receive side of this port.
25910 	 * This field shall be ignored if the ptp_rx_ts_capture_enable
25911 	 * flag is not set in this command.
25912 	 * Otherwise, if bit 'i' is set, then the HWRM is being
25913 	 * requested to configure the receive side of the port to
25914 	 * capture the time stamp of every received PTP message
25915 	 * with messageType field value set to i.
25916 	 */
25917 	uint16_t	rx_ts_capture_ptp_msg_type;
25918 	/*
25919 	 * This is a 16-bit bit mask that is used to request a
25920 	 * specific configuration of time stamp capture of PTP messages
25921 	 * on the transmit side of this port.
25922 	 * This field shall be ignored if the ptp_tx_ts_capture_enable
25923 	 * flag is not set in this command.
25924 	 * Otherwise, if bit 'i' is set, then the HWRM is being
25925 	 * requested to configure the transmit side of the port to
25926 	 * capture the time stamp of every transmitted PTP message
25927 	 * with messageType field value set to i.
25928 	 */
25929 	uint16_t	tx_ts_capture_ptp_msg_type;
25930 	/* Configuration of CoS fields. */
25931 	uint8_t	cos_field_cfg;
25932 	/* Reserved */
25933 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_RSVD1 \
25934 		UINT32_C(0x1)
25935 	/*
25936 	 * This field is used to specify selection of VLAN PRI value
25937 	 * based on whether one or two VLAN Tags are present in
25938 	 * the inner packet headers of tunneled packets or
25939 	 * non-tunneled packets.
25940 	 * This field is valid only if inner VLAN PRI to CoS mapping
25941 	 * is enabled.
25942 	 * If VLAN PRI to CoS mapping is not enabled, then this
25943 	 * field shall be ignored.
25944 	 */
25945 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_MASK \
25946 		UINT32_C(0x6)
25947 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_SFT \
25948 		1
25949 	/*
25950 	 * Select inner VLAN PRI when 1 or 2 VLAN Tags are
25951 	 * present in the inner packet headers
25952 	 */
25953 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_INNERMOST \
25954 		(UINT32_C(0x0) << 1)
25955 	/*
25956 	 * Select outer VLAN Tag PRI when 2 VLAN Tags are
25957 	 * present in the inner packet headers.
25958 	 * No VLAN PRI shall be selected for this configuration
25959 	 * if only one VLAN Tag is present in the inner
25960 	 * packet headers.
25961 	 */
25962 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_OUTER \
25963 		(UINT32_C(0x1) << 1)
25964 	/*
25965 	 * Select outermost VLAN PRI when 1 or 2 VLAN Tags
25966 	 * are present in the inner packet headers
25967 	 */
25968 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_OUTERMOST \
25969 		(UINT32_C(0x2) << 1)
25970 	/* Unspecified */
25971 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_UNSPECIFIED \
25972 		(UINT32_C(0x3) << 1)
25973 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_LAST \
25974 		HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_UNSPECIFIED
25975 	/*
25976 	 * This field is used to specify selection of tunnel VLAN
25977 	 * PRI value based on whether one or two VLAN Tags are
25978 	 * present in tunnel headers.
25979 	 * This field is valid only if tunnel VLAN PRI to CoS mapping
25980 	 * is enabled.
25981 	 * If tunnel VLAN PRI to CoS mapping is not enabled, then this
25982 	 * field shall be ignored.
25983 	 */
25984 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_MASK \
25985 		UINT32_C(0x18)
25986 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_SFT \
25987 		3
25988 	/*
25989 	 * Select inner VLAN PRI when 1 or 2 VLAN Tags are
25990 	 * present in the tunnel packet headers
25991 	 */
25992 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_INNERMOST \
25993 		(UINT32_C(0x0) << 3)
25994 	/*
25995 	 * Select outer VLAN Tag PRI when 2 VLAN Tags are
25996 	 * present in the tunnel packet headers.
25997 	 * No tunnel VLAN PRI shall be selected for this
25998 	 * configuration if only one VLAN Tag is present in
25999 	 * the tunnel packet headers.
26000 	 */
26001 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_OUTER \
26002 		(UINT32_C(0x1) << 3)
26003 	/*
26004 	 * Select outermost VLAN PRI when 1 or 2 VLAN Tags
26005 	 * are present in the tunnel packet headers
26006 	 */
26007 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_OUTERMOST \
26008 		(UINT32_C(0x2) << 3)
26009 	/* Unspecified */
26010 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_UNSPECIFIED \
26011 		(UINT32_C(0x3) << 3)
26012 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_LAST \
26013 		HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_UNSPECIFIED
26014 	/*
26015 	 * This field shall be used to provide default CoS value
26016 	 * that has been configured on this port.
26017 	 * This field is valid only if default CoS mapping
26018 	 * is enabled.
26019 	 * If default CoS mapping is not enabled, then this
26020 	 * field shall be ignored.
26021 	 */
26022 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_DEFAULT_COS_MASK \
26023 		UINT32_C(0xe0)
26024 	#define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_DEFAULT_COS_SFT \
26025 		5
26026 	uint8_t	unused_0[3];
26027 	/*
26028 	 * This signed field specifies by how much to adjust the frequency
26029 	 * of sync timer updates (measured in parts per billion).
26030 	 */
26031 	int32_t	ptp_freq_adj_ppb;
26032 	uint8_t	unused_1[4];
26033 	/*
26034 	 * This unsigned field specifies the phase offset to be applied
26035 	 * to the PHC (PTP Hardware Clock). This field is specified in
26036 	 * nanoseconds.
26037 	 */
26038 	int64_t	ptp_adj_phase;
26039 } __rte_packed;
26040 
26041 /* hwrm_port_mac_cfg_output (size:128b/16B) */
26042 struct hwrm_port_mac_cfg_output {
26043 	/* The specific error status for the command. */
26044 	uint16_t	error_code;
26045 	/* The HWRM command request type. */
26046 	uint16_t	req_type;
26047 	/* The sequence ID from the original command. */
26048 	uint16_t	seq_id;
26049 	/* The length of the response data in number of bytes. */
26050 	uint16_t	resp_len;
26051 	/*
26052 	 * This is the configured maximum length of Ethernet packet
26053 	 * payload that is allowed to be received on the port.
26054 	 * This value does not include the number of bytes used by
26055 	 * Ethernet header and trailer (CRC).
26056 	 */
26057 	uint16_t	mru;
26058 	/*
26059 	 * This is the configured maximum length of Ethernet packet
26060 	 * payload that is allowed to be transmitted on the port.
26061 	 * This value does not include the number of bytes used by
26062 	 * Ethernet header and trailer (CRC).
26063 	 */
26064 	uint16_t	mtu;
26065 	/* Current configuration of the IPG value. */
26066 	uint8_t	ipg;
26067 	/* Current value of the loopback value. */
26068 	uint8_t	lpbk;
26069 	/* No loopback is selected.  Normal operation. */
26070 	#define HWRM_PORT_MAC_CFG_OUTPUT_LPBK_NONE   UINT32_C(0x0)
26071 	/*
26072 	 * The HW will be configured with local loopback such that
26073 	 * host data is sent back to the host without modification.
26074 	 */
26075 	#define HWRM_PORT_MAC_CFG_OUTPUT_LPBK_LOCAL  UINT32_C(0x1)
26076 	/*
26077 	 * The HW will be configured with remote loopback such that
26078 	 * port logic will send packets back out the transmitter that
26079 	 * are received.
26080 	 */
26081 	#define HWRM_PORT_MAC_CFG_OUTPUT_LPBK_REMOTE UINT32_C(0x2)
26082 	#define HWRM_PORT_MAC_CFG_OUTPUT_LPBK_LAST \
26083 		HWRM_PORT_MAC_CFG_OUTPUT_LPBK_REMOTE
26084 	uint8_t	unused_0;
26085 	/*
26086 	 * This field is used in Output records to indicate that the output
26087 	 * is completely written to RAM.  This field should be read as '1'
26088 	 * to indicate that the output has been completely written.
26089 	 * When writing a command completion or response to an internal processor,
26090 	 * the order of writes has to be such that this field is written last.
26091 	 */
26092 	uint8_t	valid;
26093 } __rte_packed;
26094 
26095 /**********************
26096  * hwrm_port_mac_qcfg *
26097  **********************/
26098 
26099 
26100 /* hwrm_port_mac_qcfg_input (size:192b/24B) */
26101 struct hwrm_port_mac_qcfg_input {
26102 	/* The HWRM command request type. */
26103 	uint16_t	req_type;
26104 	/*
26105 	 * The completion ring to send the completion event on. This should
26106 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
26107 	 */
26108 	uint16_t	cmpl_ring;
26109 	/*
26110 	 * The sequence ID is used by the driver for tracking multiple
26111 	 * commands. This ID is treated as opaque data by the firmware and
26112 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
26113 	 */
26114 	uint16_t	seq_id;
26115 	/*
26116 	 * The target ID of the command:
26117 	 * * 0x0-0xFFF8 - The function ID
26118 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
26119 	 * * 0xFFFD - Reserved for user-space HWRM interface
26120 	 * * 0xFFFF - HWRM
26121 	 */
26122 	uint16_t	target_id;
26123 	/*
26124 	 * A physical address pointer pointing to a host buffer that the
26125 	 * command's response data will be written. This can be either a host
26126 	 * physical address (HPA) or a guest physical address (GPA) and must
26127 	 * point to a physically contiguous block of memory.
26128 	 */
26129 	uint64_t	resp_addr;
26130 	/* Port ID of port that is to be configured. */
26131 	uint16_t	port_id;
26132 	uint8_t	unused_0[6];
26133 } __rte_packed;
26134 
26135 /* hwrm_port_mac_qcfg_output (size:256b/32B) */
26136 struct hwrm_port_mac_qcfg_output {
26137 	/* The specific error status for the command. */
26138 	uint16_t	error_code;
26139 	/* The HWRM command request type. */
26140 	uint16_t	req_type;
26141 	/* The sequence ID from the original command. */
26142 	uint16_t	seq_id;
26143 	/* The length of the response data in number of bytes. */
26144 	uint16_t	resp_len;
26145 	/*
26146 	 * This is the configured maximum length of Ethernet packet
26147 	 * payload that is allowed to be received on the port.
26148 	 * This value does not include the number of bytes used by the
26149 	 * Ethernet header and trailer (CRC).
26150 	 */
26151 	uint16_t	mru;
26152 	/*
26153 	 * This is the configured maximum length of Ethernet packet
26154 	 * payload that is allowed to be transmitted on the port.
26155 	 * This value does not include the number of bytes used by the
26156 	 * Ethernet header and trailer (CRC).
26157 	 */
26158 	uint16_t	mtu;
26159 	/*
26160 	 * The minimum IPG that will
26161 	 * be sent between packets by this port.
26162 	 */
26163 	uint8_t	ipg;
26164 	/* The loopback setting for the MAC. */
26165 	uint8_t	lpbk;
26166 	/* No loopback is selected.  Normal operation. */
26167 	#define HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_NONE   UINT32_C(0x0)
26168 	/*
26169 	 * The HW will be configured with local loopback such that
26170 	 * host data is sent back to the host without modification.
26171 	 */
26172 	#define HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_LOCAL  UINT32_C(0x1)
26173 	/*
26174 	 * The HW will be configured with remote loopback such that
26175 	 * port logic will send packets back out the transmitter that
26176 	 * are received.
26177 	 */
26178 	#define HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_REMOTE UINT32_C(0x2)
26179 	#define HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_LAST \
26180 		HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_REMOTE
26181 	/*
26182 	 * Priority setting for VLAN PRI to CoS mapping.
26183 	 * # Each XXX_pri variable shall have a unique priority value
26184 	 * when it is being used.
26185 	 * # When comparing priorities of mappings, higher value
26186 	 * indicates higher priority.
26187 	 * For example, a value of 0-3 is returned where 0 is being
26188 	 * the lowest priority and 3 is being the highest priority.
26189 	 * # If the corresponding CoS mapping is not enabled, then this
26190 	 * field should be ignored.
26191 	 * # This value indicates the normalized priority value retained
26192 	 * in the HWRM.
26193 	 */
26194 	uint8_t	vlan_pri2cos_map_pri;
26195 	/*
26196 	 * In this field, a number of CoS mappings related flags
26197 	 * are used to indicate configured CoS mappings.
26198 	 */
26199 	uint8_t	flags;
26200 	/*
26201 	 * When this bit is set to '1', the inner VLAN PRI to CoS mapping
26202 	 * is enabled.
26203 	 */
26204 	#define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_VLAN_PRI2COS_ENABLE \
26205 		UINT32_C(0x1)
26206 	/*
26207 	 * When this bit is set to '1', tunnel VLAN PRI field to
26208 	 * CoS mapping is enabled.
26209 	 */
26210 	#define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_TUNNEL_PRI2COS_ENABLE \
26211 		UINT32_C(0x2)
26212 	/*
26213 	 * When this bit is set to '1', the IP DSCP to CoS mapping is
26214 	 * enabled.
26215 	 */
26216 	#define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_IP_DSCP2COS_ENABLE \
26217 		UINT32_C(0x4)
26218 	/*
26219 	 * When this bit is '1', the Out-Of-Box WoL is enabled on this
26220 	 * port.
26221 	 */
26222 	#define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_OOB_WOL_ENABLE \
26223 		UINT32_C(0x8)
26224 	/* When this bit is '1', PTP is enabled for RX on this port. */
26225 	#define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_PTP_RX_TS_CAPTURE_ENABLE \
26226 		UINT32_C(0x10)
26227 	/* When this bit is '1', PTP is enabled for TX on this port. */
26228 	#define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_PTP_TX_TS_CAPTURE_ENABLE \
26229 		UINT32_C(0x20)
26230 	/*
26231 	 * Priority setting for tunnel VLAN PRI to CoS mapping.
26232 	 * # Each XXX_pri variable shall have a unique priority value
26233 	 * when it is being used.
26234 	 * # When comparing priorities of mappings, higher value
26235 	 * indicates higher priority.
26236 	 * For example, a value of 0-3 is returned where 0 is being
26237 	 * the lowest priority and 3 is being the highest priority.
26238 	 * # If the corresponding CoS mapping is not enabled, then this
26239 	 * field should be ignored.
26240 	 * # This value indicates the normalized priority value retained
26241 	 * in the HWRM.
26242 	 */
26243 	uint8_t	tunnel_pri2cos_map_pri;
26244 	/*
26245 	 * Priority setting for DSCP to PRI mapping.
26246 	 * # Each XXX_pri variable shall have a unique priority value
26247 	 * when it is being used.
26248 	 * # When comparing priorities of mappings, higher value
26249 	 * indicates higher priority.
26250 	 * For example, a value of 0-3 is returned where 0 is being
26251 	 * the lowest priority and 3 is being the highest priority.
26252 	 * # If the corresponding CoS mapping is not enabled, then this
26253 	 * field should be ignored.
26254 	 * # This value indicates the normalized priority value retained
26255 	 * in the HWRM.
26256 	 */
26257 	uint8_t	dscp2pri_map_pri;
26258 	/*
26259 	 * This is a 16-bit bit mask that represents the
26260 	 * current configuration of time stamp capture of PTP messages
26261 	 * on the receive side of this port.
26262 	 * If bit 'i' is set, then the receive side of the port
26263 	 * is configured to capture the time stamp of every
26264 	 * received PTP message with messageType field value set
26265 	 * to i.
26266 	 * If all bits are set to 0 (i.e. field value set 0),
26267 	 * then the receive side of the port is not configured
26268 	 * to capture timestamp for PTP messages.
26269 	 * If all bits are set to 1, then the receive side of the
26270 	 * port is configured to capture timestamp for all PTP
26271 	 * messages.
26272 	 */
26273 	uint16_t	rx_ts_capture_ptp_msg_type;
26274 	/*
26275 	 * This is a 16-bit bit mask that represents the
26276 	 * current configuration of time stamp capture of PTP messages
26277 	 * on the transmit side of this port.
26278 	 * If bit 'i' is set, then the transmit side of the port
26279 	 * is configured to capture the time stamp of every
26280 	 * received PTP message with messageType field value set
26281 	 * to i.
26282 	 * If all bits are set to 0 (i.e. field value set 0),
26283 	 * then the transmit side of the port is not configured
26284 	 * to capture timestamp for PTP messages.
26285 	 * If all bits are set to 1, then the transmit side of the
26286 	 * port is configured to capture timestamp for all PTP
26287 	 * messages.
26288 	 */
26289 	uint16_t	tx_ts_capture_ptp_msg_type;
26290 	/* Configuration of CoS fields. */
26291 	uint8_t	cos_field_cfg;
26292 	/* Reserved */
26293 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_RSVD \
26294 		UINT32_C(0x1)
26295 	/*
26296 	 * This field is used for selecting VLAN PRI value
26297 	 * based on whether one or two VLAN Tags are present in
26298 	 * the inner packet headers of tunneled packets or
26299 	 * non-tunneled packets.
26300 	 */
26301 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_MASK \
26302 		UINT32_C(0x6)
26303 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_SFT \
26304 		1
26305 	/*
26306 	 * Select inner VLAN PRI when 1 or 2 VLAN Tags are
26307 	 * present in the inner packet headers
26308 	 */
26309 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_INNERMOST \
26310 		(UINT32_C(0x0) << 1)
26311 	/*
26312 	 * Select outer VLAN Tag PRI when 2 VLAN Tags are
26313 	 * present in the inner packet headers.
26314 	 * No VLAN PRI is selected for this configuration
26315 	 * if only one VLAN Tag is present in the inner
26316 	 * packet headers.
26317 	 */
26318 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_OUTER \
26319 		(UINT32_C(0x1) << 1)
26320 	/*
26321 	 * Select outermost VLAN PRI when 1 or 2 VLAN Tags
26322 	 * are present in the inner packet headers
26323 	 */
26324 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_OUTERMOST \
26325 		(UINT32_C(0x2) << 1)
26326 	/* Unspecified */
26327 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_UNSPECIFIED \
26328 		(UINT32_C(0x3) << 1)
26329 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_LAST \
26330 		HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_UNSPECIFIED
26331 	/*
26332 	 * This field is used for selecting tunnel VLAN PRI value
26333 	 * based on whether one or two VLAN Tags are present in
26334 	 * the tunnel headers of tunneled packets. This selection
26335 	 * does not apply to non-tunneled packets.
26336 	 */
26337 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_MASK \
26338 		UINT32_C(0x18)
26339 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_SFT \
26340 		3
26341 	/*
26342 	 * Select inner VLAN PRI when 1 or 2 VLAN Tags are
26343 	 * present in the tunnel packet headers
26344 	 */
26345 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_INNERMOST \
26346 		(UINT32_C(0x0) << 3)
26347 	/*
26348 	 * Select outer VLAN Tag PRI when 2 VLAN Tags are
26349 	 * present in the tunnel packet headers.
26350 	 * No VLAN PRI is selected for this configuration
26351 	 * if only one VLAN Tag is present in the tunnel
26352 	 * packet headers.
26353 	 */
26354 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_OUTER \
26355 		(UINT32_C(0x1) << 3)
26356 	/*
26357 	 * Select outermost VLAN PRI when 1 or 2 VLAN Tags
26358 	 * are present in the tunnel packet headers
26359 	 */
26360 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_OUTERMOST \
26361 		(UINT32_C(0x2) << 3)
26362 	/* Unspecified */
26363 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_UNSPECIFIED \
26364 		(UINT32_C(0x3) << 3)
26365 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_LAST \
26366 		HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_UNSPECIFIED
26367 	/*
26368 	 * This field is used to provide default CoS value that
26369 	 * has been configured on this port.
26370 	 */
26371 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_DEFAULT_COS_MASK \
26372 		UINT32_C(0xe0)
26373 	#define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_DEFAULT_COS_SFT \
26374 		5
26375 	uint8_t	unused_1;
26376 	uint16_t	port_svif_info;
26377 	/*
26378 	 * This field specifies the source virtual interface of the port being
26379 	 * queried. Drivers can use this to program port svif field in the
26380 	 * L2 context table
26381 	 */
26382 	#define HWRM_PORT_MAC_QCFG_OUTPUT_PORT_SVIF_INFO_PORT_SVIF_MASK \
26383 		UINT32_C(0x7fff)
26384 	#define HWRM_PORT_MAC_QCFG_OUTPUT_PORT_SVIF_INFO_PORT_SVIF_SFT       0
26385 	/* This field specifies whether port_svif is valid or not */
26386 	#define HWRM_PORT_MAC_QCFG_OUTPUT_PORT_SVIF_INFO_PORT_SVIF_VALID \
26387 		UINT32_C(0x8000)
26388 	uint8_t	unused_2[5];
26389 	/*
26390 	 * This field is used in Output records to indicate that the output
26391 	 * is completely written to RAM.  This field should be read as '1'
26392 	 * to indicate that the output has been completely written.
26393 	 * When writing a command completion or response to an internal processor,
26394 	 * the order of writes has to be such that this field is written last.
26395 	 */
26396 	uint8_t	valid;
26397 } __rte_packed;
26398 
26399 /**************************
26400  * hwrm_port_mac_ptp_qcfg *
26401  **************************/
26402 
26403 
26404 /* hwrm_port_mac_ptp_qcfg_input (size:192b/24B) */
26405 struct hwrm_port_mac_ptp_qcfg_input {
26406 	/* The HWRM command request type. */
26407 	uint16_t	req_type;
26408 	/*
26409 	 * The completion ring to send the completion event on. This should
26410 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
26411 	 */
26412 	uint16_t	cmpl_ring;
26413 	/*
26414 	 * The sequence ID is used by the driver for tracking multiple
26415 	 * commands. This ID is treated as opaque data by the firmware and
26416 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
26417 	 */
26418 	uint16_t	seq_id;
26419 	/*
26420 	 * The target ID of the command:
26421 	 * * 0x0-0xFFF8 - The function ID
26422 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
26423 	 * * 0xFFFD - Reserved for user-space HWRM interface
26424 	 * * 0xFFFF - HWRM
26425 	 */
26426 	uint16_t	target_id;
26427 	/*
26428 	 * A physical address pointer pointing to a host buffer that the
26429 	 * command's response data will be written. This can be either a host
26430 	 * physical address (HPA) or a guest physical address (GPA) and must
26431 	 * point to a physically contiguous block of memory.
26432 	 */
26433 	uint64_t	resp_addr;
26434 	/* Port ID of port that is being queried. */
26435 	uint16_t	port_id;
26436 	uint8_t	unused_0[6];
26437 } __rte_packed;
26438 
26439 /* hwrm_port_mac_ptp_qcfg_output (size:704b/88B) */
26440 struct hwrm_port_mac_ptp_qcfg_output {
26441 	/* The specific error status for the command. */
26442 	uint16_t	error_code;
26443 	/* The HWRM command request type. */
26444 	uint16_t	req_type;
26445 	/* The sequence ID from the original command. */
26446 	uint16_t	seq_id;
26447 	/* The length of the response data in number of bytes. */
26448 	uint16_t	resp_len;
26449 	/*
26450 	 * In this field, a number of PTP related flags
26451 	 * are used to indicate configured PTP capabilities.
26452 	 */
26453 	uint8_t	flags;
26454 	/*
26455 	 * When this bit is set to '1', the PTP related registers are
26456 	 * directly accessible by the host.
26457 	 */
26458 	#define HWRM_PORT_MAC_PTP_QCFG_OUTPUT_FLAGS_DIRECT_ACCESS \
26459 		UINT32_C(0x1)
26460 	/*
26461 	 * When this bit is set to '1', the device supports one-step
26462 	 * Tx timestamping.
26463 	 */
26464 	#define HWRM_PORT_MAC_PTP_QCFG_OUTPUT_FLAGS_ONE_STEP_TX_TS \
26465 		UINT32_C(0x4)
26466 	/*
26467 	 * When this bit is set to '1', the PTP information is accessible
26468 	 * via HWRM commands.
26469 	 */
26470 	#define HWRM_PORT_MAC_PTP_QCFG_OUTPUT_FLAGS_HWRM_ACCESS \
26471 		UINT32_C(0x8)
26472 	/*
26473 	 * When this bit is set to '1', two specific registers for current
26474 	 * time (ts_ref_clock_reg_lower and ts_ref_clock_reg_upper) are
26475 	 * directly accessible by the host.
26476 	 */
26477 	#define HWRM_PORT_MAC_PTP_QCFG_OUTPUT_FLAGS_PARTIAL_DIRECT_ACCESS_REF_CLOCK \
26478 		UINT32_C(0x10)
26479 	/*
26480 	 * When this bit is set to '1', it indicates that driver has
26481 	 * configured 64bit RTC.
26482 	 */
26483 	#define HWRM_PORT_MAC_PTP_QCFG_OUTPUT_FLAGS_RTC_CONFIGURED \
26484 		UINT32_C(0x20)
26485 	uint8_t	unused_0[3];
26486 	/*
26487 	 * Offset of the PTP register for the lower 32 bits of timestamp
26488 	 * for RX.
26489 	 */
26490 	uint32_t	rx_ts_reg_off_lower;
26491 	/*
26492 	 * Offset of the PTP register for the upper 32 bits of timestamp
26493 	 * for RX.
26494 	 */
26495 	uint32_t	rx_ts_reg_off_upper;
26496 	/* Offset of the PTP register for the sequence ID for RX. */
26497 	uint32_t	rx_ts_reg_off_seq_id;
26498 	/* Offset of the first PTP source ID for RX. */
26499 	uint32_t	rx_ts_reg_off_src_id_0;
26500 	/* Offset of the second PTP source ID for RX. */
26501 	uint32_t	rx_ts_reg_off_src_id_1;
26502 	/* Offset of the third PTP source ID for RX. */
26503 	uint32_t	rx_ts_reg_off_src_id_2;
26504 	/* Offset of the domain ID for RX. */
26505 	uint32_t	rx_ts_reg_off_domain_id;
26506 	/* Offset of the PTP FIFO register for RX. */
26507 	uint32_t	rx_ts_reg_off_fifo;
26508 	/* Offset of the PTP advance FIFO register for RX. */
26509 	uint32_t	rx_ts_reg_off_fifo_adv;
26510 	/* PTP timestamp granularity for RX. */
26511 	uint32_t	rx_ts_reg_off_granularity;
26512 	/*
26513 	 * Offset of the PTP register for the lower 32 bits of timestamp
26514 	 * for TX.
26515 	 */
26516 	uint32_t	tx_ts_reg_off_lower;
26517 	/*
26518 	 * Offset of the PTP register for the upper 32 bits of timestamp
26519 	 * for TX.
26520 	 */
26521 	uint32_t	tx_ts_reg_off_upper;
26522 	/* Offset of the PTP register for the sequence ID for TX. */
26523 	uint32_t	tx_ts_reg_off_seq_id;
26524 	/* Offset of the PTP FIFO register for TX. */
26525 	uint32_t	tx_ts_reg_off_fifo;
26526 	/* PTP timestamp granularity for TX. */
26527 	uint32_t	tx_ts_reg_off_granularity;
26528 	/* Offset of register to get lower 32 bits of current time. */
26529 	uint32_t	ts_ref_clock_reg_lower;
26530 	/* Offset of register to get upper 32 bits of current time. */
26531 	uint32_t	ts_ref_clock_reg_upper;
26532 	uint8_t	unused_1[7];
26533 	/*
26534 	 * This field is used in Output records to indicate that the output
26535 	 * is completely written to RAM.  This field should be read as '1'
26536 	 * to indicate that the output has been completely written.
26537 	 * When writing a command completion or response to an internal processor,
26538 	 * the order of writes has to be such that this field is written last.
26539 	 */
26540 	uint8_t	valid;
26541 } __rte_packed;
26542 
26543 /* Port Tx Statistics Format */
26544 /* tx_port_stats (size:3264b/408B) */
26545 struct tx_port_stats {
26546 	/* Total Number of 64 Bytes frames transmitted */
26547 	uint64_t	tx_64b_frames;
26548 	/* Total Number of 65-127 Bytes frames transmitted */
26549 	uint64_t	tx_65b_127b_frames;
26550 	/* Total Number of 128-255 Bytes frames transmitted */
26551 	uint64_t	tx_128b_255b_frames;
26552 	/* Total Number of 256-511 Bytes frames transmitted */
26553 	uint64_t	tx_256b_511b_frames;
26554 	/* Total Number of 512-1023 Bytes frames transmitted */
26555 	uint64_t	tx_512b_1023b_frames;
26556 	/* Total Number of 1024-1518 Bytes frames transmitted */
26557 	uint64_t	tx_1024b_1518b_frames;
26558 	/*
26559 	 * Total Number of each good VLAN (excludes FCS errors)
26560 	 * frame transmitted which is 1519 to 1522 bytes in length
26561 	 * inclusive (excluding framing bits but including FCS bytes).
26562 	 */
26563 	uint64_t	tx_good_vlan_frames;
26564 	/* Total Number of 1519-2047 Bytes frames transmitted */
26565 	uint64_t	tx_1519b_2047b_frames;
26566 	/* Total Number of 2048-4095 Bytes frames transmitted */
26567 	uint64_t	tx_2048b_4095b_frames;
26568 	/* Total Number of 4096-9216 Bytes frames transmitted */
26569 	uint64_t	tx_4096b_9216b_frames;
26570 	/* Total Number of 9217-16383 Bytes frames transmitted */
26571 	uint64_t	tx_9217b_16383b_frames;
26572 	/* Total Number of good frames transmitted */
26573 	uint64_t	tx_good_frames;
26574 	/* Total Number of frames transmitted */
26575 	uint64_t	tx_total_frames;
26576 	/* Total number of unicast frames transmitted */
26577 	uint64_t	tx_ucast_frames;
26578 	/* Total number of multicast frames transmitted */
26579 	uint64_t	tx_mcast_frames;
26580 	/* Total number of broadcast frames transmitted */
26581 	uint64_t	tx_bcast_frames;
26582 	/* Total number of PAUSE control frames transmitted */
26583 	uint64_t	tx_pause_frames;
26584 	/*
26585 	 * Total number of PFC/per-priority PAUSE
26586 	 * control frames transmitted
26587 	 */
26588 	uint64_t	tx_pfc_frames;
26589 	/* Total number of jabber frames transmitted */
26590 	uint64_t	tx_jabber_frames;
26591 	/* Total number of frames transmitted with FCS error */
26592 	uint64_t	tx_fcs_err_frames;
26593 	/* Total number of control frames transmitted */
26594 	uint64_t	tx_control_frames;
26595 	/* Total number of over-sized frames transmitted */
26596 	uint64_t	tx_oversz_frames;
26597 	/* Total number of frames with single deferral */
26598 	uint64_t	tx_single_dfrl_frames;
26599 	/* Total number of frames with multiple deferrals */
26600 	uint64_t	tx_multi_dfrl_frames;
26601 	/* Total number of frames with single collision */
26602 	uint64_t	tx_single_coll_frames;
26603 	/* Total number of frames with multiple collisions */
26604 	uint64_t	tx_multi_coll_frames;
26605 	/* Total number of frames with late collisions */
26606 	uint64_t	tx_late_coll_frames;
26607 	/* Total number of frames with excessive collisions */
26608 	uint64_t	tx_excessive_coll_frames;
26609 	/* Total number of fragmented frames transmitted */
26610 	uint64_t	tx_frag_frames;
26611 	/* Total number of transmit errors */
26612 	uint64_t	tx_err;
26613 	/* Total number of single VLAN tagged frames transmitted */
26614 	uint64_t	tx_tagged_frames;
26615 	/* Total number of double VLAN tagged frames transmitted */
26616 	uint64_t	tx_dbl_tagged_frames;
26617 	/* Total number of runt frames transmitted */
26618 	uint64_t	tx_runt_frames;
26619 	/* Total number of TX FIFO under runs */
26620 	uint64_t	tx_fifo_underruns;
26621 	/*
26622 	 * Total number of PFC frames with PFC enabled bit for
26623 	 * Pri 0 transmitted
26624 	 */
26625 	uint64_t	tx_pfc_ena_frames_pri0;
26626 	/*
26627 	 * Total number of PFC frames with PFC enabled bit for
26628 	 * Pri 1 transmitted
26629 	 */
26630 	uint64_t	tx_pfc_ena_frames_pri1;
26631 	/*
26632 	 * Total number of PFC frames with PFC enabled bit for
26633 	 * Pri 2 transmitted
26634 	 */
26635 	uint64_t	tx_pfc_ena_frames_pri2;
26636 	/*
26637 	 * Total number of PFC frames with PFC enabled bit for
26638 	 * Pri 3 transmitted
26639 	 */
26640 	uint64_t	tx_pfc_ena_frames_pri3;
26641 	/*
26642 	 * Total number of PFC frames with PFC enabled bit for
26643 	 * Pri 4 transmitted
26644 	 */
26645 	uint64_t	tx_pfc_ena_frames_pri4;
26646 	/*
26647 	 * Total number of PFC frames with PFC enabled bit for
26648 	 * Pri 5 transmitted
26649 	 */
26650 	uint64_t	tx_pfc_ena_frames_pri5;
26651 	/*
26652 	 * Total number of PFC frames with PFC enabled bit for
26653 	 * Pri 6 transmitted
26654 	 */
26655 	uint64_t	tx_pfc_ena_frames_pri6;
26656 	/*
26657 	 * Total number of PFC frames with PFC enabled bit for
26658 	 * Pri 7 transmitted
26659 	 */
26660 	uint64_t	tx_pfc_ena_frames_pri7;
26661 	/* Total number of EEE LPI Events on TX */
26662 	uint64_t	tx_eee_lpi_events;
26663 	/* EEE LPI Duration Counter on TX */
26664 	uint64_t	tx_eee_lpi_duration;
26665 	/*
26666 	 * Total number of Link Level Flow Control (LLFC) messages
26667 	 * transmitted
26668 	 */
26669 	uint64_t	tx_llfc_logical_msgs;
26670 	/* Total number of HCFC messages transmitted */
26671 	uint64_t	tx_hcfc_msgs;
26672 	/* Total number of TX collisions */
26673 	uint64_t	tx_total_collisions;
26674 	/* Total number of transmitted bytes */
26675 	uint64_t	tx_bytes;
26676 	/* Total number of end-to-end HOL frames */
26677 	uint64_t	tx_xthol_frames;
26678 	/* Total Tx Drops per Port reported by STATS block */
26679 	uint64_t	tx_stat_discard;
26680 	/* Total Tx Error Drops per Port reported by STATS block */
26681 	uint64_t	tx_stat_error;
26682 } __rte_packed;
26683 
26684 /* Port Rx Statistics Format */
26685 /* rx_port_stats (size:4224b/528B) */
26686 struct rx_port_stats {
26687 	/* Total Number of 64 Bytes frames received */
26688 	uint64_t	rx_64b_frames;
26689 	/* Total Number of 65-127 Bytes frames received */
26690 	uint64_t	rx_65b_127b_frames;
26691 	/* Total Number of 128-255 Bytes frames received */
26692 	uint64_t	rx_128b_255b_frames;
26693 	/* Total Number of 256-511 Bytes frames received */
26694 	uint64_t	rx_256b_511b_frames;
26695 	/* Total Number of 512-1023 Bytes frames received */
26696 	uint64_t	rx_512b_1023b_frames;
26697 	/* Total Number of 1024-1518 Bytes frames received */
26698 	uint64_t	rx_1024b_1518b_frames;
26699 	/*
26700 	 * Total Number of each good VLAN (excludes FCS errors)
26701 	 * frame received which is 1519 to 1522 bytes in length
26702 	 * inclusive (excluding framing bits but including FCS bytes).
26703 	 */
26704 	uint64_t	rx_good_vlan_frames;
26705 	/* Total Number of 1519-2047 Bytes frames received */
26706 	uint64_t	rx_1519b_2047b_frames;
26707 	/* Total Number of 2048-4095 Bytes frames received */
26708 	uint64_t	rx_2048b_4095b_frames;
26709 	/* Total Number of 4096-9216 Bytes frames received */
26710 	uint64_t	rx_4096b_9216b_frames;
26711 	/* Total Number of 9217-16383 Bytes frames received */
26712 	uint64_t	rx_9217b_16383b_frames;
26713 	/* Total number of frames received */
26714 	uint64_t	rx_total_frames;
26715 	/* Total number of unicast frames received */
26716 	uint64_t	rx_ucast_frames;
26717 	/* Total number of multicast frames received */
26718 	uint64_t	rx_mcast_frames;
26719 	/* Total number of broadcast frames received */
26720 	uint64_t	rx_bcast_frames;
26721 	/* Total number of received frames with FCS error */
26722 	uint64_t	rx_fcs_err_frames;
26723 	/* Total number of control frames received */
26724 	uint64_t	rx_ctrl_frames;
26725 	/* Total number of PAUSE frames received */
26726 	uint64_t	rx_pause_frames;
26727 	/* Total number of PFC frames received */
26728 	uint64_t	rx_pfc_frames;
26729 	/*
26730 	 * Total number of frames received with an unsupported
26731 	 * opcode
26732 	 */
26733 	uint64_t	rx_unsupported_opcode_frames;
26734 	/*
26735 	 * Total number of frames received with an unsupported
26736 	 * DA for pause and PFC
26737 	 */
26738 	uint64_t	rx_unsupported_da_pausepfc_frames;
26739 	/* Total number of frames received with an unsupported SA */
26740 	uint64_t	rx_wrong_sa_frames;
26741 	/* Total number of received packets with alignment error */
26742 	uint64_t	rx_align_err_frames;
26743 	/* Total number of received frames with out-of-range length */
26744 	uint64_t	rx_oor_len_frames;
26745 	/* Total number of received frames with error termination */
26746 	uint64_t	rx_code_err_frames;
26747 	/*
26748 	 * Total number of received frames with a false carrier is
26749 	 * detected during idle, as defined by RX_ER samples active
26750 	 * and RXD is 0xE. The event is reported along with the
26751 	 * statistics generated on the next received frame. Only
26752 	 * one false carrier condition can be detected and logged
26753 	 * between frames.
26754 	 *
26755 	 * Carrier event, valid for 10M/100M speed modes only.
26756 	 */
26757 	uint64_t	rx_false_carrier_frames;
26758 	/* Total number of over-sized frames received */
26759 	uint64_t	rx_ovrsz_frames;
26760 	/* Total number of jabber packets received */
26761 	uint64_t	rx_jbr_frames;
26762 	/* Total number of received frames with MTU error */
26763 	uint64_t	rx_mtu_err_frames;
26764 	/* Total number of received frames with CRC match */
26765 	uint64_t	rx_match_crc_frames;
26766 	/* Total number of frames received promiscuously */
26767 	uint64_t	rx_promiscuous_frames;
26768 	/*
26769 	 * Total number of received frames with one or two VLAN
26770 	 * tags
26771 	 */
26772 	uint64_t	rx_tagged_frames;
26773 	/* Total number of received frames with two VLAN tags */
26774 	uint64_t	rx_double_tagged_frames;
26775 	/* Total number of truncated frames received */
26776 	uint64_t	rx_trunc_frames;
26777 	/* Total number of good frames (without errors) received */
26778 	uint64_t	rx_good_frames;
26779 	/*
26780 	 * Total number of received PFC frames with transition from
26781 	 * XON to XOFF on Pri 0
26782 	 */
26783 	uint64_t	rx_pfc_xon2xoff_frames_pri0;
26784 	/*
26785 	 * Total number of received PFC frames with transition from
26786 	 * XON to XOFF on Pri 1
26787 	 */
26788 	uint64_t	rx_pfc_xon2xoff_frames_pri1;
26789 	/*
26790 	 * Total number of received PFC frames with transition from
26791 	 * XON to XOFF on Pri 2
26792 	 */
26793 	uint64_t	rx_pfc_xon2xoff_frames_pri2;
26794 	/*
26795 	 * Total number of received PFC frames with transition from
26796 	 * XON to XOFF on Pri 3
26797 	 */
26798 	uint64_t	rx_pfc_xon2xoff_frames_pri3;
26799 	/*
26800 	 * Total number of received PFC frames with transition from
26801 	 * XON to XOFF on Pri 4
26802 	 */
26803 	uint64_t	rx_pfc_xon2xoff_frames_pri4;
26804 	/*
26805 	 * Total number of received PFC frames with transition from
26806 	 * XON to XOFF on Pri 5
26807 	 */
26808 	uint64_t	rx_pfc_xon2xoff_frames_pri5;
26809 	/*
26810 	 * Total number of received PFC frames with transition from
26811 	 * XON to XOFF on Pri 6
26812 	 */
26813 	uint64_t	rx_pfc_xon2xoff_frames_pri6;
26814 	/*
26815 	 * Total number of received PFC frames with transition from
26816 	 * XON to XOFF on Pri 7
26817 	 */
26818 	uint64_t	rx_pfc_xon2xoff_frames_pri7;
26819 	/*
26820 	 * Total number of received PFC frames with PFC enabled
26821 	 * bit for Pri 0
26822 	 */
26823 	uint64_t	rx_pfc_ena_frames_pri0;
26824 	/*
26825 	 * Total number of received PFC frames with PFC enabled
26826 	 * bit for Pri 1
26827 	 */
26828 	uint64_t	rx_pfc_ena_frames_pri1;
26829 	/*
26830 	 * Total number of received PFC frames with PFC enabled
26831 	 * bit for Pri 2
26832 	 */
26833 	uint64_t	rx_pfc_ena_frames_pri2;
26834 	/*
26835 	 * Total number of received PFC frames with PFC enabled
26836 	 * bit for Pri 3
26837 	 */
26838 	uint64_t	rx_pfc_ena_frames_pri3;
26839 	/*
26840 	 * Total number of received PFC frames with PFC enabled
26841 	 * bit for Pri 4
26842 	 */
26843 	uint64_t	rx_pfc_ena_frames_pri4;
26844 	/*
26845 	 * Total number of received PFC frames with PFC enabled
26846 	 * bit for Pri 5
26847 	 */
26848 	uint64_t	rx_pfc_ena_frames_pri5;
26849 	/*
26850 	 * Total number of received PFC frames with PFC enabled
26851 	 * bit for Pri 6
26852 	 */
26853 	uint64_t	rx_pfc_ena_frames_pri6;
26854 	/*
26855 	 * Total number of received PFC frames with PFC enabled
26856 	 * bit for Pri 7
26857 	 */
26858 	uint64_t	rx_pfc_ena_frames_pri7;
26859 	/* Total Number of frames received with SCH CRC error */
26860 	uint64_t	rx_sch_crc_err_frames;
26861 	/* Total Number of under-sized frames received */
26862 	uint64_t	rx_undrsz_frames;
26863 	/* Total Number of fragmented frames received */
26864 	uint64_t	rx_frag_frames;
26865 	/* Total number of RX EEE LPI Events */
26866 	uint64_t	rx_eee_lpi_events;
26867 	/* EEE LPI Duration Counter on RX */
26868 	uint64_t	rx_eee_lpi_duration;
26869 	/*
26870 	 * Total number of physical type Link Level Flow Control
26871 	 * (LLFC) messages received
26872 	 */
26873 	uint64_t	rx_llfc_physical_msgs;
26874 	/*
26875 	 * Total number of logical type Link Level Flow Control
26876 	 * (LLFC) messages received
26877 	 */
26878 	uint64_t	rx_llfc_logical_msgs;
26879 	/*
26880 	 * Total number of logical type Link Level Flow Control
26881 	 * (LLFC) messages received with CRC error
26882 	 */
26883 	uint64_t	rx_llfc_msgs_with_crc_err;
26884 	/* Total number of HCFC messages received */
26885 	uint64_t	rx_hcfc_msgs;
26886 	/* Total number of HCFC messages received with CRC error */
26887 	uint64_t	rx_hcfc_msgs_with_crc_err;
26888 	/* Total number of received bytes */
26889 	uint64_t	rx_bytes;
26890 	/* Total number of bytes received in runt frames */
26891 	uint64_t	rx_runt_bytes;
26892 	/* Total number of runt frames received */
26893 	uint64_t	rx_runt_frames;
26894 	/* Total Rx Discards per Port reported by STATS block */
26895 	uint64_t	rx_stat_discard;
26896 	uint64_t	rx_stat_err;
26897 } __rte_packed;
26898 
26899 /********************
26900  * hwrm_port_qstats *
26901  ********************/
26902 
26903 
26904 /* hwrm_port_qstats_input (size:320b/40B) */
26905 struct hwrm_port_qstats_input {
26906 	/* The HWRM command request type. */
26907 	uint16_t	req_type;
26908 	/*
26909 	 * The completion ring to send the completion event on. This should
26910 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
26911 	 */
26912 	uint16_t	cmpl_ring;
26913 	/*
26914 	 * The sequence ID is used by the driver for tracking multiple
26915 	 * commands. This ID is treated as opaque data by the firmware and
26916 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
26917 	 */
26918 	uint16_t	seq_id;
26919 	/*
26920 	 * The target ID of the command:
26921 	 * * 0x0-0xFFF8 - The function ID
26922 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
26923 	 * * 0xFFFD - Reserved for user-space HWRM interface
26924 	 * * 0xFFFF - HWRM
26925 	 */
26926 	uint16_t	target_id;
26927 	/*
26928 	 * A physical address pointer pointing to a host buffer that the
26929 	 * command's response data will be written. This can be either a host
26930 	 * physical address (HPA) or a guest physical address (GPA) and must
26931 	 * point to a physically contiguous block of memory.
26932 	 */
26933 	uint64_t	resp_addr;
26934 	/* Port ID of port that is being queried. */
26935 	uint16_t	port_id;
26936 	uint8_t	flags;
26937 	/* This value is not used to avoid backward compatibility issues. */
26938 	#define HWRM_PORT_QSTATS_INPUT_FLAGS_UNUSED       UINT32_C(0x0)
26939 	/*
26940 	 * This bit is set to 1 when request is for a counter mask,
26941 	 * representing the width of each of the stats counters, rather
26942 	 * than counters themselves.
26943 	 */
26944 	#define HWRM_PORT_QSTATS_INPUT_FLAGS_COUNTER_MASK UINT32_C(0x1)
26945 	#define HWRM_PORT_QSTATS_INPUT_FLAGS_LAST \
26946 		HWRM_PORT_QSTATS_INPUT_FLAGS_COUNTER_MASK
26947 	uint8_t	unused_0[5];
26948 	/*
26949 	 * This is the host address where
26950 	 * Tx port statistics will be stored
26951 	 */
26952 	uint64_t	tx_stat_host_addr;
26953 	/*
26954 	 * This is the host address where
26955 	 * Rx port statistics will be stored
26956 	 */
26957 	uint64_t	rx_stat_host_addr;
26958 } __rte_packed;
26959 
26960 /* hwrm_port_qstats_output (size:128b/16B) */
26961 struct hwrm_port_qstats_output {
26962 	/* The specific error status for the command. */
26963 	uint16_t	error_code;
26964 	/* The HWRM command request type. */
26965 	uint16_t	req_type;
26966 	/* The sequence ID from the original command. */
26967 	uint16_t	seq_id;
26968 	/* The length of the response data in number of bytes. */
26969 	uint16_t	resp_len;
26970 	/* The size of TX port statistics block in bytes. */
26971 	uint16_t	tx_stat_size;
26972 	/* The size of RX port statistics block in bytes. */
26973 	uint16_t	rx_stat_size;
26974 	uint8_t	unused_0[3];
26975 	/*
26976 	 * This field is used in Output records to indicate that the output
26977 	 * is completely written to RAM.  This field should be read as '1'
26978 	 * to indicate that the output has been completely written.
26979 	 * When writing a command completion or response to an internal processor,
26980 	 * the order of writes has to be such that this field is written last.
26981 	 */
26982 	uint8_t	valid;
26983 } __rte_packed;
26984 
26985 /* Port Tx Statistics extended Format */
26986 /* tx_port_stats_ext (size:2048b/256B) */
26987 struct tx_port_stats_ext {
26988 	/* Total number of tx bytes count on cos queue 0 */
26989 	uint64_t	tx_bytes_cos0;
26990 	/* Total number of tx bytes count on cos queue 1 */
26991 	uint64_t	tx_bytes_cos1;
26992 	/* Total number of tx bytes count on cos queue 2 */
26993 	uint64_t	tx_bytes_cos2;
26994 	/* Total number of tx bytes count on cos queue 3 */
26995 	uint64_t	tx_bytes_cos3;
26996 	/* Total number of tx bytes count on cos queue 4 */
26997 	uint64_t	tx_bytes_cos4;
26998 	/* Total number of tx bytes count on cos queue 5 */
26999 	uint64_t	tx_bytes_cos5;
27000 	/* Total number of tx bytes count on cos queue 6 */
27001 	uint64_t	tx_bytes_cos6;
27002 	/* Total number of tx bytes count on cos queue 7 */
27003 	uint64_t	tx_bytes_cos7;
27004 	/* Total number of tx packets count on cos queue 0 */
27005 	uint64_t	tx_packets_cos0;
27006 	/* Total number of tx packets count on cos queue 1 */
27007 	uint64_t	tx_packets_cos1;
27008 	/* Total number of tx packets count on cos queue 2 */
27009 	uint64_t	tx_packets_cos2;
27010 	/* Total number of tx packets count on cos queue 3 */
27011 	uint64_t	tx_packets_cos3;
27012 	/* Total number of tx packets count on cos queue 4 */
27013 	uint64_t	tx_packets_cos4;
27014 	/* Total number of tx packets count on cos queue 5 */
27015 	uint64_t	tx_packets_cos5;
27016 	/* Total number of tx packets count on cos queue 6 */
27017 	uint64_t	tx_packets_cos6;
27018 	/* Total number of tx packets count on cos queue 7 */
27019 	uint64_t	tx_packets_cos7;
27020 	/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 0 */
27021 	uint64_t	pfc_pri0_tx_duration_us;
27022 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 0 */
27023 	uint64_t	pfc_pri0_tx_transitions;
27024 	/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 1 */
27025 	uint64_t	pfc_pri1_tx_duration_us;
27026 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 1 */
27027 	uint64_t	pfc_pri1_tx_transitions;
27028 	/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 2 */
27029 	uint64_t	pfc_pri2_tx_duration_us;
27030 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 2 */
27031 	uint64_t	pfc_pri2_tx_transitions;
27032 	/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 3 */
27033 	uint64_t	pfc_pri3_tx_duration_us;
27034 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 3 */
27035 	uint64_t	pfc_pri3_tx_transitions;
27036 	/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 4 */
27037 	uint64_t	pfc_pri4_tx_duration_us;
27038 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 4 */
27039 	uint64_t	pfc_pri4_tx_transitions;
27040 	/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 5 */
27041 	uint64_t	pfc_pri5_tx_duration_us;
27042 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 5 */
27043 	uint64_t	pfc_pri5_tx_transitions;
27044 	/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 6 */
27045 	uint64_t	pfc_pri6_tx_duration_us;
27046 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 6 */
27047 	uint64_t	pfc_pri6_tx_transitions;
27048 	/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 7 */
27049 	uint64_t	pfc_pri7_tx_duration_us;
27050 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 7 */
27051 	uint64_t	pfc_pri7_tx_transitions;
27052 } __rte_packed;
27053 
27054 /* Port Rx Statistics extended Format */
27055 /* rx_port_stats_ext (size:3776b/472B) */
27056 struct rx_port_stats_ext {
27057 	/* Number of times link state changed to down */
27058 	uint64_t	link_down_events;
27059 	/* Number of times the idle rings with pause bit are found */
27060 	uint64_t	continuous_pause_events;
27061 	/* Number of times the active rings pause bit resumed back */
27062 	uint64_t	resume_pause_events;
27063 	/* Number of times, the ROCE cos queue PFC is disabled to avoid pause flood/burst */
27064 	uint64_t	continuous_roce_pause_events;
27065 	/* Number of times, the ROCE cos queue PFC is enabled back */
27066 	uint64_t	resume_roce_pause_events;
27067 	/* Total number of rx bytes count on cos queue 0 */
27068 	uint64_t	rx_bytes_cos0;
27069 	/* Total number of rx bytes count on cos queue 1 */
27070 	uint64_t	rx_bytes_cos1;
27071 	/* Total number of rx bytes count on cos queue 2 */
27072 	uint64_t	rx_bytes_cos2;
27073 	/* Total number of rx bytes count on cos queue 3 */
27074 	uint64_t	rx_bytes_cos3;
27075 	/* Total number of rx bytes count on cos queue 4 */
27076 	uint64_t	rx_bytes_cos4;
27077 	/* Total number of rx bytes count on cos queue 5 */
27078 	uint64_t	rx_bytes_cos5;
27079 	/* Total number of rx bytes count on cos queue 6 */
27080 	uint64_t	rx_bytes_cos6;
27081 	/* Total number of rx bytes count on cos queue 7 */
27082 	uint64_t	rx_bytes_cos7;
27083 	/* Total number of rx packets count on cos queue 0 */
27084 	uint64_t	rx_packets_cos0;
27085 	/* Total number of rx packets count on cos queue 1 */
27086 	uint64_t	rx_packets_cos1;
27087 	/* Total number of rx packets count on cos queue 2 */
27088 	uint64_t	rx_packets_cos2;
27089 	/* Total number of rx packets count on cos queue 3 */
27090 	uint64_t	rx_packets_cos3;
27091 	/* Total number of rx packets count on cos queue 4 */
27092 	uint64_t	rx_packets_cos4;
27093 	/* Total number of rx packets count on cos queue 5 */
27094 	uint64_t	rx_packets_cos5;
27095 	/* Total number of rx packets count on cos queue 6 */
27096 	uint64_t	rx_packets_cos6;
27097 	/* Total number of rx packets count on cos queue 7 */
27098 	uint64_t	rx_packets_cos7;
27099 	/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 0 */
27100 	uint64_t	pfc_pri0_rx_duration_us;
27101 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 0 */
27102 	uint64_t	pfc_pri0_rx_transitions;
27103 	/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 1 */
27104 	uint64_t	pfc_pri1_rx_duration_us;
27105 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 1 */
27106 	uint64_t	pfc_pri1_rx_transitions;
27107 	/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 2 */
27108 	uint64_t	pfc_pri2_rx_duration_us;
27109 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 2 */
27110 	uint64_t	pfc_pri2_rx_transitions;
27111 	/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 3 */
27112 	uint64_t	pfc_pri3_rx_duration_us;
27113 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 3 */
27114 	uint64_t	pfc_pri3_rx_transitions;
27115 	/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 4 */
27116 	uint64_t	pfc_pri4_rx_duration_us;
27117 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 4 */
27118 	uint64_t	pfc_pri4_rx_transitions;
27119 	/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 5 */
27120 	uint64_t	pfc_pri5_rx_duration_us;
27121 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 5 */
27122 	uint64_t	pfc_pri5_rx_transitions;
27123 	/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 6 */
27124 	uint64_t	pfc_pri6_rx_duration_us;
27125 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 6 */
27126 	uint64_t	pfc_pri6_rx_transitions;
27127 	/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 7 */
27128 	uint64_t	pfc_pri7_rx_duration_us;
27129 	/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 7 */
27130 	uint64_t	pfc_pri7_rx_transitions;
27131 	/* Total number of received bits */
27132 	uint64_t	rx_bits;
27133 	/* The number of events where the port receive buffer was over 85% full */
27134 	uint64_t	rx_buffer_passed_threshold;
27135 	/*
27136 	 * The number of symbol errors that wasn't corrected by FEC correction
27137 	 * algorithm
27138 	 */
27139 	uint64_t	rx_pcs_symbol_err;
27140 	/* The number of corrected bits on the port according to active FEC */
27141 	uint64_t	rx_corrected_bits;
27142 	/* Total number of rx discard bytes count on cos queue 0 */
27143 	uint64_t	rx_discard_bytes_cos0;
27144 	/* Total number of rx discard bytes count on cos queue 1 */
27145 	uint64_t	rx_discard_bytes_cos1;
27146 	/* Total number of rx discard bytes count on cos queue 2 */
27147 	uint64_t	rx_discard_bytes_cos2;
27148 	/* Total number of rx discard bytes count on cos queue 3 */
27149 	uint64_t	rx_discard_bytes_cos3;
27150 	/* Total number of rx discard bytes count on cos queue 4 */
27151 	uint64_t	rx_discard_bytes_cos4;
27152 	/* Total number of rx discard bytes count on cos queue 5 */
27153 	uint64_t	rx_discard_bytes_cos5;
27154 	/* Total number of rx discard bytes count on cos queue 6 */
27155 	uint64_t	rx_discard_bytes_cos6;
27156 	/* Total number of rx discard bytes count on cos queue 7 */
27157 	uint64_t	rx_discard_bytes_cos7;
27158 	/* Total number of rx discard packets count on cos queue 0 */
27159 	uint64_t	rx_discard_packets_cos0;
27160 	/* Total number of rx discard packets count on cos queue 1 */
27161 	uint64_t	rx_discard_packets_cos1;
27162 	/* Total number of rx discard packets count on cos queue 2 */
27163 	uint64_t	rx_discard_packets_cos2;
27164 	/* Total number of rx discard packets count on cos queue 3 */
27165 	uint64_t	rx_discard_packets_cos3;
27166 	/* Total number of rx discard packets count on cos queue 4 */
27167 	uint64_t	rx_discard_packets_cos4;
27168 	/* Total number of rx discard packets count on cos queue 5 */
27169 	uint64_t	rx_discard_packets_cos5;
27170 	/* Total number of rx discard packets count on cos queue 6 */
27171 	uint64_t	rx_discard_packets_cos6;
27172 	/* Total number of rx discard packets count on cos queue 7 */
27173 	uint64_t	rx_discard_packets_cos7;
27174 	/* Total number of FEC blocks corrected by the FEC function in the PHY */
27175 	uint64_t	rx_fec_corrected_blocks;
27176 	/*
27177 	 * Total number of FEC blocks determined to be uncorrectable by the
27178 	 * FEC function in the PHY
27179 	 */
27180 	uint64_t	rx_fec_uncorrectable_blocks;
27181 } __rte_packed;
27182 
27183 /*
27184  * Port Rx Statistics extended PFC WatchDog Format.
27185  * StormDetect and StormRevert event determination is based
27186  * on an integration period and a percentage threshold.
27187  * StormDetect event - when percentage of XOFF frames received
27188  * within an integration period exceeds the configured threshold.
27189  * StormRevert event - when percentage of XON frames received
27190  * within an integration period exceeds the configured threshold.
27191  * Actual number of XOFF/XON frames for the events to be triggered
27192  * depends on both configured integration period and sampling rate.
27193  * The statistics in this structure represent counts of specified
27194  * events from the moment the feature (PFC WatchDog) is enabled via
27195  * hwrm_queue_pfc_enable_cfg call.
27196  */
27197 /* rx_port_stats_ext_pfc_wd (size:5120b/640B) */
27198 struct rx_port_stats_ext_pfc_wd {
27199 	/*
27200 	 * Total number of PFC WatchDog StormDetect events detected
27201 	 * for Pri 0
27202 	 */
27203 	uint64_t	rx_pfc_watchdog_storms_detected_pri0;
27204 	/*
27205 	 * Total number of PFC WatchDog StormDetect events detected
27206 	 * for Pri 1
27207 	 */
27208 	uint64_t	rx_pfc_watchdog_storms_detected_pri1;
27209 	/*
27210 	 * Total number of PFC WatchDog StormDetect events detected
27211 	 * for Pri 2
27212 	 */
27213 	uint64_t	rx_pfc_watchdog_storms_detected_pri2;
27214 	/*
27215 	 * Total number of PFC WatchDog StormDetect events detected
27216 	 * for Pri 3
27217 	 */
27218 	uint64_t	rx_pfc_watchdog_storms_detected_pri3;
27219 	/*
27220 	 * Total number of PFC WatchDog StormDetect events detected
27221 	 * for Pri 4
27222 	 */
27223 	uint64_t	rx_pfc_watchdog_storms_detected_pri4;
27224 	/*
27225 	 * Total number of PFC WatchDog StormDetect events detected
27226 	 * for Pri 5
27227 	 */
27228 	uint64_t	rx_pfc_watchdog_storms_detected_pri5;
27229 	/*
27230 	 * Total number of PFC WatchDog StormDetect events detected
27231 	 * for Pri 6
27232 	 */
27233 	uint64_t	rx_pfc_watchdog_storms_detected_pri6;
27234 	/*
27235 	 * Total number of PFC WatchDog StormDetect events detected
27236 	 * for Pri 7
27237 	 */
27238 	uint64_t	rx_pfc_watchdog_storms_detected_pri7;
27239 	/*
27240 	 * Total number of PFC WatchDog StormRevert events detected
27241 	 * for Pri 0
27242 	 */
27243 	uint64_t	rx_pfc_watchdog_storms_reverted_pri0;
27244 	/*
27245 	 * Total number of PFC WatchDog StormRevert events detected
27246 	 * for Pri 1
27247 	 */
27248 	uint64_t	rx_pfc_watchdog_storms_reverted_pri1;
27249 	/*
27250 	 * Total number of PFC WatchDog StormRevert events detected
27251 	 * for Pri 2
27252 	 */
27253 	uint64_t	rx_pfc_watchdog_storms_reverted_pri2;
27254 	/*
27255 	 * Total number of PFC WatchDog StormRevert events detected
27256 	 * for Pri 3
27257 	 */
27258 	uint64_t	rx_pfc_watchdog_storms_reverted_pri3;
27259 	/*
27260 	 * Total number of PFC WatchDog StormRevert events detected
27261 	 * for Pri 4
27262 	 */
27263 	uint64_t	rx_pfc_watchdog_storms_reverted_pri4;
27264 	/*
27265 	 * Total number of PFC WatchDog StormRevert events detected
27266 	 * for Pri 5
27267 	 */
27268 	uint64_t	rx_pfc_watchdog_storms_reverted_pri5;
27269 	/*
27270 	 * Total number of PFC WatchDog StormRevert events detected
27271 	 * for Pri 6
27272 	 */
27273 	uint64_t	rx_pfc_watchdog_storms_reverted_pri6;
27274 	/*
27275 	 * Total number of PFC WatchDog StormRevert events detected
27276 	 * for Pri 7
27277 	 */
27278 	uint64_t	rx_pfc_watchdog_storms_reverted_pri7;
27279 	/*
27280 	 * Total number of packets received during PFC watchdog storm
27281 	 * for pri 0
27282 	 */
27283 	uint64_t	rx_pfc_watchdog_storms_rx_packets_pri0;
27284 	/*
27285 	 * Total number of packets received during PFC watchdog storm
27286 	 * for pri 1
27287 	 */
27288 	uint64_t	rx_pfc_watchdog_storms_rx_packets_pri1;
27289 	/*
27290 	 * Total number of packets received during PFC watchdog storm
27291 	 *  for pri 2
27292 	 */
27293 	uint64_t	rx_pfc_watchdog_storms_rx_packets_pri2;
27294 	/*
27295 	 * Total number of packets received during PFC watchdog storm
27296 	 *  for pri 3
27297 	 */
27298 	uint64_t	rx_pfc_watchdog_storms_rx_packets_pri3;
27299 	/*
27300 	 * Total number of packets received during PFC watchdog storm
27301 	 *  for pri 4
27302 	 */
27303 	uint64_t	rx_pfc_watchdog_storms_rx_packets_pri4;
27304 	/*
27305 	 * Total number of packets received during PFC watchdog storm
27306 	 *  for pri 5
27307 	 */
27308 	uint64_t	rx_pfc_watchdog_storms_rx_packets_pri5;
27309 	/*
27310 	 * Total number of packets received during PFC watchdog storm
27311 	 *  for pri 6
27312 	 */
27313 	uint64_t	rx_pfc_watchdog_storms_rx_packets_pri6;
27314 	/*
27315 	 * Total number of packets received during PFC watchdog storm
27316 	 *  for pri 7
27317 	 */
27318 	uint64_t	rx_pfc_watchdog_storms_rx_packets_pri7;
27319 	/*
27320 	 * Total number of bytes received during PFC watchdog storm
27321 	 * for pri 0
27322 	 */
27323 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_pri0;
27324 	/*
27325 	 * Total number of bytes received during PFC watchdog storm
27326 	 * for pri 1
27327 	 */
27328 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_pri1;
27329 	/*
27330 	 * Total number of bytes received during PFC watchdog storm
27331 	 *  for pri 2
27332 	 */
27333 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_pri2;
27334 	/*
27335 	 * Total number of bytes received during PFC watchdog storm
27336 	 *  for pri 3
27337 	 */
27338 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_pri3;
27339 	/*
27340 	 * Total number of bytes received during PFC watchdog storm
27341 	 *  for pri 4
27342 	 */
27343 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_pri4;
27344 	/*
27345 	 * Total number of bytes received during PFC watchdog storm
27346 	 *  for pri 5
27347 	 */
27348 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_pri5;
27349 	/*
27350 	 * Total number of bytes received during PFC watchdog storm
27351 	 *  for pri 6
27352 	 */
27353 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_pri6;
27354 	/*
27355 	 * Total number of bytes received during PFC watchdog storm
27356 	 *  for pri 7
27357 	 */
27358 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_pri7;
27359 	/*
27360 	 * Total number of packets dropped on rx during PFC watchdog storm
27361 	 * for pri 0
27362 	 */
27363 	uint64_t	rx_pfc_watchdog_storms_rx_packets_dropped_pri0;
27364 	/*
27365 	 * Total number of packets dropped on rx during PFC watchdog storm
27366 	 * for pri 1
27367 	 */
27368 	uint64_t	rx_pfc_watchdog_storms_rx_packets_dropped_pri1;
27369 	/*
27370 	 * Total number of packets dropped on rx during PFC watchdog storm
27371 	 *  for pri 2
27372 	 */
27373 	uint64_t	rx_pfc_watchdog_storms_rx_packets_dropped_pri2;
27374 	/*
27375 	 * Total number of packets dropped on rx during PFC watchdog storm
27376 	 *  for pri 3
27377 	 */
27378 	uint64_t	rx_pfc_watchdog_storms_rx_packets_dropped_pri3;
27379 	/*
27380 	 * Total number of packets dropped on rx during PFC watchdog storm
27381 	 *  for pri 4
27382 	 */
27383 	uint64_t	rx_pfc_watchdog_storms_rx_packets_dropped_pri4;
27384 	/*
27385 	 * Total number of packets dropped on rx during PFC watchdog storm
27386 	 *  for pri 5
27387 	 */
27388 	uint64_t	rx_pfc_watchdog_storms_rx_packets_dropped_pri5;
27389 	/*
27390 	 * Total number of packets dropped on rx during PFC watchdog storm
27391 	 *  for pri 6
27392 	 */
27393 	uint64_t	rx_pfc_watchdog_storms_rx_packets_dropped_pri6;
27394 	/*
27395 	 * Total number of packets dropped on rx during PFC watchdog storm
27396 	 *  for pri 7
27397 	 */
27398 	uint64_t	rx_pfc_watchdog_storms_rx_packets_dropped_pri7;
27399 	/*
27400 	 * Total number of bytes dropped on rx during PFC watchdog storm
27401 	 * for pri 0
27402 	 */
27403 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_dropped_pri0;
27404 	/*
27405 	 * Total number of bytes dropped on rx during PFC watchdog storm
27406 	 * for pri 1
27407 	 */
27408 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_dropped_pri1;
27409 	/*
27410 	 * Total number of bytes dropped on rx during PFC watchdog storm
27411 	 *  for pri 2
27412 	 */
27413 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_dropped_pri2;
27414 	/*
27415 	 * Total number of bytes dropped on rx during PFC watchdog storm
27416 	 *  for pri 3
27417 	 */
27418 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_dropped_pri3;
27419 	/*
27420 	 * Total number of bytes dropped on rx during PFC watchdog storm
27421 	 *  for pri 4
27422 	 */
27423 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_dropped_pri4;
27424 	/*
27425 	 * Total number of bytes dropped on rx during PFC watchdog storm
27426 	 *  for pri 5
27427 	 */
27428 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_dropped_pri5;
27429 	/*
27430 	 * Total number of bytes dropped on rx during PFC watchdog storm
27431 	 *  for pri 6
27432 	 */
27433 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_dropped_pri6;
27434 	/*
27435 	 * Total number of bytes dropped on rx during PFC watchdog storm
27436 	 *  for pri 7
27437 	 */
27438 	uint64_t	rx_pfc_watchdog_storms_rx_bytes_dropped_pri7;
27439 	/*
27440 	 * Number of packets received during last PFC watchdog storm
27441 	 * for pri 0
27442 	 */
27443 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_pri0;
27444 	/*
27445 	 * Number of packets received during last PFC watchdog storm
27446 	 * for pri 1
27447 	 */
27448 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_pri1;
27449 	/*
27450 	 * Number of packets received during last PFC watchdog storm
27451 	 *  for pri 2
27452 	 */
27453 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_pri2;
27454 	/*
27455 	 * Number of packets received during last PFC watchdog storm
27456 	 *  for pri 3
27457 	 */
27458 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_pri3;
27459 	/*
27460 	 * Number of packets received during last PFC watchdog storm
27461 	 *  for pri 4
27462 	 */
27463 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_pri4;
27464 	/*
27465 	 * Number of packets received during last PFC watchdog storm
27466 	 *  for pri 5
27467 	 */
27468 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_pri5;
27469 	/*
27470 	 * Number of packets received during last PFC watchdog storm
27471 	 *  for pri 6
27472 	 */
27473 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_pri6;
27474 	/*
27475 	 * Number of packets received during last PFC watchdog storm
27476 	 *  for pri 7
27477 	 */
27478 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_pri7;
27479 	/*
27480 	 * Number of bytes received during last PFC watchdog storm
27481 	 * for pri 0
27482 	 */
27483 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_pri0;
27484 	/*
27485 	 * Number of bytes received during last PFC watchdog storm
27486 	 * for pri 1
27487 	 */
27488 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_pri1;
27489 	/*
27490 	 * Number of bytes received during last PFC watchdog storm
27491 	 *  for pri 2
27492 	 */
27493 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_pri2;
27494 	/*
27495 	 * Number of bytes received during last PFC watchdog storm
27496 	 *  for pri 3
27497 	 */
27498 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_pri3;
27499 	/*
27500 	 * Number of bytes received during last PFC watchdog storm
27501 	 *  for pri 4
27502 	 */
27503 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_pri4;
27504 	/*
27505 	 * Number of bytes received during last PFC watchdog storm
27506 	 *  for pri 5
27507 	 */
27508 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_pri5;
27509 	/*
27510 	 * Number of bytes received during last PFC watchdog storm
27511 	 *  for pri 6
27512 	 */
27513 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_pri6;
27514 	/*
27515 	 * Number of bytes received during last PFC watchdog storm
27516 	 *  for pri 7
27517 	 */
27518 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_pri7;
27519 	/*
27520 	 * Number of packets dropped on rx during last PFC watchdog storm
27521 	 * for pri 0
27522 	 */
27523 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_dropped_pri0;
27524 	/*
27525 	 * Number of packets dropped on rx during last PFC watchdog storm
27526 	 * for pri 1
27527 	 */
27528 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_dropped_pri1;
27529 	/*
27530 	 * Number of packets dropped on rx during last PFC watchdog storm
27531 	 *  for pri 2
27532 	 */
27533 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_dropped_pri2;
27534 	/*
27535 	 * Number of packets dropped on rx during last PFC watchdog storm
27536 	 *  for pri 3
27537 	 */
27538 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_dropped_pri3;
27539 	/*
27540 	 * Number of packets dropped on rx during last PFC watchdog storm
27541 	 *  for pri 4
27542 	 */
27543 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_dropped_pri4;
27544 	/*
27545 	 * Number of packets dropped on rx during last PFC watchdog storm
27546 	 *  for pri 5
27547 	 */
27548 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_dropped_pri5;
27549 	/*
27550 	 * Number of packets dropped on rx during last PFC watchdog storm
27551 	 *  for pri 6
27552 	 */
27553 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_dropped_pri6;
27554 	/*
27555 	 * Number of packets dropped on rx during last PFC watchdog storm
27556 	 *  for pri 7
27557 	 */
27558 	uint64_t	rx_pfc_watchdog_last_storm_rx_packets_dropped_pri7;
27559 	/*
27560 	 * Total number of bytes dropped on rx during PFC watchdog storm
27561 	 * for pri 0
27562 	 */
27563 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri0;
27564 	/*
27565 	 * Number of bytes dropped on rx during last PFC watchdog storm
27566 	 * for pri 1
27567 	 */
27568 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri1;
27569 	/*
27570 	 * Number of bytes dropped on rx during last PFC watchdog storm
27571 	 *  for pri 2
27572 	 */
27573 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri2;
27574 	/*
27575 	 * Number of bytes dropped on rx during last PFC watchdog storm
27576 	 *  for pri 3
27577 	 */
27578 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri3;
27579 	/*
27580 	 * Number of bytes dropped on rx during last PFC watchdog storm
27581 	 *  for pri 4
27582 	 */
27583 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri4;
27584 	/*
27585 	 * Number of bytes dropped on rx during last PFC watchdog storm
27586 	 *  for pri 5
27587 	 */
27588 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri5;
27589 	/*
27590 	 * Number of bytes dropped on rx during last PFC watchdog storm
27591 	 *  for pri 6
27592 	 */
27593 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri6;
27594 	/*
27595 	 * Number of bytes dropped on rx during last PFC watchdog storm
27596 	 *  for pri 7
27597 	 */
27598 	uint64_t	rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri7;
27599 } __rte_packed;
27600 
27601 /************************
27602  * hwrm_port_qstats_ext *
27603  ************************/
27604 
27605 
27606 /* hwrm_port_qstats_ext_input (size:320b/40B) */
27607 struct hwrm_port_qstats_ext_input {
27608 	/* The HWRM command request type. */
27609 	uint16_t	req_type;
27610 	/*
27611 	 * The completion ring to send the completion event on. This should
27612 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
27613 	 */
27614 	uint16_t	cmpl_ring;
27615 	/*
27616 	 * The sequence ID is used by the driver for tracking multiple
27617 	 * commands. This ID is treated as opaque data by the firmware and
27618 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
27619 	 */
27620 	uint16_t	seq_id;
27621 	/*
27622 	 * The target ID of the command:
27623 	 * * 0x0-0xFFF8 - The function ID
27624 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
27625 	 * * 0xFFFD - Reserved for user-space HWRM interface
27626 	 * * 0xFFFF - HWRM
27627 	 */
27628 	uint16_t	target_id;
27629 	/*
27630 	 * A physical address pointer pointing to a host buffer that the
27631 	 * command's response data will be written. This can be either a host
27632 	 * physical address (HPA) or a guest physical address (GPA) and must
27633 	 * point to a physically contiguous block of memory.
27634 	 */
27635 	uint64_t	resp_addr;
27636 	/* Port ID of port that is being queried. */
27637 	uint16_t	port_id;
27638 	/*
27639 	 * The size of TX port extended
27640 	 * statistics block in bytes.
27641 	 */
27642 	uint16_t	tx_stat_size;
27643 	/*
27644 	 * The size of RX port extended
27645 	 * statistics block in bytes
27646 	 */
27647 	uint16_t	rx_stat_size;
27648 	uint8_t	flags;
27649 	/* This value is not used to avoid backward compatibility issues. */
27650 	#define HWRM_PORT_QSTATS_EXT_INPUT_FLAGS_UNUSED       UINT32_C(0x0)
27651 	/*
27652 	 * This bit is set to 1 when request is for the counter mask,
27653 	 * representing width of each of the stats counters, rather than
27654 	 * counters themselves.
27655 	 */
27656 	#define HWRM_PORT_QSTATS_EXT_INPUT_FLAGS_COUNTER_MASK UINT32_C(0x1)
27657 	#define HWRM_PORT_QSTATS_EXT_INPUT_FLAGS_LAST \
27658 		HWRM_PORT_QSTATS_EXT_INPUT_FLAGS_COUNTER_MASK
27659 	uint8_t	unused_0;
27660 	/*
27661 	 * This is the host address where
27662 	 * Tx port statistics will be stored
27663 	 */
27664 	uint64_t	tx_stat_host_addr;
27665 	/*
27666 	 * This is the host address where
27667 	 * Rx port statistics will be stored
27668 	 */
27669 	uint64_t	rx_stat_host_addr;
27670 } __rte_packed;
27671 
27672 /* hwrm_port_qstats_ext_output (size:128b/16B) */
27673 struct hwrm_port_qstats_ext_output {
27674 	/* The specific error status for the command. */
27675 	uint16_t	error_code;
27676 	/* The HWRM command request type. */
27677 	uint16_t	req_type;
27678 	/* The sequence ID from the original command. */
27679 	uint16_t	seq_id;
27680 	/* The length of the response data in number of bytes. */
27681 	uint16_t	resp_len;
27682 	/* The size of TX port statistics block in bytes. */
27683 	uint16_t	tx_stat_size;
27684 	/* The size of RX port statistics block in bytes. */
27685 	uint16_t	rx_stat_size;
27686 	/* Total number of active cos queues available. */
27687 	uint16_t	total_active_cos_queues;
27688 	uint8_t	flags;
27689 	/*
27690 	 * If set to 1, then this field indicates that clear
27691 	 * roce specific counters is supported.
27692 	 */
27693 	#define HWRM_PORT_QSTATS_EXT_OUTPUT_FLAGS_CLEAR_ROCE_COUNTERS_SUPPORTED \
27694 		UINT32_C(0x1)
27695 	/*
27696 	 * This field is used in Output records to indicate that the output
27697 	 * is completely written to RAM.  This field should be read as '1'
27698 	 * to indicate that the output has been completely written.
27699 	 * When writing a command completion or response to an internal processor,
27700 	 * the order of writes has to be such that this field is written last.
27701 	 */
27702 	uint8_t	valid;
27703 } __rte_packed;
27704 
27705 /*******************************
27706  * hwrm_port_qstats_ext_pfc_wd *
27707  *******************************/
27708 
27709 
27710 /* hwrm_port_qstats_ext_pfc_wd_input (size:256b/32B) */
27711 struct hwrm_port_qstats_ext_pfc_wd_input {
27712 	/* The HWRM command request type. */
27713 	uint16_t	req_type;
27714 	/*
27715 	 * The completion ring to send the completion event on. This should
27716 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
27717 	 */
27718 	uint16_t	cmpl_ring;
27719 	/*
27720 	 * The sequence ID is used by the driver for tracking multiple
27721 	 * commands. This ID is treated as opaque data by the firmware and
27722 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
27723 	 */
27724 	uint16_t	seq_id;
27725 	/*
27726 	 * The target ID of the command:
27727 	 * * 0x0-0xFFF8 - The function ID
27728 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
27729 	 * * 0xFFFD - Reserved for user-space HWRM interface
27730 	 * * 0xFFFF - HWRM
27731 	 */
27732 	uint16_t	target_id;
27733 	/*
27734 	 * A physical address pointer pointing to a host buffer that the
27735 	 * command's response data will be written. This can be either a host
27736 	 * physical address (HPA) or a guest physical address (GPA) and must
27737 	 * point to a physically contiguous block of memory.
27738 	 */
27739 	uint64_t	resp_addr;
27740 	/* Port ID of port that is being queried. */
27741 	uint16_t	port_id;
27742 	/*
27743 	 * The size of rx_port_stats_ext_pfc_wd
27744 	 * block in bytes
27745 	 */
27746 	uint16_t	pfc_wd_stat_size;
27747 	uint8_t	unused_0[4];
27748 	/*
27749 	 * This is the host address where
27750 	 * rx_port_stats_ext_pfc_wd will be stored
27751 	 */
27752 	uint64_t	pfc_wd_stat_host_addr;
27753 } __rte_packed;
27754 
27755 /* hwrm_port_qstats_ext_pfc_wd_output (size:128b/16B) */
27756 struct hwrm_port_qstats_ext_pfc_wd_output {
27757 	/* The specific error status for the command. */
27758 	uint16_t	error_code;
27759 	/* The HWRM command request type. */
27760 	uint16_t	req_type;
27761 	/* The sequence ID from the original command. */
27762 	uint16_t	seq_id;
27763 	/* The length of the response data in number of bytes. */
27764 	uint16_t	resp_len;
27765 	/*
27766 	 * The size of rx_port_stats_ext_pfc_wd
27767 	 * statistics block in bytes.
27768 	 */
27769 	uint16_t	pfc_wd_stat_size;
27770 	uint8_t	flags;
27771 	/*
27772 	 * This field is used in Output records to indicate that the output
27773 	 * is completely written to RAM.  This field should be read as '1'
27774 	 * to indicate that the output has been completely written.
27775 	 * When writing a command completion or response to an internal processor,
27776 	 * the order of writes has to be such that this field is written last.
27777 	 */
27778 	uint8_t	valid;
27779 	uint8_t	unused_0[4];
27780 } __rte_packed;
27781 
27782 /*************************
27783  * hwrm_port_lpbk_qstats *
27784  *************************/
27785 
27786 
27787 /* hwrm_port_lpbk_qstats_input (size:128b/16B) */
27788 struct hwrm_port_lpbk_qstats_input {
27789 	/* The HWRM command request type. */
27790 	uint16_t	req_type;
27791 	/*
27792 	 * The completion ring to send the completion event on. This should
27793 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
27794 	 */
27795 	uint16_t	cmpl_ring;
27796 	/*
27797 	 * The sequence ID is used by the driver for tracking multiple
27798 	 * commands. This ID is treated as opaque data by the firmware and
27799 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
27800 	 */
27801 	uint16_t	seq_id;
27802 	/*
27803 	 * The target ID of the command:
27804 	 * * 0x0-0xFFF8 - The function ID
27805 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
27806 	 * * 0xFFFD - Reserved for user-space HWRM interface
27807 	 * * 0xFFFF - HWRM
27808 	 */
27809 	uint16_t	target_id;
27810 	/*
27811 	 * A physical address pointer pointing to a host buffer that the
27812 	 * command's response data will be written. This can be either a host
27813 	 * physical address (HPA) or a guest physical address (GPA) and must
27814 	 * point to a physically contiguous block of memory.
27815 	 */
27816 	uint64_t	resp_addr;
27817 } __rte_packed;
27818 
27819 /* hwrm_port_lpbk_qstats_output (size:768b/96B) */
27820 struct hwrm_port_lpbk_qstats_output {
27821 	/* The specific error status for the command. */
27822 	uint16_t	error_code;
27823 	/* The HWRM command request type. */
27824 	uint16_t	req_type;
27825 	/* The sequence ID from the original command. */
27826 	uint16_t	seq_id;
27827 	/* The length of the response data in number of bytes. */
27828 	uint16_t	resp_len;
27829 	/* Number of transmitted unicast frames */
27830 	uint64_t	lpbk_ucast_frames;
27831 	/* Number of transmitted multicast frames */
27832 	uint64_t	lpbk_mcast_frames;
27833 	/* Number of transmitted broadcast frames */
27834 	uint64_t	lpbk_bcast_frames;
27835 	/* Number of transmitted bytes for unicast traffic */
27836 	uint64_t	lpbk_ucast_bytes;
27837 	/* Number of transmitted bytes for multicast traffic */
27838 	uint64_t	lpbk_mcast_bytes;
27839 	/* Number of transmitted bytes for broadcast traffic */
27840 	uint64_t	lpbk_bcast_bytes;
27841 	/* Total Tx Drops for loopback traffic reported by STATS block */
27842 	uint64_t	tx_stat_discard;
27843 	/* Total Tx Error Drops for loopback traffic reported by STATS block */
27844 	uint64_t	tx_stat_error;
27845 	/* Total Rx Drops for loopback traffic reported by STATS block */
27846 	uint64_t	rx_stat_discard;
27847 	/* Total Rx Error Drops for loopback traffic reported by STATS block */
27848 	uint64_t	rx_stat_error;
27849 	uint8_t	unused_0[7];
27850 	/*
27851 	 * This field is used in Output records to indicate that the output
27852 	 * is completely written to RAM.  This field should be read as '1'
27853 	 * to indicate that the output has been completely written.
27854 	 * When writing a command completion or response to an internal processor,
27855 	 * the order of writes has to be such that this field is written last.
27856 	 */
27857 	uint8_t	valid;
27858 } __rte_packed;
27859 
27860 /************************
27861  * hwrm_port_ecn_qstats *
27862  ************************/
27863 
27864 
27865 /* hwrm_port_ecn_qstats_input (size:256b/32B) */
27866 struct hwrm_port_ecn_qstats_input {
27867 	/* The HWRM command request type. */
27868 	uint16_t	req_type;
27869 	/*
27870 	 * The completion ring to send the completion event on. This should
27871 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
27872 	 */
27873 	uint16_t	cmpl_ring;
27874 	/*
27875 	 * The sequence ID is used by the driver for tracking multiple
27876 	 * commands. This ID is treated as opaque data by the firmware and
27877 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
27878 	 */
27879 	uint16_t	seq_id;
27880 	/*
27881 	 * The target ID of the command:
27882 	 * * 0x0-0xFFF8 - The function ID
27883 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
27884 	 * * 0xFFFD - Reserved for user-space HWRM interface
27885 	 * * 0xFFFF - HWRM
27886 	 */
27887 	uint16_t	target_id;
27888 	/*
27889 	 * A physical address pointer pointing to a host buffer that the
27890 	 * command's response data will be written. This can be either a host
27891 	 * physical address (HPA) or a guest physical address (GPA) and must
27892 	 * point to a physically contiguous block of memory.
27893 	 */
27894 	uint64_t	resp_addr;
27895 	/*
27896 	 * Port ID of port that is being queried. Unused if NIC is in
27897 	 * multi-host mode.
27898 	 */
27899 	uint16_t	port_id;
27900 	/*
27901 	 * Size of the DMA buffer the caller has allocated for the firmware to
27902 	 * write into.
27903 	 */
27904 	uint16_t	ecn_stat_buf_size;
27905 	uint8_t	flags;
27906 	/* This value is not used to avoid backward compatibility issues. */
27907 	#define HWRM_PORT_ECN_QSTATS_INPUT_FLAGS_UNUSED       UINT32_C(0x0)
27908 	/*
27909 	 * This bit is set to 1 when request is for a counter mask,
27910 	 * representing the width of each of the stats counters, rather
27911 	 * than counters themselves.
27912 	 */
27913 	#define HWRM_PORT_ECN_QSTATS_INPUT_FLAGS_COUNTER_MASK UINT32_C(0x1)
27914 	#define HWRM_PORT_ECN_QSTATS_INPUT_FLAGS_LAST \
27915 		HWRM_PORT_ECN_QSTATS_INPUT_FLAGS_COUNTER_MASK
27916 	uint8_t	unused_0[3];
27917 	/*
27918 	 * This is the host address where
27919 	 * ECN port statistics will be stored
27920 	 */
27921 	uint64_t	ecn_stat_host_addr;
27922 } __rte_packed;
27923 
27924 /* hwrm_port_ecn_qstats_output (size:128b/16B) */
27925 struct hwrm_port_ecn_qstats_output {
27926 	/* The specific error status for the command. */
27927 	uint16_t	error_code;
27928 	/* The HWRM command request type. */
27929 	uint16_t	req_type;
27930 	/* The sequence ID from the original command. */
27931 	uint16_t	seq_id;
27932 	/* The length of the response data in number of bytes. */
27933 	uint16_t	resp_len;
27934 	/* Number of bytes of stats the firmware wrote to the DMA buffer. */
27935 	uint16_t	ecn_stat_buf_size;
27936 	/*
27937 	 * Bitmask that indicates which CoS queues have ECN marking enabled.
27938 	 * Bit i corresponds to CoS queue i.
27939 	 */
27940 	uint8_t	mark_en;
27941 	uint8_t	unused_0[4];
27942 	/*
27943 	 * This field is used in Output records to indicate that the output
27944 	 * is completely written to RAM.  This field should be read as '1'
27945 	 * to indicate that the output has been completely written.
27946 	 * When writing a command completion or response to an internal processor,
27947 	 * the order of writes has to be such that this field is written last.
27948 	 */
27949 	uint8_t	valid;
27950 } __rte_packed;
27951 
27952 /* ECN mark statistics format */
27953 /* port_stats_ecn (size:512b/64B) */
27954 struct port_stats_ecn {
27955 	/*
27956 	 * Number of packets marked in CoS queue 0.
27957 	 * Or, if the driver requested counter masks, a mask to indicate the size
27958 	 * of the counter.
27959 	 */
27960 	uint64_t	mark_cnt_cos0;
27961 	/*
27962 	 * Number of packets marked in CoS queue 1.
27963 	 * Or, if the driver requested counter masks, a mask to indicate the size
27964 	 * of the counter.
27965 	 */
27966 	uint64_t	mark_cnt_cos1;
27967 	/*
27968 	 * Number of packets marked in CoS queue 2.
27969 	 * Or, if the driver requested counter masks, a mask to indicate the size
27970 	 * of the counter.
27971 	 */
27972 	uint64_t	mark_cnt_cos2;
27973 	/*
27974 	 * Number of packets marked in CoS queue 3.
27975 	 * Or, if the driver requested counter masks, a mask to indicate the size
27976 	 * of the counter.
27977 	 */
27978 	uint64_t	mark_cnt_cos3;
27979 	/*
27980 	 * Number of packets marked in CoS queue 4.
27981 	 * Or, if the driver requested counter masks, a mask to indicate the size
27982 	 * of the counter.
27983 	 */
27984 	uint64_t	mark_cnt_cos4;
27985 	/*
27986 	 * Number of packets marked in CoS queue 5.
27987 	 * Or, if the driver requested counter masks, a mask to indicate the size
27988 	 * of the counter.
27989 	 */
27990 	uint64_t	mark_cnt_cos5;
27991 	/*
27992 	 * Number of packets marked in CoS queue 6.
27993 	 * Or, if the driver requested counter masks, a mask to indicate the size
27994 	 * of the counter.
27995 	 */
27996 	uint64_t	mark_cnt_cos6;
27997 	/*
27998 	 * Number of packets marked in CoS queue 7.
27999 	 * Or, if the driver requested counter masks, a mask to indicate the size
28000 	 * of the counter.
28001 	 */
28002 	uint64_t	mark_cnt_cos7;
28003 } __rte_packed;
28004 
28005 /***********************
28006  * hwrm_port_clr_stats *
28007  ***********************/
28008 
28009 
28010 /* hwrm_port_clr_stats_input (size:192b/24B) */
28011 struct hwrm_port_clr_stats_input {
28012 	/* The HWRM command request type. */
28013 	uint16_t	req_type;
28014 	/*
28015 	 * The completion ring to send the completion event on. This should
28016 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
28017 	 */
28018 	uint16_t	cmpl_ring;
28019 	/*
28020 	 * The sequence ID is used by the driver for tracking multiple
28021 	 * commands. This ID is treated as opaque data by the firmware and
28022 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
28023 	 */
28024 	uint16_t	seq_id;
28025 	/*
28026 	 * The target ID of the command:
28027 	 * * 0x0-0xFFF8 - The function ID
28028 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
28029 	 * * 0xFFFD - Reserved for user-space HWRM interface
28030 	 * * 0xFFFF - HWRM
28031 	 */
28032 	uint16_t	target_id;
28033 	/*
28034 	 * A physical address pointer pointing to a host buffer that the
28035 	 * command's response data will be written. This can be either a host
28036 	 * physical address (HPA) or a guest physical address (GPA) and must
28037 	 * point to a physically contiguous block of memory.
28038 	 */
28039 	uint64_t	resp_addr;
28040 	/* Port ID of port that is being queried. */
28041 	uint16_t	port_id;
28042 	uint8_t	flags;
28043 	/*
28044 	 * If set to 1, then this field indicates clear the following RoCE
28045 	 * specific counters.
28046 	 * RoCE associated TX/RX cos counters
28047 	 * CNP associated TX/RX cos counters
28048 	 * RoCE/CNP specific TX/RX flow counters
28049 	 * Firmware will determine the RoCE/CNP cos queue based on qos profile.
28050 	 * This flag is honored only when RoCE is enabled on that port.
28051 	 */
28052 	#define HWRM_PORT_CLR_STATS_INPUT_FLAGS_ROCE_COUNTERS     UINT32_C(0x1)
28053 	uint8_t	unused_0[5];
28054 } __rte_packed;
28055 
28056 /* hwrm_port_clr_stats_output (size:128b/16B) */
28057 struct hwrm_port_clr_stats_output {
28058 	/* The specific error status for the command. */
28059 	uint16_t	error_code;
28060 	/* The HWRM command request type. */
28061 	uint16_t	req_type;
28062 	/* The sequence ID from the original command. */
28063 	uint16_t	seq_id;
28064 	/* The length of the response data in number of bytes. */
28065 	uint16_t	resp_len;
28066 	uint8_t	unused_0[7];
28067 	/*
28068 	 * This field is used in Output records to indicate that the output
28069 	 * is completely written to RAM.  This field should be read as '1'
28070 	 * to indicate that the output has been completely written.
28071 	 * When writing a command completion or response to an internal processor,
28072 	 * the order of writes has to be such that this field is written last.
28073 	 */
28074 	uint8_t	valid;
28075 } __rte_packed;
28076 
28077 /***********************
28078  * hwrm_port_phy_qcaps *
28079  ***********************/
28080 
28081 
28082 /* hwrm_port_phy_qcaps_input (size:192b/24B) */
28083 struct hwrm_port_phy_qcaps_input {
28084 	/* The HWRM command request type. */
28085 	uint16_t	req_type;
28086 	/*
28087 	 * The completion ring to send the completion event on. This should
28088 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
28089 	 */
28090 	uint16_t	cmpl_ring;
28091 	/*
28092 	 * The sequence ID is used by the driver for tracking multiple
28093 	 * commands. This ID is treated as opaque data by the firmware and
28094 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
28095 	 */
28096 	uint16_t	seq_id;
28097 	/*
28098 	 * The target ID of the command:
28099 	 * * 0x0-0xFFF8 - The function ID
28100 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
28101 	 * * 0xFFFD - Reserved for user-space HWRM interface
28102 	 * * 0xFFFF - HWRM
28103 	 */
28104 	uint16_t	target_id;
28105 	/*
28106 	 * A physical address pointer pointing to a host buffer that the
28107 	 * command's response data will be written. This can be either a host
28108 	 * physical address (HPA) or a guest physical address (GPA) and must
28109 	 * point to a physically contiguous block of memory.
28110 	 */
28111 	uint64_t	resp_addr;
28112 	/* Port ID of port that is being queried. */
28113 	uint16_t	port_id;
28114 	uint8_t	unused_0[6];
28115 } __rte_packed;
28116 
28117 /* hwrm_port_phy_qcaps_output (size:256b/32B) */
28118 struct hwrm_port_phy_qcaps_output {
28119 	/* The specific error status for the command. */
28120 	uint16_t	error_code;
28121 	/* The HWRM command request type. */
28122 	uint16_t	req_type;
28123 	/* The sequence ID from the original command. */
28124 	uint16_t	seq_id;
28125 	/* The length of the response data in number of bytes. */
28126 	uint16_t	resp_len;
28127 	/* PHY capability flags */
28128 	uint8_t	flags;
28129 	/*
28130 	 * If set to 1, then this field indicates that the
28131 	 * link is capable of supporting EEE.
28132 	 */
28133 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_EEE_SUPPORTED \
28134 		UINT32_C(0x1)
28135 	/*
28136 	 * If set to 1, then this field indicates that the
28137 	 * PHY is capable of supporting external loopback.
28138 	 */
28139 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_EXTERNAL_LPBK_SUPPORTED \
28140 		UINT32_C(0x2)
28141 	/*
28142 	 * If set to 1, then this field indicates that the
28143 	 * PHY is capable of supporting loopback in autoneg mode.
28144 	 */
28145 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_AUTONEG_LPBK_SUPPORTED \
28146 		UINT32_C(0x4)
28147 	/*
28148 	 * Indicates if the configuration of shared PHY settings is supported.
28149 	 * In cases where a physical port is shared by multiple functions
28150 	 * (e.g. NPAR, multihost, etc), the configuration of PHY
28151 	 * settings may not be allowed. Callers to HWRM_PORT_PHY_CFG will
28152 	 * get an HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED error in this case.
28153 	 */
28154 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_SHARED_PHY_CFG_SUPPORTED \
28155 		UINT32_C(0x8)
28156 	/*
28157 	 * If set to 1, it indicates that the port counters and extended
28158 	 * port counters will not reset when the firmware shuts down or
28159 	 * resets the PHY.  These counters will only be reset during power
28160 	 * cycle or by calling HWRM_PORT_CLR_STATS.
28161 	 * If set to 0, the state of the counters is unspecified when
28162 	 * firmware shuts down or resets the PHY.
28163 	 */
28164 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_CUMULATIVE_COUNTERS_ON_RESET \
28165 		UINT32_C(0x10)
28166 	/*
28167 	 * If set to 1, then this field indicates that the
28168 	 * local loopback is not supported on this controller.
28169 	 */
28170 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_LOCAL_LPBK_NOT_SUPPORTED \
28171 		UINT32_C(0x20)
28172 	/*
28173 	 * If set to 1, then this field indicates that the
28174 	 * PHY/Link down policy during PF shutdown is totally
28175 	 * controlled by the firmware. It can shutdown the link
28176 	 * even when there are active VFs associated with the PF.
28177 	 * Host PF driver can send HWRM_PHY_CFG command to bring
28178 	 * down the PHY even when the port is shared between VFs
28179 	 * and PFs.
28180 	 */
28181 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_FW_MANAGED_LINK_DOWN \
28182 		UINT32_C(0x40)
28183 	/*
28184 	 * If set to 1, this field indicates that the FCS may
28185 	 * be disabled for a given packet via the transmit
28186 	 * buffer descriptor.
28187 	 */
28188 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_NO_FCS \
28189 		UINT32_C(0x80)
28190 	/* Number of front panel ports for this device. */
28191 	uint8_t	port_cnt;
28192 	/* Not supported or unknown */
28193 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_UNKNOWN UINT32_C(0x0)
28194 	/* single port device */
28195 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_1       UINT32_C(0x1)
28196 	/* 2-port device */
28197 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_2       UINT32_C(0x2)
28198 	/* 3-port device */
28199 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_3       UINT32_C(0x3)
28200 	/* 4-port device */
28201 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_4       UINT32_C(0x4)
28202 	/* 12-port device */
28203 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_12      UINT32_C(0xc)
28204 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_LAST \
28205 		HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_12
28206 	/*
28207 	 * This is a bit mask to indicate what speeds are supported
28208 	 * as forced speeds on this link.
28209 	 * For each speed that can be forced on this link, the
28210 	 * corresponding mask bit shall be set to '1'.
28211 	 */
28212 	uint16_t	supported_speeds_force_mode;
28213 	/* 100Mb link speed (Half-duplex) */
28214 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_100MBHD \
28215 		UINT32_C(0x1)
28216 	/* 100Mb link speed (Full-duplex) */
28217 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_100MB \
28218 		UINT32_C(0x2)
28219 	/* 1Gb link speed (Half-duplex) */
28220 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_1GBHD \
28221 		UINT32_C(0x4)
28222 	/* 1Gb link speed (Full-duplex) */
28223 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_1GB \
28224 		UINT32_C(0x8)
28225 	/* 2Gb link speed */
28226 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_2GB \
28227 		UINT32_C(0x10)
28228 	/* 25Gb link speed */
28229 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_2_5GB \
28230 		UINT32_C(0x20)
28231 	/* 10Gb link speed */
28232 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_10GB \
28233 		UINT32_C(0x40)
28234 	/* 20Gb link speed */
28235 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_20GB \
28236 		UINT32_C(0x80)
28237 	/* 25Gb link speed */
28238 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_25GB \
28239 		UINT32_C(0x100)
28240 	/* 40Gb link speed */
28241 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_40GB \
28242 		UINT32_C(0x200)
28243 	/* 50Gb link speed */
28244 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_50GB \
28245 		UINT32_C(0x400)
28246 	/* 100Gb link speed */
28247 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_100GB \
28248 		UINT32_C(0x800)
28249 	/* 10Mb link speed (Half-duplex) */
28250 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_10MBHD \
28251 		UINT32_C(0x1000)
28252 	/* 10Mb link speed (Full-duplex) */
28253 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_10MB \
28254 		UINT32_C(0x2000)
28255 	/*
28256 	 * This is a bit mask to indicate what speeds are supported
28257 	 * for autonegotiation on this link.
28258 	 * For each speed that can be autonegotiated on this link, the
28259 	 * corresponding mask bit shall be set to '1'.
28260 	 */
28261 	uint16_t	supported_speeds_auto_mode;
28262 	/* 100Mb link speed (Half-duplex) */
28263 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_100MBHD \
28264 		UINT32_C(0x1)
28265 	/* 100Mb link speed (Full-duplex) */
28266 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_100MB \
28267 		UINT32_C(0x2)
28268 	/* 1Gb link speed (Half-duplex) */
28269 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_1GBHD \
28270 		UINT32_C(0x4)
28271 	/* 1Gb link speed (Full-duplex) */
28272 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_1GB \
28273 		UINT32_C(0x8)
28274 	/* 2Gb link speed */
28275 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_2GB \
28276 		UINT32_C(0x10)
28277 	/* 25Gb link speed */
28278 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_2_5GB \
28279 		UINT32_C(0x20)
28280 	/* 10Gb link speed */
28281 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_10GB \
28282 		UINT32_C(0x40)
28283 	/* 20Gb link speed */
28284 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_20GB \
28285 		UINT32_C(0x80)
28286 	/* 25Gb link speed */
28287 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_25GB \
28288 		UINT32_C(0x100)
28289 	/* 40Gb link speed */
28290 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_40GB \
28291 		UINT32_C(0x200)
28292 	/* 50Gb link speed */
28293 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_50GB \
28294 		UINT32_C(0x400)
28295 	/* 100Gb link speed */
28296 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_100GB \
28297 		UINT32_C(0x800)
28298 	/* 10Mb link speed (Half-duplex) */
28299 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_10MBHD \
28300 		UINT32_C(0x1000)
28301 	/* 10Mb link speed (Full-duplex) */
28302 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_10MB \
28303 		UINT32_C(0x2000)
28304 	/*
28305 	 * This is a bit mask to indicate what speeds are supported
28306 	 * for EEE on this link.
28307 	 * For each speed that can be autonegotiated when EEE is enabled
28308 	 * on this link, the corresponding mask bit shall be set to '1'.
28309 	 * This field is only valid when the eee_supported is set to '1'.
28310 	 */
28311 	uint16_t	supported_speeds_eee_mode;
28312 	/* Reserved */
28313 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_RSVD1 \
28314 		UINT32_C(0x1)
28315 	/* 100Mb link speed (Full-duplex) */
28316 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_100MB \
28317 		UINT32_C(0x2)
28318 	/* Reserved */
28319 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_RSVD2 \
28320 		UINT32_C(0x4)
28321 	/* 1Gb link speed (Full-duplex) */
28322 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_1GB \
28323 		UINT32_C(0x8)
28324 	/* Reserved */
28325 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_RSVD3 \
28326 		UINT32_C(0x10)
28327 	/* Reserved */
28328 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_RSVD4 \
28329 		UINT32_C(0x20)
28330 	/* 10Gb link speed */
28331 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_10GB \
28332 		UINT32_C(0x40)
28333 	uint32_t	tx_lpi_timer_low;
28334 	/*
28335 	 * The lowest value of TX LPI timer that can be set on this link
28336 	 * when EEE is enabled. This value is in microseconds.
28337 	 * This field is valid only when_eee_supported is set to '1'.
28338 	 */
28339 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_TX_LPI_TIMER_LOW_MASK \
28340 		UINT32_C(0xffffff)
28341 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_TX_LPI_TIMER_LOW_SFT 0
28342 	/*
28343 	 * Reserved field. The HWRM shall set this field to 0.
28344 	 * An HWRM client shall ignore this field.
28345 	 */
28346 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_RSVD2_MASK \
28347 		UINT32_C(0xff000000)
28348 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_RSVD2_SFT            24
28349 	uint32_t	valid_tx_lpi_timer_high;
28350 	/*
28351 	 * The highest value of TX LPI timer that can be set on this link
28352 	 * when EEE is enabled. This value is in microseconds.
28353 	 * This field is valid only when_eee_supported is set to '1'.
28354 	 */
28355 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_TX_LPI_TIMER_HIGH_MASK \
28356 		UINT32_C(0xffffff)
28357 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_TX_LPI_TIMER_HIGH_SFT 0
28358 	/*
28359 	 * Reserved field. The HWRM shall set this field to 0.
28360 	 * An HWRM client shall ignore this field.
28361 	 */
28362 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_RSVD_MASK \
28363 		UINT32_C(0xff000000)
28364 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_RSVD_SFT              24
28365 	/*
28366 	 * This field is used to advertise which PAM4 speeds are supported
28367 	 * in auto mode.
28368 	 */
28369 	uint16_t	supported_pam4_speeds_auto_mode;
28370 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_PAM4_SPEEDS_AUTO_MODE_50G \
28371 		UINT32_C(0x1)
28372 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_PAM4_SPEEDS_AUTO_MODE_100G \
28373 		UINT32_C(0x2)
28374 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_PAM4_SPEEDS_AUTO_MODE_200G \
28375 		UINT32_C(0x4)
28376 	/*
28377 	 * This field is used to advertise which PAM4 speeds are supported
28378 	 * in forced mode.
28379 	 */
28380 	uint16_t	supported_pam4_speeds_force_mode;
28381 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_PAM4_SPEEDS_FORCE_MODE_50G \
28382 		UINT32_C(0x1)
28383 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_PAM4_SPEEDS_FORCE_MODE_100G \
28384 		UINT32_C(0x2)
28385 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_PAM4_SPEEDS_FORCE_MODE_200G \
28386 		UINT32_C(0x4)
28387 	/* More PHY capability flags */
28388 	uint16_t	flags2;
28389 	/*
28390 	 * If set to 1, then this field indicates that
28391 	 * 802.3x flow control is not supported.
28392 	 */
28393 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS2_PAUSE_UNSUPPORTED \
28394 		UINT32_C(0x1)
28395 	/*
28396 	 * If set to 1, then this field indicates that
28397 	 * priority-based flow control is not supported.
28398 	 */
28399 	#define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS2_PFC_UNSUPPORTED \
28400 		UINT32_C(0x2)
28401 	/*
28402 	 * Number of internal ports for this device. This field allows the FW
28403 	 * to advertise how many internal ports are present. Manufacturing
28404 	 * tools uses this to determine how many internal ports should have
28405 	 * the PRBS test run on them. This field always return 0 unless NVM
28406 	 * option "HPTN_MODE" is set to 1.
28407 	 */
28408 	uint8_t	internal_port_cnt;
28409 	/*
28410 	 * This field is used in Output records to indicate that the output
28411 	 * is completely written to RAM.  This field should be read as '1'
28412 	 * to indicate that the output has been completely written.
28413 	 * When writing a command completion or response to an internal processor,
28414 	 * the order of writes has to be such that this field is written last.
28415 	 */
28416 	uint8_t	valid;
28417 } __rte_packed;
28418 
28419 /****************************
28420  * hwrm_port_phy_mdio_write *
28421  ****************************/
28422 
28423 
28424 /* hwrm_port_phy_mdio_write_input (size:320b/40B) */
28425 struct hwrm_port_phy_mdio_write_input {
28426 	/* The HWRM command request type. */
28427 	uint16_t	req_type;
28428 	/*
28429 	 * The completion ring to send the completion event on. This should
28430 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
28431 	 */
28432 	uint16_t	cmpl_ring;
28433 	/*
28434 	 * The sequence ID is used by the driver for tracking multiple
28435 	 * commands. This ID is treated as opaque data by the firmware and
28436 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
28437 	 */
28438 	uint16_t	seq_id;
28439 	/*
28440 	 * The target ID of the command:
28441 	 * * 0x0-0xFFF8 - The function ID
28442 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
28443 	 * * 0xFFFD - Reserved for user-space HWRM interface
28444 	 * * 0xFFFF - HWRM
28445 	 */
28446 	uint16_t	target_id;
28447 	/*
28448 	 * A physical address pointer pointing to a host buffer that the
28449 	 * command's response data will be written. This can be either a host
28450 	 * physical address (HPA) or a guest physical address (GPA) and must
28451 	 * point to a physically contiguous block of memory.
28452 	 */
28453 	uint64_t	resp_addr;
28454 	/* Reserved for future use. */
28455 	uint32_t	unused_0[2];
28456 	/* Port ID of port. */
28457 	uint16_t	port_id;
28458 	/* If phy_address is 0xFF, port_id will be used to derive phy_addr. */
28459 	uint8_t	phy_addr;
28460 	/* 8-bit device address. */
28461 	uint8_t	dev_addr;
28462 	/* 16-bit register address. */
28463 	uint16_t	reg_addr;
28464 	/* 16-bit register data. */
28465 	uint16_t	reg_data;
28466 	/*
28467 	 * When this bit is set to 1 a Clause 45 mdio access is done.
28468 	 * when this bit is set to 0 a Clause 22 mdio access is done.
28469 	 */
28470 	uint8_t	cl45_mdio;
28471 	/*  */
28472 	uint8_t	unused_1[7];
28473 } __rte_packed;
28474 
28475 /* hwrm_port_phy_mdio_write_output (size:128b/16B) */
28476 struct hwrm_port_phy_mdio_write_output {
28477 	/* The specific error status for the command. */
28478 	uint16_t	error_code;
28479 	/* The HWRM command request type. */
28480 	uint16_t	req_type;
28481 	/* The sequence ID from the original command. */
28482 	uint16_t	seq_id;
28483 	/* The length of the response data in number of bytes. */
28484 	uint16_t	resp_len;
28485 	uint8_t	unused_0[7];
28486 	/*
28487 	 * This field is used in Output records to indicate that the output
28488 	 * is completely written to RAM.  This field should be read as '1'
28489 	 * to indicate that the output has been completely written.
28490 	 * When writing a command completion or response to an internal processor,
28491 	 * the order of writes has to be such that this field is written last.
28492 	 */
28493 	uint8_t	valid;
28494 } __rte_packed;
28495 
28496 /***************************
28497  * hwrm_port_phy_mdio_read *
28498  ***************************/
28499 
28500 
28501 /* hwrm_port_phy_mdio_read_input (size:256b/32B) */
28502 struct hwrm_port_phy_mdio_read_input {
28503 	/* The HWRM command request type. */
28504 	uint16_t	req_type;
28505 	/*
28506 	 * The completion ring to send the completion event on. This should
28507 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
28508 	 */
28509 	uint16_t	cmpl_ring;
28510 	/*
28511 	 * The sequence ID is used by the driver for tracking multiple
28512 	 * commands. This ID is treated as opaque data by the firmware and
28513 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
28514 	 */
28515 	uint16_t	seq_id;
28516 	/*
28517 	 * The target ID of the command:
28518 	 * * 0x0-0xFFF8 - The function ID
28519 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
28520 	 * * 0xFFFD - Reserved for user-space HWRM interface
28521 	 * * 0xFFFF - HWRM
28522 	 */
28523 	uint16_t	target_id;
28524 	/*
28525 	 * A physical address pointer pointing to a host buffer that the
28526 	 * command's response data will be written. This can be either a host
28527 	 * physical address (HPA) or a guest physical address (GPA) and must
28528 	 * point to a physically contiguous block of memory.
28529 	 */
28530 	uint64_t	resp_addr;
28531 	/* Reserved for future use. */
28532 	uint32_t	unused_0[2];
28533 	/* Port ID of port. */
28534 	uint16_t	port_id;
28535 	/* If phy_address is 0xFF, port_id will be used to derive phy_addr. */
28536 	uint8_t	phy_addr;
28537 	/* 8-bit device address. */
28538 	uint8_t	dev_addr;
28539 	/* 16-bit register address. */
28540 	uint16_t	reg_addr;
28541 	/*
28542 	 * When this bit is set to 1 a Clause 45 mdio access is done.
28543 	 * when this bit is set to 0 a Clause 22 mdio access is done.
28544 	 */
28545 	uint8_t	cl45_mdio;
28546 	/*  */
28547 	uint8_t	unused_1;
28548 } __rte_packed;
28549 
28550 /* hwrm_port_phy_mdio_read_output (size:128b/16B) */
28551 struct hwrm_port_phy_mdio_read_output {
28552 	/* The specific error status for the command. */
28553 	uint16_t	error_code;
28554 	/* The HWRM command request type. */
28555 	uint16_t	req_type;
28556 	/* The sequence ID from the original command. */
28557 	uint16_t	seq_id;
28558 	/* The length of the response data in number of bytes. */
28559 	uint16_t	resp_len;
28560 	/* 16-bit register data. */
28561 	uint16_t	reg_data;
28562 	uint8_t	unused_0[5];
28563 	/*
28564 	 * This field is used in Output records to indicate that the output
28565 	 * is completely written to RAM.  This field should be read as '1'
28566 	 * to indicate that the output has been completely written.
28567 	 * When writing a command completion or response to an internal processor,
28568 	 * the order of writes has to be such that this field is written last.
28569 	 */
28570 	uint8_t	valid;
28571 } __rte_packed;
28572 
28573 /*********************
28574  * hwrm_port_led_cfg *
28575  *********************/
28576 
28577 
28578 /* hwrm_port_led_cfg_input (size:512b/64B) */
28579 struct hwrm_port_led_cfg_input {
28580 	/* The HWRM command request type. */
28581 	uint16_t	req_type;
28582 	/*
28583 	 * The completion ring to send the completion event on. This should
28584 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
28585 	 */
28586 	uint16_t	cmpl_ring;
28587 	/*
28588 	 * The sequence ID is used by the driver for tracking multiple
28589 	 * commands. This ID is treated as opaque data by the firmware and
28590 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
28591 	 */
28592 	uint16_t	seq_id;
28593 	/*
28594 	 * The target ID of the command:
28595 	 * * 0x0-0xFFF8 - The function ID
28596 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
28597 	 * * 0xFFFD - Reserved for user-space HWRM interface
28598 	 * * 0xFFFF - HWRM
28599 	 */
28600 	uint16_t	target_id;
28601 	/*
28602 	 * A physical address pointer pointing to a host buffer that the
28603 	 * command's response data will be written. This can be either a host
28604 	 * physical address (HPA) or a guest physical address (GPA) and must
28605 	 * point to a physically contiguous block of memory.
28606 	 */
28607 	uint64_t	resp_addr;
28608 	uint32_t	enables;
28609 	/*
28610 	 * This bit must be '1' for the led0_id field to be
28611 	 * configured.
28612 	 */
28613 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_ID \
28614 		UINT32_C(0x1)
28615 	/*
28616 	 * This bit must be '1' for the led0_state field to be
28617 	 * configured.
28618 	 */
28619 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_STATE \
28620 		UINT32_C(0x2)
28621 	/*
28622 	 * This bit must be '1' for the led0_color field to be
28623 	 * configured.
28624 	 */
28625 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_COLOR \
28626 		UINT32_C(0x4)
28627 	/*
28628 	 * This bit must be '1' for the led0_blink_on field to be
28629 	 * configured.
28630 	 */
28631 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_BLINK_ON \
28632 		UINT32_C(0x8)
28633 	/*
28634 	 * This bit must be '1' for the led0_blink_off field to be
28635 	 * configured.
28636 	 */
28637 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_BLINK_OFF \
28638 		UINT32_C(0x10)
28639 	/*
28640 	 * This bit must be '1' for the led0_group_id field to be
28641 	 * configured.
28642 	 */
28643 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_GROUP_ID \
28644 		UINT32_C(0x20)
28645 	/*
28646 	 * This bit must be '1' for the led1_id field to be
28647 	 * configured.
28648 	 */
28649 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_ID \
28650 		UINT32_C(0x40)
28651 	/*
28652 	 * This bit must be '1' for the led1_state field to be
28653 	 * configured.
28654 	 */
28655 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_STATE \
28656 		UINT32_C(0x80)
28657 	/*
28658 	 * This bit must be '1' for the led1_color field to be
28659 	 * configured.
28660 	 */
28661 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_COLOR \
28662 		UINT32_C(0x100)
28663 	/*
28664 	 * This bit must be '1' for the led1_blink_on field to be
28665 	 * configured.
28666 	 */
28667 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_BLINK_ON \
28668 		UINT32_C(0x200)
28669 	/*
28670 	 * This bit must be '1' for the led1_blink_off field to be
28671 	 * configured.
28672 	 */
28673 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_BLINK_OFF \
28674 		UINT32_C(0x400)
28675 	/*
28676 	 * This bit must be '1' for the led1_group_id field to be
28677 	 * configured.
28678 	 */
28679 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_GROUP_ID \
28680 		UINT32_C(0x800)
28681 	/*
28682 	 * This bit must be '1' for the led2_id field to be
28683 	 * configured.
28684 	 */
28685 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_ID \
28686 		UINT32_C(0x1000)
28687 	/*
28688 	 * This bit must be '1' for the led2_state field to be
28689 	 * configured.
28690 	 */
28691 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_STATE \
28692 		UINT32_C(0x2000)
28693 	/*
28694 	 * This bit must be '1' for the led2_color field to be
28695 	 * configured.
28696 	 */
28697 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_COLOR \
28698 		UINT32_C(0x4000)
28699 	/*
28700 	 * This bit must be '1' for the led2_blink_on field to be
28701 	 * configured.
28702 	 */
28703 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_BLINK_ON \
28704 		UINT32_C(0x8000)
28705 	/*
28706 	 * This bit must be '1' for the led2_blink_off field to be
28707 	 * configured.
28708 	 */
28709 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_BLINK_OFF \
28710 		UINT32_C(0x10000)
28711 	/*
28712 	 * This bit must be '1' for the led2_group_id field to be
28713 	 * configured.
28714 	 */
28715 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_GROUP_ID \
28716 		UINT32_C(0x20000)
28717 	/*
28718 	 * This bit must be '1' for the led3_id field to be
28719 	 * configured.
28720 	 */
28721 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_ID \
28722 		UINT32_C(0x40000)
28723 	/*
28724 	 * This bit must be '1' for the led3_state field to be
28725 	 * configured.
28726 	 */
28727 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_STATE \
28728 		UINT32_C(0x80000)
28729 	/*
28730 	 * This bit must be '1' for the led3_color field to be
28731 	 * configured.
28732 	 */
28733 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_COLOR \
28734 		UINT32_C(0x100000)
28735 	/*
28736 	 * This bit must be '1' for the led3_blink_on field to be
28737 	 * configured.
28738 	 */
28739 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_BLINK_ON \
28740 		UINT32_C(0x200000)
28741 	/*
28742 	 * This bit must be '1' for the led3_blink_off field to be
28743 	 * configured.
28744 	 */
28745 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_BLINK_OFF \
28746 		UINT32_C(0x400000)
28747 	/*
28748 	 * This bit must be '1' for the led3_group_id field to be
28749 	 * configured.
28750 	 */
28751 	#define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_GROUP_ID \
28752 		UINT32_C(0x800000)
28753 	/* Port ID of port whose LEDs are configured. */
28754 	uint16_t	port_id;
28755 	/*
28756 	 * The number of LEDs that are being configured.
28757 	 * Up to 4 LEDs can be configured with this command.
28758 	 */
28759 	uint8_t	num_leds;
28760 	/* Reserved field. */
28761 	uint8_t	rsvd;
28762 	/* An identifier for the LED #0. */
28763 	uint8_t	led0_id;
28764 	/* The requested state of the LED #0. */
28765 	uint8_t	led0_state;
28766 	/* Default state of the LED */
28767 	#define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_DEFAULT  UINT32_C(0x0)
28768 	/* Off */
28769 	#define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_OFF      UINT32_C(0x1)
28770 	/* On */
28771 	#define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_ON       UINT32_C(0x2)
28772 	/* Blink */
28773 	#define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_BLINK    UINT32_C(0x3)
28774 	/* Blink Alternately */
28775 	#define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_BLINKALT UINT32_C(0x4)
28776 	#define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_LAST \
28777 		HWRM_PORT_LED_CFG_INPUT_LED0_STATE_BLINKALT
28778 	/* The requested color of LED #0. */
28779 	uint8_t	led0_color;
28780 	/* Default */
28781 	#define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_DEFAULT    UINT32_C(0x0)
28782 	/* Amber */
28783 	#define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_AMBER      UINT32_C(0x1)
28784 	/* Green */
28785 	#define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_GREEN      UINT32_C(0x2)
28786 	/* Green or Amber */
28787 	#define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_GREENAMBER UINT32_C(0x3)
28788 	#define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_LAST \
28789 		HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_GREENAMBER
28790 	uint8_t	unused_0;
28791 	/*
28792 	 * If the LED #0 state is "blink" or "blinkalt", then
28793 	 * this field represents the requested time in milliseconds
28794 	 * to keep LED on between cycles.
28795 	 */
28796 	uint16_t	led0_blink_on;
28797 	/*
28798 	 * If the LED #0 state is "blink" or "blinkalt", then
28799 	 * this field represents the requested time in milliseconds
28800 	 * to keep LED off between cycles.
28801 	 */
28802 	uint16_t	led0_blink_off;
28803 	/*
28804 	 * An identifier for the group of LEDs that LED #0 belongs
28805 	 * to.
28806 	 * If set to 0, then the LED #0 shall not be grouped and
28807 	 * shall be treated as an individual resource.
28808 	 * For all other non-zero values of this field, LED #0 shall
28809 	 * be grouped together with the LEDs with the same group ID
28810 	 * value.
28811 	 */
28812 	uint8_t	led0_group_id;
28813 	/* Reserved field. */
28814 	uint8_t	rsvd0;
28815 	/* An identifier for the LED #1. */
28816 	uint8_t	led1_id;
28817 	/* The requested state of the LED #1. */
28818 	uint8_t	led1_state;
28819 	/* Default state of the LED */
28820 	#define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_DEFAULT  UINT32_C(0x0)
28821 	/* Off */
28822 	#define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_OFF      UINT32_C(0x1)
28823 	/* On */
28824 	#define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_ON       UINT32_C(0x2)
28825 	/* Blink */
28826 	#define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_BLINK    UINT32_C(0x3)
28827 	/* Blink Alternately */
28828 	#define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_BLINKALT UINT32_C(0x4)
28829 	#define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_LAST \
28830 		HWRM_PORT_LED_CFG_INPUT_LED1_STATE_BLINKALT
28831 	/* The requested color of LED #1. */
28832 	uint8_t	led1_color;
28833 	/* Default */
28834 	#define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_DEFAULT    UINT32_C(0x0)
28835 	/* Amber */
28836 	#define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_AMBER      UINT32_C(0x1)
28837 	/* Green */
28838 	#define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_GREEN      UINT32_C(0x2)
28839 	/* Green or Amber */
28840 	#define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_GREENAMBER UINT32_C(0x3)
28841 	#define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_LAST \
28842 		HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_GREENAMBER
28843 	uint8_t	unused_1;
28844 	/*
28845 	 * If the LED #1 state is "blink" or "blinkalt", then
28846 	 * this field represents the requested time in milliseconds
28847 	 * to keep LED on between cycles.
28848 	 */
28849 	uint16_t	led1_blink_on;
28850 	/*
28851 	 * If the LED #1 state is "blink" or "blinkalt", then
28852 	 * this field represents the requested time in milliseconds
28853 	 * to keep LED off between cycles.
28854 	 */
28855 	uint16_t	led1_blink_off;
28856 	/*
28857 	 * An identifier for the group of LEDs that LED #1 belongs
28858 	 * to.
28859 	 * If set to 0, then the LED #1 shall not be grouped and
28860 	 * shall be treated as an individual resource.
28861 	 * For all other non-zero values of this field, LED #1 shall
28862 	 * be grouped together with the LEDs with the same group ID
28863 	 * value.
28864 	 */
28865 	uint8_t	led1_group_id;
28866 	/* Reserved field. */
28867 	uint8_t	rsvd1;
28868 	/* An identifier for the LED #2. */
28869 	uint8_t	led2_id;
28870 	/* The requested state of the LED #2. */
28871 	uint8_t	led2_state;
28872 	/* Default state of the LED */
28873 	#define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_DEFAULT  UINT32_C(0x0)
28874 	/* Off */
28875 	#define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_OFF      UINT32_C(0x1)
28876 	/* On */
28877 	#define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_ON       UINT32_C(0x2)
28878 	/* Blink */
28879 	#define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_BLINK    UINT32_C(0x3)
28880 	/* Blink Alternately */
28881 	#define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_BLINKALT UINT32_C(0x4)
28882 	#define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_LAST \
28883 		HWRM_PORT_LED_CFG_INPUT_LED2_STATE_BLINKALT
28884 	/* The requested color of LED #2. */
28885 	uint8_t	led2_color;
28886 	/* Default */
28887 	#define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_DEFAULT    UINT32_C(0x0)
28888 	/* Amber */
28889 	#define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_AMBER      UINT32_C(0x1)
28890 	/* Green */
28891 	#define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_GREEN      UINT32_C(0x2)
28892 	/* Green or Amber */
28893 	#define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_GREENAMBER UINT32_C(0x3)
28894 	#define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_LAST \
28895 		HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_GREENAMBER
28896 	uint8_t	unused_2;
28897 	/*
28898 	 * If the LED #2 state is "blink" or "blinkalt", then
28899 	 * this field represents the requested time in milliseconds
28900 	 * to keep LED on between cycles.
28901 	 */
28902 	uint16_t	led2_blink_on;
28903 	/*
28904 	 * If the LED #2 state is "blink" or "blinkalt", then
28905 	 * this field represents the requested time in milliseconds
28906 	 * to keep LED off between cycles.
28907 	 */
28908 	uint16_t	led2_blink_off;
28909 	/*
28910 	 * An identifier for the group of LEDs that LED #2 belongs
28911 	 * to.
28912 	 * If set to 0, then the LED #2 shall not be grouped and
28913 	 * shall be treated as an individual resource.
28914 	 * For all other non-zero values of this field, LED #2 shall
28915 	 * be grouped together with the LEDs with the same group ID
28916 	 * value.
28917 	 */
28918 	uint8_t	led2_group_id;
28919 	/* Reserved field. */
28920 	uint8_t	rsvd2;
28921 	/* An identifier for the LED #3. */
28922 	uint8_t	led3_id;
28923 	/* The requested state of the LED #3. */
28924 	uint8_t	led3_state;
28925 	/* Default state of the LED */
28926 	#define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_DEFAULT  UINT32_C(0x0)
28927 	/* Off */
28928 	#define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_OFF      UINT32_C(0x1)
28929 	/* On */
28930 	#define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_ON       UINT32_C(0x2)
28931 	/* Blink */
28932 	#define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_BLINK    UINT32_C(0x3)
28933 	/* Blink Alternately */
28934 	#define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_BLINKALT UINT32_C(0x4)
28935 	#define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_LAST \
28936 		HWRM_PORT_LED_CFG_INPUT_LED3_STATE_BLINKALT
28937 	/* The requested color of LED #3. */
28938 	uint8_t	led3_color;
28939 	/* Default */
28940 	#define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_DEFAULT    UINT32_C(0x0)
28941 	/* Amber */
28942 	#define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_AMBER      UINT32_C(0x1)
28943 	/* Green */
28944 	#define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_GREEN      UINT32_C(0x2)
28945 	/* Green or Amber */
28946 	#define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_GREENAMBER UINT32_C(0x3)
28947 	#define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_LAST \
28948 		HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_GREENAMBER
28949 	uint8_t	unused_3;
28950 	/*
28951 	 * If the LED #3 state is "blink" or "blinkalt", then
28952 	 * this field represents the requested time in milliseconds
28953 	 * to keep LED on between cycles.
28954 	 */
28955 	uint16_t	led3_blink_on;
28956 	/*
28957 	 * If the LED #3 state is "blink" or "blinkalt", then
28958 	 * this field represents the requested time in milliseconds
28959 	 * to keep LED off between cycles.
28960 	 */
28961 	uint16_t	led3_blink_off;
28962 	/*
28963 	 * An identifier for the group of LEDs that LED #3 belongs
28964 	 * to.
28965 	 * If set to 0, then the LED #3 shall not be grouped and
28966 	 * shall be treated as an individual resource.
28967 	 * For all other non-zero values of this field, LED #3 shall
28968 	 * be grouped together with the LEDs with the same group ID
28969 	 * value.
28970 	 */
28971 	uint8_t	led3_group_id;
28972 	/* Reserved field. */
28973 	uint8_t	rsvd3;
28974 } __rte_packed;
28975 
28976 /* hwrm_port_led_cfg_output (size:128b/16B) */
28977 struct hwrm_port_led_cfg_output {
28978 	/* The specific error status for the command. */
28979 	uint16_t	error_code;
28980 	/* The HWRM command request type. */
28981 	uint16_t	req_type;
28982 	/* The sequence ID from the original command. */
28983 	uint16_t	seq_id;
28984 	/* The length of the response data in number of bytes. */
28985 	uint16_t	resp_len;
28986 	uint8_t	unused_0[7];
28987 	/*
28988 	 * This field is used in Output records to indicate that the output
28989 	 * is completely written to RAM.  This field should be read as '1'
28990 	 * to indicate that the output has been completely written.
28991 	 * When writing a command completion or response to an internal processor,
28992 	 * the order of writes has to be such that this field is written last.
28993 	 */
28994 	uint8_t	valid;
28995 } __rte_packed;
28996 
28997 /**********************
28998  * hwrm_port_led_qcfg *
28999  **********************/
29000 
29001 
29002 /* hwrm_port_led_qcfg_input (size:192b/24B) */
29003 struct hwrm_port_led_qcfg_input {
29004 	/* The HWRM command request type. */
29005 	uint16_t	req_type;
29006 	/*
29007 	 * The completion ring to send the completion event on. This should
29008 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
29009 	 */
29010 	uint16_t	cmpl_ring;
29011 	/*
29012 	 * The sequence ID is used by the driver for tracking multiple
29013 	 * commands. This ID is treated as opaque data by the firmware and
29014 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
29015 	 */
29016 	uint16_t	seq_id;
29017 	/*
29018 	 * The target ID of the command:
29019 	 * * 0x0-0xFFF8 - The function ID
29020 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
29021 	 * * 0xFFFD - Reserved for user-space HWRM interface
29022 	 * * 0xFFFF - HWRM
29023 	 */
29024 	uint16_t	target_id;
29025 	/*
29026 	 * A physical address pointer pointing to a host buffer that the
29027 	 * command's response data will be written. This can be either a host
29028 	 * physical address (HPA) or a guest physical address (GPA) and must
29029 	 * point to a physically contiguous block of memory.
29030 	 */
29031 	uint64_t	resp_addr;
29032 	/* Port ID of port whose LED configuration is being queried. */
29033 	uint16_t	port_id;
29034 	uint8_t	unused_0[6];
29035 } __rte_packed;
29036 
29037 /* hwrm_port_led_qcfg_output (size:448b/56B) */
29038 struct hwrm_port_led_qcfg_output {
29039 	/* The specific error status for the command. */
29040 	uint16_t	error_code;
29041 	/* The HWRM command request type. */
29042 	uint16_t	req_type;
29043 	/* The sequence ID from the original command. */
29044 	uint16_t	seq_id;
29045 	/* The length of the response data in number of bytes. */
29046 	uint16_t	resp_len;
29047 	/*
29048 	 * The number of LEDs that are configured on this port.
29049 	 * Up to 4 LEDs can be returned in the response.
29050 	 */
29051 	uint8_t	num_leds;
29052 	/* An identifier for the LED #0. */
29053 	uint8_t	led0_id;
29054 	/* The type of LED #0. */
29055 	uint8_t	led0_type;
29056 	/* Speed LED */
29057 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_SPEED    UINT32_C(0x0)
29058 	/* Activity LED */
29059 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_ACTIVITY UINT32_C(0x1)
29060 	/* Invalid */
29061 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_INVALID  UINT32_C(0xff)
29062 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_LAST \
29063 		HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_INVALID
29064 	/* The current state of the LED #0. */
29065 	uint8_t	led0_state;
29066 	/* Default state of the LED */
29067 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_DEFAULT  UINT32_C(0x0)
29068 	/* Off */
29069 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_OFF      UINT32_C(0x1)
29070 	/* On */
29071 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_ON       UINT32_C(0x2)
29072 	/* Blink */
29073 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_BLINK    UINT32_C(0x3)
29074 	/* Blink Alternately */
29075 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_BLINKALT UINT32_C(0x4)
29076 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_LAST \
29077 		HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_BLINKALT
29078 	/* The color of LED #0. */
29079 	uint8_t	led0_color;
29080 	/* Default */
29081 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_DEFAULT    UINT32_C(0x0)
29082 	/* Amber */
29083 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_AMBER      UINT32_C(0x1)
29084 	/* Green */
29085 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_GREEN      UINT32_C(0x2)
29086 	/* Green or Amber */
29087 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_GREENAMBER UINT32_C(0x3)
29088 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_LAST \
29089 		HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_GREENAMBER
29090 	uint8_t	unused_0;
29091 	/*
29092 	 * If the LED #0 state is "blink" or "blinkalt", then
29093 	 * this field represents the requested time in milliseconds
29094 	 * to keep LED on between cycles.
29095 	 */
29096 	uint16_t	led0_blink_on;
29097 	/*
29098 	 * If the LED #0 state is "blink" or "blinkalt", then
29099 	 * this field represents the requested time in milliseconds
29100 	 * to keep LED off between cycles.
29101 	 */
29102 	uint16_t	led0_blink_off;
29103 	/*
29104 	 * An identifier for the group of LEDs that LED #0 belongs
29105 	 * to.
29106 	 * If set to 0, then the LED #0 is not grouped.
29107 	 * For all other non-zero values of this field, LED #0 is
29108 	 * grouped together with the LEDs with the same group ID
29109 	 * value.
29110 	 */
29111 	uint8_t	led0_group_id;
29112 	/* An identifier for the LED #1. */
29113 	uint8_t	led1_id;
29114 	/* The type of LED #1. */
29115 	uint8_t	led1_type;
29116 	/* Speed LED */
29117 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_SPEED    UINT32_C(0x0)
29118 	/* Activity LED */
29119 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_ACTIVITY UINT32_C(0x1)
29120 	/* Invalid */
29121 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_INVALID  UINT32_C(0xff)
29122 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_LAST \
29123 		HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_INVALID
29124 	/* The current state of the LED #1. */
29125 	uint8_t	led1_state;
29126 	/* Default state of the LED */
29127 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_DEFAULT  UINT32_C(0x0)
29128 	/* Off */
29129 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_OFF      UINT32_C(0x1)
29130 	/* On */
29131 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_ON       UINT32_C(0x2)
29132 	/* Blink */
29133 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_BLINK    UINT32_C(0x3)
29134 	/* Blink Alternately */
29135 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_BLINKALT UINT32_C(0x4)
29136 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_LAST \
29137 		HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_BLINKALT
29138 	/* The color of LED #1. */
29139 	uint8_t	led1_color;
29140 	/* Default */
29141 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_DEFAULT    UINT32_C(0x0)
29142 	/* Amber */
29143 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_AMBER      UINT32_C(0x1)
29144 	/* Green */
29145 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_GREEN      UINT32_C(0x2)
29146 	/* Green or Amber */
29147 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_GREENAMBER UINT32_C(0x3)
29148 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_LAST \
29149 		HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_GREENAMBER
29150 	uint8_t	unused_1;
29151 	/*
29152 	 * If the LED #1 state is "blink" or "blinkalt", then
29153 	 * this field represents the requested time in milliseconds
29154 	 * to keep LED on between cycles.
29155 	 */
29156 	uint16_t	led1_blink_on;
29157 	/*
29158 	 * If the LED #1 state is "blink" or "blinkalt", then
29159 	 * this field represents the requested time in milliseconds
29160 	 * to keep LED off between cycles.
29161 	 */
29162 	uint16_t	led1_blink_off;
29163 	/*
29164 	 * An identifier for the group of LEDs that LED #1 belongs
29165 	 * to.
29166 	 * If set to 0, then the LED #1 is not grouped.
29167 	 * For all other non-zero values of this field, LED #1 is
29168 	 * grouped together with the LEDs with the same group ID
29169 	 * value.
29170 	 */
29171 	uint8_t	led1_group_id;
29172 	/* An identifier for the LED #2. */
29173 	uint8_t	led2_id;
29174 	/* The type of LED #2. */
29175 	uint8_t	led2_type;
29176 	/* Speed LED */
29177 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_SPEED    UINT32_C(0x0)
29178 	/* Activity LED */
29179 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_ACTIVITY UINT32_C(0x1)
29180 	/* Invalid */
29181 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_INVALID  UINT32_C(0xff)
29182 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_LAST \
29183 		HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_INVALID
29184 	/* The current state of the LED #2. */
29185 	uint8_t	led2_state;
29186 	/* Default state of the LED */
29187 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_DEFAULT  UINT32_C(0x0)
29188 	/* Off */
29189 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_OFF      UINT32_C(0x1)
29190 	/* On */
29191 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_ON       UINT32_C(0x2)
29192 	/* Blink */
29193 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_BLINK    UINT32_C(0x3)
29194 	/* Blink Alternately */
29195 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_BLINKALT UINT32_C(0x4)
29196 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_LAST \
29197 		HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_BLINKALT
29198 	/* The color of LED #2. */
29199 	uint8_t	led2_color;
29200 	/* Default */
29201 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_DEFAULT    UINT32_C(0x0)
29202 	/* Amber */
29203 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_AMBER      UINT32_C(0x1)
29204 	/* Green */
29205 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_GREEN      UINT32_C(0x2)
29206 	/* Green or Amber */
29207 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_GREENAMBER UINT32_C(0x3)
29208 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_LAST \
29209 		HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_GREENAMBER
29210 	uint8_t	unused_2;
29211 	/*
29212 	 * If the LED #2 state is "blink" or "blinkalt", then
29213 	 * this field represents the requested time in milliseconds
29214 	 * to keep LED on between cycles.
29215 	 */
29216 	uint16_t	led2_blink_on;
29217 	/*
29218 	 * If the LED #2 state is "blink" or "blinkalt", then
29219 	 * this field represents the requested time in milliseconds
29220 	 * to keep LED off between cycles.
29221 	 */
29222 	uint16_t	led2_blink_off;
29223 	/*
29224 	 * An identifier for the group of LEDs that LED #2 belongs
29225 	 * to.
29226 	 * If set to 0, then the LED #2 is not grouped.
29227 	 * For all other non-zero values of this field, LED #2 is
29228 	 * grouped together with the LEDs with the same group ID
29229 	 * value.
29230 	 */
29231 	uint8_t	led2_group_id;
29232 	/* An identifier for the LED #3. */
29233 	uint8_t	led3_id;
29234 	/* The type of LED #3. */
29235 	uint8_t	led3_type;
29236 	/* Speed LED */
29237 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_SPEED    UINT32_C(0x0)
29238 	/* Activity LED */
29239 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_ACTIVITY UINT32_C(0x1)
29240 	/* Invalid */
29241 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_INVALID  UINT32_C(0xff)
29242 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_LAST \
29243 		HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_INVALID
29244 	/* The current state of the LED #3. */
29245 	uint8_t	led3_state;
29246 	/* Default state of the LED */
29247 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_DEFAULT  UINT32_C(0x0)
29248 	/* Off */
29249 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_OFF      UINT32_C(0x1)
29250 	/* On */
29251 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_ON       UINT32_C(0x2)
29252 	/* Blink */
29253 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_BLINK    UINT32_C(0x3)
29254 	/* Blink Alternately */
29255 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_BLINKALT UINT32_C(0x4)
29256 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_LAST \
29257 		HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_BLINKALT
29258 	/* The color of LED #3. */
29259 	uint8_t	led3_color;
29260 	/* Default */
29261 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_DEFAULT    UINT32_C(0x0)
29262 	/* Amber */
29263 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_AMBER      UINT32_C(0x1)
29264 	/* Green */
29265 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_GREEN      UINT32_C(0x2)
29266 	/* Green or Amber */
29267 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_GREENAMBER UINT32_C(0x3)
29268 	#define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_LAST \
29269 		HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_GREENAMBER
29270 	uint8_t	unused_3;
29271 	/*
29272 	 * If the LED #3 state is "blink" or "blinkalt", then
29273 	 * this field represents the requested time in milliseconds
29274 	 * to keep LED on between cycles.
29275 	 */
29276 	uint16_t	led3_blink_on;
29277 	/*
29278 	 * If the LED #3 state is "blink" or "blinkalt", then
29279 	 * this field represents the requested time in milliseconds
29280 	 * to keep LED off between cycles.
29281 	 */
29282 	uint16_t	led3_blink_off;
29283 	/*
29284 	 * An identifier for the group of LEDs that LED #3 belongs
29285 	 * to.
29286 	 * If set to 0, then the LED #3 is not grouped.
29287 	 * For all other non-zero values of this field, LED #3 is
29288 	 * grouped together with the LEDs with the same group ID
29289 	 * value.
29290 	 */
29291 	uint8_t	led3_group_id;
29292 	uint8_t	unused_4[6];
29293 	/*
29294 	 * This field is used in Output records to indicate that the output
29295 	 * is completely written to RAM.  This field should be read as '1'
29296 	 * to indicate that the output has been completely written.
29297 	 * When writing a command completion or response to an internal processor,
29298 	 * the order of writes has to be such that this field is written last.
29299 	 */
29300 	uint8_t	valid;
29301 } __rte_packed;
29302 
29303 /***********************
29304  * hwrm_port_led_qcaps *
29305  ***********************/
29306 
29307 
29308 /* hwrm_port_led_qcaps_input (size:192b/24B) */
29309 struct hwrm_port_led_qcaps_input {
29310 	/* The HWRM command request type. */
29311 	uint16_t	req_type;
29312 	/*
29313 	 * The completion ring to send the completion event on. This should
29314 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
29315 	 */
29316 	uint16_t	cmpl_ring;
29317 	/*
29318 	 * The sequence ID is used by the driver for tracking multiple
29319 	 * commands. This ID is treated as opaque data by the firmware and
29320 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
29321 	 */
29322 	uint16_t	seq_id;
29323 	/*
29324 	 * The target ID of the command:
29325 	 * * 0x0-0xFFF8 - The function ID
29326 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
29327 	 * * 0xFFFD - Reserved for user-space HWRM interface
29328 	 * * 0xFFFF - HWRM
29329 	 */
29330 	uint16_t	target_id;
29331 	/*
29332 	 * A physical address pointer pointing to a host buffer that the
29333 	 * command's response data will be written. This can be either a host
29334 	 * physical address (HPA) or a guest physical address (GPA) and must
29335 	 * point to a physically contiguous block of memory.
29336 	 */
29337 	uint64_t	resp_addr;
29338 	/* Port ID of port whose LED configuration is being queried. */
29339 	uint16_t	port_id;
29340 	uint8_t	unused_0[6];
29341 } __rte_packed;
29342 
29343 /* hwrm_port_led_qcaps_output (size:384b/48B) */
29344 struct hwrm_port_led_qcaps_output {
29345 	/* The specific error status for the command. */
29346 	uint16_t	error_code;
29347 	/* The HWRM command request type. */
29348 	uint16_t	req_type;
29349 	/* The sequence ID from the original command. */
29350 	uint16_t	seq_id;
29351 	/* The length of the response data in number of bytes. */
29352 	uint16_t	resp_len;
29353 	/*
29354 	 * The number of LEDs that are configured on this port.
29355 	 * Up to 4 LEDs can be returned in the response.
29356 	 */
29357 	uint8_t	num_leds;
29358 	/* Reserved for future use. */
29359 	uint8_t	unused[3];
29360 	/* An identifier for the LED #0. */
29361 	uint8_t	led0_id;
29362 	/* The type of LED #0. */
29363 	uint8_t	led0_type;
29364 	/* Speed LED */
29365 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_SPEED    UINT32_C(0x0)
29366 	/* Activity LED */
29367 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_ACTIVITY UINT32_C(0x1)
29368 	/* Invalid */
29369 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_INVALID  UINT32_C(0xff)
29370 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_LAST \
29371 		HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_INVALID
29372 	/*
29373 	 * An identifier for the group of LEDs that LED #0 belongs
29374 	 * to.
29375 	 * If set to 0, then the LED #0 cannot be grouped.
29376 	 * For all other non-zero values of this field, LED #0 is
29377 	 * grouped together with the LEDs with the same group ID
29378 	 * value.
29379 	 */
29380 	uint8_t	led0_group_id;
29381 	uint8_t	unused_0;
29382 	/* The states supported by LED #0. */
29383 	uint16_t	led0_state_caps;
29384 	/*
29385 	 * If set to 1, this LED is enabled.
29386 	 * If set to 0, this LED is disabled.
29387 	 */
29388 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_ENABLED \
29389 		UINT32_C(0x1)
29390 	/*
29391 	 * If set to 1, off state is supported on this LED.
29392 	 * If set to 0, off state is not supported on this LED.
29393 	 */
29394 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_OFF_SUPPORTED \
29395 		UINT32_C(0x2)
29396 	/*
29397 	 * If set to 1, on state is supported on this LED.
29398 	 * If set to 0, on state is not supported on this LED.
29399 	 */
29400 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_ON_SUPPORTED \
29401 		UINT32_C(0x4)
29402 	/*
29403 	 * If set to 1, blink state is supported on this LED.
29404 	 * If set to 0, blink state is not supported on this LED.
29405 	 */
29406 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_BLINK_SUPPORTED \
29407 		UINT32_C(0x8)
29408 	/*
29409 	 * If set to 1, blink_alt state is supported on this LED.
29410 	 * If set to 0, blink_alt state is not supported on this LED.
29411 	 */
29412 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_BLINK_ALT_SUPPORTED \
29413 		UINT32_C(0x10)
29414 	/* The colors supported by LED #0. */
29415 	uint16_t	led0_color_caps;
29416 	/* reserved. */
29417 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_COLOR_CAPS_RSVD \
29418 		UINT32_C(0x1)
29419 	/*
29420 	 * If set to 1, Amber color is supported on this LED.
29421 	 * If set to 0, Amber color is not supported on this LED.
29422 	 */
29423 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_COLOR_CAPS_AMBER_SUPPORTED \
29424 		UINT32_C(0x2)
29425 	/*
29426 	 * If set to 1, Green color is supported on this LED.
29427 	 * If set to 0, Green color is not supported on this LED.
29428 	 */
29429 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_COLOR_CAPS_GREEN_SUPPORTED \
29430 		UINT32_C(0x4)
29431 	/* An identifier for the LED #1. */
29432 	uint8_t	led1_id;
29433 	/* The type of LED #1. */
29434 	uint8_t	led1_type;
29435 	/* Speed LED */
29436 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_SPEED    UINT32_C(0x0)
29437 	/* Activity LED */
29438 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_ACTIVITY UINT32_C(0x1)
29439 	/* Invalid */
29440 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_INVALID  UINT32_C(0xff)
29441 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_LAST \
29442 		HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_INVALID
29443 	/*
29444 	 * An identifier for the group of LEDs that LED #1 belongs
29445 	 * to.
29446 	 * If set to 0, then the LED #0 cannot be grouped.
29447 	 * For all other non-zero values of this field, LED #0 is
29448 	 * grouped together with the LEDs with the same group ID
29449 	 * value.
29450 	 */
29451 	uint8_t	led1_group_id;
29452 	uint8_t	unused_1;
29453 	/* The states supported by LED #1. */
29454 	uint16_t	led1_state_caps;
29455 	/*
29456 	 * If set to 1, this LED is enabled.
29457 	 * If set to 0, this LED is disabled.
29458 	 */
29459 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_ENABLED \
29460 		UINT32_C(0x1)
29461 	/*
29462 	 * If set to 1, off state is supported on this LED.
29463 	 * If set to 0, off state is not supported on this LED.
29464 	 */
29465 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_OFF_SUPPORTED \
29466 		UINT32_C(0x2)
29467 	/*
29468 	 * If set to 1, on state is supported on this LED.
29469 	 * If set to 0, on state is not supported on this LED.
29470 	 */
29471 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_ON_SUPPORTED \
29472 		UINT32_C(0x4)
29473 	/*
29474 	 * If set to 1, blink state is supported on this LED.
29475 	 * If set to 0, blink state is not supported on this LED.
29476 	 */
29477 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_BLINK_SUPPORTED \
29478 		UINT32_C(0x8)
29479 	/*
29480 	 * If set to 1, blink_alt state is supported on this LED.
29481 	 * If set to 0, blink_alt state is not supported on this LED.
29482 	 */
29483 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_BLINK_ALT_SUPPORTED \
29484 		UINT32_C(0x10)
29485 	/* The colors supported by LED #1. */
29486 	uint16_t	led1_color_caps;
29487 	/* reserved. */
29488 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_COLOR_CAPS_RSVD \
29489 		UINT32_C(0x1)
29490 	/*
29491 	 * If set to 1, Amber color is supported on this LED.
29492 	 * If set to 0, Amber color is not supported on this LED.
29493 	 */
29494 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_COLOR_CAPS_AMBER_SUPPORTED \
29495 		UINT32_C(0x2)
29496 	/*
29497 	 * If set to 1, Green color is supported on this LED.
29498 	 * If set to 0, Green color is not supported on this LED.
29499 	 */
29500 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_COLOR_CAPS_GREEN_SUPPORTED \
29501 		UINT32_C(0x4)
29502 	/* An identifier for the LED #2. */
29503 	uint8_t	led2_id;
29504 	/* The type of LED #2. */
29505 	uint8_t	led2_type;
29506 	/* Speed LED */
29507 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_SPEED    UINT32_C(0x0)
29508 	/* Activity LED */
29509 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_ACTIVITY UINT32_C(0x1)
29510 	/* Invalid */
29511 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_INVALID  UINT32_C(0xff)
29512 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_LAST \
29513 		HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_INVALID
29514 	/*
29515 	 * An identifier for the group of LEDs that LED #0 belongs
29516 	 * to.
29517 	 * If set to 0, then the LED #0 cannot be grouped.
29518 	 * For all other non-zero values of this field, LED #0 is
29519 	 * grouped together with the LEDs with the same group ID
29520 	 * value.
29521 	 */
29522 	uint8_t	led2_group_id;
29523 	uint8_t	unused_2;
29524 	/* The states supported by LED #2. */
29525 	uint16_t	led2_state_caps;
29526 	/*
29527 	 * If set to 1, this LED is enabled.
29528 	 * If set to 0, this LED is disabled.
29529 	 */
29530 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_ENABLED \
29531 		UINT32_C(0x1)
29532 	/*
29533 	 * If set to 1, off state is supported on this LED.
29534 	 * If set to 0, off state is not supported on this LED.
29535 	 */
29536 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_OFF_SUPPORTED \
29537 		UINT32_C(0x2)
29538 	/*
29539 	 * If set to 1, on state is supported on this LED.
29540 	 * If set to 0, on state is not supported on this LED.
29541 	 */
29542 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_ON_SUPPORTED \
29543 		UINT32_C(0x4)
29544 	/*
29545 	 * If set to 1, blink state is supported on this LED.
29546 	 * If set to 0, blink state is not supported on this LED.
29547 	 */
29548 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_BLINK_SUPPORTED \
29549 		UINT32_C(0x8)
29550 	/*
29551 	 * If set to 1, blink_alt state is supported on this LED.
29552 	 * If set to 0, blink_alt state is not supported on this LED.
29553 	 */
29554 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_BLINK_ALT_SUPPORTED \
29555 		UINT32_C(0x10)
29556 	/* The colors supported by LED #2. */
29557 	uint16_t	led2_color_caps;
29558 	/* reserved. */
29559 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_COLOR_CAPS_RSVD \
29560 		UINT32_C(0x1)
29561 	/*
29562 	 * If set to 1, Amber color is supported on this LED.
29563 	 * If set to 0, Amber color is not supported on this LED.
29564 	 */
29565 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_COLOR_CAPS_AMBER_SUPPORTED \
29566 		UINT32_C(0x2)
29567 	/*
29568 	 * If set to 1, Green color is supported on this LED.
29569 	 * If set to 0, Green color is not supported on this LED.
29570 	 */
29571 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_COLOR_CAPS_GREEN_SUPPORTED \
29572 		UINT32_C(0x4)
29573 	/* An identifier for the LED #3. */
29574 	uint8_t	led3_id;
29575 	/* The type of LED #3. */
29576 	uint8_t	led3_type;
29577 	/* Speed LED */
29578 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_SPEED    UINT32_C(0x0)
29579 	/* Activity LED */
29580 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_ACTIVITY UINT32_C(0x1)
29581 	/* Invalid */
29582 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_INVALID  UINT32_C(0xff)
29583 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_LAST \
29584 		HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_INVALID
29585 	/*
29586 	 * An identifier for the group of LEDs that LED #3 belongs
29587 	 * to.
29588 	 * If set to 0, then the LED #0 cannot be grouped.
29589 	 * For all other non-zero values of this field, LED #0 is
29590 	 * grouped together with the LEDs with the same group ID
29591 	 * value.
29592 	 */
29593 	uint8_t	led3_group_id;
29594 	uint8_t	unused_3;
29595 	/* The states supported by LED #3. */
29596 	uint16_t	led3_state_caps;
29597 	/*
29598 	 * If set to 1, this LED is enabled.
29599 	 * If set to 0, this LED is disabled.
29600 	 */
29601 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_ENABLED \
29602 		UINT32_C(0x1)
29603 	/*
29604 	 * If set to 1, off state is supported on this LED.
29605 	 * If set to 0, off state is not supported on this LED.
29606 	 */
29607 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_OFF_SUPPORTED \
29608 		UINT32_C(0x2)
29609 	/*
29610 	 * If set to 1, on state is supported on this LED.
29611 	 * If set to 0, on state is not supported on this LED.
29612 	 */
29613 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_ON_SUPPORTED \
29614 		UINT32_C(0x4)
29615 	/*
29616 	 * If set to 1, blink state is supported on this LED.
29617 	 * If set to 0, blink state is not supported on this LED.
29618 	 */
29619 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_BLINK_SUPPORTED \
29620 		UINT32_C(0x8)
29621 	/*
29622 	 * If set to 1, blink_alt state is supported on this LED.
29623 	 * If set to 0, blink_alt state is not supported on this LED.
29624 	 */
29625 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_BLINK_ALT_SUPPORTED \
29626 		UINT32_C(0x10)
29627 	/* The colors supported by LED #3. */
29628 	uint16_t	led3_color_caps;
29629 	/* reserved. */
29630 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_COLOR_CAPS_RSVD \
29631 		UINT32_C(0x1)
29632 	/*
29633 	 * If set to 1, Amber color is supported on this LED.
29634 	 * If set to 0, Amber color is not supported on this LED.
29635 	 */
29636 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_COLOR_CAPS_AMBER_SUPPORTED \
29637 		UINT32_C(0x2)
29638 	/*
29639 	 * If set to 1, Green color is supported on this LED.
29640 	 * If set to 0, Green color is not supported on this LED.
29641 	 */
29642 	#define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_COLOR_CAPS_GREEN_SUPPORTED \
29643 		UINT32_C(0x4)
29644 	uint8_t	unused_4[3];
29645 	/*
29646 	 * This field is used in Output records to indicate that the output
29647 	 * is completely written to RAM.  This field should be read as '1'
29648 	 * to indicate that the output has been completely written.
29649 	 * When writing a command completion or response to an internal processor,
29650 	 * the order of writes has to be such that this field is written last.
29651 	 */
29652 	uint8_t	valid;
29653 } __rte_packed;
29654 
29655 /***********************
29656  * hwrm_port_prbs_test *
29657  ***********************/
29658 
29659 
29660 /* hwrm_port_prbs_test_input (size:384b/48B) */
29661 struct hwrm_port_prbs_test_input {
29662 	/* The HWRM command request type. */
29663 	uint16_t	req_type;
29664 	/*
29665 	 * The completion ring to send the completion event on. This should
29666 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
29667 	 */
29668 	uint16_t	cmpl_ring;
29669 	/*
29670 	 * The sequence ID is used by the driver for tracking multiple
29671 	 * commands. This ID is treated as opaque data by the firmware and
29672 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
29673 	 */
29674 	uint16_t	seq_id;
29675 	/*
29676 	 * The target ID of the command:
29677 	 * * 0x0-0xFFF8 - The function ID
29678 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
29679 	 * * 0xFFFD - Reserved for user-space HWRM interface
29680 	 * * 0xFFFF - HWRM
29681 	 */
29682 	uint16_t	target_id;
29683 	/*
29684 	 * A physical address pointer pointing to a host buffer that the
29685 	 * command's response data will be written. This can be either a host
29686 	 * physical address (HPA) or a guest physical address (GPA) and must
29687 	 * point to a physically contiguous block of memory.
29688 	 */
29689 	uint64_t	resp_addr;
29690 	/* Host address data is to DMA'd to. */
29691 	uint64_t	resp_data_addr;
29692 	/*
29693 	 * Size of the buffer pointed to by resp_data_addr. The firmware may
29694 	 * use this entire buffer or less than the entire buffer, but never more.
29695 	 */
29696 	uint16_t	data_len;
29697 	uint16_t	flags;
29698 	/*
29699 	 * If set, the port_id field should be interpreted as an internal
29700 	 * port. The internal port id range is returned in port_phy_qcaps
29701 	 * response internal_port_cnt field.
29702 	 */
29703 	#define HWRM_PORT_PRBS_TEST_INPUT_FLAGS_INTERNAL     UINT32_C(0x1)
29704 	uint32_t	unused_1;
29705 	/* Port ID of port where PRBS test to be run. */
29706 	uint16_t	port_id;
29707 	/* Polynomial selection for PRBS test. */
29708 	uint16_t	poly;
29709 	/* PRBS7 */
29710 	#define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS7   UINT32_C(0x0)
29711 	/* PRBS9 */
29712 	#define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS9   UINT32_C(0x1)
29713 	/* PRBS11 */
29714 	#define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS11  UINT32_C(0x2)
29715 	/* PRBS15 */
29716 	#define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS15  UINT32_C(0x3)
29717 	/* PRBS23 */
29718 	#define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS23  UINT32_C(0x4)
29719 	/* PRBS31 */
29720 	#define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS31  UINT32_C(0x5)
29721 	/* PRBS58 */
29722 	#define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS58  UINT32_C(0x6)
29723 	/* Invalid */
29724 	#define HWRM_PORT_PRBS_TEST_INPUT_POLY_INVALID UINT32_C(0xff)
29725 	#define HWRM_PORT_PRBS_TEST_INPUT_POLY_LAST \
29726 		HWRM_PORT_PRBS_TEST_INPUT_POLY_INVALID
29727 	/*
29728 	 * Configuration bits for PRBS test.
29729 	 * Use enable bit to start/stop test.
29730 	 * Use tx/rx lane map bits to run test on specific lanes,
29731 	 * if set to 0 test will be run on all lanes.
29732 	 */
29733 	uint16_t	prbs_config;
29734 	/*
29735 	 * Set 0 to stop test currently in progress
29736 	 * Set 1 to start test with configuration provided.
29737 	 */
29738 	#define HWRM_PORT_PRBS_TEST_INPUT_PRBS_CONFIG_START_STOP \
29739 		UINT32_C(0x1)
29740 	/*
29741 	 * If set to 1, tx_lane_map bitmap should have lane bits set.
29742 	 * If set to 0, test will be run on all lanes for this port.
29743 	 */
29744 	#define HWRM_PORT_PRBS_TEST_INPUT_PRBS_CONFIG_TX_LANE_MAP_VALID \
29745 		UINT32_C(0x2)
29746 	/*
29747 	 * If set to 1, rx_lane_map bitmap should have lane bits set.
29748 	 * If set to 0, test will be run on all lanes for this port.
29749 	 */
29750 	#define HWRM_PORT_PRBS_TEST_INPUT_PRBS_CONFIG_RX_LANE_MAP_VALID \
29751 		UINT32_C(0x4)
29752 	/* Duration in seconds to run the PRBS test. */
29753 	uint16_t	timeout;
29754 	/*
29755 	 * If tx_lane_map_valid is set to 1, this field is a bitmap
29756 	 * of tx lanes to run PRBS test. bit0 = lane0,
29757 	 * bit1 = lane1 ..bit31 = lane31
29758 	 */
29759 	uint32_t	tx_lane_map;
29760 	/*
29761 	 * If rx_lane_map_valid is set to 1, this field is a bitmap
29762 	 * of rx lanes to run PRBS test. bit0 = lane0,
29763 	 * bit1 = lane1 ..bit31 = lane31
29764 	 */
29765 	uint32_t	rx_lane_map;
29766 } __rte_packed;
29767 
29768 /* hwrm_port_prbs_test_output (size:128b/16B) */
29769 struct hwrm_port_prbs_test_output {
29770 	/* The specific error status for the command. */
29771 	uint16_t	error_code;
29772 	/* The HWRM command request type. */
29773 	uint16_t	req_type;
29774 	/* The sequence ID from the original command. */
29775 	uint16_t	seq_id;
29776 	/* The length of the response data in number of bytes. */
29777 	uint16_t	resp_len;
29778 	/* Total length of stored data. */
29779 	uint16_t	total_data_len;
29780 	uint16_t	unused_0;
29781 	uint8_t	unused_1[3];
29782 	/*
29783 	 * This field is used in Output records to indicate that the output
29784 	 * is completely written to RAM.  This field should be read as '1'
29785 	 * to indicate that the output has been completely written.
29786 	 * When writing a command completion or response to an internal processor,
29787 	 * the order of writes has to be such that this field is written last.
29788 	 */
29789 	uint8_t	valid;
29790 } __rte_packed;
29791 
29792 /**********************
29793  * hwrm_port_dsc_dump *
29794  **********************/
29795 
29796 
29797 /* hwrm_port_dsc_dump_input (size:320b/40B) */
29798 struct hwrm_port_dsc_dump_input {
29799 	/* The HWRM command request type. */
29800 	uint16_t	req_type;
29801 	/*
29802 	 * The completion ring to send the completion event on. This should
29803 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
29804 	 */
29805 	uint16_t	cmpl_ring;
29806 	/*
29807 	 * The sequence ID is used by the driver for tracking multiple
29808 	 * commands. This ID is treated as opaque data by the firmware and
29809 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
29810 	 */
29811 	uint16_t	seq_id;
29812 	/*
29813 	 * The target ID of the command:
29814 	 * * 0x0-0xFFF8 - The function ID
29815 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
29816 	 * * 0xFFFD - Reserved for user-space HWRM interface
29817 	 * * 0xFFFF - HWRM
29818 	 */
29819 	uint16_t	target_id;
29820 	/*
29821 	 * A physical address pointer pointing to a host buffer that the
29822 	 * command's response data will be written. This can be either a host
29823 	 * physical address (HPA) or a guest physical address (GPA) and must
29824 	 * point to a physically contiguous block of memory.
29825 	 */
29826 	uint64_t	resp_addr;
29827 	/* Host address where response diagnostic data is returned. */
29828 	uint64_t	resp_data_addr;
29829 	/*
29830 	 * Size of the buffer pointed to by resp_data_addr. The firmware
29831 	 * may use this entire buffer or less than the entire buffer, but
29832 	 * never more.
29833 	 */
29834 	uint16_t	data_len;
29835 	uint16_t	unused_0;
29836 	uint32_t	unused_1;
29837 	/* Port ID of port where dsc dump to be collected. */
29838 	uint16_t	port_id;
29839 	/* Diag level specified by the user */
29840 	uint16_t	diag_level;
29841 	/* SRDS_DIAG_LANE */
29842 	#define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_LANE \
29843 		UINT32_C(0x0)
29844 	/* SRDS_DIAG_CORE */
29845 	#define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_CORE \
29846 		UINT32_C(0x1)
29847 	/* SRDS_DIAG_EVENT */
29848 	#define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_EVENT \
29849 		UINT32_C(0x2)
29850 	/* SRDS_DIAG_EYE */
29851 	#define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_EYE \
29852 		UINT32_C(0x3)
29853 	/* SRDS_DIAG_REG_CORE */
29854 	#define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_REG_CORE \
29855 		UINT32_C(0x4)
29856 	/* SRDS_DIAG_REG_LANE */
29857 	#define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_REG_LANE \
29858 		UINT32_C(0x5)
29859 	/* SRDS_DIAG_UC_CORE */
29860 	#define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_UC_CORE \
29861 		UINT32_C(0x6)
29862 	/* SRDS_DIAG_UC_LANE */
29863 	#define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_UC_LANE \
29864 		UINT32_C(0x7)
29865 	/* SRDS_DIAG_LANE_DEBUG */
29866 	#define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_LANE_DEBUG \
29867 		UINT32_C(0x8)
29868 	/* SRDS_DIAG_BER_VERT */
29869 	#define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_BER_VERT \
29870 		UINT32_C(0x9)
29871 	/* SRDS_DIAG_BER_HORZ */
29872 	#define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_BER_HORZ \
29873 		UINT32_C(0xa)
29874 	/* SRDS_DIAG_EVENT_SAFE */
29875 	#define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_EVENT_SAFE \
29876 		UINT32_C(0xb)
29877 	/* SRDS_DIAG_TIMESTAMP */
29878 	#define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_TIMESTAMP \
29879 		UINT32_C(0xc)
29880 	#define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_LAST \
29881 		HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_TIMESTAMP
29882 	/*
29883 	 * This field is a lane number
29884 	 * on which to collect the dsc dump
29885 	 */
29886 	uint16_t	lane_number;
29887 	/*
29888 	 * Configuration bits.
29889 	 * Use enable bit to start dsc dump or retrieve dump
29890 	 */
29891 	uint16_t	dsc_dump_config;
29892 	/*
29893 	 * Set 0 to retrieve the dsc dump
29894 	 * Set 1 to start the dsc dump
29895 	 */
29896 	#define HWRM_PORT_DSC_DUMP_INPUT_DSC_DUMP_CONFIG_START_RETRIEVE \
29897 		UINT32_C(0x1)
29898 } __rte_packed;
29899 
29900 /* hwrm_port_dsc_dump_output (size:128b/16B) */
29901 struct hwrm_port_dsc_dump_output {
29902 	/* The specific error status for the command. */
29903 	uint16_t	error_code;
29904 	/* The HWRM command request type. */
29905 	uint16_t	req_type;
29906 	/* The sequence ID from the original command. */
29907 	uint16_t	seq_id;
29908 	/* The length of the response data in number of bytes. */
29909 	uint16_t	resp_len;
29910 	/* Total length of stored data. */
29911 	uint16_t	total_data_len;
29912 	uint16_t	unused_0;
29913 	uint8_t	unused_1[3];
29914 	/*
29915 	 * This field is used in Output records to indicate that the output
29916 	 * is completely written to RAM.  This field should be read as '1'
29917 	 * to indicate that the output has been completely written.
29918 	 * When writing a command completion or response to an internal processor,
29919 	 * the order of writes has to be such that this field is written last.
29920 	 */
29921 	uint8_t	valid;
29922 } __rte_packed;
29923 
29924 /******************************
29925  * hwrm_port_sfp_sideband_cfg *
29926  ******************************/
29927 
29928 
29929 /* hwrm_port_sfp_sideband_cfg_input (size:256b/32B) */
29930 struct hwrm_port_sfp_sideband_cfg_input {
29931 	/* The HWRM command request type. */
29932 	uint16_t	req_type;
29933 	/*
29934 	 * The completion ring to send the completion event on. This should
29935 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
29936 	 */
29937 	uint16_t	cmpl_ring;
29938 	/*
29939 	 * The sequence ID is used by the driver for tracking multiple
29940 	 * commands. This ID is treated as opaque data by the firmware and
29941 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
29942 	 */
29943 	uint16_t	seq_id;
29944 	/*
29945 	 * The target ID of the command:
29946 	 * * 0x0-0xFFF8 - The function ID
29947 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
29948 	 * * 0xFFFD - Reserved for user-space HWRM interface
29949 	 * * 0xFFFF - HWRM
29950 	 */
29951 	uint16_t	target_id;
29952 	/*
29953 	 * A physical address pointer pointing to a host buffer that the
29954 	 * command's response data will be written. This can be either a host
29955 	 * physical address (HPA) or a guest physical address (GPA) and must
29956 	 * point to a physically contiguous block of memory.
29957 	 */
29958 	uint64_t	resp_addr;
29959 	/* Port ID of port that is to be queried. */
29960 	uint16_t	port_id;
29961 	uint8_t	unused_0[6];
29962 	/*
29963 	 * This bitfield is used to specify which bits from the 'flags'
29964 	 * fields are being configured by the caller.
29965 	 */
29966 	uint32_t	enables;
29967 	/* This bit must be '1' for rs0 to be configured. */
29968 	#define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_ENABLES_RS0 \
29969 		UINT32_C(0x1)
29970 	/* This bit must be '1' for rs1 to be configured. */
29971 	#define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_ENABLES_RS1 \
29972 		UINT32_C(0x2)
29973 	/* This bit must be '1' for tx_disable to be configured. */
29974 	#define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_ENABLES_TX_DIS \
29975 		UINT32_C(0x4)
29976 	/*
29977 	 * This bit must be '1' for mod_sel to be configured.
29978 	 * Valid only on QSFP modules
29979 	 */
29980 	#define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_ENABLES_MOD_SEL \
29981 		UINT32_C(0x8)
29982 	/* This bit must be '1' for reset_l to be configured. */
29983 	#define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_ENABLES_RESET_L \
29984 		UINT32_C(0x10)
29985 	/* This bit must be '1' for lp_mode to be configured. */
29986 	#define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_ENABLES_LP_MODE \
29987 		UINT32_C(0x20)
29988 	/* This bit must be '1' for pwr_disable to be configured. */
29989 	#define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_ENABLES_PWR_DIS \
29990 		UINT32_C(0x40)
29991 	/*
29992 	 * Only bits that have corresponding bits in the 'enables'
29993 	 * bitfield are processed by the firmware, all other bits
29994 	 * of 'flags' are ignored.
29995 	 */
29996 	uint32_t	flags;
29997 	/*
29998 	 * This bit along with rs1 configures the current speed of the dual
29999 	 * rate module. If these pins are GNDed then the speed can be changed
30000 	 * by directly writing to EEPROM.
30001 	 */
30002 	#define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_FLAGS_RS0 \
30003 		UINT32_C(0x1)
30004 	/*
30005 	 * This bit along with rs0 configures the current speed of the dual
30006 	 * rate module. If these pins are GNDed then the speed can be changed
30007 	 * by directly writing to EEPROM.
30008 	 */
30009 	#define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_FLAGS_RS1 \
30010 		UINT32_C(0x2)
30011 	/*
30012 	 * When this bit is set to '1', tx_disable is set.
30013 	 * On a 1G BASE-T module, if this bit is set,
30014 	 * module PHY registers will not be accessible.
30015 	 */
30016 	#define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_FLAGS_TX_DIS \
30017 		UINT32_C(0x4)
30018 	/*
30019 	 * When this bit is set to '1', this module is selected.
30020 	 * Valid only on QSFP modules
30021 	 */
30022 	#define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_FLAGS_MOD_SEL \
30023 		UINT32_C(0x8)
30024 	/*
30025 	 * If reset_l is set to 0, Module will be taken out of reset
30026 	 * and other signals will be set to their requested state once
30027 	 * the module is out of reset.
30028 	 * Valid only on QSFP modules
30029 	 */
30030 	#define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_FLAGS_RESET_L \
30031 		UINT32_C(0x10)
30032 	/*
30033 	 * When this bit is set to '1', the module will be configured
30034 	 * in low power mode.
30035 	 * Valid only on QSFP modules
30036 	 */
30037 	#define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_FLAGS_LP_MODE \
30038 		UINT32_C(0x20)
30039 	/* When this bit is set to '1', the module will be powered down. */
30040 	#define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_FLAGS_PWR_DIS \
30041 		UINT32_C(0x40)
30042 } __rte_packed;
30043 
30044 /* hwrm_port_sfp_sideband_cfg_output (size:128b/16B) */
30045 struct hwrm_port_sfp_sideband_cfg_output {
30046 	/* The specific error status for the command. */
30047 	uint16_t	error_code;
30048 	/* The HWRM command request type. */
30049 	uint16_t	req_type;
30050 	/* The sequence ID from the original command. */
30051 	uint16_t	seq_id;
30052 	/* The length of the response data in number of bytes. */
30053 	uint16_t	resp_len;
30054 	uint8_t	unused[7];
30055 	/*
30056 	 * This field is used in Output records to indicate that the output
30057 	 * is completely written to RAM.  This field should be read as '1'
30058 	 * to indicate that the output has been completely written. When
30059 	 * writing a command completion or response to an internal processor,
30060 	 * the order of writes has to be such that this field is written last.
30061 	 */
30062 	uint8_t	valid;
30063 } __rte_packed;
30064 
30065 /*******************************
30066  * hwrm_port_sfp_sideband_qcfg *
30067  *******************************/
30068 
30069 
30070 /* hwrm_port_sfp_sideband_qcfg_input (size:192b/24B) */
30071 struct hwrm_port_sfp_sideband_qcfg_input {
30072 	/* The HWRM command request type. */
30073 	uint16_t	req_type;
30074 	/*
30075 	 * The completion ring to send the completion event on. This should
30076 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
30077 	 */
30078 	uint16_t	cmpl_ring;
30079 	/*
30080 	 * The sequence ID is used by the driver for tracking multiple
30081 	 * commands. This ID is treated as opaque data by the firmware and
30082 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
30083 	 */
30084 	uint16_t	seq_id;
30085 	/*
30086 	 * The target ID of the command:
30087 	 * * 0x0-0xFFF8 - The function ID
30088 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30089 	 * * 0xFFFD - Reserved for user-space HWRM interface
30090 	 * * 0xFFFF - HWRM
30091 	 */
30092 	uint16_t	target_id;
30093 	/*
30094 	 * A physical address pointer pointing to a host buffer that the
30095 	 * command's response data will be written. This can be either a host
30096 	 * physical address (HPA) or a guest physical address (GPA) and must
30097 	 * point to a physically contiguous block of memory.
30098 	 */
30099 	uint64_t	resp_addr;
30100 	/* Port ID of port that is to be queried. */
30101 	uint16_t	port_id;
30102 	uint8_t	unused_0[6];
30103 } __rte_packed;
30104 
30105 /* hwrm_port_sfp_sideband_qcfg_output (size:192b/24B) */
30106 struct hwrm_port_sfp_sideband_qcfg_output {
30107 	/* The specific error status for the command. */
30108 	uint16_t	error_code;
30109 	/* The HWRM command request type. */
30110 	uint16_t	req_type;
30111 	/* The sequence ID from the original command. */
30112 	uint16_t	seq_id;
30113 	/* The length of the response data in number of bytes. */
30114 	uint16_t	resp_len;
30115 	/*
30116 	 * Bitmask indicating which sideband signals are valid.
30117 	 * This is based on the board and nvm cfg that is present on the board.
30118 	 */
30119 	uint32_t	supported_mask;
30120 	uint32_t	sideband_signals;
30121 	/* When this bit is set to '1', the Module is absent. */
30122 	#define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_MOD_ABS \
30123 		UINT32_C(0x1)
30124 	/*
30125 	 * When this bit is set to '1', there is no valid signal on RX.
30126 	 * This signal is a filtered version of Signal Detect.
30127 	 */
30128 	#define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_RX_LOS \
30129 		UINT32_C(0x2)
30130 	/*
30131 	 * This bit along with rs1 indicates the current speed of the dual
30132 	 * rate module.If these pins are grounded then the speed can be
30133 	 * changed by directly writing to EEPROM.
30134 	 */
30135 	#define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_RS0 \
30136 		UINT32_C(0x4)
30137 	/*
30138 	 * This bit along with rs0 indicates the current speed of the dual
30139 	 * rate module.If these pins are grounded then the speed can be
30140 	 * changed by directly writing to EEPROM.
30141 	 */
30142 	#define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_RS1 \
30143 		UINT32_C(0x8)
30144 	/*
30145 	 * When this bit is set to '1', tx_disable is set.
30146 	 * On a 1G BASE-T module, if this bit is set, module PHY
30147 	 * registers will not be accessible.
30148 	 */
30149 	#define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_TX_DIS \
30150 		UINT32_C(0x10)
30151 	/* When this bit is set to '1', tx_fault is set. */
30152 	#define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_TX_FAULT \
30153 		UINT32_C(0x20)
30154 	/*
30155 	 * When this bit is set to '1', module is selected.
30156 	 * Valid only on QSFP modules
30157 	 */
30158 	#define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_MOD_SEL \
30159 		UINT32_C(0x40)
30160 	/*
30161 	 * When this bit is set to '0', the module is held in reset.
30162 	 * if reset_l is set to 1,first module is taken out of reset
30163 	 * and other signals will be set to their requested state.
30164 	 * Valid only on QSFP modules.
30165 	 */
30166 	#define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_RESET_L \
30167 		UINT32_C(0x80)
30168 	/*
30169 	 * When this bit is set to '1', the module is in low power mode.
30170 	 * Valid only on QSFP modules
30171 	 */
30172 	#define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_LP_MODE \
30173 		UINT32_C(0x100)
30174 	/* When this bit is set to '1', module is in power down state. */
30175 	#define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_PWR_DIS \
30176 		UINT32_C(0x200)
30177 	uint8_t	unused[7];
30178 	/*
30179 	 * This field is used in Output records to indicate that the output
30180 	 * is completely written to RAM.  This field should be read as '1'
30181 	 * to indicate that the output has been completely written. When
30182 	 * writing a command completion or response to an internal processor,
30183 	 * the order of writes has to be such that this field is written last.
30184 	 */
30185 	uint8_t	valid;
30186 } __rte_packed;
30187 
30188 /**********************************
30189  * hwrm_port_phy_mdio_bus_acquire *
30190  **********************************/
30191 
30192 
30193 /* hwrm_port_phy_mdio_bus_acquire_input (size:192b/24B) */
30194 struct hwrm_port_phy_mdio_bus_acquire_input {
30195 	/* The HWRM command request type. */
30196 	uint16_t	req_type;
30197 	/*
30198 	 * The completion ring to send the completion event on. This should
30199 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
30200 	 */
30201 	uint16_t	cmpl_ring;
30202 	/*
30203 	 * The sequence ID is used by the driver for tracking multiple
30204 	 * commands. This ID is treated as opaque data by the firmware and
30205 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
30206 	 */
30207 	uint16_t	seq_id;
30208 	/*
30209 	 * The target ID of the command:
30210 	 * * 0x0-0xFFF8 - The function ID
30211 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30212 	 * * 0xFFFD - Reserved for user-space HWRM interface
30213 	 * * 0xFFFF - HWRM
30214 	 */
30215 	uint16_t	target_id;
30216 	/*
30217 	 * A physical address pointer pointing to a host buffer that the
30218 	 * command's response data will be written. This can be either a host
30219 	 * physical address (HPA) or a guest physical address (GPA) and must
30220 	 * point to a physically contiguous block of memory.
30221 	 */
30222 	uint64_t	resp_addr;
30223 	/* Port ID of the port. */
30224 	uint16_t	port_id;
30225 	/*
30226 	 * client_id of the client requesting BUS access.
30227 	 * Any value from 0x10 to 0xFFFF can be used.
30228 	 * Client should make sure that the returned client_id
30229 	 * in response matches the client_id in request.
30230 	 * 0-0xF are reserved for internal use.
30231 	 */
30232 	uint16_t	client_id;
30233 	/*
30234 	 * Timeout in milli seconds, MDIO BUS will be released automatically
30235 	 * after this time, if another mdio acquire command is not received
30236 	 * within the timeout window from the same client.
30237 	 * A 0xFFFF will hold the bus until this bus is released.
30238 	 */
30239 	uint16_t	mdio_bus_timeout;
30240 	uint8_t	unused_0[2];
30241 } __rte_packed;
30242 
30243 /* hwrm_port_phy_mdio_bus_acquire_output (size:128b/16B) */
30244 struct hwrm_port_phy_mdio_bus_acquire_output {
30245 	/* The specific error status for the command. */
30246 	uint16_t	error_code;
30247 	/* The HWRM command request type. */
30248 	uint16_t	req_type;
30249 	/* The sequence ID from the original command. */
30250 	uint16_t	seq_id;
30251 	/* The length of the response data in number of bytes. */
30252 	uint16_t	resp_len;
30253 	uint16_t	unused_0;
30254 	/*
30255 	 * client_id of the module holding the BUS.
30256 	 * 0-0xF are reserved for internal use.
30257 	 */
30258 	uint16_t	client_id;
30259 	uint8_t	unused_1[3];
30260 	/*
30261 	 * This field is used in Output records to indicate that the output
30262 	 * is completely written to RAM.  This field should be read as '1'
30263 	 * to indicate that the output has been completely written.
30264 	 * When writing a command completion or response to an internal processor,
30265 	 * the order of writes has to be such that this field is written last.
30266 	 */
30267 	uint8_t	valid;
30268 } __rte_packed;
30269 
30270 /**********************************
30271  * hwrm_port_phy_mdio_bus_release *
30272  **********************************/
30273 
30274 
30275 /* hwrm_port_phy_mdio_bus_release_input (size:192b/24B) */
30276 struct hwrm_port_phy_mdio_bus_release_input {
30277 	/* The HWRM command request type. */
30278 	uint16_t	req_type;
30279 	/*
30280 	 * The completion ring to send the completion event on. This should
30281 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
30282 	 */
30283 	uint16_t	cmpl_ring;
30284 	/*
30285 	 * The sequence ID is used by the driver for tracking multiple
30286 	 * commands. This ID is treated as opaque data by the firmware and
30287 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
30288 	 */
30289 	uint16_t	seq_id;
30290 	/*
30291 	 * The target ID of the command:
30292 	 * * 0x0-0xFFF8 - The function ID
30293 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30294 	 * * 0xFFFD - Reserved for user-space HWRM interface
30295 	 * * 0xFFFF - HWRM
30296 	 */
30297 	uint16_t	target_id;
30298 	/*
30299 	 * A physical address pointer pointing to a host buffer that the
30300 	 * command's response data will be written. This can be either a host
30301 	 * physical address (HPA) or a guest physical address (GPA) and must
30302 	 * point to a physically contiguous block of memory.
30303 	 */
30304 	uint64_t	resp_addr;
30305 	/* Port ID of the port. */
30306 	uint16_t	port_id;
30307 	/*
30308 	 * client_id of the client requesting BUS release.
30309 	 * A client should not release any other clients BUS.
30310 	 */
30311 	uint16_t	client_id;
30312 	uint8_t	unused_0[4];
30313 } __rte_packed;
30314 
30315 /* hwrm_port_phy_mdio_bus_release_output (size:128b/16B) */
30316 struct hwrm_port_phy_mdio_bus_release_output {
30317 	/* The specific error status for the command. */
30318 	uint16_t	error_code;
30319 	/* The HWRM command request type. */
30320 	uint16_t	req_type;
30321 	/* The sequence ID from the original command. */
30322 	uint16_t	seq_id;
30323 	/* The length of the response data in number of bytes. */
30324 	uint16_t	resp_len;
30325 	uint16_t	unused_0;
30326 	/* The BUS is released if client_id matches the client_id in request. */
30327 	uint16_t	clients_id;
30328 	uint8_t	unused_1[3];
30329 	/*
30330 	 * This field is used in Output records to indicate that the output
30331 	 * is completely written to RAM.  This field should be read as '1'
30332 	 * to indicate that the output has been completely written.
30333 	 * When writing a command completion or response to an internal processor,
30334 	 * the order of writes has to be such that this field is written last.
30335 	 */
30336 	uint8_t	valid;
30337 } __rte_packed;
30338 
30339 /************************
30340  * hwrm_port_tx_fir_cfg *
30341  ************************/
30342 
30343 
30344 /* hwrm_port_tx_fir_cfg_input (size:320b/40B) */
30345 struct hwrm_port_tx_fir_cfg_input {
30346 	/* The HWRM command request type. */
30347 	uint16_t	req_type;
30348 	/*
30349 	 * The completion ring to send the completion event on. This should
30350 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
30351 	 */
30352 	uint16_t	cmpl_ring;
30353 	/*
30354 	 * The sequence ID is used by the driver for tracking multiple
30355 	 * commands. This ID is treated as opaque data by the firmware and
30356 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
30357 	 */
30358 	uint16_t	seq_id;
30359 	/*
30360 	 * The target ID of the command:
30361 	 * * 0x0-0xFFF8 - The function ID
30362 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30363 	 * * 0xFFFD - Reserved for user-space HWRM interface
30364 	 * * 0xFFFF - HWRM
30365 	 */
30366 	uint16_t	target_id;
30367 	/*
30368 	 * A physical address pointer pointing to a host buffer that the
30369 	 * command's response data will be written. This can be either a host
30370 	 * physical address (HPA) or a guest physical address (GPA) and must
30371 	 * point to a physically contiguous block of memory.
30372 	 */
30373 	uint64_t	resp_addr;
30374 	/* Modulation types of TX FIR: NRZ, PAM4. */
30375 	uint8_t	mod_type;
30376 	/* For NRZ */
30377 	#define HWRM_PORT_TX_FIR_CFG_INPUT_MOD_TYPE_NRZ  UINT32_C(0x0)
30378 	/* For PAM4 */
30379 	#define HWRM_PORT_TX_FIR_CFG_INPUT_MOD_TYPE_PAM4 UINT32_C(0x1)
30380 	#define HWRM_PORT_TX_FIR_CFG_INPUT_MOD_TYPE_LAST \
30381 		HWRM_PORT_TX_FIR_CFG_INPUT_MOD_TYPE_PAM4
30382 	/* The lane mask of the lane TX FIR will be configured. */
30383 	uint8_t	lane_mask;
30384 	uint8_t	unused_0[2];
30385 	/* Value1 of TX FIR, required for NRZ or PAM4. */
30386 	uint32_t	txfir_val_1;
30387 	/* Value2 of TX FIR, required for NRZ or PAM4. */
30388 	uint32_t	txfir_val_2;
30389 	/* Value3 of TX FIR, required for PAM4. */
30390 	uint32_t	txfir_val_3;
30391 	/* Value4 of TX FIR, required for PAM4. */
30392 	uint32_t	txfir_val_4;
30393 	uint8_t	unused_1[4];
30394 } __rte_packed;
30395 
30396 /* hwrm_port_tx_fir_cfg_output (size:128b/16B) */
30397 struct hwrm_port_tx_fir_cfg_output {
30398 	/* The specific error status for the command. */
30399 	uint16_t	error_code;
30400 	/* The HWRM command request type. */
30401 	uint16_t	req_type;
30402 	/* The sequence ID from the original command. */
30403 	uint16_t	seq_id;
30404 	/* The length of the response data in number of bytes. */
30405 	uint16_t	resp_len;
30406 	uint8_t	unused[7];
30407 	/*
30408 	 * This field is used in Output records to indicate that the output
30409 	 * is completely written to RAM.  This field should be read as '1'
30410 	 * to indicate that the output has been completely written.
30411 	 * When writing a command completion or response to an internal processor,
30412 	 * the order of writes has to be such that this field is written last.
30413 	 */
30414 	uint8_t	valid;
30415 } __rte_packed;
30416 
30417 /*************************
30418  * hwrm_port_tx_fir_qcfg *
30419  *************************/
30420 
30421 
30422 /* hwrm_port_tx_fir_qcfg_input (size:192b/24B) */
30423 struct hwrm_port_tx_fir_qcfg_input {
30424 	/* The HWRM command request type. */
30425 	uint16_t	req_type;
30426 	/*
30427 	 * The completion ring to send the completion event on. This should
30428 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
30429 	 */
30430 	uint16_t	cmpl_ring;
30431 	/*
30432 	 * The sequence ID is used by the driver for tracking multiple
30433 	 * commands. This ID is treated as opaque data by the firmware and
30434 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
30435 	 */
30436 	uint16_t	seq_id;
30437 	/*
30438 	 * The target ID of the command:
30439 	 * * 0x0-0xFFF8 - The function ID
30440 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30441 	 * * 0xFFFD - Reserved for user-space HWRM interface
30442 	 * * 0xFFFF - HWRM
30443 	 */
30444 	uint16_t	target_id;
30445 	/*
30446 	 * A physical address pointer pointing to a host buffer that the
30447 	 * command's response data will be written. This can be either a host
30448 	 * physical address (HPA) or a guest physical address (GPA) and must
30449 	 * point to a physically contiguous block of memory.
30450 	 */
30451 	uint64_t	resp_addr;
30452 	/* Modulation types of TX FIR: NRZ, PAM4. */
30453 	uint8_t	mod_type;
30454 	/* For NRZ */
30455 	#define HWRM_PORT_TX_FIR_QCFG_INPUT_MOD_TYPE_NRZ  UINT32_C(0x0)
30456 	/* For PAM4 */
30457 	#define HWRM_PORT_TX_FIR_QCFG_INPUT_MOD_TYPE_PAM4 UINT32_C(0x1)
30458 	#define HWRM_PORT_TX_FIR_QCFG_INPUT_MOD_TYPE_LAST \
30459 		HWRM_PORT_TX_FIR_QCFG_INPUT_MOD_TYPE_PAM4
30460 	/* The ID of the lane TX FIR will be queried. */
30461 	uint8_t	lane_id;
30462 	uint8_t	unused[6];
30463 } __rte_packed;
30464 
30465 /* hwrm_port_tx_fir_qcfg_output (size:256b/32B) */
30466 struct hwrm_port_tx_fir_qcfg_output {
30467 	/* The specific error status for the command. */
30468 	uint16_t	error_code;
30469 	/* The HWRM command request type. */
30470 	uint16_t	req_type;
30471 	/* The sequence ID from the original command. */
30472 	uint16_t	seq_id;
30473 	/* The length of the response data in number of bytes. */
30474 	uint16_t	resp_len;
30475 	/* Value1 of TX FIR, required for NRZ or PAM4. */
30476 	uint32_t	txfir_val_1;
30477 	/* Value2 of TX FIR, required for NRZ or PAM4. */
30478 	uint32_t	txfir_val_2;
30479 	/* Value3 of TX FIR, required for PAM4. */
30480 	uint32_t	txfir_val_3;
30481 	/* Value4 of TX FIR, required for PAM4. */
30482 	uint32_t	txfir_val_4;
30483 	uint8_t	unused[7];
30484 	/*
30485 	 * This field is used in Output records to indicate that the output
30486 	 * is completely written to RAM.  This field should be read as '1'
30487 	 * to indicate that the output has been completely written.
30488 	 * When writing a command completion or response to an internal processor,
30489 	 * the order of writes has to be such that this field is written last.
30490 	 */
30491 	uint8_t	valid;
30492 } __rte_packed;
30493 
30494 /***********************
30495  * hwrm_port_ep_tx_cfg *
30496  ***********************/
30497 
30498 
30499 /* hwrm_port_ep_tx_cfg_input (size:256b/32B) */
30500 struct hwrm_port_ep_tx_cfg_input {
30501 	/* The HWRM command request type. */
30502 	uint16_t	req_type;
30503 	/*
30504 	 * The completion ring to send the completion event on. This should
30505 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
30506 	 */
30507 	uint16_t	cmpl_ring;
30508 	/*
30509 	 * The sequence ID is used by the driver for tracking multiple
30510 	 * commands. This ID is treated as opaque data by the firmware and
30511 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
30512 	 */
30513 	uint16_t	seq_id;
30514 	/*
30515 	 * The target ID of the command:
30516 	 * * 0x0-0xFFF8 - The function ID
30517 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30518 	 * * 0xFFFD - Reserved for user-space HWRM interface
30519 	 * * 0xFFFF - HWRM
30520 	 */
30521 	uint16_t	target_id;
30522 	/*
30523 	 * A physical address pointer pointing to a host buffer that the
30524 	 * command's response data will be written. This can be either a host
30525 	 * physical address (HPA) or a guest physical address (GPA) and must
30526 	 * point to a physically contiguous block of memory.
30527 	 */
30528 	uint64_t	resp_addr;
30529 	uint16_t	enables;
30530 	/* When this bit is '1', the value in the ep0_min_bw field is valid. */
30531 	#define HWRM_PORT_EP_TX_CFG_INPUT_ENABLES_EP0_MIN_BW     UINT32_C(0x1)
30532 	/* When this bit is '1', the value in the ep0_max_bw field is valid. */
30533 	#define HWRM_PORT_EP_TX_CFG_INPUT_ENABLES_EP0_MAX_BW     UINT32_C(0x2)
30534 	/* When this bit is '1', the value in the ep1_min_bw field is valid. */
30535 	#define HWRM_PORT_EP_TX_CFG_INPUT_ENABLES_EP1_MIN_BW     UINT32_C(0x4)
30536 	/* When this bit is '1', the value in the ep1_max_bw field is valid. */
30537 	#define HWRM_PORT_EP_TX_CFG_INPUT_ENABLES_EP1_MAX_BW     UINT32_C(0x8)
30538 	/* When this bit is '1', the value in the ep2_min_bw field is valid. */
30539 	#define HWRM_PORT_EP_TX_CFG_INPUT_ENABLES_EP2_MIN_BW     UINT32_C(0x10)
30540 	/* When this bit is '1', the value in the ep2_max_bw field is valid. */
30541 	#define HWRM_PORT_EP_TX_CFG_INPUT_ENABLES_EP2_MAX_BW     UINT32_C(0x20)
30542 	/* When this bit is '1', the value in the ep3_min_bw field is valid. */
30543 	#define HWRM_PORT_EP_TX_CFG_INPUT_ENABLES_EP3_MIN_BW     UINT32_C(0x40)
30544 	/* When this bit is '1', the value in the ep3_max_bw field is valid. */
30545 	#define HWRM_PORT_EP_TX_CFG_INPUT_ENABLES_EP3_MAX_BW     UINT32_C(0x80)
30546 	/* A port index, from 0 to the number of front panel ports, minus 1. */
30547 	uint8_t	port_id;
30548 	uint8_t	unused;
30549 	/*
30550 	 * Specifies a minimum guaranteed bandwidth, as a percentage of the
30551 	 * port bandwidth, for the set of PFs and VFs on PCIe endpoint 0 for
30552 	 * the specified port. The range is 0 to 100. A value of 0 indicates no
30553 	 * minimum rate. The endpoint's min_bw must be less than or equal to
30554 	 * max_bw. The sum of all configured minimum bandwidths for a port must
30555 	 * be less than or equal to 100.
30556 	 */
30557 	uint8_t	ep0_min_bw;
30558 	/*
30559 	 * Specifies the maximum portion of the port's bandwidth that the set
30560 	 * of PFs and VFs on PCIe endpoint 0 may use. The value is a percentage
30561 	 * of the link bandwidth, from 0 to 100. A value of 0 indicates no
30562 	 * maximum rate.
30563 	 */
30564 	uint8_t	ep0_max_bw;
30565 	/*
30566 	 * Specifies a minimum guaranteed bandwidth, as a percentage of the
30567 	 * port bandwidth, for the set of PFs and VFs on PCIe endpoint 1 for
30568 	 * the specified port. The range is 0 to 100. A value of 0 indicates no
30569 	 * minimum rate. The endpoint's min_bw must be less than or equal to
30570 	 * max_bw. The sum of all configured minimum bandwidths for a port must
30571 	 * be less than or equal to 100.
30572 	 */
30573 	uint8_t	ep1_min_bw;
30574 	/*
30575 	 * Specifies the maximum portion of the port's bandwidth that the set
30576 	 * of PFs and VFs on PCIe endpoint 1 may use. The value is a percentage
30577 	 * of the link bandwidth, from 0 to 100. A value of 0 indicates no
30578 	 * maximum rate.
30579 	 */
30580 	uint8_t	ep1_max_bw;
30581 	/*
30582 	 * Specifies a minimum guaranteed bandwidth, as a percentage of the
30583 	 * port bandwidth, for the set of PFs and VFs on PCIe endpoint 2 for
30584 	 * the specified port. The range is 0 to 100. A value of 0 indicates no
30585 	 * minimum rate. The endpoint's min_bw must be less than or equal to
30586 	 * max_bw. The sum of all configured minimum bandwidths for a port must
30587 	 * be less than or equal to 100.
30588 	 */
30589 	uint8_t	ep2_min_bw;
30590 	/*
30591 	 * Specifies the maximum portion of the port's bandwidth that the set of
30592 	 * PFs and VFs on PCIe endpoint 2 may use. The value is a percentage of
30593 	 * the link bandwidth, from 0 to 100. A value of 0 indicates no
30594 	 * maximum rate.
30595 	 */
30596 	uint8_t	ep2_max_bw;
30597 	/*
30598 	 * Specifies a minimum guaranteed bandwidth, as a percentage of the
30599 	 * port bandwidth, for the set of PFs and VFs on PCIe endpoint 3 for
30600 	 * the specified port. The range is 0 to 100. A value of 0 indicates no
30601 	 * minimum rate. The endpoint's min_bw must be less than or equal to
30602 	 * max_bw. The sum of all configured minimum bandwidths for a port must
30603 	 * be less than or equal to 100.
30604 	 */
30605 	uint8_t	ep3_min_bw;
30606 	/*
30607 	 * Specifies the maximum portion of the port's bandwidth that the set
30608 	 * of PFs and VFs on PCIe endpoint 3 may use. The value is a percentage
30609 	 * of the link bandwidth, from 0 to 100. A value of 0 indicates no
30610 	 * maximum rate.
30611 	 */
30612 	uint8_t	ep3_max_bw;
30613 	uint8_t	unused_1[4];
30614 } __rte_packed;
30615 
30616 /* hwrm_port_ep_tx_cfg_output (size:128b/16B) */
30617 struct hwrm_port_ep_tx_cfg_output {
30618 	/* The specific error status for the command. */
30619 	uint16_t	error_code;
30620 	/* The HWRM command request type. */
30621 	uint16_t	req_type;
30622 	/* The sequence ID from the original command. */
30623 	uint16_t	seq_id;
30624 	/* The length of the response data in number of bytes. */
30625 	uint16_t	resp_len;
30626 	uint8_t	unused_0[7];
30627 	/*
30628 	 * This field is used in output records to indicate that the output
30629 	 * is completely written to RAM. This field should be read as '1'
30630 	 * to indicate that the output has been completely written.
30631 	 * When writing a command completion or response to an internal
30632 	 * processor, the order of writes has to be such that this field
30633 	 * is written last.
30634 	 */
30635 	uint8_t	valid;
30636 } __rte_packed;
30637 
30638 /* hwrm_port_ep_tx_cfg_cmd_err (size:64b/8B) */
30639 struct hwrm_port_ep_tx_cfg_cmd_err {
30640 	/*
30641 	 * command specific error codes for the cmd_err field in
30642 	 * hwrm_err_output
30643 	 */
30644 	uint8_t	code;
30645 	/* Unknown error. */
30646 	#define HWRM_PORT_EP_TX_CFG_CMD_ERR_CODE_UNKNOWN \
30647 		UINT32_C(0x0)
30648 	/* The port ID is invalid */
30649 	#define HWRM_PORT_EP_TX_CFG_CMD_ERR_CODE_PORT_ID_INVALID \
30650 		UINT32_C(0x1)
30651 	/* One of the PCIe endpoints configured is not active. */
30652 	#define HWRM_PORT_EP_TX_CFG_CMD_ERR_CODE_EP_INACTIVE \
30653 		UINT32_C(0x2)
30654 	/* A minimum bandwidth is out of range. */
30655 	#define HWRM_PORT_EP_TX_CFG_CMD_ERR_CODE_MIN_BW_RANGE \
30656 		UINT32_C(0x3)
30657 	/*
30658 	 * One endpoint's minimum bandwidth is more than its maximum
30659 	 * bandwidth.
30660 	 */
30661 	#define HWRM_PORT_EP_TX_CFG_CMD_ERR_CODE_MIN_MORE_THAN_MAX \
30662 		UINT32_C(0x4)
30663 	/* The sum of the minimum bandwidths on the port is more than 100%. */
30664 	#define HWRM_PORT_EP_TX_CFG_CMD_ERR_CODE_MIN_BW_SUM \
30665 		UINT32_C(0x5)
30666 	/*
30667 	 * The NIC does not support enforcement of a minimum guaranteed
30668 	 * bandwidth for an endpoint.
30669 	 */
30670 	#define HWRM_PORT_EP_TX_CFG_CMD_ERR_CODE_MIN_BW_UNSUPPORTED \
30671 		UINT32_C(0x6)
30672 	#define HWRM_PORT_EP_TX_CFG_CMD_ERR_CODE_LAST \
30673 		HWRM_PORT_EP_TX_CFG_CMD_ERR_CODE_MIN_BW_UNSUPPORTED
30674 	uint8_t	unused_0[7];
30675 } __rte_packed;
30676 
30677 /************************
30678  * hwrm_port_ep_tx_qcfg *
30679  ************************/
30680 
30681 
30682 /* hwrm_port_ep_tx_qcfg_input (size:192b/24B) */
30683 struct hwrm_port_ep_tx_qcfg_input {
30684 	/* The HWRM command request type. */
30685 	uint16_t	req_type;
30686 	/*
30687 	 * The completion ring to send the completion event on. This should
30688 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
30689 	 */
30690 	uint16_t	cmpl_ring;
30691 	/*
30692 	 * The sequence ID is used by the driver for tracking multiple
30693 	 * commands. This ID is treated as opaque data by the firmware and
30694 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
30695 	 */
30696 	uint16_t	seq_id;
30697 	/*
30698 	 * The target ID of the command:
30699 	 * * 0x0-0xFFF8 - The function ID
30700 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30701 	 * * 0xFFFD - Reserved for user-space HWRM interface
30702 	 * * 0xFFFF - HWRM
30703 	 */
30704 	uint16_t	target_id;
30705 	/*
30706 	 * A physical address pointer pointing to a host buffer that the
30707 	 * command's response data will be written. This can be either a host
30708 	 * physical address (HPA) or a guest physical address (GPA) and must
30709 	 * point to a physically contiguous block of memory.
30710 	 */
30711 	uint64_t	resp_addr;
30712 	/* The port whose endpoint rate limits are queried. */
30713 	uint8_t	port_id;
30714 	uint8_t	unused[7];
30715 } __rte_packed;
30716 
30717 /* hwrm_port_ep_tx_qcfg_output (size:192b/24B) */
30718 struct hwrm_port_ep_tx_qcfg_output {
30719 	/* The specific error status for the command. */
30720 	uint16_t	error_code;
30721 	/* The HWRM command request type. */
30722 	uint16_t	req_type;
30723 	/* The sequence ID from the original command. */
30724 	uint16_t	seq_id;
30725 	/* The length of the response data in number of bytes. */
30726 	uint16_t	resp_len;
30727 	/*
30728 	 * Specifies a minimum guaranteed bandwidth, as a percentage of the
30729 	 * port bandwidth, for the set of PFs and VFs on PCIe endpoint 0 for
30730 	 * the specified port. The range is 0 to 100. A value of 0 indicates no
30731 	 * minimum rate. The endpoint's min_bw must be less than or equal to
30732 	 * max_bw. The sum of all configured minimum bandwidths for a port must
30733 	 * be less than or equal to 100.
30734 	 */
30735 	uint8_t	ep0_min_bw;
30736 	/*
30737 	 * Specifies the maximum portion of the port's bandwidth that the set
30738 	 * of PFs and VFs on PCIe endpoint 0 may use. The value is a percentage
30739 	 * of the link bandwidth, from 0 to 100. A value of 0 indicates no
30740 	 * maximum rate.
30741 	 */
30742 	uint8_t	ep0_max_bw;
30743 	/*
30744 	 * Specifies a minimum guaranteed bandwidth, as a percentage of the
30745 	 * port bandwidth, for the set of PFs and VFs on PCIe endpoint 1 for
30746 	 * the specified port. The range is 0 to 100. A value of 0 indicates no
30747 	 * minimum rate. The endpoint's min_bw must be less than or equal to
30748 	 * max_bw. The sum of all configured minimum bandwidths for a port must
30749 	 * be less than or equal to 100.
30750 	 */
30751 	uint8_t	ep1_min_bw;
30752 	/*
30753 	 * Specifies the maximum portion of the port's bandwidth that the set
30754 	 * of PFs and VFs on PCIe endpoint 1 may use. The value is a percentage
30755 	 * of the link bandwidth, from 0 to 100. A value of 0 indicates no
30756 	 * maximum rate.
30757 	 */
30758 	uint8_t	ep1_max_bw;
30759 	/*
30760 	 * Specifies a minimum guaranteed bandwidth, as a percentage of the
30761 	 * port bandwidth, for the set of PFs and VFs on PCIe endpoint 2 for
30762 	 * the specified port. The range is 0 to 100. A value of 0 indicates no
30763 	 * minimum rate. The endpoint's min_bw must be less than or equal to
30764 	 * max_bw. The sum of all configured minimum bandwidths for a port must
30765 	 * be less than or equal to 100.
30766 	 */
30767 	uint8_t	ep2_min_bw;
30768 	/*
30769 	 * Specifies the maximum portion of the port's bandwidth that the set
30770 	 * of PFs and VFs on PCIe endpoint 2 may use. The value is a percentage
30771 	 * of the link bandwidth, from 0 to 100. A value of 0 indicates no
30772 	 * maximum rate.
30773 	 */
30774 	uint8_t	ep2_max_bw;
30775 	/*
30776 	 * Specifies a minimum guaranteed bandwidth, as a percentage of the
30777 	 * port bandwidth, for the set of PFs and VFs on PCIe endpoint 3 for
30778 	 * the specified port. The range is 0 to 100. A value of 0 indicates no
30779 	 * minimum rate. The endpoint's min_bw must be less than or equal to
30780 	 * max_bw. The sum of all configured minimum bandwidths for a port must
30781 	 * be less than or equal to 100.
30782 	 */
30783 	uint8_t	ep3_min_bw;
30784 	/*
30785 	 * Specifies the maximum portion of the port's bandwidth that the set
30786 	 * of PFs and VFs on PCIe endpoint 3 may use. The value is a percentage
30787 	 * of the link bandwidth, from 0 to 100. A value of 0 indicates no
30788 	 * maximum rate.
30789 	 */
30790 	uint8_t	ep3_max_bw;
30791 	uint8_t	unused_0[7];
30792 	/*
30793 	 * This field is used in output records to indicate that the output
30794 	 * is completely written to RAM. This field should be read as '1'
30795 	 * to indicate that the output has been completely written.
30796 	 * When writing a command completion or response to an internal
30797 	 * processor, the order of writes has to be such that this field is
30798 	 * written last.
30799 	 */
30800 	uint8_t	valid;
30801 } __rte_packed;
30802 
30803 /***********************
30804  * hwrm_queue_qportcfg *
30805  ***********************/
30806 
30807 
30808 /* hwrm_queue_qportcfg_input (size:192b/24B) */
30809 struct hwrm_queue_qportcfg_input {
30810 	/* The HWRM command request type. */
30811 	uint16_t	req_type;
30812 	/*
30813 	 * The completion ring to send the completion event on. This should
30814 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
30815 	 */
30816 	uint16_t	cmpl_ring;
30817 	/*
30818 	 * The sequence ID is used by the driver for tracking multiple
30819 	 * commands. This ID is treated as opaque data by the firmware and
30820 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
30821 	 */
30822 	uint16_t	seq_id;
30823 	/*
30824 	 * The target ID of the command:
30825 	 * * 0x0-0xFFF8 - The function ID
30826 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30827 	 * * 0xFFFD - Reserved for user-space HWRM interface
30828 	 * * 0xFFFF - HWRM
30829 	 */
30830 	uint16_t	target_id;
30831 	/*
30832 	 * A physical address pointer pointing to a host buffer that the
30833 	 * command's response data will be written. This can be either a host
30834 	 * physical address (HPA) or a guest physical address (GPA) and must
30835 	 * point to a physically contiguous block of memory.
30836 	 */
30837 	uint64_t	resp_addr;
30838 	uint32_t	flags;
30839 	/*
30840 	 * Enumeration denoting the RX, TX type of the resource.
30841 	 * This enumeration is used for resources that are similar for both
30842 	 * TX and RX paths of the chip.
30843 	 */
30844 	#define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH     UINT32_C(0x1)
30845 	/* tx path */
30846 	#define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)
30847 	/* rx path */
30848 	#define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)
30849 	#define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_LAST \
30850 		HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_RX
30851 	/*
30852 	 * Port ID of port for which the queue configuration is being
30853 	 * queried. This field is only required when sent by IPC.
30854 	 */
30855 	uint16_t	port_id;
30856 	/*
30857 	 * Drivers will set this capability when it can use
30858 	 * queue_idx_service_profile to map the queues to application.
30859 	 */
30860 	uint8_t	drv_qmap_cap;
30861 	/* disabled */
30862 	#define HWRM_QUEUE_QPORTCFG_INPUT_DRV_QMAP_CAP_DISABLED UINT32_C(0x0)
30863 	/* enabled */
30864 	#define HWRM_QUEUE_QPORTCFG_INPUT_DRV_QMAP_CAP_ENABLED  UINT32_C(0x1)
30865 	#define HWRM_QUEUE_QPORTCFG_INPUT_DRV_QMAP_CAP_LAST \
30866 		HWRM_QUEUE_QPORTCFG_INPUT_DRV_QMAP_CAP_ENABLED
30867 	uint8_t	unused_0;
30868 } __rte_packed;
30869 
30870 /* hwrm_queue_qportcfg_output (size:1344b/168B) */
30871 struct hwrm_queue_qportcfg_output {
30872 	/* The specific error status for the command. */
30873 	uint16_t	error_code;
30874 	/* The HWRM command request type. */
30875 	uint16_t	req_type;
30876 	/* The sequence ID from the original command. */
30877 	uint16_t	seq_id;
30878 	/* The length of the response data in number of bytes. */
30879 	uint16_t	resp_len;
30880 	/*
30881 	 * The maximum number of queues that can be configured on this
30882 	 * port.
30883 	 * Valid values range from 1 through 8.
30884 	 */
30885 	uint8_t	max_configurable_queues;
30886 	/*
30887 	 * The maximum number of lossless queues that can be configured
30888 	 * on this port.
30889 	 * Valid values range from 0 through 8.
30890 	 */
30891 	uint8_t	max_configurable_lossless_queues;
30892 	/*
30893 	 * Bitmask indicating which queues can be configured by the
30894 	 * hwrm_queue_cfg command.
30895 	 *
30896 	 * Each bit represents a specific queue where bit 0 represents
30897 	 * queue 0 and bit 7 represents queue 7.
30898 	 * # A value of 0 indicates that the queue is not configurable
30899 	 * by the hwrm_queue_cfg command.
30900 	 * # A value of 1 indicates that the queue is configurable.
30901 	 * # A hwrm_queue_cfg command shall return error when trying to
30902 	 * configure a queue not configurable.
30903 	 */
30904 	uint8_t	queue_cfg_allowed;
30905 	/* Information about queue configuration. */
30906 	uint8_t	queue_cfg_info;
30907 	/*
30908 	 * If this flag is set to '1', then the queues are
30909 	 * configured asymmetrically on TX and RX sides.
30910 	 * If this flag is set to '0', then the queues are
30911 	 * configured symmetrically on TX and RX sides. For
30912 	 * symmetric configuration, the queue configuration
30913 	 * including queue ids and service profiles on the
30914 	 * TX side is the same as the corresponding queue
30915 	 * configuration on the RX side.
30916 	 */
30917 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_CFG_INFO_ASYM_CFG \
30918 		UINT32_C(0x1)
30919 	/*
30920 	 * If this flag is set to '1', then service_profile will carry
30921 	 * either lossy/lossless type and the new service_profile_type
30922 	 * field will be used to determine if the queue is for L2/ROCE/CNP.
30923 	 */
30924 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_CFG_INFO_USE_PROFILE_TYPE \
30925 		UINT32_C(0x2)
30926 	/*
30927 	 * Bitmask indicating which queues can be configured by the
30928 	 * hwrm_queue_pfcenable_cfg command.
30929 	 *
30930 	 * Each bit represents a specific priority where bit 0 represents
30931 	 * priority 0 and bit 7 represents priority 7.
30932 	 * # A value of 0 indicates that the priority is not configurable by
30933 	 * the hwrm_queue_pfcenable_cfg command.
30934 	 * # A value of 1 indicates that the priority is configurable.
30935 	 * # A hwrm_queue_pfcenable_cfg command shall return error when
30936 	 * trying to configure a priority that is not configurable.
30937 	 */
30938 	uint8_t	queue_pfcenable_cfg_allowed;
30939 	/*
30940 	 * Bitmask indicating which queues can be configured by the
30941 	 * hwrm_queue_pri2cos_cfg command.
30942 	 *
30943 	 * Each bit represents a specific queue where bit 0 represents
30944 	 * queue 0 and bit 7 represents queue 7.
30945 	 * # A value of 0 indicates that the queue is not configurable
30946 	 * by the hwrm_queue_pri2cos_cfg command.
30947 	 * # A value of 1 indicates that the queue is configurable.
30948 	 * # A hwrm_queue_pri2cos_cfg command shall return error when
30949 	 * trying to configure a queue that is not configurable.
30950 	 */
30951 	uint8_t	queue_pri2cos_cfg_allowed;
30952 	/*
30953 	 * Bitmask indicating which queues can be configured by the
30954 	 * hwrm_queue_pri2cos_cfg command.
30955 	 *
30956 	 * Each bit represents a specific queue where bit 0 represents
30957 	 * queue 0 and bit 7 represents queue 7.
30958 	 * # A value of 0 indicates that the queue is not configurable
30959 	 * by the hwrm_queue_pri2cos_cfg command.
30960 	 * # A value of 1 indicates that the queue is configurable.
30961 	 * # A hwrm_queue_pri2cos_cfg command shall return error when
30962 	 * trying to configure a queue not configurable.
30963 	 */
30964 	uint8_t	queue_cos2bw_cfg_allowed;
30965 	/*
30966 	 * ID of CoS Queue 0.
30967 	 * FF - Invalid id
30968 	 *
30969 	 * # This ID can be used on any subsequent call to an hwrm command
30970 	 * that takes a queue id.
30971 	 * # IDs must always be queried by this command before any use
30972 	 * by the driver or software.
30973 	 * # The CoS queue index is obtained by applying modulo 10 to the
30974 	 * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
30975 	 * The CoS queue index is used to reference port statistics for the
30976 	 * CoS queue.
30977 	 * # A value of 0xff indicates that the queue is not available.
30978 	 * # Available queues may not be in sequential order.
30979 	 */
30980 	uint8_t	queue_id0;
30981 	/* This value specifies service profile kind for CoS queue */
30982 	uint8_t	queue_id0_service_profile;
30983 	/* Lossy (best-effort) */
30984 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSY \
30985 		UINT32_C(0x0)
30986 	/* Lossless */
30987 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSLESS \
30988 		UINT32_C(0x1)
30989 	/* Lossless RoCE (deprecated) */
30990 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSLESS_ROCE \
30991 		UINT32_C(0x1)
30992 	/* Lossy RoCE CNP (deprecated) */
30993 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSY_ROCE_CNP \
30994 		UINT32_C(0x2)
30995 	/* Lossless NIC (deprecated) */
30996 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSLESS_NIC \
30997 		UINT32_C(0x3)
30998 	/* Set to 0xFF... (All Fs) if there is no service profile specified */
30999 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_UNKNOWN \
31000 		UINT32_C(0xff)
31001 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LAST \
31002 		HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_UNKNOWN
31003 	/*
31004 	 * ID of CoS Queue 1.
31005 	 * FF - Invalid id
31006 	 *
31007 	 * # This ID can be used on any subsequent call to an hwrm command
31008 	 * that takes a queue id.
31009 	 * # IDs must always be queried by this command before any use
31010 	 * by the driver or software.
31011 	 * # The CoS queue index is obtained by applying modulo 10 to the
31012 	 * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
31013 	 * The CoS queue index is used to reference port statistics for the
31014 	 * CoS queue.
31015 	 * # A value of 0xff indicates that the queue is not available.
31016 	 * # Available queues may not be in sequential order.
31017 	 */
31018 	uint8_t	queue_id1;
31019 	/* This value specifies service profile kind for CoS queue */
31020 	uint8_t	queue_id1_service_profile;
31021 	/* Lossy (best-effort) */
31022 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSY \
31023 		UINT32_C(0x0)
31024 	/* Lossless */
31025 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSLESS \
31026 		UINT32_C(0x1)
31027 	/* Lossless RoCE (deprecated) */
31028 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSLESS_ROCE \
31029 		UINT32_C(0x1)
31030 	/* Lossy RoCE CNP (deprecated) */
31031 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSY_ROCE_CNP \
31032 		UINT32_C(0x2)
31033 	/* Lossless NIC (deprecated) */
31034 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSLESS_NIC \
31035 		UINT32_C(0x3)
31036 	/* Set to 0xFF... (All Fs) if there is no service profile specified */
31037 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_UNKNOWN \
31038 		UINT32_C(0xff)
31039 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LAST \
31040 		HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_UNKNOWN
31041 	/*
31042 	 * ID of CoS Queue 2.
31043 	 * FF - Invalid id
31044 	 *
31045 	 * # This ID can be used on any subsequent call to an hwrm command
31046 	 * that takes a queue id.
31047 	 * # IDs must always be queried by this command before any use
31048 	 * by the driver or software.
31049 	 * # The CoS queue index is obtained by applying modulo 10 to the
31050 	 * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
31051 	 * The CoS queue index is used to reference port statistics for the
31052 	 * CoS queue.
31053 	 * # A value of 0xff indicates that the queue is not available.
31054 	 * # Available queues may not be in sequential order.
31055 	 */
31056 	uint8_t	queue_id2;
31057 	/* This value specifies service profile kind for CoS queue */
31058 	uint8_t	queue_id2_service_profile;
31059 	/* Lossy (best-effort) */
31060 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSY \
31061 		UINT32_C(0x0)
31062 	/* Lossless */
31063 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSLESS \
31064 		UINT32_C(0x1)
31065 	/* Lossless RoCE (deprecated) */
31066 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSLESS_ROCE \
31067 		UINT32_C(0x1)
31068 	/* Lossy RoCE CNP (deprecated) */
31069 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSY_ROCE_CNP \
31070 		UINT32_C(0x2)
31071 	/* Lossless NIC (deprecated) */
31072 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSLESS_NIC \
31073 		UINT32_C(0x3)
31074 	/* Set to 0xFF... (All Fs) if there is no service profile specified */
31075 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_UNKNOWN \
31076 		UINT32_C(0xff)
31077 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LAST \
31078 		HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_UNKNOWN
31079 	/*
31080 	 * ID of CoS Queue 3.
31081 	 * FF - Invalid id
31082 	 *
31083 	 * # This ID can be used on any subsequent call to an hwrm command
31084 	 * that takes a queue id.
31085 	 * # IDs must always be queried by this command before any use
31086 	 * by the driver or software.
31087 	 * # The CoS queue index is obtained by applying modulo 10 to the
31088 	 * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
31089 	 * The CoS queue index is used to reference port statistics for the
31090 	 * CoS queue.
31091 	 * # A value of 0xff indicates that the queue is not available.
31092 	 * # Available queues may not be in sequential order.
31093 	 */
31094 	uint8_t	queue_id3;
31095 	/* This value specifies service profile kind for CoS queue */
31096 	uint8_t	queue_id3_service_profile;
31097 	/* Lossy (best-effort) */
31098 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSY \
31099 		UINT32_C(0x0)
31100 	/* Lossless */
31101 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSLESS \
31102 		UINT32_C(0x1)
31103 	/* Lossless RoCE (deprecated) */
31104 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSLESS_ROCE \
31105 		UINT32_C(0x1)
31106 	/* Lossy RoCE CNP (deprecated) */
31107 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSY_ROCE_CNP \
31108 		UINT32_C(0x2)
31109 	/* Lossless NIC (deprecated) */
31110 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSLESS_NIC \
31111 		UINT32_C(0x3)
31112 	/* Set to 0xFF... (All Fs) if there is no service profile specified */
31113 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_UNKNOWN \
31114 		UINT32_C(0xff)
31115 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LAST \
31116 		HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_UNKNOWN
31117 	/*
31118 	 * ID of CoS Queue 4.
31119 	 * FF - Invalid id
31120 	 *
31121 	 * # This ID can be used on any subsequent call to an hwrm command
31122 	 * that takes a queue id.
31123 	 * # IDs must always be queried by this command before any use
31124 	 * by the driver or software.
31125 	 * # The CoS queue index is obtained by applying modulo 10 to the
31126 	 * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
31127 	 * The CoS queue index is used to reference port statistics for the
31128 	 * CoS queue.
31129 	 * # A value of 0xff indicates that the queue is not available.
31130 	 * # Available queues may not be in sequential order.
31131 	 */
31132 	uint8_t	queue_id4;
31133 	/* This value specifies service profile kind for CoS queue */
31134 	uint8_t	queue_id4_service_profile;
31135 	/* Lossy (best-effort) */
31136 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSY \
31137 		UINT32_C(0x0)
31138 	/* Lossless */
31139 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSLESS \
31140 		UINT32_C(0x1)
31141 	/* Lossless RoCE (deprecated) */
31142 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSLESS_ROCE \
31143 		UINT32_C(0x1)
31144 	/* Lossy RoCE CNP (deprecated) */
31145 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSY_ROCE_CNP \
31146 		UINT32_C(0x2)
31147 	/* Lossless NIC (deprecated) */
31148 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSLESS_NIC \
31149 		UINT32_C(0x3)
31150 	/* Set to 0xFF... (All Fs) if there is no service profile specified */
31151 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_UNKNOWN \
31152 		UINT32_C(0xff)
31153 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LAST \
31154 		HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_UNKNOWN
31155 	/*
31156 	 * ID of CoS Queue 5.
31157 	 * FF - Invalid id
31158 	 *
31159 	 * # This ID can be used on any subsequent call to an hwrm command
31160 	 * that takes a queue id.
31161 	 * # IDs must always be queried by this command before any use
31162 	 * by the driver or software.
31163 	 * # The CoS queue index is obtained by applying modulo 10 to the
31164 	 * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
31165 	 * The CoS queue index is used to reference port statistics for the
31166 	 * CoS queue.
31167 	 * # A value of 0xff indicates that the queue is not available.
31168 	 * # Available queues may not be in sequential order.
31169 	 */
31170 	uint8_t	queue_id5;
31171 	/* This value specifies service profile kind for CoS queue */
31172 	uint8_t	queue_id5_service_profile;
31173 	/* Lossy (best-effort) */
31174 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSY \
31175 		UINT32_C(0x0)
31176 	/* Lossless */
31177 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSLESS \
31178 		UINT32_C(0x1)
31179 	/* Lossless RoCE (deprecated) */
31180 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSLESS_ROCE \
31181 		UINT32_C(0x1)
31182 	/* Lossy RoCE CNP (deprecated) */
31183 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSY_ROCE_CNP \
31184 		UINT32_C(0x2)
31185 	/* Lossless NIC (deprecated) */
31186 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSLESS_NIC \
31187 		UINT32_C(0x3)
31188 	/* Set to 0xFF... (All Fs) if there is no service profile specified */
31189 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_UNKNOWN \
31190 		UINT32_C(0xff)
31191 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LAST \
31192 		HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_UNKNOWN
31193 	/*
31194 	 * ID of CoS Queue 6.
31195 	 * FF - Invalid id
31196 	 *
31197 	 * # This ID can be used on any subsequent call to an hwrm command
31198 	 * that takes a queue id.
31199 	 * # IDs must always be queried by this command before any use
31200 	 * by the driver or software.
31201 	 * # The CoS queue index is obtained by applying modulo 10 to the
31202 	 * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
31203 	 * The CoS queue index is used to reference port statistics for the
31204 	 * CoS queue.
31205 	 * # A value of 0xff indicates that the queue is not available.
31206 	 * # Available queues may not be in sequential order.
31207 	 */
31208 	uint8_t	queue_id6;
31209 	/* This value specifies service profile kind for CoS queue */
31210 	uint8_t	queue_id6_service_profile;
31211 	/* Lossy (best-effort) */
31212 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSY \
31213 		UINT32_C(0x0)
31214 	/* Lossless */
31215 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSLESS \
31216 		UINT32_C(0x1)
31217 	/* Lossless RoCE (deprecated) */
31218 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSLESS_ROCE \
31219 		UINT32_C(0x1)
31220 	/* Lossy RoCE CNP (deprecated) */
31221 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSY_ROCE_CNP \
31222 		UINT32_C(0x2)
31223 	/* Lossless NIC (deprecated) */
31224 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSLESS_NIC \
31225 		UINT32_C(0x3)
31226 	/* Set to 0xFF... (All Fs) if there is no service profile specified */
31227 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_UNKNOWN \
31228 		UINT32_C(0xff)
31229 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LAST \
31230 		HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_UNKNOWN
31231 	/*
31232 	 * ID of CoS Queue 7.
31233 	 * FF - Invalid id
31234 	 *
31235 	 * # This ID can be used on any subsequent call to an hwrm command
31236 	 * that takes a queue id.
31237 	 * # IDs must always be queried by this command before any use
31238 	 * by the driver or software.
31239 	 * # The CoS queue index is obtained by applying modulo 10 to the
31240 	 * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
31241 	 * The CoS queue index is used to reference port statistics for the
31242 	 * CoS queue.
31243 	 * # A value of 0xff indicates that the queue is not available.
31244 	 * # Available queues may not be in sequential order.
31245 	 */
31246 	uint8_t	queue_id7;
31247 	/* This value specifies service profile kind for CoS queue */
31248 	uint8_t	queue_id7_service_profile;
31249 	/* Lossy (best-effort) */
31250 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSY \
31251 		UINT32_C(0x0)
31252 	/* Lossless */
31253 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSLESS \
31254 		UINT32_C(0x1)
31255 	/* Lossless RoCE (deprecated) */
31256 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSLESS_ROCE \
31257 		UINT32_C(0x1)
31258 	/* Lossy RoCE CNP (deprecated) */
31259 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSY_ROCE_CNP \
31260 		UINT32_C(0x2)
31261 	/* Lossless NIC (deprecated) */
31262 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSLESS_NIC \
31263 		UINT32_C(0x3)
31264 	/* Set to 0xFF... (All Fs) if there is no service profile specified */
31265 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_UNKNOWN \
31266 		UINT32_C(0xff)
31267 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LAST \
31268 		HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_UNKNOWN
31269 	/*
31270 	 * This value specifies traffic type for the service profile. We can
31271 	 * have a TC mapped to multiple traffic types. For example shared
31272 	 * CoS Q for CNP and NIC will have both cnp and nic bits set (0x6).
31273 	 * A value of zero is considered as invalid.
31274 	 */
31275 	uint8_t	queue_id0_service_profile_type;
31276 	/* Recommended to be used for RoCE traffic only. */
31277 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_TYPE_ROCE \
31278 		UINT32_C(0x1)
31279 	/* Recommended to be used for NIC/L2 traffic only. */
31280 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_TYPE_NIC \
31281 		UINT32_C(0x2)
31282 	/* Recommended to be used for CNP traffic only. */
31283 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_TYPE_CNP \
31284 		UINT32_C(0x4)
31285 	/*
31286 	 * Up to 16 bytes of null padded ASCII string describing this queue.
31287 	 * The queue name includes a CoS queue index and, in some cases, text
31288 	 * that distinguishes the queue from other queues in the group.
31289 	 */
31290 	char	qid0_name[16];
31291 	/* Up to 16 bytes of null padded ASCII string describing this queue. */
31292 	char	qid1_name[16];
31293 	/* Up to 16 bytes of null padded ASCII string describing this queue. */
31294 	char	qid2_name[16];
31295 	/* Up to 16 bytes of null padded ASCII string describing this queue. */
31296 	char	qid3_name[16];
31297 	/* Up to 16 bytes of null padded ASCII string describing this queue. */
31298 	char	qid4_name[16];
31299 	/* Up to 16 bytes of null padded ASCII string describing this queue. */
31300 	char	qid5_name[16];
31301 	/* Up to 16 bytes of null padded ASCII string describing this queue. */
31302 	char	qid6_name[16];
31303 	/* Up to 16 bytes of null padded ASCII string describing this queue. */
31304 	char	qid7_name[16];
31305 	/*
31306 	 * This value specifies traffic type for the service profile. We can
31307 	 * have a TC mapped to multiple traffic types. For example shared
31308 	 * CoS Q for CNP and NIC will have both cnp and nic bits set (0x6).
31309 	 * A value of zero is considered as invalid.
31310 	 */
31311 	uint8_t	queue_id1_service_profile_type;
31312 	/* Recommended to be used for RoCE traffic only. */
31313 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_TYPE_ROCE \
31314 		UINT32_C(0x1)
31315 	/* Recommended to be used for NIC/L2 traffic only. */
31316 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_TYPE_NIC \
31317 		UINT32_C(0x2)
31318 	/* Recommended to be used for CNP traffic only. */
31319 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_TYPE_CNP \
31320 		UINT32_C(0x4)
31321 	/*
31322 	 * This value specifies traffic type for the service profile. We can
31323 	 * have a TC mapped to multiple traffic types. For example shared
31324 	 * CoS Q for CNP and NIC will have both cnp and nic bits set (0x6).
31325 	 * A value of zero is considered as invalid.
31326 	 */
31327 	uint8_t	queue_id2_service_profile_type;
31328 	/* Recommended to be used for RoCE traffic only. */
31329 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_TYPE_ROCE \
31330 		UINT32_C(0x1)
31331 	/* Recommended to be used for NIC/L2 traffic only. */
31332 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_TYPE_NIC \
31333 		UINT32_C(0x2)
31334 	/* Recommended to be used for CNP traffic only. */
31335 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_TYPE_CNP \
31336 		UINT32_C(0x4)
31337 	/*
31338 	 * This value specifies traffic type for the service profile. We can
31339 	 * have a TC mapped to multiple traffic types. For example shared
31340 	 * CoS Q for CNP and NIC will have both cnp and nic bits set (0x6).
31341 	 * A value of zero is considered as invalid.
31342 	 */
31343 	uint8_t	queue_id3_service_profile_type;
31344 	/* Recommended to be used for RoCE traffic only. */
31345 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_TYPE_ROCE \
31346 		UINT32_C(0x1)
31347 	/* Recommended to be used for NIC/L2 traffic only. */
31348 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_TYPE_NIC \
31349 		UINT32_C(0x2)
31350 	/* Recommended to be used for CNP traffic only. */
31351 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_TYPE_CNP \
31352 		UINT32_C(0x4)
31353 	/*
31354 	 * This value specifies traffic type for the service profile. We can
31355 	 * have a TC mapped to multiple traffic types. For example shared
31356 	 * CoS Q for CNP and NIC will have both cnp and nic bits set (0x6).
31357 	 * A value of zero is considered as invalid.
31358 	 */
31359 	uint8_t	queue_id4_service_profile_type;
31360 	/* Recommended to be used for RoCE traffic only. */
31361 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_TYPE_ROCE \
31362 		UINT32_C(0x1)
31363 	/* Recommended to be used for NIC/L2 traffic only. */
31364 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_TYPE_NIC \
31365 		UINT32_C(0x2)
31366 	/* Recommended to be used for CNP traffic only. */
31367 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_TYPE_CNP \
31368 		UINT32_C(0x4)
31369 	/*
31370 	 * This value specifies traffic type for the service profile. We can
31371 	 * have a TC mapped to multiple traffic types. For example shared
31372 	 * CoS Q for CNP and NIC will have both cnp and nic bits set (0x6).
31373 	 * A value of zero is considered as invalid.
31374 	 */
31375 	uint8_t	queue_id5_service_profile_type;
31376 	/* Recommended to be used for RoCE traffic only. */
31377 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_TYPE_ROCE \
31378 		UINT32_C(0x1)
31379 	/* Recommended to be used for NIC/L2 traffic only. */
31380 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_TYPE_NIC \
31381 		UINT32_C(0x2)
31382 	/* Recommended to be used for CNP traffic only. */
31383 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_TYPE_CNP \
31384 		UINT32_C(0x4)
31385 	/*
31386 	 * This value specifies traffic type for the service profile. We can
31387 	 * have a TC mapped to multiple traffic types. For example shared
31388 	 * CoS Q for CNP and NIC will have both cnp and nic bits set (0x6).
31389 	 * A value of zero is considered as invalid.
31390 	 */
31391 	uint8_t	queue_id6_service_profile_type;
31392 	/* Recommended to be used for RoCE traffic only. */
31393 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_TYPE_ROCE \
31394 		UINT32_C(0x1)
31395 	/* Recommended to be used for NIC/L2 traffic only. */
31396 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_TYPE_NIC \
31397 		UINT32_C(0x2)
31398 	/* Recommended to be used for CNP traffic only. */
31399 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_TYPE_CNP \
31400 		UINT32_C(0x4)
31401 	/*
31402 	 * This value specifies traffic type for the service profile. We can
31403 	 * have a TC mapped to multiple traffic types. For example shared
31404 	 * CoS Q for CNP and NIC will have both cnp and nic bits set (0x6).
31405 	 * A value of zero is considered as invalid.
31406 	 */
31407 	uint8_t	queue_id7_service_profile_type;
31408 	/* Recommended to be used for RoCE traffic only. */
31409 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_TYPE_ROCE \
31410 		UINT32_C(0x1)
31411 	/* Recommended to be used for NIC/L2 traffic only. */
31412 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_TYPE_NIC \
31413 		UINT32_C(0x2)
31414 	/* Recommended to be used for CNP traffic only. */
31415 	#define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_TYPE_CNP \
31416 		UINT32_C(0x4)
31417 	/*
31418 	 * This field is used in Output records to indicate that the output
31419 	 * is completely written to RAM. This field should be read as '1'
31420 	 * to indicate that the output has been completely written.
31421 	 * When writing a command completion or response to an internal processor,
31422 	 * the order of writes has to be such that this field is written last.
31423 	 */
31424 	uint8_t	valid;
31425 } __rte_packed;
31426 
31427 /*******************
31428  * hwrm_queue_qcfg *
31429  *******************/
31430 
31431 
31432 /* hwrm_queue_qcfg_input (size:192b/24B) */
31433 struct hwrm_queue_qcfg_input {
31434 	/* The HWRM command request type. */
31435 	uint16_t	req_type;
31436 	/*
31437 	 * The completion ring to send the completion event on. This should
31438 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
31439 	 */
31440 	uint16_t	cmpl_ring;
31441 	/*
31442 	 * The sequence ID is used by the driver for tracking multiple
31443 	 * commands. This ID is treated as opaque data by the firmware and
31444 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
31445 	 */
31446 	uint16_t	seq_id;
31447 	/*
31448 	 * The target ID of the command:
31449 	 * * 0x0-0xFFF8 - The function ID
31450 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
31451 	 * * 0xFFFD - Reserved for user-space HWRM interface
31452 	 * * 0xFFFF - HWRM
31453 	 */
31454 	uint16_t	target_id;
31455 	/*
31456 	 * A physical address pointer pointing to a host buffer that the
31457 	 * command's response data will be written. This can be either a host
31458 	 * physical address (HPA) or a guest physical address (GPA) and must
31459 	 * point to a physically contiguous block of memory.
31460 	 */
31461 	uint64_t	resp_addr;
31462 	uint32_t	flags;
31463 	/*
31464 	 * Enumeration denoting the RX, TX type of the resource.
31465 	 * This enumeration is used for resources that are similar for both
31466 	 * TX and RX paths of the chip.
31467 	 */
31468 	#define HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH     UINT32_C(0x1)
31469 	/* tx path */
31470 	#define HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)
31471 	/* rx path */
31472 	#define HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)
31473 	#define HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH_LAST \
31474 		HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH_RX
31475 	/* Queue ID of the queue. */
31476 	uint32_t	queue_id;
31477 } __rte_packed;
31478 
31479 /* hwrm_queue_qcfg_output (size:128b/16B) */
31480 struct hwrm_queue_qcfg_output {
31481 	/* The specific error status for the command. */
31482 	uint16_t	error_code;
31483 	/* The HWRM command request type. */
31484 	uint16_t	req_type;
31485 	/* The sequence ID from the original command. */
31486 	uint16_t	seq_id;
31487 	/* The length of the response data in number of bytes. */
31488 	uint16_t	resp_len;
31489 	/*
31490 	 * This value is the estimate packet length used in the
31491 	 * TX arbiter.
31492 	 */
31493 	uint32_t	queue_len;
31494 	/* This value is applicable to CoS queues only. */
31495 	uint8_t	service_profile;
31496 	/* Lossy (best-effort) */
31497 	#define HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_LOSSY    UINT32_C(0x0)
31498 	/* Lossless */
31499 	#define HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_LOSSLESS UINT32_C(0x1)
31500 	/* Set to 0xFF... (All Fs) if there is no service profile specified */
31501 	#define HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_UNKNOWN  UINT32_C(0xff)
31502 	#define HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_LAST \
31503 		HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_UNKNOWN
31504 	/* Information about queue configuration. */
31505 	uint8_t	queue_cfg_info;
31506 	/*
31507 	 * If this flag is set to '1', then the queue is
31508 	 * configured asymmetrically on TX and RX sides.
31509 	 * If this flag is set to '0', then this queue is
31510 	 * configured symmetrically on TX and RX sides.
31511 	 */
31512 	#define HWRM_QUEUE_QCFG_OUTPUT_QUEUE_CFG_INFO_ASYM_CFG \
31513 		UINT32_C(0x1)
31514 	uint8_t	unused_0;
31515 	/*
31516 	 * This field is used in Output records to indicate that the output
31517 	 * is completely written to RAM. This field should be read as '1'
31518 	 * to indicate that the output has been completely written.
31519 	 * When writing a command completion or response to an internal processor,
31520 	 * the order of writes has to be such that this field is written last.
31521 	 */
31522 	uint8_t	valid;
31523 } __rte_packed;
31524 
31525 /******************
31526  * hwrm_queue_cfg *
31527  ******************/
31528 
31529 
31530 /* hwrm_queue_cfg_input (size:320b/40B) */
31531 struct hwrm_queue_cfg_input {
31532 	/* The HWRM command request type. */
31533 	uint16_t	req_type;
31534 	/*
31535 	 * The completion ring to send the completion event on. This should
31536 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
31537 	 */
31538 	uint16_t	cmpl_ring;
31539 	/*
31540 	 * The sequence ID is used by the driver for tracking multiple
31541 	 * commands. This ID is treated as opaque data by the firmware and
31542 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
31543 	 */
31544 	uint16_t	seq_id;
31545 	/*
31546 	 * The target ID of the command:
31547 	 * * 0x0-0xFFF8 - The function ID
31548 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
31549 	 * * 0xFFFD - Reserved for user-space HWRM interface
31550 	 * * 0xFFFF - HWRM
31551 	 */
31552 	uint16_t	target_id;
31553 	/*
31554 	 * A physical address pointer pointing to a host buffer that the
31555 	 * command's response data will be written. This can be either a host
31556 	 * physical address (HPA) or a guest physical address (GPA) and must
31557 	 * point to a physically contiguous block of memory.
31558 	 */
31559 	uint64_t	resp_addr;
31560 	uint32_t	flags;
31561 	/*
31562 	 * Enumeration denoting the RX, TX, or both directions applicable to the resource.
31563 	 * This enumeration is used for resources that are similar for both
31564 	 * TX and RX paths of the chip.
31565 	 */
31566 	#define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_MASK UINT32_C(0x3)
31567 	#define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_SFT  0
31568 	/* tx path */
31569 	#define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_TX     UINT32_C(0x0)
31570 	/* rx path */
31571 	#define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_RX     UINT32_C(0x1)
31572 	/* Bi-directional (Symmetrically applicable to TX and RX paths) */
31573 	#define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_BIDIR  UINT32_C(0x2)
31574 	#define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_LAST \
31575 		HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_BIDIR
31576 	uint32_t	enables;
31577 	/*
31578 	 * This bit must be '1' for the dflt_len field to be
31579 	 * configured.
31580 	 */
31581 	#define HWRM_QUEUE_CFG_INPUT_ENABLES_DFLT_LEN            UINT32_C(0x1)
31582 	/*
31583 	 * This bit must be '1' for the service_profile field to be
31584 	 * configured.
31585 	 */
31586 	#define HWRM_QUEUE_CFG_INPUT_ENABLES_SERVICE_PROFILE     UINT32_C(0x2)
31587 	/* Queue ID of queue that is to be configured by this function. */
31588 	uint32_t	queue_id;
31589 	/*
31590 	 * This value is a the estimate packet length used in the
31591 	 * TX arbiter.
31592 	 * Set to 0xFF... (All Fs) to not adjust this value.
31593 	 */
31594 	uint32_t	dflt_len;
31595 	/* This value is applicable to CoS queues only. */
31596 	uint8_t	service_profile;
31597 	/* Lossy (best-effort) */
31598 	#define HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_LOSSY    UINT32_C(0x0)
31599 	/* Lossless */
31600 	#define HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_LOSSLESS UINT32_C(0x1)
31601 	/* Set to 0xFF... (All Fs) if there is no service profile specified */
31602 	#define HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_UNKNOWN  UINT32_C(0xff)
31603 	#define HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_LAST \
31604 		HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_UNKNOWN
31605 	uint8_t	unused_0[7];
31606 } __rte_packed;
31607 
31608 /* hwrm_queue_cfg_output (size:128b/16B) */
31609 struct hwrm_queue_cfg_output {
31610 	/* The specific error status for the command. */
31611 	uint16_t	error_code;
31612 	/* The HWRM command request type. */
31613 	uint16_t	req_type;
31614 	/* The sequence ID from the original command. */
31615 	uint16_t	seq_id;
31616 	/* The length of the response data in number of bytes. */
31617 	uint16_t	resp_len;
31618 	uint8_t	unused_0[7];
31619 	/*
31620 	 * This field is used in Output records to indicate that the output
31621 	 * is completely written to RAM. This field should be read as '1'
31622 	 * to indicate that the output has been completely written.
31623 	 * When writing a command completion or response to an internal processor,
31624 	 * the order of writes has to be such that this field is written last.
31625 	 */
31626 	uint8_t	valid;
31627 } __rte_packed;
31628 
31629 /*****************************
31630  * hwrm_queue_pfcenable_qcfg *
31631  *****************************/
31632 
31633 
31634 /* hwrm_queue_pfcenable_qcfg_input (size:192b/24B) */
31635 struct hwrm_queue_pfcenable_qcfg_input {
31636 	/* The HWRM command request type. */
31637 	uint16_t	req_type;
31638 	/*
31639 	 * The completion ring to send the completion event on. This should
31640 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
31641 	 */
31642 	uint16_t	cmpl_ring;
31643 	/*
31644 	 * The sequence ID is used by the driver for tracking multiple
31645 	 * commands. This ID is treated as opaque data by the firmware and
31646 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
31647 	 */
31648 	uint16_t	seq_id;
31649 	/*
31650 	 * The target ID of the command:
31651 	 * * 0x0-0xFFF8 - The function ID
31652 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
31653 	 * * 0xFFFD - Reserved for user-space HWRM interface
31654 	 * * 0xFFFF - HWRM
31655 	 */
31656 	uint16_t	target_id;
31657 	/*
31658 	 * A physical address pointer pointing to a host buffer that the
31659 	 * command's response data will be written. This can be either a host
31660 	 * physical address (HPA) or a guest physical address (GPA) and must
31661 	 * point to a physically contiguous block of memory.
31662 	 */
31663 	uint64_t	resp_addr;
31664 	/*
31665 	 * Port ID of port for which the table is being configured.
31666 	 * The HWRM needs to check whether this function is allowed
31667 	 * to configure pri2cos mapping on this port.
31668 	 */
31669 	uint16_t	port_id;
31670 	uint8_t	unused_0[6];
31671 } __rte_packed;
31672 
31673 /* hwrm_queue_pfcenable_qcfg_output (size:128b/16B) */
31674 struct hwrm_queue_pfcenable_qcfg_output {
31675 	/* The specific error status for the command. */
31676 	uint16_t	error_code;
31677 	/* The HWRM command request type. */
31678 	uint16_t	req_type;
31679 	/* The sequence ID from the original command. */
31680 	uint16_t	seq_id;
31681 	/* The length of the response data in number of bytes. */
31682 	uint16_t	resp_len;
31683 	uint32_t	flags;
31684 	/* If set to 1, then PFC is enabled on PRI 0. */
31685 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI0_PFC_ENABLED \
31686 		UINT32_C(0x1)
31687 	/* If set to 1, then PFC is enabled on PRI 1. */
31688 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI1_PFC_ENABLED \
31689 		UINT32_C(0x2)
31690 	/* If set to 1, then PFC is enabled on PRI 2. */
31691 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI2_PFC_ENABLED \
31692 		UINT32_C(0x4)
31693 	/* If set to 1, then PFC is enabled on PRI 3. */
31694 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI3_PFC_ENABLED \
31695 		UINT32_C(0x8)
31696 	/* If set to 1, then PFC is enabled on PRI 4. */
31697 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI4_PFC_ENABLED \
31698 		UINT32_C(0x10)
31699 	/* If set to 1, then PFC is enabled on PRI 5. */
31700 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI5_PFC_ENABLED \
31701 		UINT32_C(0x20)
31702 	/* If set to 1, then PFC is enabled on PRI 6. */
31703 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI6_PFC_ENABLED \
31704 		UINT32_C(0x40)
31705 	/* If set to 1, then PFC is enabled on PRI 7. */
31706 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI7_PFC_ENABLED \
31707 		UINT32_C(0x80)
31708 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI0. */
31709 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI0_PFC_WATCHDOG_ENABLED \
31710 		UINT32_C(0x100)
31711 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI1. */
31712 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI1_PFC_WATCHDOG_ENABLED \
31713 		UINT32_C(0x200)
31714 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI2. */
31715 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI2_PFC_WATCHDOG_ENABLED \
31716 		UINT32_C(0x400)
31717 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI3. */
31718 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI3_PFC_WATCHDOG_ENABLED \
31719 		UINT32_C(0x800)
31720 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI4. */
31721 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI4_PFC_WATCHDOG_ENABLED \
31722 		UINT32_C(0x1000)
31723 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI5. */
31724 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI5_PFC_WATCHDOG_ENABLED \
31725 		UINT32_C(0x2000)
31726 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI6. */
31727 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI6_PFC_WATCHDOG_ENABLED \
31728 		UINT32_C(0x4000)
31729 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI7. */
31730 	#define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI7_PFC_WATCHDOG_ENABLED \
31731 		UINT32_C(0x8000)
31732 	uint8_t	unused_0[3];
31733 	/*
31734 	 * This field is used in Output records to indicate that the output
31735 	 * is completely written to RAM. This field should be read as '1'
31736 	 * to indicate that the output has been completely written.
31737 	 * When writing a command completion or response to an internal processor,
31738 	 * the order of writes has to be such that this field is written last.
31739 	 */
31740 	uint8_t	valid;
31741 } __rte_packed;
31742 
31743 /****************************
31744  * hwrm_queue_pfcenable_cfg *
31745  ****************************/
31746 
31747 
31748 /* hwrm_queue_pfcenable_cfg_input (size:192b/24B) */
31749 struct hwrm_queue_pfcenable_cfg_input {
31750 	/* The HWRM command request type. */
31751 	uint16_t	req_type;
31752 	/*
31753 	 * The completion ring to send the completion event on. This should
31754 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
31755 	 */
31756 	uint16_t	cmpl_ring;
31757 	/*
31758 	 * The sequence ID is used by the driver for tracking multiple
31759 	 * commands. This ID is treated as opaque data by the firmware and
31760 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
31761 	 */
31762 	uint16_t	seq_id;
31763 	/*
31764 	 * The target ID of the command:
31765 	 * * 0x0-0xFFF8 - The function ID
31766 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
31767 	 * * 0xFFFD - Reserved for user-space HWRM interface
31768 	 * * 0xFFFF - HWRM
31769 	 */
31770 	uint16_t	target_id;
31771 	/*
31772 	 * A physical address pointer pointing to a host buffer that the
31773 	 * command's response data will be written. This can be either a host
31774 	 * physical address (HPA) or a guest physical address (GPA) and must
31775 	 * point to a physically contiguous block of memory.
31776 	 */
31777 	uint64_t	resp_addr;
31778 	uint32_t	flags;
31779 	/* If set to 1, then PFC is requested to be enabled on PRI 0. */
31780 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI0_PFC_ENABLED \
31781 		UINT32_C(0x1)
31782 	/* If set to 1, then PFC is requested to be enabled on PRI 1. */
31783 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI1_PFC_ENABLED \
31784 		UINT32_C(0x2)
31785 	/* If set to 1, then PFC is requested to be enabled on PRI 2. */
31786 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI2_PFC_ENABLED \
31787 		UINT32_C(0x4)
31788 	/* If set to 1, then PFC is requested to be enabled on PRI 3. */
31789 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI3_PFC_ENABLED \
31790 		UINT32_C(0x8)
31791 	/* If set to 1, then PFC is requested to be enabled on PRI 4. */
31792 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI4_PFC_ENABLED \
31793 		UINT32_C(0x10)
31794 	/* If set to 1, then PFC is requested to be enabled on PRI 5. */
31795 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI5_PFC_ENABLED \
31796 		UINT32_C(0x20)
31797 	/* If set to 1, then PFC is requested to be enabled on PRI 6. */
31798 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI6_PFC_ENABLED \
31799 		UINT32_C(0x40)
31800 	/* If set to 1, then PFC is requested to be enabled on PRI 7. */
31801 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI7_PFC_ENABLED \
31802 		UINT32_C(0x80)
31803 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI0. */
31804 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI0_PFC_WATCHDOG_ENABLED \
31805 		UINT32_C(0x100)
31806 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI1. */
31807 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI1_PFC_WATCHDOG_ENABLED \
31808 		UINT32_C(0x200)
31809 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI2. */
31810 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI2_PFC_WATCHDOG_ENABLED \
31811 		UINT32_C(0x400)
31812 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI3. */
31813 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI3_PFC_WATCHDOG_ENABLED \
31814 		UINT32_C(0x800)
31815 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI4. */
31816 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI4_PFC_WATCHDOG_ENABLED \
31817 		UINT32_C(0x1000)
31818 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI5. */
31819 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI5_PFC_WATCHDOG_ENABLED \
31820 		UINT32_C(0x2000)
31821 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI6. */
31822 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI6_PFC_WATCHDOG_ENABLED \
31823 		UINT32_C(0x4000)
31824 	/* If set to 1, then PFC WatchDog is requested to be enabled on PRI7. */
31825 	#define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI7_PFC_WATCHDOG_ENABLED \
31826 		UINT32_C(0x8000)
31827 	/*
31828 	 * Port ID of port for which the table is being configured.
31829 	 * The HWRM needs to check whether this function is allowed
31830 	 * to configure pri2cos mapping on this port.
31831 	 */
31832 	uint16_t	port_id;
31833 	uint8_t	unused_0[2];
31834 } __rte_packed;
31835 
31836 /* hwrm_queue_pfcenable_cfg_output (size:128b/16B) */
31837 struct hwrm_queue_pfcenable_cfg_output {
31838 	/* The specific error status for the command. */
31839 	uint16_t	error_code;
31840 	/* The HWRM command request type. */
31841 	uint16_t	req_type;
31842 	/* The sequence ID from the original command. */
31843 	uint16_t	seq_id;
31844 	/* The length of the response data in number of bytes. */
31845 	uint16_t	resp_len;
31846 	uint8_t	unused_0[7];
31847 	/*
31848 	 * This field is used in Output records to indicate that the output
31849 	 * is completely written to RAM. This field should be read as '1'
31850 	 * to indicate that the output has been completely written.
31851 	 * When writing a command completion or response to an internal processor,
31852 	 * the order of writes has to be such that this field is written last.
31853 	 */
31854 	uint8_t	valid;
31855 } __rte_packed;
31856 
31857 /***************************
31858  * hwrm_queue_pri2cos_qcfg *
31859  ***************************/
31860 
31861 
31862 /* hwrm_queue_pri2cos_qcfg_input (size:192b/24B) */
31863 struct hwrm_queue_pri2cos_qcfg_input {
31864 	/* The HWRM command request type. */
31865 	uint16_t	req_type;
31866 	/*
31867 	 * The completion ring to send the completion event on. This should
31868 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
31869 	 */
31870 	uint16_t	cmpl_ring;
31871 	/*
31872 	 * The sequence ID is used by the driver for tracking multiple
31873 	 * commands. This ID is treated as opaque data by the firmware and
31874 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
31875 	 */
31876 	uint16_t	seq_id;
31877 	/*
31878 	 * The target ID of the command:
31879 	 * * 0x0-0xFFF8 - The function ID
31880 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
31881 	 * * 0xFFFD - Reserved for user-space HWRM interface
31882 	 * * 0xFFFF - HWRM
31883 	 */
31884 	uint16_t	target_id;
31885 	/*
31886 	 * A physical address pointer pointing to a host buffer that the
31887 	 * command's response data will be written. This can be either a host
31888 	 * physical address (HPA) or a guest physical address (GPA) and must
31889 	 * point to a physically contiguous block of memory.
31890 	 */
31891 	uint64_t	resp_addr;
31892 	uint32_t	flags;
31893 	/*
31894 	 * Enumeration denoting the RX, TX type of the resource.
31895 	 * This enumeration is used for resources that are similar for both
31896 	 * TX and RX paths of the chip.
31897 	 */
31898 	#define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH      UINT32_C(0x1)
31899 	/* tx path */
31900 	#define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH_TX     UINT32_C(0x0)
31901 	/* rx path */
31902 	#define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH_RX     UINT32_C(0x1)
31903 	#define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH_LAST \
31904 		HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH_RX
31905 	/*
31906 	 * When this bit is set to '0', the query is
31907 	 * for PRI from tunnel headers.
31908 	 * When this bit is set to '1', the query is
31909 	 * for PRI from inner packet headers.
31910 	 */
31911 	#define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_IVLAN     UINT32_C(0x2)
31912 	/*
31913 	 * Port ID of port for which the table is being configured.
31914 	 * The HWRM needs to check whether this function is allowed
31915 	 * to configure pri2cos mapping on this port.
31916 	 */
31917 	uint8_t	port_id;
31918 	uint8_t	unused_0[3];
31919 } __rte_packed;
31920 
31921 /* hwrm_queue_pri2cos_qcfg_output (size:192b/24B) */
31922 struct hwrm_queue_pri2cos_qcfg_output {
31923 	/* The specific error status for the command. */
31924 	uint16_t	error_code;
31925 	/* The HWRM command request type. */
31926 	uint16_t	req_type;
31927 	/* The sequence ID from the original command. */
31928 	uint16_t	seq_id;
31929 	/* The length of the response data in number of bytes. */
31930 	uint16_t	resp_len;
31931 	/*
31932 	 * CoS Queue assigned to priority 0. This value can only
31933 	 * be changed before traffic has started.
31934 	 * A value of 0xff indicates that no CoS queue is assigned to the
31935 	 * specified priority.
31936 	 */
31937 	uint8_t	pri0_cos_queue_id;
31938 	/*
31939 	 * CoS Queue assigned to priority 1. This value can only
31940 	 * be changed before traffic has started.
31941 	 * A value of 0xff indicates that no CoS queue is assigned to the
31942 	 * specified priority.
31943 	 */
31944 	uint8_t	pri1_cos_queue_id;
31945 	/*
31946 	 * CoS Queue assigned to priority 2. This value can only
31947 	 * be changed before traffic has started.
31948 	 * A value of 0xff indicates that no CoS queue is assigned to the
31949 	 * specified priority.
31950 	 */
31951 	uint8_t	pri2_cos_queue_id;
31952 	/*
31953 	 * CoS Queue assigned to priority 3. This value can only
31954 	 * be changed before traffic has started.
31955 	 * A value of 0xff indicates that no CoS queue is assigned to the
31956 	 * specified priority.
31957 	 */
31958 	uint8_t	pri3_cos_queue_id;
31959 	/*
31960 	 * CoS Queue assigned to priority 4. This value can only
31961 	 * be changed before traffic has started.
31962 	 * A value of 0xff indicates that no CoS queue is assigned to the
31963 	 * specified priority.
31964 	 */
31965 	uint8_t	pri4_cos_queue_id;
31966 	/*
31967 	 * CoS Queue assigned to priority 5. This value can only
31968 	 * be changed before traffic has started.
31969 	 * A value of 0xff indicates that no CoS queue is assigned to the
31970 	 * specified priority.
31971 	 */
31972 	uint8_t	pri5_cos_queue_id;
31973 	/*
31974 	 * CoS Queue assigned to priority 6. This value can only
31975 	 * be changed before traffic has started.
31976 	 * A value of 0xff indicates that no CoS queue is assigned to the
31977 	 * specified priority.
31978 	 */
31979 	uint8_t	pri6_cos_queue_id;
31980 	/*
31981 	 * CoS Queue assigned to priority 7. This value can only
31982 	 * be changed before traffic has started.
31983 	 * A value of 0xff indicates that no CoS queue is assigned to the
31984 	 * specified priority.
31985 	 */
31986 	uint8_t	pri7_cos_queue_id;
31987 	/* Information about queue configuration. */
31988 	uint8_t	queue_cfg_info;
31989 	/*
31990 	 * If this flag is set to '1', then the PRI to CoS
31991 	 * configuration is asymmetric on TX and RX sides.
31992 	 * If this flag is set to '0', then PRI to CoS configuration
31993 	 * is symmetric on TX and RX sides.
31994 	 */
31995 	#define HWRM_QUEUE_PRI2COS_QCFG_OUTPUT_QUEUE_CFG_INFO_ASYM_CFG \
31996 		UINT32_C(0x1)
31997 	uint8_t	unused_0[6];
31998 	/*
31999 	 * This field is used in Output records to indicate that the output
32000 	 * is completely written to RAM. This field should be read as '1'
32001 	 * to indicate that the output has been completely written.
32002 	 * When writing a command completion or response to an internal processor,
32003 	 * the order of writes has to be such that this field is written last.
32004 	 */
32005 	uint8_t	valid;
32006 } __rte_packed;
32007 
32008 /**************************
32009  * hwrm_queue_pri2cos_cfg *
32010  **************************/
32011 
32012 
32013 /* hwrm_queue_pri2cos_cfg_input (size:320b/40B) */
32014 struct hwrm_queue_pri2cos_cfg_input {
32015 	/* The HWRM command request type. */
32016 	uint16_t	req_type;
32017 	/*
32018 	 * The completion ring to send the completion event on. This should
32019 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
32020 	 */
32021 	uint16_t	cmpl_ring;
32022 	/*
32023 	 * The sequence ID is used by the driver for tracking multiple
32024 	 * commands. This ID is treated as opaque data by the firmware and
32025 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
32026 	 */
32027 	uint16_t	seq_id;
32028 	/*
32029 	 * The target ID of the command:
32030 	 * * 0x0-0xFFF8 - The function ID
32031 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
32032 	 * * 0xFFFD - Reserved for user-space HWRM interface
32033 	 * * 0xFFFF - HWRM
32034 	 */
32035 	uint16_t	target_id;
32036 	/*
32037 	 * A physical address pointer pointing to a host buffer that the
32038 	 * command's response data will be written. This can be either a host
32039 	 * physical address (HPA) or a guest physical address (GPA) and must
32040 	 * point to a physically contiguous block of memory.
32041 	 */
32042 	uint64_t	resp_addr;
32043 	uint32_t	flags;
32044 	/*
32045 	 * Enumeration denoting the RX, TX, or both directions applicable to the resource.
32046 	 * This enumeration is used for resources that are similar for both
32047 	 * TX and RX paths of the chip.
32048 	 */
32049 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_MASK UINT32_C(0x3)
32050 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_SFT  0
32051 	/* tx path */
32052 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_TX     UINT32_C(0x0)
32053 	/* rx path */
32054 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_RX     UINT32_C(0x1)
32055 	/* Bi-directional (Symmetrically applicable to TX and RX paths) */
32056 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_BIDIR  UINT32_C(0x2)
32057 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_LAST \
32058 		HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_BIDIR
32059 	/*
32060 	 * When this bit is set to '0', the mapping is requested
32061 	 * for PRI from tunnel headers.
32062 	 * When this bit is set to '1', the mapping is requested
32063 	 * for PRI from inner packet headers.
32064 	 */
32065 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_IVLAN     UINT32_C(0x4)
32066 	uint32_t	enables;
32067 	/*
32068 	 * This bit must be '1' for the pri0_cos_queue_id field to be
32069 	 * configured.
32070 	 */
32071 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI0_COS_QUEUE_ID \
32072 		UINT32_C(0x1)
32073 	/*
32074 	 * This bit must be '1' for the pri1_cos_queue_id field to be
32075 	 * configured.
32076 	 */
32077 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI1_COS_QUEUE_ID \
32078 		UINT32_C(0x2)
32079 	/*
32080 	 * This bit must be '1' for the pri2_cos_queue_id field to be
32081 	 * configured.
32082 	 */
32083 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI2_COS_QUEUE_ID \
32084 		UINT32_C(0x4)
32085 	/*
32086 	 * This bit must be '1' for the pri3_cos_queue_id field to be
32087 	 * configured.
32088 	 */
32089 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI3_COS_QUEUE_ID \
32090 		UINT32_C(0x8)
32091 	/*
32092 	 * This bit must be '1' for the pri4_cos_queue_id field to be
32093 	 * configured.
32094 	 */
32095 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI4_COS_QUEUE_ID \
32096 		UINT32_C(0x10)
32097 	/*
32098 	 * This bit must be '1' for the pri5_cos_queue_id field to be
32099 	 * configured.
32100 	 */
32101 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI5_COS_QUEUE_ID \
32102 		UINT32_C(0x20)
32103 	/*
32104 	 * This bit must be '1' for the pri6_cos_queue_id field to be
32105 	 * configured.
32106 	 */
32107 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI6_COS_QUEUE_ID \
32108 		UINT32_C(0x40)
32109 	/*
32110 	 * This bit must be '1' for the pri7_cos_queue_id field to be
32111 	 * configured.
32112 	 */
32113 	#define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI7_COS_QUEUE_ID \
32114 		UINT32_C(0x80)
32115 	/*
32116 	 * Port ID of port for which the table is being configured.
32117 	 * The HWRM needs to check whether this function is allowed
32118 	 * to configure pri2cos mapping on this port.
32119 	 */
32120 	uint8_t	port_id;
32121 	/*
32122 	 * CoS Queue assigned to priority 0. This value can only
32123 	 * be changed before traffic has started.
32124 	 */
32125 	uint8_t	pri0_cos_queue_id;
32126 	/*
32127 	 * CoS Queue assigned to priority 1. This value can only
32128 	 * be changed before traffic has started.
32129 	 */
32130 	uint8_t	pri1_cos_queue_id;
32131 	/*
32132 	 * CoS Queue assigned to priority 2  This value can only
32133 	 * be changed before traffic has started.
32134 	 */
32135 	uint8_t	pri2_cos_queue_id;
32136 	/*
32137 	 * CoS Queue assigned to priority 3. This value can only
32138 	 * be changed before traffic has started.
32139 	 */
32140 	uint8_t	pri3_cos_queue_id;
32141 	/*
32142 	 * CoS Queue assigned to priority 4. This value can only
32143 	 * be changed before traffic has started.
32144 	 */
32145 	uint8_t	pri4_cos_queue_id;
32146 	/*
32147 	 * CoS Queue assigned to priority 5. This value can only
32148 	 * be changed before traffic has started.
32149 	 */
32150 	uint8_t	pri5_cos_queue_id;
32151 	/*
32152 	 * CoS Queue assigned to priority 6. This value can only
32153 	 * be changed before traffic has started.
32154 	 */
32155 	uint8_t	pri6_cos_queue_id;
32156 	/*
32157 	 * CoS Queue assigned to priority 7. This value can only
32158 	 * be changed before traffic has started.
32159 	 */
32160 	uint8_t	pri7_cos_queue_id;
32161 	uint8_t	unused_0[7];
32162 } __rte_packed;
32163 
32164 /* hwrm_queue_pri2cos_cfg_output (size:128b/16B) */
32165 struct hwrm_queue_pri2cos_cfg_output {
32166 	/* The specific error status for the command. */
32167 	uint16_t	error_code;
32168 	/* The HWRM command request type. */
32169 	uint16_t	req_type;
32170 	/* The sequence ID from the original command. */
32171 	uint16_t	seq_id;
32172 	/* The length of the response data in number of bytes. */
32173 	uint16_t	resp_len;
32174 	uint8_t	unused_0[7];
32175 	/*
32176 	 * This field is used in Output records to indicate that the output
32177 	 * is completely written to RAM. This field should be read as '1'
32178 	 * to indicate that the output has been completely written.
32179 	 * When writing a command completion or response to an internal processor,
32180 	 * the order of writes has to be such that this field is written last.
32181 	 */
32182 	uint8_t	valid;
32183 } __rte_packed;
32184 
32185 /**************************
32186  * hwrm_queue_cos2bw_qcfg *
32187  **************************/
32188 
32189 
32190 /* hwrm_queue_cos2bw_qcfg_input (size:192b/24B) */
32191 struct hwrm_queue_cos2bw_qcfg_input {
32192 	/* The HWRM command request type. */
32193 	uint16_t	req_type;
32194 	/*
32195 	 * The completion ring to send the completion event on. This should
32196 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
32197 	 */
32198 	uint16_t	cmpl_ring;
32199 	/*
32200 	 * The sequence ID is used by the driver for tracking multiple
32201 	 * commands. This ID is treated as opaque data by the firmware and
32202 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
32203 	 */
32204 	uint16_t	seq_id;
32205 	/*
32206 	 * The target ID of the command:
32207 	 * * 0x0-0xFFF8 - The function ID
32208 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
32209 	 * * 0xFFFD - Reserved for user-space HWRM interface
32210 	 * * 0xFFFF - HWRM
32211 	 */
32212 	uint16_t	target_id;
32213 	/*
32214 	 * A physical address pointer pointing to a host buffer that the
32215 	 * command's response data will be written. This can be either a host
32216 	 * physical address (HPA) or a guest physical address (GPA) and must
32217 	 * point to a physically contiguous block of memory.
32218 	 */
32219 	uint64_t	resp_addr;
32220 	/*
32221 	 * Port ID of port for which the table is being configured.
32222 	 * The HWRM needs to check whether this function is allowed
32223 	 * to configure TC BW assignment on this port.
32224 	 */
32225 	uint16_t	port_id;
32226 	uint8_t	unused_0[6];
32227 } __rte_packed;
32228 
32229 /* hwrm_queue_cos2bw_qcfg_output (size:896b/112B) */
32230 struct hwrm_queue_cos2bw_qcfg_output {
32231 	/* The specific error status for the command. */
32232 	uint16_t	error_code;
32233 	/* The HWRM command request type. */
32234 	uint16_t	req_type;
32235 	/* The sequence ID from the original command. */
32236 	uint16_t	seq_id;
32237 	/* The length of the response data in number of bytes. */
32238 	uint16_t	resp_len;
32239 	/* ID of CoS Queue 0. */
32240 	uint8_t	queue_id0;
32241 	uint8_t	unused_0;
32242 	uint16_t	unused_1;
32243 	/*
32244 	 * Minimum BW allocated to CoS Queue.
32245 	 * The HWRM will translate this value into byte counter and
32246 	 * time interval used for this COS inside the device.
32247 	 */
32248 	uint32_t	queue_id0_min_bw;
32249 	/* The bandwidth value. */
32250 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_MASK \
32251 		UINT32_C(0xfffffff)
32252 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_SFT \
32253 		0
32254 	/* The granularity of the value (bits or bytes). */
32255 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE \
32256 		UINT32_C(0x10000000)
32257 	/* Value is in bits. */
32258 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE_BITS \
32259 		(UINT32_C(0x0) << 28)
32260 	/* Value is in bytes. */
32261 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE_BYTES \
32262 		(UINT32_C(0x1) << 28)
32263 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE_LAST \
32264 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE_BYTES
32265 	/* bw_value_unit is 3 b */
32266 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_MASK \
32267 		UINT32_C(0xe0000000)
32268 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_SFT \
32269 		29
32270 	/* Value is in Mb or MB (base 10). */
32271 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_MEGA \
32272 		(UINT32_C(0x0) << 29)
32273 	/* Value is in Kb or KB (base 10). */
32274 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_KILO \
32275 		(UINT32_C(0x2) << 29)
32276 	/* Value is in bits or bytes. */
32277 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_BASE \
32278 		(UINT32_C(0x4) << 29)
32279 	/* Value is in Gb or GB (base 10). */
32280 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_GIGA \
32281 		(UINT32_C(0x6) << 29)
32282 	/* Value is in 1/100th of a percentage of total bandwidth. */
32283 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
32284 		(UINT32_C(0x1) << 29)
32285 	/* Invalid unit */
32286 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_INVALID \
32287 		(UINT32_C(0x7) << 29)
32288 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_LAST \
32289 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_INVALID
32290 	/*
32291 	 * Maximum BW allocated to CoS Queue.
32292 	 * The HWRM will translate this value into byte counter and
32293 	 * time interval used for this COS inside the device.
32294 	 */
32295 	uint32_t	queue_id0_max_bw;
32296 	/* The bandwidth value. */
32297 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_MASK \
32298 		UINT32_C(0xfffffff)
32299 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_SFT \
32300 		0
32301 	/* The granularity of the value (bits or bytes). */
32302 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE \
32303 		UINT32_C(0x10000000)
32304 	/* Value is in bits. */
32305 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE_BITS \
32306 		(UINT32_C(0x0) << 28)
32307 	/* Value is in bytes. */
32308 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE_BYTES \
32309 		(UINT32_C(0x1) << 28)
32310 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE_LAST \
32311 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE_BYTES
32312 	/* bw_value_unit is 3 b */
32313 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_MASK \
32314 		UINT32_C(0xe0000000)
32315 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_SFT \
32316 		29
32317 	/* Value is in Mb or MB (base 10). */
32318 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_MEGA \
32319 		(UINT32_C(0x0) << 29)
32320 	/* Value is in Kb or KB (base 10). */
32321 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_KILO \
32322 		(UINT32_C(0x2) << 29)
32323 	/* Value is in bits or bytes. */
32324 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_BASE \
32325 		(UINT32_C(0x4) << 29)
32326 	/* Value is in Gb or GB (base 10). */
32327 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_GIGA \
32328 		(UINT32_C(0x6) << 29)
32329 	/* Value is in 1/100th of a percentage of total bandwidth. */
32330 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
32331 		(UINT32_C(0x1) << 29)
32332 	/* Invalid unit */
32333 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_INVALID \
32334 		(UINT32_C(0x7) << 29)
32335 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_LAST \
32336 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_INVALID
32337 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
32338 	uint8_t	queue_id0_tsa_assign;
32339 	/* Strict Priority */
32340 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_TSA_ASSIGN_SP \
32341 		UINT32_C(0x0)
32342 	/* Enhanced Transmission Selection */
32343 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_TSA_ASSIGN_ETS \
32344 		UINT32_C(0x1)
32345 	/* reserved. */
32346 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_TSA_ASSIGN_RESERVED_FIRST \
32347 		UINT32_C(0x2)
32348 	/* reserved. */
32349 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_TSA_ASSIGN_RESERVED_LAST \
32350 		UINT32_C(0xff)
32351 	/*
32352 	 * Priority level for strict priority. Valid only when the
32353 	 * tsa_assign is 0 - Strict Priority (SP)
32354 	 * 0..7 - Valid values.
32355 	 * 8..255 - Reserved.
32356 	 */
32357 	uint8_t	queue_id0_pri_lvl;
32358 	/*
32359 	 * Weight used to allocate remaining BW for this COS after
32360 	 * servicing guaranteed bandwidths for all COS.
32361 	 */
32362 	uint8_t	queue_id0_bw_weight;
32363 	/* ID of CoS Queue 1. */
32364 	uint8_t	queue_id1;
32365 	/*
32366 	 * Minimum BW allocated to CoS Queue.
32367 	 * The HWRM will translate this value into byte counter and
32368 	 * time interval used for this COS inside the device.
32369 	 */
32370 	uint32_t	queue_id1_min_bw;
32371 	/* The bandwidth value. */
32372 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_MASK \
32373 		UINT32_C(0xfffffff)
32374 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_SFT \
32375 		0
32376 	/* The granularity of the value (bits or bytes). */
32377 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE \
32378 		UINT32_C(0x10000000)
32379 	/* Value is in bits. */
32380 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE_BITS \
32381 		(UINT32_C(0x0) << 28)
32382 	/* Value is in bytes. */
32383 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE_BYTES \
32384 		(UINT32_C(0x1) << 28)
32385 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE_LAST \
32386 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE_BYTES
32387 	/* bw_value_unit is 3 b */
32388 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_MASK \
32389 		UINT32_C(0xe0000000)
32390 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_SFT \
32391 		29
32392 	/* Value is in Mb or MB (base 10). */
32393 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_MEGA \
32394 		(UINT32_C(0x0) << 29)
32395 	/* Value is in Kb or KB (base 10). */
32396 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_KILO \
32397 		(UINT32_C(0x2) << 29)
32398 	/* Value is in bits or bytes. */
32399 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_BASE \
32400 		(UINT32_C(0x4) << 29)
32401 	/* Value is in Gb or GB (base 10). */
32402 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_GIGA \
32403 		(UINT32_C(0x6) << 29)
32404 	/* Value is in 1/100th of a percentage of total bandwidth. */
32405 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
32406 		(UINT32_C(0x1) << 29)
32407 	/* Invalid unit */
32408 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_INVALID \
32409 		(UINT32_C(0x7) << 29)
32410 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_LAST \
32411 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_INVALID
32412 	/*
32413 	 * Maximum BW allocated to CoS queue.
32414 	 * The HWRM will translate this value into byte counter and
32415 	 * time interval used for this COS inside the device.
32416 	 */
32417 	uint32_t	queue_id1_max_bw;
32418 	/* The bandwidth value. */
32419 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_MASK \
32420 		UINT32_C(0xfffffff)
32421 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_SFT \
32422 		0
32423 	/* The granularity of the value (bits or bytes). */
32424 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE \
32425 		UINT32_C(0x10000000)
32426 	/* Value is in bits. */
32427 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE_BITS \
32428 		(UINT32_C(0x0) << 28)
32429 	/* Value is in bytes. */
32430 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE_BYTES \
32431 		(UINT32_C(0x1) << 28)
32432 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE_LAST \
32433 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE_BYTES
32434 	/* bw_value_unit is 3 b */
32435 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_MASK \
32436 		UINT32_C(0xe0000000)
32437 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_SFT \
32438 		29
32439 	/* Value is in Mb or MB (base 10). */
32440 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_MEGA \
32441 		(UINT32_C(0x0) << 29)
32442 	/* Value is in Kb or KB (base 10). */
32443 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_KILO \
32444 		(UINT32_C(0x2) << 29)
32445 	/* Value is in bits or bytes. */
32446 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_BASE \
32447 		(UINT32_C(0x4) << 29)
32448 	/* Value is in Gb or GB (base 10). */
32449 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_GIGA \
32450 		(UINT32_C(0x6) << 29)
32451 	/* Value is in 1/100th of a percentage of total bandwidth. */
32452 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
32453 		(UINT32_C(0x1) << 29)
32454 	/* Invalid unit */
32455 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_INVALID \
32456 		(UINT32_C(0x7) << 29)
32457 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_LAST \
32458 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_INVALID
32459 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
32460 	uint8_t	queue_id1_tsa_assign;
32461 	/* Strict Priority */
32462 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_TSA_ASSIGN_SP \
32463 		UINT32_C(0x0)
32464 	/* Enhanced Transmission Selection */
32465 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_TSA_ASSIGN_ETS \
32466 		UINT32_C(0x1)
32467 	/* reserved. */
32468 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_TSA_ASSIGN_RESERVED_FIRST \
32469 		UINT32_C(0x2)
32470 	/* reserved. */
32471 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_TSA_ASSIGN_RESERVED_LAST \
32472 		UINT32_C(0xff)
32473 	/*
32474 	 * Priority level for strict priority. Valid only when the
32475 	 * tsa_assign is 0 - Strict Priority (SP)
32476 	 * 0..7 - Valid values.
32477 	 * 8..255 - Reserved.
32478 	 */
32479 	uint8_t	queue_id1_pri_lvl;
32480 	/*
32481 	 * Weight used to allocate remaining BW for this COS after
32482 	 * servicing guaranteed bandwidths for all COS.
32483 	 */
32484 	uint8_t	queue_id1_bw_weight;
32485 	/* ID of CoS Queue 2. */
32486 	uint8_t	queue_id2;
32487 	/*
32488 	 * Minimum BW allocated to CoS Queue.
32489 	 * The HWRM will translate this value into byte counter and
32490 	 * time interval used for this COS inside the device.
32491 	 */
32492 	uint32_t	queue_id2_min_bw;
32493 	/* The bandwidth value. */
32494 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_MASK \
32495 		UINT32_C(0xfffffff)
32496 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_SFT \
32497 		0
32498 	/* The granularity of the value (bits or bytes). */
32499 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE \
32500 		UINT32_C(0x10000000)
32501 	/* Value is in bits. */
32502 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE_BITS \
32503 		(UINT32_C(0x0) << 28)
32504 	/* Value is in bytes. */
32505 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE_BYTES \
32506 		(UINT32_C(0x1) << 28)
32507 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE_LAST \
32508 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE_BYTES
32509 	/* bw_value_unit is 3 b */
32510 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_MASK \
32511 		UINT32_C(0xe0000000)
32512 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_SFT \
32513 		29
32514 	/* Value is in Mb or MB (base 10). */
32515 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_MEGA \
32516 		(UINT32_C(0x0) << 29)
32517 	/* Value is in Kb or KB (base 10). */
32518 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_KILO \
32519 		(UINT32_C(0x2) << 29)
32520 	/* Value is in bits or bytes. */
32521 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_BASE \
32522 		(UINT32_C(0x4) << 29)
32523 	/* Value is in Gb or GB (base 10). */
32524 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_GIGA \
32525 		(UINT32_C(0x6) << 29)
32526 	/* Value is in 1/100th of a percentage of total bandwidth. */
32527 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
32528 		(UINT32_C(0x1) << 29)
32529 	/* Invalid unit */
32530 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_INVALID \
32531 		(UINT32_C(0x7) << 29)
32532 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_LAST \
32533 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_INVALID
32534 	/*
32535 	 * Maximum BW allocated to CoS queue.
32536 	 * The HWRM will translate this value into byte counter and
32537 	 * time interval used for this COS inside the device.
32538 	 */
32539 	uint32_t	queue_id2_max_bw;
32540 	/* The bandwidth value. */
32541 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_MASK \
32542 		UINT32_C(0xfffffff)
32543 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_SFT \
32544 		0
32545 	/* The granularity of the value (bits or bytes). */
32546 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE \
32547 		UINT32_C(0x10000000)
32548 	/* Value is in bits. */
32549 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE_BITS \
32550 		(UINT32_C(0x0) << 28)
32551 	/* Value is in bytes. */
32552 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE_BYTES \
32553 		(UINT32_C(0x1) << 28)
32554 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE_LAST \
32555 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE_BYTES
32556 	/* bw_value_unit is 3 b */
32557 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_MASK \
32558 		UINT32_C(0xe0000000)
32559 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_SFT \
32560 		29
32561 	/* Value is in Mb or MB (base 10). */
32562 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_MEGA \
32563 		(UINT32_C(0x0) << 29)
32564 	/* Value is in Kb or KB (base 10). */
32565 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_KILO \
32566 		(UINT32_C(0x2) << 29)
32567 	/* Value is in bits or bytes. */
32568 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_BASE \
32569 		(UINT32_C(0x4) << 29)
32570 	/* Value is in Gb or GB (base 10). */
32571 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_GIGA \
32572 		(UINT32_C(0x6) << 29)
32573 	/* Value is in 1/100th of a percentage of total bandwidth. */
32574 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
32575 		(UINT32_C(0x1) << 29)
32576 	/* Invalid unit */
32577 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_INVALID \
32578 		(UINT32_C(0x7) << 29)
32579 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_LAST \
32580 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_INVALID
32581 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
32582 	uint8_t	queue_id2_tsa_assign;
32583 	/* Strict Priority */
32584 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_TSA_ASSIGN_SP \
32585 		UINT32_C(0x0)
32586 	/* Enhanced Transmission Selection */
32587 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_TSA_ASSIGN_ETS \
32588 		UINT32_C(0x1)
32589 	/* reserved. */
32590 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_TSA_ASSIGN_RESERVED_FIRST \
32591 		UINT32_C(0x2)
32592 	/* reserved. */
32593 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_TSA_ASSIGN_RESERVED_LAST \
32594 		UINT32_C(0xff)
32595 	/*
32596 	 * Priority level for strict priority. Valid only when the
32597 	 * tsa_assign is 0 - Strict Priority (SP)
32598 	 * 0..7 - Valid values.
32599 	 * 8..255 - Reserved.
32600 	 */
32601 	uint8_t	queue_id2_pri_lvl;
32602 	/*
32603 	 * Weight used to allocate remaining BW for this COS after
32604 	 * servicing guaranteed bandwidths for all COS.
32605 	 */
32606 	uint8_t	queue_id2_bw_weight;
32607 	/* ID of CoS Queue 3. */
32608 	uint8_t	queue_id3;
32609 	/*
32610 	 * Minimum BW allocated to CoS Queue.
32611 	 * The HWRM will translate this value into byte counter and
32612 	 * time interval used for this COS inside the device.
32613 	 */
32614 	uint32_t	queue_id3_min_bw;
32615 	/* The bandwidth value. */
32616 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_MASK \
32617 		UINT32_C(0xfffffff)
32618 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_SFT \
32619 		0
32620 	/* The granularity of the value (bits or bytes). */
32621 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE \
32622 		UINT32_C(0x10000000)
32623 	/* Value is in bits. */
32624 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE_BITS \
32625 		(UINT32_C(0x0) << 28)
32626 	/* Value is in bytes. */
32627 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE_BYTES \
32628 		(UINT32_C(0x1) << 28)
32629 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE_LAST \
32630 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE_BYTES
32631 	/* bw_value_unit is 3 b */
32632 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_MASK \
32633 		UINT32_C(0xe0000000)
32634 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_SFT \
32635 		29
32636 	/* Value is in Mb or MB (base 10). */
32637 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_MEGA \
32638 		(UINT32_C(0x0) << 29)
32639 	/* Value is in Kb or KB (base 10). */
32640 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_KILO \
32641 		(UINT32_C(0x2) << 29)
32642 	/* Value is in bits or bytes. */
32643 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_BASE \
32644 		(UINT32_C(0x4) << 29)
32645 	/* Value is in Gb or GB (base 10). */
32646 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_GIGA \
32647 		(UINT32_C(0x6) << 29)
32648 	/* Value is in 1/100th of a percentage of total bandwidth. */
32649 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
32650 		(UINT32_C(0x1) << 29)
32651 	/* Invalid unit */
32652 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_INVALID \
32653 		(UINT32_C(0x7) << 29)
32654 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_LAST \
32655 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_INVALID
32656 	/*
32657 	 * Maximum BW allocated to CoS queue.
32658 	 * The HWRM will translate this value into byte counter and
32659 	 * time interval used for this COS inside the device.
32660 	 */
32661 	uint32_t	queue_id3_max_bw;
32662 	/* The bandwidth value. */
32663 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_MASK \
32664 		UINT32_C(0xfffffff)
32665 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_SFT \
32666 		0
32667 	/* The granularity of the value (bits or bytes). */
32668 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE \
32669 		UINT32_C(0x10000000)
32670 	/* Value is in bits. */
32671 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE_BITS \
32672 		(UINT32_C(0x0) << 28)
32673 	/* Value is in bytes. */
32674 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE_BYTES \
32675 		(UINT32_C(0x1) << 28)
32676 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE_LAST \
32677 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE_BYTES
32678 	/* bw_value_unit is 3 b */
32679 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_MASK \
32680 		UINT32_C(0xe0000000)
32681 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_SFT \
32682 		29
32683 	/* Value is in Mb or MB (base 10). */
32684 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_MEGA \
32685 		(UINT32_C(0x0) << 29)
32686 	/* Value is in Kb or KB (base 10). */
32687 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_KILO \
32688 		(UINT32_C(0x2) << 29)
32689 	/* Value is in bits or bytes. */
32690 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_BASE \
32691 		(UINT32_C(0x4) << 29)
32692 	/* Value is in Gb or GB (base 10). */
32693 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_GIGA \
32694 		(UINT32_C(0x6) << 29)
32695 	/* Value is in 1/100th of a percentage of total bandwidth. */
32696 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
32697 		(UINT32_C(0x1) << 29)
32698 	/* Invalid unit */
32699 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_INVALID \
32700 		(UINT32_C(0x7) << 29)
32701 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_LAST \
32702 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_INVALID
32703 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
32704 	uint8_t	queue_id3_tsa_assign;
32705 	/* Strict Priority */
32706 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_TSA_ASSIGN_SP \
32707 		UINT32_C(0x0)
32708 	/* Enhanced Transmission Selection */
32709 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_TSA_ASSIGN_ETS \
32710 		UINT32_C(0x1)
32711 	/* reserved. */
32712 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_TSA_ASSIGN_RESERVED_FIRST \
32713 		UINT32_C(0x2)
32714 	/* reserved. */
32715 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_TSA_ASSIGN_RESERVED_LAST \
32716 		UINT32_C(0xff)
32717 	/*
32718 	 * Priority level for strict priority. Valid only when the
32719 	 * tsa_assign is 0 - Strict Priority (SP)
32720 	 * 0..7 - Valid values.
32721 	 * 8..255 - Reserved.
32722 	 */
32723 	uint8_t	queue_id3_pri_lvl;
32724 	/*
32725 	 * Weight used to allocate remaining BW for this COS after
32726 	 * servicing guaranteed bandwidths for all COS.
32727 	 */
32728 	uint8_t	queue_id3_bw_weight;
32729 	/* ID of CoS Queue 4. */
32730 	uint8_t	queue_id4;
32731 	/*
32732 	 * Minimum BW allocated to CoS Queue.
32733 	 * The HWRM will translate this value into byte counter and
32734 	 * time interval used for this COS inside the device.
32735 	 */
32736 	uint32_t	queue_id4_min_bw;
32737 	/* The bandwidth value. */
32738 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_MASK \
32739 		UINT32_C(0xfffffff)
32740 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_SFT \
32741 		0
32742 	/* The granularity of the value (bits or bytes). */
32743 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE \
32744 		UINT32_C(0x10000000)
32745 	/* Value is in bits. */
32746 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE_BITS \
32747 		(UINT32_C(0x0) << 28)
32748 	/* Value is in bytes. */
32749 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE_BYTES \
32750 		(UINT32_C(0x1) << 28)
32751 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE_LAST \
32752 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE_BYTES
32753 	/* bw_value_unit is 3 b */
32754 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_MASK \
32755 		UINT32_C(0xe0000000)
32756 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_SFT \
32757 		29
32758 	/* Value is in Mb or MB (base 10). */
32759 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_MEGA \
32760 		(UINT32_C(0x0) << 29)
32761 	/* Value is in Kb or KB (base 10). */
32762 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_KILO \
32763 		(UINT32_C(0x2) << 29)
32764 	/* Value is in bits or bytes. */
32765 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_BASE \
32766 		(UINT32_C(0x4) << 29)
32767 	/* Value is in Gb or GB (base 10). */
32768 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_GIGA \
32769 		(UINT32_C(0x6) << 29)
32770 	/* Value is in 1/100th of a percentage of total bandwidth. */
32771 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
32772 		(UINT32_C(0x1) << 29)
32773 	/* Invalid unit */
32774 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_INVALID \
32775 		(UINT32_C(0x7) << 29)
32776 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_LAST \
32777 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_INVALID
32778 	/*
32779 	 * Maximum BW allocated to CoS queue.
32780 	 * The HWRM will translate this value into byte counter and
32781 	 * time interval used for this COS inside the device.
32782 	 */
32783 	uint32_t	queue_id4_max_bw;
32784 	/* The bandwidth value. */
32785 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_MASK \
32786 		UINT32_C(0xfffffff)
32787 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_SFT \
32788 		0
32789 	/* The granularity of the value (bits or bytes). */
32790 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE \
32791 		UINT32_C(0x10000000)
32792 	/* Value is in bits. */
32793 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE_BITS \
32794 		(UINT32_C(0x0) << 28)
32795 	/* Value is in bytes. */
32796 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE_BYTES \
32797 		(UINT32_C(0x1) << 28)
32798 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE_LAST \
32799 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE_BYTES
32800 	/* bw_value_unit is 3 b */
32801 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_MASK \
32802 		UINT32_C(0xe0000000)
32803 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_SFT \
32804 		29
32805 	/* Value is in Mb or MB (base 10). */
32806 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_MEGA \
32807 		(UINT32_C(0x0) << 29)
32808 	/* Value is in Kb or KB (base 10). */
32809 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_KILO \
32810 		(UINT32_C(0x2) << 29)
32811 	/* Value is in bits or bytes. */
32812 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_BASE \
32813 		(UINT32_C(0x4) << 29)
32814 	/* Value is in Gb or GB (base 10). */
32815 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_GIGA \
32816 		(UINT32_C(0x6) << 29)
32817 	/* Value is in 1/100th of a percentage of total bandwidth. */
32818 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
32819 		(UINT32_C(0x1) << 29)
32820 	/* Invalid unit */
32821 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_INVALID \
32822 		(UINT32_C(0x7) << 29)
32823 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_LAST \
32824 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_INVALID
32825 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
32826 	uint8_t	queue_id4_tsa_assign;
32827 	/* Strict Priority */
32828 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_TSA_ASSIGN_SP \
32829 		UINT32_C(0x0)
32830 	/* Enhanced Transmission Selection */
32831 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_TSA_ASSIGN_ETS \
32832 		UINT32_C(0x1)
32833 	/* reserved. */
32834 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_TSA_ASSIGN_RESERVED_FIRST \
32835 		UINT32_C(0x2)
32836 	/* reserved. */
32837 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_TSA_ASSIGN_RESERVED_LAST \
32838 		UINT32_C(0xff)
32839 	/*
32840 	 * Priority level for strict priority. Valid only when the
32841 	 * tsa_assign is 0 - Strict Priority (SP)
32842 	 * 0..7 - Valid values.
32843 	 * 8..255 - Reserved.
32844 	 */
32845 	uint8_t	queue_id4_pri_lvl;
32846 	/*
32847 	 * Weight used to allocate remaining BW for this COS after
32848 	 * servicing guaranteed bandwidths for all COS.
32849 	 */
32850 	uint8_t	queue_id4_bw_weight;
32851 	/* ID of CoS Queue 5. */
32852 	uint8_t	queue_id5;
32853 	/*
32854 	 * Minimum BW allocated to CoS Queue.
32855 	 * The HWRM will translate this value into byte counter and
32856 	 * time interval used for this COS inside the device.
32857 	 */
32858 	uint32_t	queue_id5_min_bw;
32859 	/* The bandwidth value. */
32860 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_MASK \
32861 		UINT32_C(0xfffffff)
32862 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_SFT \
32863 		0
32864 	/* The granularity of the value (bits or bytes). */
32865 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE \
32866 		UINT32_C(0x10000000)
32867 	/* Value is in bits. */
32868 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE_BITS \
32869 		(UINT32_C(0x0) << 28)
32870 	/* Value is in bytes. */
32871 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE_BYTES \
32872 		(UINT32_C(0x1) << 28)
32873 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE_LAST \
32874 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE_BYTES
32875 	/* bw_value_unit is 3 b */
32876 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_MASK \
32877 		UINT32_C(0xe0000000)
32878 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_SFT \
32879 		29
32880 	/* Value is in Mb or MB (base 10). */
32881 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_MEGA \
32882 		(UINT32_C(0x0) << 29)
32883 	/* Value is in Kb or KB (base 10). */
32884 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_KILO \
32885 		(UINT32_C(0x2) << 29)
32886 	/* Value is in bits or bytes. */
32887 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_BASE \
32888 		(UINT32_C(0x4) << 29)
32889 	/* Value is in Gb or GB (base 10). */
32890 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_GIGA \
32891 		(UINT32_C(0x6) << 29)
32892 	/* Value is in 1/100th of a percentage of total bandwidth. */
32893 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
32894 		(UINT32_C(0x1) << 29)
32895 	/* Invalid unit */
32896 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_INVALID \
32897 		(UINT32_C(0x7) << 29)
32898 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_LAST \
32899 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_INVALID
32900 	/*
32901 	 * Maximum BW allocated to CoS queue.
32902 	 * The HWRM will translate this value into byte counter and
32903 	 * time interval used for this COS inside the device.
32904 	 */
32905 	uint32_t	queue_id5_max_bw;
32906 	/* The bandwidth value. */
32907 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_MASK \
32908 		UINT32_C(0xfffffff)
32909 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_SFT \
32910 		0
32911 	/* The granularity of the value (bits or bytes). */
32912 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE \
32913 		UINT32_C(0x10000000)
32914 	/* Value is in bits. */
32915 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE_BITS \
32916 		(UINT32_C(0x0) << 28)
32917 	/* Value is in bytes. */
32918 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE_BYTES \
32919 		(UINT32_C(0x1) << 28)
32920 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE_LAST \
32921 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE_BYTES
32922 	/* bw_value_unit is 3 b */
32923 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_MASK \
32924 		UINT32_C(0xe0000000)
32925 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_SFT \
32926 		29
32927 	/* Value is in Mb or MB (base 10). */
32928 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_MEGA \
32929 		(UINT32_C(0x0) << 29)
32930 	/* Value is in Kb or KB (base 10). */
32931 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_KILO \
32932 		(UINT32_C(0x2) << 29)
32933 	/* Value is in bits or bytes. */
32934 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_BASE \
32935 		(UINT32_C(0x4) << 29)
32936 	/* Value is in Gb or GB (base 10). */
32937 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_GIGA \
32938 		(UINT32_C(0x6) << 29)
32939 	/* Value is in 1/100th of a percentage of total bandwidth. */
32940 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
32941 		(UINT32_C(0x1) << 29)
32942 	/* Invalid unit */
32943 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_INVALID \
32944 		(UINT32_C(0x7) << 29)
32945 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_LAST \
32946 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_INVALID
32947 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
32948 	uint8_t	queue_id5_tsa_assign;
32949 	/* Strict Priority */
32950 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_TSA_ASSIGN_SP \
32951 		UINT32_C(0x0)
32952 	/* Enhanced Transmission Selection */
32953 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_TSA_ASSIGN_ETS \
32954 		UINT32_C(0x1)
32955 	/* reserved. */
32956 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_TSA_ASSIGN_RESERVED_FIRST \
32957 		UINT32_C(0x2)
32958 	/* reserved. */
32959 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_TSA_ASSIGN_RESERVED_LAST \
32960 		UINT32_C(0xff)
32961 	/*
32962 	 * Priority level for strict priority. Valid only when the
32963 	 * tsa_assign is 0 - Strict Priority (SP)
32964 	 * 0..7 - Valid values.
32965 	 * 8..255 - Reserved.
32966 	 */
32967 	uint8_t	queue_id5_pri_lvl;
32968 	/*
32969 	 * Weight used to allocate remaining BW for this COS after
32970 	 * servicing guaranteed bandwidths for all COS.
32971 	 */
32972 	uint8_t	queue_id5_bw_weight;
32973 	/* ID of CoS Queue 6. */
32974 	uint8_t	queue_id6;
32975 	/*
32976 	 * Minimum BW allocated to CoS Queue.
32977 	 * The HWRM will translate this value into byte counter and
32978 	 * time interval used for this COS inside the device.
32979 	 */
32980 	uint32_t	queue_id6_min_bw;
32981 	/* The bandwidth value. */
32982 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_MASK \
32983 		UINT32_C(0xfffffff)
32984 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_SFT \
32985 		0
32986 	/* The granularity of the value (bits or bytes). */
32987 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE \
32988 		UINT32_C(0x10000000)
32989 	/* Value is in bits. */
32990 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE_BITS \
32991 		(UINT32_C(0x0) << 28)
32992 	/* Value is in bytes. */
32993 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE_BYTES \
32994 		(UINT32_C(0x1) << 28)
32995 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE_LAST \
32996 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE_BYTES
32997 	/* bw_value_unit is 3 b */
32998 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_MASK \
32999 		UINT32_C(0xe0000000)
33000 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_SFT \
33001 		29
33002 	/* Value is in Mb or MB (base 10). */
33003 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_MEGA \
33004 		(UINT32_C(0x0) << 29)
33005 	/* Value is in Kb or KB (base 10). */
33006 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_KILO \
33007 		(UINT32_C(0x2) << 29)
33008 	/* Value is in bits or bytes. */
33009 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_BASE \
33010 		(UINT32_C(0x4) << 29)
33011 	/* Value is in Gb or GB (base 10). */
33012 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_GIGA \
33013 		(UINT32_C(0x6) << 29)
33014 	/* Value is in 1/100th of a percentage of total bandwidth. */
33015 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
33016 		(UINT32_C(0x1) << 29)
33017 	/* Invalid unit */
33018 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_INVALID \
33019 		(UINT32_C(0x7) << 29)
33020 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_LAST \
33021 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_INVALID
33022 	/*
33023 	 * Maximum BW allocated to CoS queue.
33024 	 * The HWRM will translate this value into byte counter and
33025 	 * time interval used for this COS inside the device.
33026 	 */
33027 	uint32_t	queue_id6_max_bw;
33028 	/* The bandwidth value. */
33029 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_MASK \
33030 		UINT32_C(0xfffffff)
33031 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_SFT \
33032 		0
33033 	/* The granularity of the value (bits or bytes). */
33034 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE \
33035 		UINT32_C(0x10000000)
33036 	/* Value is in bits. */
33037 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE_BITS \
33038 		(UINT32_C(0x0) << 28)
33039 	/* Value is in bytes. */
33040 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE_BYTES \
33041 		(UINT32_C(0x1) << 28)
33042 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE_LAST \
33043 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE_BYTES
33044 	/* bw_value_unit is 3 b */
33045 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_MASK \
33046 		UINT32_C(0xe0000000)
33047 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_SFT \
33048 		29
33049 	/* Value is in Mb or MB (base 10). */
33050 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_MEGA \
33051 		(UINT32_C(0x0) << 29)
33052 	/* Value is in Kb or KB (base 10). */
33053 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_KILO \
33054 		(UINT32_C(0x2) << 29)
33055 	/* Value is in bits or bytes. */
33056 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_BASE \
33057 		(UINT32_C(0x4) << 29)
33058 	/* Value is in Gb or GB (base 10). */
33059 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_GIGA \
33060 		(UINT32_C(0x6) << 29)
33061 	/* Value is in 1/100th of a percentage of total bandwidth. */
33062 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
33063 		(UINT32_C(0x1) << 29)
33064 	/* Invalid unit */
33065 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_INVALID \
33066 		(UINT32_C(0x7) << 29)
33067 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_LAST \
33068 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_INVALID
33069 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
33070 	uint8_t	queue_id6_tsa_assign;
33071 	/* Strict Priority */
33072 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_TSA_ASSIGN_SP \
33073 		UINT32_C(0x0)
33074 	/* Enhanced Transmission Selection */
33075 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_TSA_ASSIGN_ETS \
33076 		UINT32_C(0x1)
33077 	/* reserved. */
33078 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_TSA_ASSIGN_RESERVED_FIRST \
33079 		UINT32_C(0x2)
33080 	/* reserved. */
33081 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_TSA_ASSIGN_RESERVED_LAST \
33082 		UINT32_C(0xff)
33083 	/*
33084 	 * Priority level for strict priority. Valid only when the
33085 	 * tsa_assign is 0 - Strict Priority (SP)
33086 	 * 0..7 - Valid values.
33087 	 * 8..255 - Reserved.
33088 	 */
33089 	uint8_t	queue_id6_pri_lvl;
33090 	/*
33091 	 * Weight used to allocate remaining BW for this COS after
33092 	 * servicing guaranteed bandwidths for all COS.
33093 	 */
33094 	uint8_t	queue_id6_bw_weight;
33095 	/* ID of CoS Queue 7. */
33096 	uint8_t	queue_id7;
33097 	/*
33098 	 * Minimum BW allocated to CoS Queue.
33099 	 * The HWRM will translate this value into byte counter and
33100 	 * time interval used for this COS inside the device.
33101 	 */
33102 	uint32_t	queue_id7_min_bw;
33103 	/* The bandwidth value. */
33104 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_MASK \
33105 		UINT32_C(0xfffffff)
33106 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_SFT \
33107 		0
33108 	/* The granularity of the value (bits or bytes). */
33109 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE \
33110 		UINT32_C(0x10000000)
33111 	/* Value is in bits. */
33112 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE_BITS \
33113 		(UINT32_C(0x0) << 28)
33114 	/* Value is in bytes. */
33115 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE_BYTES \
33116 		(UINT32_C(0x1) << 28)
33117 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE_LAST \
33118 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE_BYTES
33119 	/* bw_value_unit is 3 b */
33120 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_MASK \
33121 		UINT32_C(0xe0000000)
33122 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_SFT \
33123 		29
33124 	/* Value is in Mb or MB (base 10). */
33125 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_MEGA \
33126 		(UINT32_C(0x0) << 29)
33127 	/* Value is in Kb or KB (base 10). */
33128 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_KILO \
33129 		(UINT32_C(0x2) << 29)
33130 	/* Value is in bits or bytes. */
33131 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_BASE \
33132 		(UINT32_C(0x4) << 29)
33133 	/* Value is in Gb or GB (base 10). */
33134 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_GIGA \
33135 		(UINT32_C(0x6) << 29)
33136 	/* Value is in 1/100th of a percentage of total bandwidth. */
33137 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
33138 		(UINT32_C(0x1) << 29)
33139 	/* Invalid unit */
33140 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_INVALID \
33141 		(UINT32_C(0x7) << 29)
33142 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_LAST \
33143 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_INVALID
33144 	/*
33145 	 * Maximum BW allocated to CoS queue.
33146 	 * The HWRM will translate this value into byte counter and
33147 	 * time interval used for this COS inside the device.
33148 	 */
33149 	uint32_t	queue_id7_max_bw;
33150 	/* The bandwidth value. */
33151 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_MASK \
33152 		UINT32_C(0xfffffff)
33153 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_SFT \
33154 		0
33155 	/* The granularity of the value (bits or bytes). */
33156 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE \
33157 		UINT32_C(0x10000000)
33158 	/* Value is in bits. */
33159 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE_BITS \
33160 		(UINT32_C(0x0) << 28)
33161 	/* Value is in bytes. */
33162 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE_BYTES \
33163 		(UINT32_C(0x1) << 28)
33164 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE_LAST \
33165 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE_BYTES
33166 	/* bw_value_unit is 3 b */
33167 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_MASK \
33168 		UINT32_C(0xe0000000)
33169 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_SFT \
33170 		29
33171 	/* Value is in Mb or MB (base 10). */
33172 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_MEGA \
33173 		(UINT32_C(0x0) << 29)
33174 	/* Value is in Kb or KB (base 10). */
33175 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_KILO \
33176 		(UINT32_C(0x2) << 29)
33177 	/* Value is in bits or bytes. */
33178 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_BASE \
33179 		(UINT32_C(0x4) << 29)
33180 	/* Value is in Gb or GB (base 10). */
33181 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_GIGA \
33182 		(UINT32_C(0x6) << 29)
33183 	/* Value is in 1/100th of a percentage of total bandwidth. */
33184 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
33185 		(UINT32_C(0x1) << 29)
33186 	/* Invalid unit */
33187 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_INVALID \
33188 		(UINT32_C(0x7) << 29)
33189 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_LAST \
33190 		HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_INVALID
33191 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
33192 	uint8_t	queue_id7_tsa_assign;
33193 	/* Strict Priority */
33194 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_TSA_ASSIGN_SP \
33195 		UINT32_C(0x0)
33196 	/* Enhanced Transmission Selection */
33197 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_TSA_ASSIGN_ETS \
33198 		UINT32_C(0x1)
33199 	/* reserved. */
33200 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_FIRST \
33201 		UINT32_C(0x2)
33202 	/* reserved. */
33203 	#define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_LAST \
33204 		UINT32_C(0xff)
33205 	/*
33206 	 * Priority level for strict priority. Valid only when the
33207 	 * tsa_assign is 0 - Strict Priority (SP)
33208 	 * 0..7 - Valid values.
33209 	 * 8..255 - Reserved.
33210 	 */
33211 	uint8_t	queue_id7_pri_lvl;
33212 	/*
33213 	 * Weight used to allocate remaining BW for this COS after
33214 	 * servicing guaranteed bandwidths for all COS.
33215 	 */
33216 	uint8_t	queue_id7_bw_weight;
33217 	uint8_t	unused_2[4];
33218 	/*
33219 	 * This field is used in Output records to indicate that the output
33220 	 * is completely written to RAM. This field should be read as '1'
33221 	 * to indicate that the output has been completely written.
33222 	 * When writing a command completion or response to an internal processor,
33223 	 * the order of writes has to be such that this field is written last.
33224 	 */
33225 	uint8_t	valid;
33226 } __rte_packed;
33227 
33228 /*************************
33229  * hwrm_queue_cos2bw_cfg *
33230  *************************/
33231 
33232 
33233 /* hwrm_queue_cos2bw_cfg_input (size:1024b/128B) */
33234 struct hwrm_queue_cos2bw_cfg_input {
33235 	/* The HWRM command request type. */
33236 	uint16_t	req_type;
33237 	/*
33238 	 * The completion ring to send the completion event on. This should
33239 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
33240 	 */
33241 	uint16_t	cmpl_ring;
33242 	/*
33243 	 * The sequence ID is used by the driver for tracking multiple
33244 	 * commands. This ID is treated as opaque data by the firmware and
33245 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
33246 	 */
33247 	uint16_t	seq_id;
33248 	/*
33249 	 * The target ID of the command:
33250 	 * * 0x0-0xFFF8 - The function ID
33251 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
33252 	 * * 0xFFFD - Reserved for user-space HWRM interface
33253 	 * * 0xFFFF - HWRM
33254 	 */
33255 	uint16_t	target_id;
33256 	/*
33257 	 * A physical address pointer pointing to a host buffer that the
33258 	 * command's response data will be written. This can be either a host
33259 	 * physical address (HPA) or a guest physical address (GPA) and must
33260 	 * point to a physically contiguous block of memory.
33261 	 */
33262 	uint64_t	resp_addr;
33263 	uint32_t	flags;
33264 	uint32_t	enables;
33265 	/*
33266 	 * If this bit is set to 1, then all queue_id0 related
33267 	 * parameters in this command are valid.
33268 	 */
33269 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID0_VALID \
33270 		UINT32_C(0x1)
33271 	/*
33272 	 * If this bit is set to 1, then all queue_id1 related
33273 	 * parameters in this command are valid.
33274 	 */
33275 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID1_VALID \
33276 		UINT32_C(0x2)
33277 	/*
33278 	 * If this bit is set to 1, then all queue_id2 related
33279 	 * parameters in this command are valid.
33280 	 */
33281 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID2_VALID \
33282 		UINT32_C(0x4)
33283 	/*
33284 	 * If this bit is set to 1, then all queue_id3 related
33285 	 * parameters in this command are valid.
33286 	 */
33287 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID3_VALID \
33288 		UINT32_C(0x8)
33289 	/*
33290 	 * If this bit is set to 1, then all queue_id4 related
33291 	 * parameters in this command are valid.
33292 	 */
33293 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID4_VALID \
33294 		UINT32_C(0x10)
33295 	/*
33296 	 * If this bit is set to 1, then all queue_id5 related
33297 	 * parameters in this command are valid.
33298 	 */
33299 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID5_VALID \
33300 		UINT32_C(0x20)
33301 	/*
33302 	 * If this bit is set to 1, then all queue_id6 related
33303 	 * parameters in this command are valid.
33304 	 */
33305 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID6_VALID \
33306 		UINT32_C(0x40)
33307 	/*
33308 	 * If this bit is set to 1, then all queue_id7 related
33309 	 * parameters in this command are valid.
33310 	 */
33311 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID7_VALID \
33312 		UINT32_C(0x80)
33313 	/*
33314 	 * Port ID of port for which the table is being configured.
33315 	 * The HWRM needs to check whether this function is allowed
33316 	 * to configure TC BW assignment on this port.
33317 	 */
33318 	uint16_t	port_id;
33319 	/* ID of CoS Queue 0. */
33320 	uint8_t	queue_id0;
33321 	uint8_t	unused_0;
33322 	/*
33323 	 * Minimum BW allocated to CoS Queue.
33324 	 * The HWRM will translate this value into byte counter and
33325 	 * time interval used for this COS inside the device.
33326 	 */
33327 	uint32_t	queue_id0_min_bw;
33328 	/* The bandwidth value. */
33329 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_MASK \
33330 		UINT32_C(0xfffffff)
33331 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_SFT \
33332 		0
33333 	/* The granularity of the value (bits or bytes). */
33334 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE \
33335 		UINT32_C(0x10000000)
33336 	/* Value is in bits. */
33337 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE_BITS \
33338 		(UINT32_C(0x0) << 28)
33339 	/* Value is in bytes. */
33340 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE_BYTES \
33341 		(UINT32_C(0x1) << 28)
33342 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE_LAST \
33343 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE_BYTES
33344 	/* bw_value_unit is 3 b */
33345 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_MASK \
33346 		UINT32_C(0xe0000000)
33347 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_SFT \
33348 		29
33349 	/* Value is in Mb or MB (base 10). */
33350 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_MEGA \
33351 		(UINT32_C(0x0) << 29)
33352 	/* Value is in Kb or KB (base 10). */
33353 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_KILO \
33354 		(UINT32_C(0x2) << 29)
33355 	/* Value is in bits or bytes. */
33356 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_BASE \
33357 		(UINT32_C(0x4) << 29)
33358 	/* Value is in Gb or GB (base 10). */
33359 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_GIGA \
33360 		(UINT32_C(0x6) << 29)
33361 	/* Value is in 1/100th of a percentage of total bandwidth. */
33362 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
33363 		(UINT32_C(0x1) << 29)
33364 	/* Invalid unit */
33365 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_INVALID \
33366 		(UINT32_C(0x7) << 29)
33367 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_LAST \
33368 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_INVALID
33369 	/*
33370 	 * Maximum BW allocated to CoS Queue.
33371 	 * The HWRM will translate this value into byte counter and
33372 	 * time interval used for this COS inside the device.
33373 	 */
33374 	uint32_t	queue_id0_max_bw;
33375 	/* The bandwidth value. */
33376 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_MASK \
33377 		UINT32_C(0xfffffff)
33378 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_SFT \
33379 		0
33380 	/* The granularity of the value (bits or bytes). */
33381 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE \
33382 		UINT32_C(0x10000000)
33383 	/* Value is in bits. */
33384 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE_BITS \
33385 		(UINT32_C(0x0) << 28)
33386 	/* Value is in bytes. */
33387 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE_BYTES \
33388 		(UINT32_C(0x1) << 28)
33389 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE_LAST \
33390 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE_BYTES
33391 	/* bw_value_unit is 3 b */
33392 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_MASK \
33393 		UINT32_C(0xe0000000)
33394 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_SFT \
33395 		29
33396 	/* Value is in Mb or MB (base 10). */
33397 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_MEGA \
33398 		(UINT32_C(0x0) << 29)
33399 	/* Value is in Kb or KB (base 10). */
33400 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_KILO \
33401 		(UINT32_C(0x2) << 29)
33402 	/* Value is in bits or bytes. */
33403 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_BASE \
33404 		(UINT32_C(0x4) << 29)
33405 	/* Value is in Gb or GB (base 10). */
33406 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_GIGA \
33407 		(UINT32_C(0x6) << 29)
33408 	/* Value is in 1/100th of a percentage of total bandwidth. */
33409 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
33410 		(UINT32_C(0x1) << 29)
33411 	/* Invalid unit */
33412 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_INVALID \
33413 		(UINT32_C(0x7) << 29)
33414 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_LAST \
33415 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_INVALID
33416 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
33417 	uint8_t	queue_id0_tsa_assign;
33418 	/* Strict Priority */
33419 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_TSA_ASSIGN_SP \
33420 		UINT32_C(0x0)
33421 	/* Enhanced Transmission Selection */
33422 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_TSA_ASSIGN_ETS \
33423 		UINT32_C(0x1)
33424 	/* reserved. */
33425 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_TSA_ASSIGN_RESERVED_FIRST \
33426 		UINT32_C(0x2)
33427 	/* reserved. */
33428 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_TSA_ASSIGN_RESERVED_LAST \
33429 		UINT32_C(0xff)
33430 	/*
33431 	 * Priority level for strict priority. Valid only when the
33432 	 * tsa_assign is 0 - Strict Priority (SP)
33433 	 * 0..7 - Valid values.
33434 	 * 8..255 - Reserved.
33435 	 */
33436 	uint8_t	queue_id0_pri_lvl;
33437 	/*
33438 	 * Weight used to allocate remaining BW for this COS after
33439 	 * servicing guaranteed bandwidths for all COS.
33440 	 */
33441 	uint8_t	queue_id0_bw_weight;
33442 	/* ID of CoS Queue 1. */
33443 	uint8_t	queue_id1;
33444 	/*
33445 	 * Minimum BW allocated to CoS Queue.
33446 	 * The HWRM will translate this value into byte counter and
33447 	 * time interval used for this COS inside the device.
33448 	 */
33449 	uint32_t	queue_id1_min_bw;
33450 	/* The bandwidth value. */
33451 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_MASK \
33452 		UINT32_C(0xfffffff)
33453 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_SFT \
33454 		0
33455 	/* The granularity of the value (bits or bytes). */
33456 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE \
33457 		UINT32_C(0x10000000)
33458 	/* Value is in bits. */
33459 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE_BITS \
33460 		(UINT32_C(0x0) << 28)
33461 	/* Value is in bytes. */
33462 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE_BYTES \
33463 		(UINT32_C(0x1) << 28)
33464 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE_LAST \
33465 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE_BYTES
33466 	/* bw_value_unit is 3 b */
33467 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_MASK \
33468 		UINT32_C(0xe0000000)
33469 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_SFT \
33470 		29
33471 	/* Value is in Mb or MB (base 10). */
33472 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_MEGA \
33473 		(UINT32_C(0x0) << 29)
33474 	/* Value is in Kb or KB (base 10). */
33475 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_KILO \
33476 		(UINT32_C(0x2) << 29)
33477 	/* Value is in bits or bytes. */
33478 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_BASE \
33479 		(UINT32_C(0x4) << 29)
33480 	/* Value is in Gb or GB (base 10). */
33481 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_GIGA \
33482 		(UINT32_C(0x6) << 29)
33483 	/* Value is in 1/100th of a percentage of total bandwidth. */
33484 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
33485 		(UINT32_C(0x1) << 29)
33486 	/* Invalid unit */
33487 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_INVALID \
33488 		(UINT32_C(0x7) << 29)
33489 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_LAST \
33490 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_INVALID
33491 	/*
33492 	 * Maximum BW allocated to CoS queue.
33493 	 * The HWRM will translate this value into byte counter and
33494 	 * time interval used for this COS inside the device.
33495 	 */
33496 	uint32_t	queue_id1_max_bw;
33497 	/* The bandwidth value. */
33498 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_MASK \
33499 		UINT32_C(0xfffffff)
33500 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_SFT \
33501 		0
33502 	/* The granularity of the value (bits or bytes). */
33503 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE \
33504 		UINT32_C(0x10000000)
33505 	/* Value is in bits. */
33506 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE_BITS \
33507 		(UINT32_C(0x0) << 28)
33508 	/* Value is in bytes. */
33509 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE_BYTES \
33510 		(UINT32_C(0x1) << 28)
33511 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE_LAST \
33512 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE_BYTES
33513 	/* bw_value_unit is 3 b */
33514 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_MASK \
33515 		UINT32_C(0xe0000000)
33516 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_SFT \
33517 		29
33518 	/* Value is in Mb or MB (base 10). */
33519 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_MEGA \
33520 		(UINT32_C(0x0) << 29)
33521 	/* Value is in Kb or KB (base 10). */
33522 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_KILO \
33523 		(UINT32_C(0x2) << 29)
33524 	/* Value is in bits or bytes. */
33525 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_BASE \
33526 		(UINT32_C(0x4) << 29)
33527 	/* Value is in Gb or GB (base 10). */
33528 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_GIGA \
33529 		(UINT32_C(0x6) << 29)
33530 	/* Value is in 1/100th of a percentage of total bandwidth. */
33531 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
33532 		(UINT32_C(0x1) << 29)
33533 	/* Invalid unit */
33534 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_INVALID \
33535 		(UINT32_C(0x7) << 29)
33536 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_LAST \
33537 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_INVALID
33538 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
33539 	uint8_t	queue_id1_tsa_assign;
33540 	/* Strict Priority */
33541 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_TSA_ASSIGN_SP \
33542 		UINT32_C(0x0)
33543 	/* Enhanced Transmission Selection */
33544 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_TSA_ASSIGN_ETS \
33545 		UINT32_C(0x1)
33546 	/* reserved. */
33547 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_TSA_ASSIGN_RESERVED_FIRST \
33548 		UINT32_C(0x2)
33549 	/* reserved. */
33550 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_TSA_ASSIGN_RESERVED_LAST \
33551 		UINT32_C(0xff)
33552 	/*
33553 	 * Priority level for strict priority. Valid only when the
33554 	 * tsa_assign is 0 - Strict Priority (SP)
33555 	 * 0..7 - Valid values.
33556 	 * 8..255 - Reserved.
33557 	 */
33558 	uint8_t	queue_id1_pri_lvl;
33559 	/*
33560 	 * Weight used to allocate remaining BW for this COS after
33561 	 * servicing guaranteed bandwidths for all COS.
33562 	 */
33563 	uint8_t	queue_id1_bw_weight;
33564 	/* ID of CoS Queue 2. */
33565 	uint8_t	queue_id2;
33566 	/*
33567 	 * Minimum BW allocated to CoS Queue.
33568 	 * The HWRM will translate this value into byte counter and
33569 	 * time interval used for this COS inside the device.
33570 	 */
33571 	uint32_t	queue_id2_min_bw;
33572 	/* The bandwidth value. */
33573 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_MASK \
33574 		UINT32_C(0xfffffff)
33575 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_SFT \
33576 		0
33577 	/* The granularity of the value (bits or bytes). */
33578 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE \
33579 		UINT32_C(0x10000000)
33580 	/* Value is in bits. */
33581 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE_BITS \
33582 		(UINT32_C(0x0) << 28)
33583 	/* Value is in bytes. */
33584 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE_BYTES \
33585 		(UINT32_C(0x1) << 28)
33586 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE_LAST \
33587 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE_BYTES
33588 	/* bw_value_unit is 3 b */
33589 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_MASK \
33590 		UINT32_C(0xe0000000)
33591 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_SFT \
33592 		29
33593 	/* Value is in Mb or MB (base 10). */
33594 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_MEGA \
33595 		(UINT32_C(0x0) << 29)
33596 	/* Value is in Kb or KB (base 10). */
33597 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_KILO \
33598 		(UINT32_C(0x2) << 29)
33599 	/* Value is in bits or bytes. */
33600 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_BASE \
33601 		(UINT32_C(0x4) << 29)
33602 	/* Value is in Gb or GB (base 10). */
33603 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_GIGA \
33604 		(UINT32_C(0x6) << 29)
33605 	/* Value is in 1/100th of a percentage of total bandwidth. */
33606 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
33607 		(UINT32_C(0x1) << 29)
33608 	/* Invalid unit */
33609 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_INVALID \
33610 		(UINT32_C(0x7) << 29)
33611 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_LAST \
33612 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_INVALID
33613 	/*
33614 	 * Maximum BW allocated to CoS queue.
33615 	 * The HWRM will translate this value into byte counter and
33616 	 * time interval used for this COS inside the device.
33617 	 */
33618 	uint32_t	queue_id2_max_bw;
33619 	/* The bandwidth value. */
33620 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_MASK \
33621 		UINT32_C(0xfffffff)
33622 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_SFT \
33623 		0
33624 	/* The granularity of the value (bits or bytes). */
33625 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE \
33626 		UINT32_C(0x10000000)
33627 	/* Value is in bits. */
33628 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE_BITS \
33629 		(UINT32_C(0x0) << 28)
33630 	/* Value is in bytes. */
33631 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE_BYTES \
33632 		(UINT32_C(0x1) << 28)
33633 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE_LAST \
33634 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE_BYTES
33635 	/* bw_value_unit is 3 b */
33636 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_MASK \
33637 		UINT32_C(0xe0000000)
33638 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_SFT \
33639 		29
33640 	/* Value is in Mb or MB (base 10). */
33641 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_MEGA \
33642 		(UINT32_C(0x0) << 29)
33643 	/* Value is in Kb or KB (base 10). */
33644 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_KILO \
33645 		(UINT32_C(0x2) << 29)
33646 	/* Value is in bits or bytes. */
33647 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_BASE \
33648 		(UINT32_C(0x4) << 29)
33649 	/* Value is in Gb or GB (base 10). */
33650 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_GIGA \
33651 		(UINT32_C(0x6) << 29)
33652 	/* Value is in 1/100th of a percentage of total bandwidth. */
33653 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
33654 		(UINT32_C(0x1) << 29)
33655 	/* Invalid unit */
33656 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_INVALID \
33657 		(UINT32_C(0x7) << 29)
33658 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_LAST \
33659 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_INVALID
33660 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
33661 	uint8_t	queue_id2_tsa_assign;
33662 	/* Strict Priority */
33663 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_TSA_ASSIGN_SP \
33664 		UINT32_C(0x0)
33665 	/* Enhanced Transmission Selection */
33666 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_TSA_ASSIGN_ETS \
33667 		UINT32_C(0x1)
33668 	/* reserved. */
33669 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_TSA_ASSIGN_RESERVED_FIRST \
33670 		UINT32_C(0x2)
33671 	/* reserved. */
33672 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_TSA_ASSIGN_RESERVED_LAST \
33673 		UINT32_C(0xff)
33674 	/*
33675 	 * Priority level for strict priority. Valid only when the
33676 	 * tsa_assign is 0 - Strict Priority (SP)
33677 	 * 0..7 - Valid values.
33678 	 * 8..255 - Reserved.
33679 	 */
33680 	uint8_t	queue_id2_pri_lvl;
33681 	/*
33682 	 * Weight used to allocate remaining BW for this COS after
33683 	 * servicing guaranteed bandwidths for all COS.
33684 	 */
33685 	uint8_t	queue_id2_bw_weight;
33686 	/* ID of CoS Queue 3. */
33687 	uint8_t	queue_id3;
33688 	/*
33689 	 * Minimum BW allocated to CoS Queue.
33690 	 * The HWRM will translate this value into byte counter and
33691 	 * time interval used for this COS inside the device.
33692 	 */
33693 	uint32_t	queue_id3_min_bw;
33694 	/* The bandwidth value. */
33695 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_MASK \
33696 		UINT32_C(0xfffffff)
33697 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_SFT \
33698 		0
33699 	/* The granularity of the value (bits or bytes). */
33700 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE \
33701 		UINT32_C(0x10000000)
33702 	/* Value is in bits. */
33703 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE_BITS \
33704 		(UINT32_C(0x0) << 28)
33705 	/* Value is in bytes. */
33706 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE_BYTES \
33707 		(UINT32_C(0x1) << 28)
33708 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE_LAST \
33709 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE_BYTES
33710 	/* bw_value_unit is 3 b */
33711 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_MASK \
33712 		UINT32_C(0xe0000000)
33713 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_SFT \
33714 		29
33715 	/* Value is in Mb or MB (base 10). */
33716 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_MEGA \
33717 		(UINT32_C(0x0) << 29)
33718 	/* Value is in Kb or KB (base 10). */
33719 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_KILO \
33720 		(UINT32_C(0x2) << 29)
33721 	/* Value is in bits or bytes. */
33722 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_BASE \
33723 		(UINT32_C(0x4) << 29)
33724 	/* Value is in Gb or GB (base 10). */
33725 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_GIGA \
33726 		(UINT32_C(0x6) << 29)
33727 	/* Value is in 1/100th of a percentage of total bandwidth. */
33728 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
33729 		(UINT32_C(0x1) << 29)
33730 	/* Invalid unit */
33731 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_INVALID \
33732 		(UINT32_C(0x7) << 29)
33733 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_LAST \
33734 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_INVALID
33735 	/*
33736 	 * Maximum BW allocated to CoS queue.
33737 	 * The HWRM will translate this value into byte counter and
33738 	 * time interval used for this COS inside the device.
33739 	 */
33740 	uint32_t	queue_id3_max_bw;
33741 	/* The bandwidth value. */
33742 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_MASK \
33743 		UINT32_C(0xfffffff)
33744 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_SFT \
33745 		0
33746 	/* The granularity of the value (bits or bytes). */
33747 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE \
33748 		UINT32_C(0x10000000)
33749 	/* Value is in bits. */
33750 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE_BITS \
33751 		(UINT32_C(0x0) << 28)
33752 	/* Value is in bytes. */
33753 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE_BYTES \
33754 		(UINT32_C(0x1) << 28)
33755 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE_LAST \
33756 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE_BYTES
33757 	/* bw_value_unit is 3 b */
33758 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_MASK \
33759 		UINT32_C(0xe0000000)
33760 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_SFT \
33761 		29
33762 	/* Value is in Mb or MB (base 10). */
33763 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_MEGA \
33764 		(UINT32_C(0x0) << 29)
33765 	/* Value is in Kb or KB (base 10). */
33766 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_KILO \
33767 		(UINT32_C(0x2) << 29)
33768 	/* Value is in bits or bytes. */
33769 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_BASE \
33770 		(UINT32_C(0x4) << 29)
33771 	/* Value is in Gb or GB (base 10). */
33772 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_GIGA \
33773 		(UINT32_C(0x6) << 29)
33774 	/* Value is in 1/100th of a percentage of total bandwidth. */
33775 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
33776 		(UINT32_C(0x1) << 29)
33777 	/* Invalid unit */
33778 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_INVALID \
33779 		(UINT32_C(0x7) << 29)
33780 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_LAST \
33781 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_INVALID
33782 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
33783 	uint8_t	queue_id3_tsa_assign;
33784 	/* Strict Priority */
33785 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_TSA_ASSIGN_SP \
33786 		UINT32_C(0x0)
33787 	/* Enhanced Transmission Selection */
33788 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_TSA_ASSIGN_ETS \
33789 		UINT32_C(0x1)
33790 	/* reserved. */
33791 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_TSA_ASSIGN_RESERVED_FIRST \
33792 		UINT32_C(0x2)
33793 	/* reserved. */
33794 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_TSA_ASSIGN_RESERVED_LAST \
33795 		UINT32_C(0xff)
33796 	/*
33797 	 * Priority level for strict priority. Valid only when the
33798 	 * tsa_assign is 0 - Strict Priority (SP)
33799 	 * 0..7 - Valid values.
33800 	 * 8..255 - Reserved.
33801 	 */
33802 	uint8_t	queue_id3_pri_lvl;
33803 	/*
33804 	 * Weight used to allocate remaining BW for this COS after
33805 	 * servicing guaranteed bandwidths for all COS.
33806 	 */
33807 	uint8_t	queue_id3_bw_weight;
33808 	/* ID of CoS Queue 4. */
33809 	uint8_t	queue_id4;
33810 	/*
33811 	 * Minimum BW allocated to CoS Queue.
33812 	 * The HWRM will translate this value into byte counter and
33813 	 * time interval used for this COS inside the device.
33814 	 */
33815 	uint32_t	queue_id4_min_bw;
33816 	/* The bandwidth value. */
33817 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_MASK \
33818 		UINT32_C(0xfffffff)
33819 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_SFT \
33820 		0
33821 	/* The granularity of the value (bits or bytes). */
33822 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE \
33823 		UINT32_C(0x10000000)
33824 	/* Value is in bits. */
33825 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE_BITS \
33826 		(UINT32_C(0x0) << 28)
33827 	/* Value is in bytes. */
33828 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE_BYTES \
33829 		(UINT32_C(0x1) << 28)
33830 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE_LAST \
33831 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE_BYTES
33832 	/* bw_value_unit is 3 b */
33833 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_MASK \
33834 		UINT32_C(0xe0000000)
33835 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_SFT \
33836 		29
33837 	/* Value is in Mb or MB (base 10). */
33838 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_MEGA \
33839 		(UINT32_C(0x0) << 29)
33840 	/* Value is in Kb or KB (base 10). */
33841 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_KILO \
33842 		(UINT32_C(0x2) << 29)
33843 	/* Value is in bits or bytes. */
33844 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_BASE \
33845 		(UINT32_C(0x4) << 29)
33846 	/* Value is in Gb or GB (base 10). */
33847 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_GIGA \
33848 		(UINT32_C(0x6) << 29)
33849 	/* Value is in 1/100th of a percentage of total bandwidth. */
33850 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
33851 		(UINT32_C(0x1) << 29)
33852 	/* Invalid unit */
33853 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_INVALID \
33854 		(UINT32_C(0x7) << 29)
33855 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_LAST \
33856 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_INVALID
33857 	/*
33858 	 * Maximum BW allocated to CoS queue.
33859 	 * The HWRM will translate this value into byte counter and
33860 	 * time interval used for this COS inside the device.
33861 	 */
33862 	uint32_t	queue_id4_max_bw;
33863 	/* The bandwidth value. */
33864 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_MASK \
33865 		UINT32_C(0xfffffff)
33866 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_SFT \
33867 		0
33868 	/* The granularity of the value (bits or bytes). */
33869 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE \
33870 		UINT32_C(0x10000000)
33871 	/* Value is in bits. */
33872 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE_BITS \
33873 		(UINT32_C(0x0) << 28)
33874 	/* Value is in bytes. */
33875 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE_BYTES \
33876 		(UINT32_C(0x1) << 28)
33877 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE_LAST \
33878 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE_BYTES
33879 	/* bw_value_unit is 3 b */
33880 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_MASK \
33881 		UINT32_C(0xe0000000)
33882 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_SFT \
33883 		29
33884 	/* Value is in Mb or MB (base 10). */
33885 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_MEGA \
33886 		(UINT32_C(0x0) << 29)
33887 	/* Value is in Kb or KB (base 10). */
33888 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_KILO \
33889 		(UINT32_C(0x2) << 29)
33890 	/* Value is in bits or bytes. */
33891 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_BASE \
33892 		(UINT32_C(0x4) << 29)
33893 	/* Value is in Gb or GB (base 10). */
33894 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_GIGA \
33895 		(UINT32_C(0x6) << 29)
33896 	/* Value is in 1/100th of a percentage of total bandwidth. */
33897 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
33898 		(UINT32_C(0x1) << 29)
33899 	/* Invalid unit */
33900 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_INVALID \
33901 		(UINT32_C(0x7) << 29)
33902 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_LAST \
33903 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_INVALID
33904 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
33905 	uint8_t	queue_id4_tsa_assign;
33906 	/* Strict Priority */
33907 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_TSA_ASSIGN_SP \
33908 		UINT32_C(0x0)
33909 	/* Enhanced Transmission Selection */
33910 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_TSA_ASSIGN_ETS \
33911 		UINT32_C(0x1)
33912 	/* reserved. */
33913 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_TSA_ASSIGN_RESERVED_FIRST \
33914 		UINT32_C(0x2)
33915 	/* reserved. */
33916 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_TSA_ASSIGN_RESERVED_LAST \
33917 		UINT32_C(0xff)
33918 	/*
33919 	 * Priority level for strict priority. Valid only when the
33920 	 * tsa_assign is 0 - Strict Priority (SP)
33921 	 * 0..7 - Valid values.
33922 	 * 8..255 - Reserved.
33923 	 */
33924 	uint8_t	queue_id4_pri_lvl;
33925 	/*
33926 	 * Weight used to allocate remaining BW for this COS after
33927 	 * servicing guaranteed bandwidths for all COS.
33928 	 */
33929 	uint8_t	queue_id4_bw_weight;
33930 	/* ID of CoS Queue 5. */
33931 	uint8_t	queue_id5;
33932 	/*
33933 	 * Minimum BW allocated to CoS Queue.
33934 	 * The HWRM will translate this value into byte counter and
33935 	 * time interval used for this COS inside the device.
33936 	 */
33937 	uint32_t	queue_id5_min_bw;
33938 	/* The bandwidth value. */
33939 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_MASK \
33940 		UINT32_C(0xfffffff)
33941 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_SFT \
33942 		0
33943 	/* The granularity of the value (bits or bytes). */
33944 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE \
33945 		UINT32_C(0x10000000)
33946 	/* Value is in bits. */
33947 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE_BITS \
33948 		(UINT32_C(0x0) << 28)
33949 	/* Value is in bytes. */
33950 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE_BYTES \
33951 		(UINT32_C(0x1) << 28)
33952 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE_LAST \
33953 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE_BYTES
33954 	/* bw_value_unit is 3 b */
33955 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_MASK \
33956 		UINT32_C(0xe0000000)
33957 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_SFT \
33958 		29
33959 	/* Value is in Mb or MB (base 10). */
33960 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_MEGA \
33961 		(UINT32_C(0x0) << 29)
33962 	/* Value is in Kb or KB (base 10). */
33963 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_KILO \
33964 		(UINT32_C(0x2) << 29)
33965 	/* Value is in bits or bytes. */
33966 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_BASE \
33967 		(UINT32_C(0x4) << 29)
33968 	/* Value is in Gb or GB (base 10). */
33969 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_GIGA \
33970 		(UINT32_C(0x6) << 29)
33971 	/* Value is in 1/100th of a percentage of total bandwidth. */
33972 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
33973 		(UINT32_C(0x1) << 29)
33974 	/* Invalid unit */
33975 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_INVALID \
33976 		(UINT32_C(0x7) << 29)
33977 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_LAST \
33978 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_INVALID
33979 	/*
33980 	 * Maximum BW allocated to CoS queue.
33981 	 * The HWRM will translate this value into byte counter and
33982 	 * time interval used for this COS inside the device.
33983 	 */
33984 	uint32_t	queue_id5_max_bw;
33985 	/* The bandwidth value. */
33986 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_MASK \
33987 		UINT32_C(0xfffffff)
33988 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_SFT \
33989 		0
33990 	/* The granularity of the value (bits or bytes). */
33991 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE \
33992 		UINT32_C(0x10000000)
33993 	/* Value is in bits. */
33994 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE_BITS \
33995 		(UINT32_C(0x0) << 28)
33996 	/* Value is in bytes. */
33997 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE_BYTES \
33998 		(UINT32_C(0x1) << 28)
33999 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE_LAST \
34000 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE_BYTES
34001 	/* bw_value_unit is 3 b */
34002 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_MASK \
34003 		UINT32_C(0xe0000000)
34004 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_SFT \
34005 		29
34006 	/* Value is in Mb or MB (base 10). */
34007 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_MEGA \
34008 		(UINT32_C(0x0) << 29)
34009 	/* Value is in Kb or KB (base 10). */
34010 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_KILO \
34011 		(UINT32_C(0x2) << 29)
34012 	/* Value is in bits or bytes. */
34013 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_BASE \
34014 		(UINT32_C(0x4) << 29)
34015 	/* Value is in Gb or GB (base 10). */
34016 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_GIGA \
34017 		(UINT32_C(0x6) << 29)
34018 	/* Value is in 1/100th of a percentage of total bandwidth. */
34019 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
34020 		(UINT32_C(0x1) << 29)
34021 	/* Invalid unit */
34022 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_INVALID \
34023 		(UINT32_C(0x7) << 29)
34024 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_LAST \
34025 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_INVALID
34026 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
34027 	uint8_t	queue_id5_tsa_assign;
34028 	/* Strict Priority */
34029 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_TSA_ASSIGN_SP \
34030 		UINT32_C(0x0)
34031 	/* Enhanced Transmission Selection */
34032 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_TSA_ASSIGN_ETS \
34033 		UINT32_C(0x1)
34034 	/* reserved. */
34035 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_TSA_ASSIGN_RESERVED_FIRST \
34036 		UINT32_C(0x2)
34037 	/* reserved. */
34038 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_TSA_ASSIGN_RESERVED_LAST \
34039 		UINT32_C(0xff)
34040 	/*
34041 	 * Priority level for strict priority. Valid only when the
34042 	 * tsa_assign is 0 - Strict Priority (SP)
34043 	 * 0..7 - Valid values.
34044 	 * 8..255 - Reserved.
34045 	 */
34046 	uint8_t	queue_id5_pri_lvl;
34047 	/*
34048 	 * Weight used to allocate remaining BW for this COS after
34049 	 * servicing guaranteed bandwidths for all COS.
34050 	 */
34051 	uint8_t	queue_id5_bw_weight;
34052 	/* ID of CoS Queue 6. */
34053 	uint8_t	queue_id6;
34054 	/*
34055 	 * Minimum BW allocated to CoS Queue.
34056 	 * The HWRM will translate this value into byte counter and
34057 	 * time interval used for this COS inside the device.
34058 	 */
34059 	uint32_t	queue_id6_min_bw;
34060 	/* The bandwidth value. */
34061 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_MASK \
34062 		UINT32_C(0xfffffff)
34063 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_SFT \
34064 		0
34065 	/* The granularity of the value (bits or bytes). */
34066 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE \
34067 		UINT32_C(0x10000000)
34068 	/* Value is in bits. */
34069 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE_BITS \
34070 		(UINT32_C(0x0) << 28)
34071 	/* Value is in bytes. */
34072 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE_BYTES \
34073 		(UINT32_C(0x1) << 28)
34074 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE_LAST \
34075 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE_BYTES
34076 	/* bw_value_unit is 3 b */
34077 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_MASK \
34078 		UINT32_C(0xe0000000)
34079 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_SFT \
34080 		29
34081 	/* Value is in Mb or MB (base 10). */
34082 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_MEGA \
34083 		(UINT32_C(0x0) << 29)
34084 	/* Value is in Kb or KB (base 10). */
34085 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_KILO \
34086 		(UINT32_C(0x2) << 29)
34087 	/* Value is in bits or bytes. */
34088 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_BASE \
34089 		(UINT32_C(0x4) << 29)
34090 	/* Value is in Gb or GB (base 10). */
34091 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_GIGA \
34092 		(UINT32_C(0x6) << 29)
34093 	/* Value is in 1/100th of a percentage of total bandwidth. */
34094 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
34095 		(UINT32_C(0x1) << 29)
34096 	/* Invalid unit */
34097 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_INVALID \
34098 		(UINT32_C(0x7) << 29)
34099 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_LAST \
34100 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_INVALID
34101 	/*
34102 	 * Maximum BW allocated to CoS queue.
34103 	 * The HWRM will translate this value into byte counter and
34104 	 * time interval used for this COS inside the device.
34105 	 */
34106 	uint32_t	queue_id6_max_bw;
34107 	/* The bandwidth value. */
34108 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_MASK \
34109 		UINT32_C(0xfffffff)
34110 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_SFT \
34111 		0
34112 	/* The granularity of the value (bits or bytes). */
34113 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE \
34114 		UINT32_C(0x10000000)
34115 	/* Value is in bits. */
34116 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE_BITS \
34117 		(UINT32_C(0x0) << 28)
34118 	/* Value is in bytes. */
34119 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE_BYTES \
34120 		(UINT32_C(0x1) << 28)
34121 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE_LAST \
34122 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE_BYTES
34123 	/* bw_value_unit is 3 b */
34124 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_MASK \
34125 		UINT32_C(0xe0000000)
34126 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_SFT \
34127 		29
34128 	/* Value is in Mb or MB (base 10). */
34129 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_MEGA \
34130 		(UINT32_C(0x0) << 29)
34131 	/* Value is in Kb or KB (base 10). */
34132 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_KILO \
34133 		(UINT32_C(0x2) << 29)
34134 	/* Value is in bits or bytes. */
34135 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_BASE \
34136 		(UINT32_C(0x4) << 29)
34137 	/* Value is in Gb or GB (base 10). */
34138 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_GIGA \
34139 		(UINT32_C(0x6) << 29)
34140 	/* Value is in 1/100th of a percentage of total bandwidth. */
34141 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
34142 		(UINT32_C(0x1) << 29)
34143 	/* Invalid unit */
34144 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_INVALID \
34145 		(UINT32_C(0x7) << 29)
34146 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_LAST \
34147 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_INVALID
34148 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
34149 	uint8_t	queue_id6_tsa_assign;
34150 	/* Strict Priority */
34151 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_TSA_ASSIGN_SP \
34152 		UINT32_C(0x0)
34153 	/* Enhanced Transmission Selection */
34154 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_TSA_ASSIGN_ETS \
34155 		UINT32_C(0x1)
34156 	/* reserved. */
34157 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_TSA_ASSIGN_RESERVED_FIRST \
34158 		UINT32_C(0x2)
34159 	/* reserved. */
34160 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_TSA_ASSIGN_RESERVED_LAST \
34161 		UINT32_C(0xff)
34162 	/*
34163 	 * Priority level for strict priority. Valid only when the
34164 	 * tsa_assign is 0 - Strict Priority (SP)
34165 	 * 0..7 - Valid values.
34166 	 * 8..255 - Reserved.
34167 	 */
34168 	uint8_t	queue_id6_pri_lvl;
34169 	/*
34170 	 * Weight used to allocate remaining BW for this COS after
34171 	 * servicing guaranteed bandwidths for all COS.
34172 	 */
34173 	uint8_t	queue_id6_bw_weight;
34174 	/* ID of CoS Queue 7. */
34175 	uint8_t	queue_id7;
34176 	/*
34177 	 * Minimum BW allocated to CoS Queue.
34178 	 * The HWRM will translate this value into byte counter and
34179 	 * time interval used for this COS inside the device.
34180 	 */
34181 	uint32_t	queue_id7_min_bw;
34182 	/* The bandwidth value. */
34183 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_MASK \
34184 		UINT32_C(0xfffffff)
34185 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_SFT \
34186 		0
34187 	/* The granularity of the value (bits or bytes). */
34188 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE \
34189 		UINT32_C(0x10000000)
34190 	/* Value is in bits. */
34191 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE_BITS \
34192 		(UINT32_C(0x0) << 28)
34193 	/* Value is in bytes. */
34194 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE_BYTES \
34195 		(UINT32_C(0x1) << 28)
34196 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE_LAST \
34197 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE_BYTES
34198 	/* bw_value_unit is 3 b */
34199 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_MASK \
34200 		UINT32_C(0xe0000000)
34201 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_SFT \
34202 		29
34203 	/* Value is in Mb or MB (base 10). */
34204 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_MEGA \
34205 		(UINT32_C(0x0) << 29)
34206 	/* Value is in Kb or KB (base 10). */
34207 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_KILO \
34208 		(UINT32_C(0x2) << 29)
34209 	/* Value is in bits or bytes. */
34210 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_BASE \
34211 		(UINT32_C(0x4) << 29)
34212 	/* Value is in Gb or GB (base 10). */
34213 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_GIGA \
34214 		(UINT32_C(0x6) << 29)
34215 	/* Value is in 1/100th of a percentage of total bandwidth. */
34216 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
34217 		(UINT32_C(0x1) << 29)
34218 	/* Invalid unit */
34219 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_INVALID \
34220 		(UINT32_C(0x7) << 29)
34221 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_LAST \
34222 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_INVALID
34223 	/*
34224 	 * Maximum BW allocated to CoS queue.
34225 	 * The HWRM will translate this value into byte counter and
34226 	 * time interval used for this COS inside the device.
34227 	 */
34228 	uint32_t	queue_id7_max_bw;
34229 	/* The bandwidth value. */
34230 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_MASK \
34231 		UINT32_C(0xfffffff)
34232 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_SFT \
34233 		0
34234 	/* The granularity of the value (bits or bytes). */
34235 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE \
34236 		UINT32_C(0x10000000)
34237 	/* Value is in bits. */
34238 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE_BITS \
34239 		(UINT32_C(0x0) << 28)
34240 	/* Value is in bytes. */
34241 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE_BYTES \
34242 		(UINT32_C(0x1) << 28)
34243 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE_LAST \
34244 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE_BYTES
34245 	/* bw_value_unit is 3 b */
34246 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_MASK \
34247 		UINT32_C(0xe0000000)
34248 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_SFT \
34249 		29
34250 	/* Value is in Mb or MB (base 10). */
34251 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_MEGA \
34252 		(UINT32_C(0x0) << 29)
34253 	/* Value is in Kb or KB (base 10). */
34254 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_KILO \
34255 		(UINT32_C(0x2) << 29)
34256 	/* Value is in bits or bytes. */
34257 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_BASE \
34258 		(UINT32_C(0x4) << 29)
34259 	/* Value is in Gb or GB (base 10). */
34260 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_GIGA \
34261 		(UINT32_C(0x6) << 29)
34262 	/* Value is in 1/100th of a percentage of total bandwidth. */
34263 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
34264 		(UINT32_C(0x1) << 29)
34265 	/* Invalid unit */
34266 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_INVALID \
34267 		(UINT32_C(0x7) << 29)
34268 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_LAST \
34269 		HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_INVALID
34270 	/* Transmission Selection Algorithm (TSA) for CoS Queue. */
34271 	uint8_t	queue_id7_tsa_assign;
34272 	/* Strict Priority */
34273 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_SP \
34274 		UINT32_C(0x0)
34275 	/* Enhanced Transmission Selection */
34276 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_ETS \
34277 		UINT32_C(0x1)
34278 	/* reserved. */
34279 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_FIRST \
34280 		UINT32_C(0x2)
34281 	/* reserved. */
34282 	#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_LAST \
34283 		UINT32_C(0xff)
34284 	/*
34285 	 * Priority level for strict priority. Valid only when the
34286 	 * tsa_assign is 0 - Strict Priority (SP)
34287 	 * 0..7 - Valid values.
34288 	 * 8..255 - Reserved.
34289 	 */
34290 	uint8_t	queue_id7_pri_lvl;
34291 	/*
34292 	 * Weight used to allocate remaining BW for this COS after
34293 	 * servicing guaranteed bandwidths for all COS.
34294 	 */
34295 	uint8_t	queue_id7_bw_weight;
34296 	uint8_t	unused_1[5];
34297 } __rte_packed;
34298 
34299 /* hwrm_queue_cos2bw_cfg_output (size:128b/16B) */
34300 struct hwrm_queue_cos2bw_cfg_output {
34301 	/* The specific error status for the command. */
34302 	uint16_t	error_code;
34303 	/* The HWRM command request type. */
34304 	uint16_t	req_type;
34305 	/* The sequence ID from the original command. */
34306 	uint16_t	seq_id;
34307 	/* The length of the response data in number of bytes. */
34308 	uint16_t	resp_len;
34309 	uint8_t	unused_0[7];
34310 	/*
34311 	 * This field is used in Output records to indicate that the output
34312 	 * is completely written to RAM. This field should be read as '1'
34313 	 * to indicate that the output has been completely written.
34314 	 * When writing a command completion or response to an internal processor,
34315 	 * the order of writes has to be such that this field is written last.
34316 	 */
34317 	uint8_t	valid;
34318 } __rte_packed;
34319 
34320 /*************************
34321  * hwrm_queue_dscp_qcaps *
34322  *************************/
34323 
34324 
34325 /* hwrm_queue_dscp_qcaps_input (size:192b/24B) */
34326 struct hwrm_queue_dscp_qcaps_input {
34327 	/* The HWRM command request type. */
34328 	uint16_t	req_type;
34329 	/*
34330 	 * The completion ring to send the completion event on. This should
34331 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
34332 	 */
34333 	uint16_t	cmpl_ring;
34334 	/*
34335 	 * The sequence ID is used by the driver for tracking multiple
34336 	 * commands. This ID is treated as opaque data by the firmware and
34337 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
34338 	 */
34339 	uint16_t	seq_id;
34340 	/*
34341 	 * The target ID of the command:
34342 	 * * 0x0-0xFFF8 - The function ID
34343 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
34344 	 * * 0xFFFD - Reserved for user-space HWRM interface
34345 	 * * 0xFFFF - HWRM
34346 	 */
34347 	uint16_t	target_id;
34348 	/*
34349 	 * A physical address pointer pointing to a host buffer that the
34350 	 * command's response data will be written. This can be either a host
34351 	 * physical address (HPA) or a guest physical address (GPA) and must
34352 	 * point to a physically contiguous block of memory.
34353 	 */
34354 	uint64_t	resp_addr;
34355 	/*
34356 	 * Port ID of port for which the table is being configured.
34357 	 * The HWRM needs to check whether this function is allowed
34358 	 * to configure pri2cos mapping on this port.
34359 	 */
34360 	uint8_t	port_id;
34361 	uint8_t	unused_0[7];
34362 } __rte_packed;
34363 
34364 /* hwrm_queue_dscp_qcaps_output (size:128b/16B) */
34365 struct hwrm_queue_dscp_qcaps_output {
34366 	/* The specific error status for the command. */
34367 	uint16_t	error_code;
34368 	/* The HWRM command request type. */
34369 	uint16_t	req_type;
34370 	/* The sequence ID from the original command. */
34371 	uint16_t	seq_id;
34372 	/* The length of the response data in number of bytes. */
34373 	uint16_t	resp_len;
34374 	/* The number of bits provided by the hardware for the DSCP value. */
34375 	uint8_t	num_dscp_bits;
34376 	uint8_t	unused_0;
34377 	/* Max number of DSCP-MASK-PRI entries supported. */
34378 	uint16_t	max_entries;
34379 	uint8_t	unused_1[3];
34380 	/*
34381 	 * This field is used in Output records to indicate that the output
34382 	 * is completely written to RAM. This field should be read as '1'
34383 	 * to indicate that the output has been completely written.
34384 	 * When writing a command completion or response to an internal processor,
34385 	 * the order of writes has to be such that this field is written last.
34386 	 */
34387 	uint8_t	valid;
34388 } __rte_packed;
34389 
34390 /****************************
34391  * hwrm_queue_dscp2pri_qcfg *
34392  ****************************/
34393 
34394 
34395 /* hwrm_queue_dscp2pri_qcfg_input (size:256b/32B) */
34396 struct hwrm_queue_dscp2pri_qcfg_input {
34397 	/* The HWRM command request type. */
34398 	uint16_t	req_type;
34399 	/*
34400 	 * The completion ring to send the completion event on. This should
34401 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
34402 	 */
34403 	uint16_t	cmpl_ring;
34404 	/*
34405 	 * The sequence ID is used by the driver for tracking multiple
34406 	 * commands. This ID is treated as opaque data by the firmware and
34407 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
34408 	 */
34409 	uint16_t	seq_id;
34410 	/*
34411 	 * The target ID of the command:
34412 	 * * 0x0-0xFFF8 - The function ID
34413 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
34414 	 * * 0xFFFD - Reserved for user-space HWRM interface
34415 	 * * 0xFFFF - HWRM
34416 	 */
34417 	uint16_t	target_id;
34418 	/*
34419 	 * A physical address pointer pointing to a host buffer that the
34420 	 * command's response data will be written. This can be either a host
34421 	 * physical address (HPA) or a guest physical address (GPA) and must
34422 	 * point to a physically contiguous block of memory.
34423 	 */
34424 	uint64_t	resp_addr;
34425 	/*
34426 	 * This is the host address where the 24-bits DSCP-MASK-PRI
34427 	 * tuple(s) will be copied to.
34428 	 */
34429 	uint64_t	dest_data_addr;
34430 	/*
34431 	 * Port ID of port for which the table is being configured.
34432 	 * The HWRM needs to check whether this function is allowed
34433 	 * to configure pri2cos mapping on this port.
34434 	 */
34435 	uint8_t	port_id;
34436 	uint8_t	unused_0;
34437 	/* Size of the buffer pointed to by dest_data_addr. */
34438 	uint16_t	dest_data_buffer_size;
34439 	uint8_t	unused_1[4];
34440 } __rte_packed;
34441 
34442 /* hwrm_queue_dscp2pri_qcfg_output (size:128b/16B) */
34443 struct hwrm_queue_dscp2pri_qcfg_output {
34444 	/* The specific error status for the command. */
34445 	uint16_t	error_code;
34446 	/* The HWRM command request type. */
34447 	uint16_t	req_type;
34448 	/* The sequence ID from the original command. */
34449 	uint16_t	seq_id;
34450 	/* The length of the response data in number of bytes. */
34451 	uint16_t	resp_len;
34452 	/*
34453 	 * A count of the number of DSCP-MASK-PRI tuple(s) pointed to
34454 	 * by the dest_data_addr.
34455 	 */
34456 	uint16_t	entry_cnt;
34457 	/*
34458 	 * This is the default PRI which un-initialized DSCP values are
34459 	 * mapped to.
34460 	 */
34461 	uint8_t	default_pri;
34462 	uint8_t	unused_0[4];
34463 	/*
34464 	 * This field is used in Output records to indicate that the output
34465 	 * is completely written to RAM. This field should be read as '1'
34466 	 * to indicate that the output has been completely written.
34467 	 * When writing a command completion or response to an internal processor,
34468 	 * the order of writes has to be such that this field is written last.
34469 	 */
34470 	uint8_t	valid;
34471 } __rte_packed;
34472 
34473 /***************************
34474  * hwrm_queue_dscp2pri_cfg *
34475  ***************************/
34476 
34477 
34478 /* hwrm_queue_dscp2pri_cfg_input (size:320b/40B) */
34479 struct hwrm_queue_dscp2pri_cfg_input {
34480 	/* The HWRM command request type. */
34481 	uint16_t	req_type;
34482 	/*
34483 	 * The completion ring to send the completion event on. This should
34484 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
34485 	 */
34486 	uint16_t	cmpl_ring;
34487 	/*
34488 	 * The sequence ID is used by the driver for tracking multiple
34489 	 * commands. This ID is treated as opaque data by the firmware and
34490 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
34491 	 */
34492 	uint16_t	seq_id;
34493 	/*
34494 	 * The target ID of the command:
34495 	 * * 0x0-0xFFF8 - The function ID
34496 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
34497 	 * * 0xFFFD - Reserved for user-space HWRM interface
34498 	 * * 0xFFFF - HWRM
34499 	 */
34500 	uint16_t	target_id;
34501 	/*
34502 	 * A physical address pointer pointing to a host buffer that the
34503 	 * command's response data will be written. This can be either a host
34504 	 * physical address (HPA) or a guest physical address (GPA) and must
34505 	 * point to a physically contiguous block of memory.
34506 	 */
34507 	uint64_t	resp_addr;
34508 	/*
34509 	 * This is the host address where the 24-bits DSCP-MASK-PRI tuple
34510 	 * will be copied from. A non-zero mask "adds" a tuple, while
34511 	 * a mask equal to 0 triggers the firmware to remove a tuple.
34512 	 * Only tuples with unique DSCP values are stored. On chips
34513 	 * prior to Thor a mask can be 0 - 0x3f, while on Thor it can
34514 	 * be 0 or 0x3f.
34515 	 */
34516 	uint64_t	src_data_addr;
34517 	uint32_t	flags;
34518 	/* use_hw_default_pri is 1 b */
34519 	#define HWRM_QUEUE_DSCP2PRI_CFG_INPUT_FLAGS_USE_HW_DEFAULT_PRI \
34520 		UINT32_C(0x1)
34521 	uint32_t	enables;
34522 	/*
34523 	 * This bit must be '1' for the default_pri field to be
34524 	 * configured.
34525 	 */
34526 	#define HWRM_QUEUE_DSCP2PRI_CFG_INPUT_ENABLES_DEFAULT_PRI \
34527 		UINT32_C(0x1)
34528 	/*
34529 	 * Port ID of port for which the table is being configured.
34530 	 * The HWRM needs to check whether this function is allowed
34531 	 * to configure pri2cos mapping on this port.
34532 	 */
34533 	uint8_t	port_id;
34534 	/*
34535 	 * This is the default PRI which un-initialized DSCP values will be
34536 	 * mapped to.
34537 	 */
34538 	uint8_t	default_pri;
34539 	/*
34540 	 * A count of the number of DSCP-MASK-PRI tuple(s) in the data pointed
34541 	 * to by src_data_addr.
34542 	 */
34543 	uint16_t	entry_cnt;
34544 	uint8_t	unused_0[4];
34545 } __rte_packed;
34546 
34547 /* hwrm_queue_dscp2pri_cfg_output (size:128b/16B) */
34548 struct hwrm_queue_dscp2pri_cfg_output {
34549 	/* The specific error status for the command. */
34550 	uint16_t	error_code;
34551 	/* The HWRM command request type. */
34552 	uint16_t	req_type;
34553 	/* The sequence ID from the original command. */
34554 	uint16_t	seq_id;
34555 	/* The length of the response data in number of bytes. */
34556 	uint16_t	resp_len;
34557 	uint8_t	unused_0[7];
34558 	/*
34559 	 * This field is used in Output records to indicate that the output
34560 	 * is completely written to RAM. This field should be read as '1'
34561 	 * to indicate that the output has been completely written.
34562 	 * When writing a command completion or response to an internal processor,
34563 	 * the order of writes has to be such that this field is written last.
34564 	 */
34565 	uint8_t	valid;
34566 } __rte_packed;
34567 
34568 /*************************
34569  * hwrm_queue_mpls_qcaps *
34570  *************************/
34571 
34572 
34573 /* hwrm_queue_mpls_qcaps_input (size:192b/24B) */
34574 struct hwrm_queue_mpls_qcaps_input {
34575 	/* The HWRM command request type. */
34576 	uint16_t	req_type;
34577 	/*
34578 	 * The completion ring to send the completion event on. This should
34579 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
34580 	 */
34581 	uint16_t	cmpl_ring;
34582 	/*
34583 	 * The sequence ID is used by the driver for tracking multiple
34584 	 * commands. This ID is treated as opaque data by the firmware and
34585 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
34586 	 */
34587 	uint16_t	seq_id;
34588 	/*
34589 	 * The target ID of the command:
34590 	 * * 0x0-0xFFF8 - The function ID
34591 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
34592 	 * * 0xFFFD - Reserved for user-space HWRM interface
34593 	 * * 0xFFFF - HWRM
34594 	 */
34595 	uint16_t	target_id;
34596 	/*
34597 	 * A physical address pointer pointing to a host buffer that the
34598 	 * command's response data will be written. This can be either a host
34599 	 * physical address (HPA) or a guest physical address (GPA) and must
34600 	 * point to a physically contiguous block of memory.
34601 	 */
34602 	uint64_t	resp_addr;
34603 	/*
34604 	 * Port ID of port for which the table is being configured.
34605 	 * The HWRM needs to check whether this function is allowed
34606 	 * to configure MPLS TC(EXP) to pri mapping on this port.
34607 	 */
34608 	uint8_t	port_id;
34609 	uint8_t	unused_0[7];
34610 } __rte_packed;
34611 
34612 /* hwrm_queue_mpls_qcaps_output (size:128b/16B) */
34613 struct hwrm_queue_mpls_qcaps_output {
34614 	/* The specific error status for the command. */
34615 	uint16_t	error_code;
34616 	/* The HWRM command request type. */
34617 	uint16_t	req_type;
34618 	/* The sequence ID from the original command. */
34619 	uint16_t	seq_id;
34620 	/* The length of the response data in number of bytes. */
34621 	uint16_t	resp_len;
34622 	/*
34623 	 * Bitmask indicating which queues can be configured by the
34624 	 * hwrm_queue_mplstc2pri_cfg command.
34625 	 *
34626 	 * Each bit represents a specific pri where bit 0 represents
34627 	 * pri 0 and bit 7 represents pri 7.
34628 	 * # A value of 0 indicates that the pri is not configurable
34629 	 * by the hwrm_queue_mplstc2pri_cfg command.
34630 	 * # A value of 1 indicates that the pri is configurable.
34631 	 * # A hwrm_queue_mplstc2pri_cfg command shall return error when
34632 	 * trying to configure a pri that is not configurable.
34633 	 */
34634 	uint8_t	queue_mplstc2pri_cfg_allowed;
34635 	/*
34636 	 * This is the default PRI which un-initialized MPLS values will be
34637 	 * mapped to.
34638 	 */
34639 	uint8_t	hw_default_pri;
34640 	uint8_t	unused_0[5];
34641 	/*
34642 	 * This field is used in Output records to indicate that the output
34643 	 * is completely written to RAM. This field should be read as '1'
34644 	 * to indicate that the output has been completely written.
34645 	 * When writing a command completion or response to an internal processor,
34646 	 * the order of writes has to be such that this field is written last.
34647 	 */
34648 	uint8_t	valid;
34649 } __rte_packed;
34650 
34651 /******************************
34652  * hwrm_queue_mplstc2pri_qcfg *
34653  ******************************/
34654 
34655 
34656 /* hwrm_queue_mplstc2pri_qcfg_input (size:192b/24B) */
34657 struct hwrm_queue_mplstc2pri_qcfg_input {
34658 	/* The HWRM command request type. */
34659 	uint16_t	req_type;
34660 	/*
34661 	 * The completion ring to send the completion event on. This should
34662 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
34663 	 */
34664 	uint16_t	cmpl_ring;
34665 	/*
34666 	 * The sequence ID is used by the driver for tracking multiple
34667 	 * commands. This ID is treated as opaque data by the firmware and
34668 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
34669 	 */
34670 	uint16_t	seq_id;
34671 	/*
34672 	 * The target ID of the command:
34673 	 * * 0x0-0xFFF8 - The function ID
34674 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
34675 	 * * 0xFFFD - Reserved for user-space HWRM interface
34676 	 * * 0xFFFF - HWRM
34677 	 */
34678 	uint16_t	target_id;
34679 	/*
34680 	 * A physical address pointer pointing to a host buffer that the
34681 	 * command's response data will be written. This can be either a host
34682 	 * physical address (HPA) or a guest physical address (GPA) and must
34683 	 * point to a physically contiguous block of memory.
34684 	 */
34685 	uint64_t	resp_addr;
34686 	/*
34687 	 * Port ID of port for which the table is being configured.
34688 	 * The HWRM needs to check whether this function is allowed
34689 	 * to configure MPLS TC(EXP) to pri mapping on this port.
34690 	 */
34691 	uint8_t	port_id;
34692 	uint8_t	unused_0[7];
34693 } __rte_packed;
34694 
34695 /* hwrm_queue_mplstc2pri_qcfg_output (size:192b/24B) */
34696 struct hwrm_queue_mplstc2pri_qcfg_output {
34697 	/* The specific error status for the command. */
34698 	uint16_t	error_code;
34699 	/* The HWRM command request type. */
34700 	uint16_t	req_type;
34701 	/* The sequence ID from the original command. */
34702 	uint16_t	seq_id;
34703 	/* The length of the response data in number of bytes. */
34704 	uint16_t	resp_len;
34705 	/*
34706 	 * pri assigned to MPLS TC(EXP) 0. This value can only be changed
34707 	 * before traffic has started.
34708 	 * A value of 0xff indicates that no pri is assigned to the
34709 	 * MPLS TC(EXP) 0.
34710 	 */
34711 	uint8_t	tc0_pri_queue_id;
34712 	/*
34713 	 * pri assigned to MPLS TC(EXP) 1. This value can only be changed
34714 	 * before traffic has started.
34715 	 * A value of 0xff indicates that no pri is assigned to the
34716 	 * MPLS TC(EXP) 1.
34717 	 */
34718 	uint8_t	tc1_pri_queue_id;
34719 	/*
34720 	 * pri assigned to MPLS TC(EXP) 2. This value can only be changed
34721 	 * before traffic has started.
34722 	 * A value of 0xff indicates that no pri is assigned to the
34723 	 * MPLS TC(EXP) 2.
34724 	 */
34725 	uint8_t	tc2_pri_queue_id;
34726 	/*
34727 	 * pri assigned to MPLS TC(EXP) 3. This value can only be changed
34728 	 * before traffic has started.
34729 	 * A value of 0xff indicates that no pri is assigned to the
34730 	 * MPLS TC(EXP) 3.
34731 	 */
34732 	uint8_t	tc3_pri_queue_id;
34733 	/*
34734 	 * pri assigned to MPLS TC(EXP) 4. This value can only be changed
34735 	 * before traffic has started.
34736 	 * A value of 0xff indicates that no pri is assigned to the
34737 	 * MPLS TC(EXP) 4.
34738 	 */
34739 	uint8_t	tc4_pri_queue_id;
34740 	/*
34741 	 * pri assigned to MPLS TC(EXP) 5. This value can only be changed
34742 	 * before traffic has started.
34743 	 * A value of 0xff indicates that no pri is assigned to the
34744 	 * MPLS TC(EXP) 5.
34745 	 */
34746 	uint8_t	tc5_pri_queue_id;
34747 	/*
34748 	 * pri assigned to MPLS TC(EXP) 6. This value can only
34749 	 * be changed before traffic has started.
34750 	 * A value of 0xff indicates that no pri is assigned to the
34751 	 * MPLS TC(EXP) 6.
34752 	 */
34753 	uint8_t	tc6_pri_queue_id;
34754 	/*
34755 	 * pri assigned to MPLS TC(EXP) 7. This value can only
34756 	 * be changed before traffic has started.
34757 	 * A value of 0xff indicates that no pri is assigned to the
34758 	 * MPLS TC(EXP) 7.
34759 	 */
34760 	uint8_t	tc7_pri_queue_id;
34761 	uint8_t	unused_0[7];
34762 	/*
34763 	 * This field is used in Output records to indicate that the output
34764 	 * is completely written to RAM. This field should be read as '1'
34765 	 * to indicate that the output has been completely written.
34766 	 * When writing a command completion or response to an internal processor,
34767 	 * the order of writes has to be such that this field is written last.
34768 	 */
34769 	uint8_t	valid;
34770 } __rte_packed;
34771 
34772 /*****************************
34773  * hwrm_queue_mplstc2pri_cfg *
34774  *****************************/
34775 
34776 
34777 /* hwrm_queue_mplstc2pri_cfg_input (size:256b/32B) */
34778 struct hwrm_queue_mplstc2pri_cfg_input {
34779 	/* The HWRM command request type. */
34780 	uint16_t	req_type;
34781 	/*
34782 	 * The completion ring to send the completion event on. This should
34783 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
34784 	 */
34785 	uint16_t	cmpl_ring;
34786 	/*
34787 	 * The sequence ID is used by the driver for tracking multiple
34788 	 * commands. This ID is treated as opaque data by the firmware and
34789 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
34790 	 */
34791 	uint16_t	seq_id;
34792 	/*
34793 	 * The target ID of the command:
34794 	 * * 0x0-0xFFF8 - The function ID
34795 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
34796 	 * * 0xFFFD - Reserved for user-space HWRM interface
34797 	 * * 0xFFFF - HWRM
34798 	 */
34799 	uint16_t	target_id;
34800 	/*
34801 	 * A physical address pointer pointing to a host buffer that the
34802 	 * command's response data will be written. This can be either a host
34803 	 * physical address (HPA) or a guest physical address (GPA) and must
34804 	 * point to a physically contiguous block of memory.
34805 	 */
34806 	uint64_t	resp_addr;
34807 	uint32_t	enables;
34808 	/*
34809 	 * This bit must be '1' for the mplstc0_pri_queue_id field to be
34810 	 * configured.
34811 	 */
34812 	#define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC0_PRI_QUEUE_ID \
34813 		UINT32_C(0x1)
34814 	/*
34815 	 * This bit must be '1' for the mplstc1_pri_queue_id field to be
34816 	 * configured.
34817 	 */
34818 	#define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC1_PRI_QUEUE_ID \
34819 		UINT32_C(0x2)
34820 	/*
34821 	 * This bit must be '1' for the mplstc2_pri_queue_id field to be
34822 	 * configured.
34823 	 */
34824 	#define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC2_PRI_QUEUE_ID \
34825 		UINT32_C(0x4)
34826 	/*
34827 	 * This bit must be '1' for the mplstc3_pri_queue_id field to be
34828 	 * configured.
34829 	 */
34830 	#define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC3_PRI_QUEUE_ID \
34831 		UINT32_C(0x8)
34832 	/*
34833 	 * This bit must be '1' for the mplstc4_pri_queue_id field to be
34834 	 * configured.
34835 	 */
34836 	#define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC4_PRI_QUEUE_ID \
34837 		UINT32_C(0x10)
34838 	/*
34839 	 * This bit must be '1' for the mplstc5_pri_queue_id field to be
34840 	 * configured.
34841 	 */
34842 	#define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC5_PRI_QUEUE_ID \
34843 		UINT32_C(0x20)
34844 	/*
34845 	 * This bit must be '1' for the mplstc6_pri_queue_id field to be
34846 	 * configured.
34847 	 */
34848 	#define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC6_PRI_QUEUE_ID \
34849 		UINT32_C(0x40)
34850 	/*
34851 	 * This bit must be '1' for the mplstc7_pri_queue_id field to be
34852 	 * configured.
34853 	 */
34854 	#define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC7_PRI_QUEUE_ID \
34855 		UINT32_C(0x80)
34856 	/*
34857 	 * Port ID of port for which the table is being configured.
34858 	 * The HWRM needs to check whether this function is allowed
34859 	 * to configure MPLS TC(EXP)to pri mapping on this port.
34860 	 */
34861 	uint8_t	port_id;
34862 	uint8_t	unused_0[3];
34863 	/*
34864 	 * pri assigned to MPLS TC(EXP) 0. This value can only
34865 	 * be changed before traffic has started.
34866 	 */
34867 	uint8_t	tc0_pri_queue_id;
34868 	/*
34869 	 * pri assigned to MPLS TC(EXP) 1. This value can only
34870 	 * be changed before traffic has started.
34871 	 */
34872 	uint8_t	tc1_pri_queue_id;
34873 	/*
34874 	 * pri assigned to MPLS TC(EXP) 2  This value can only
34875 	 * be changed before traffic has started.
34876 	 */
34877 	uint8_t	tc2_pri_queue_id;
34878 	/*
34879 	 * pri assigned to MPLS TC(EXP) 3. This value can only
34880 	 * be changed before traffic has started.
34881 	 */
34882 	uint8_t	tc3_pri_queue_id;
34883 	/*
34884 	 * pri assigned to MPLS TC(EXP) 4. This value can only
34885 	 * be changed before traffic has started.
34886 	 */
34887 	uint8_t	tc4_pri_queue_id;
34888 	/*
34889 	 * pri assigned to MPLS TC(EXP) 5. This value can only
34890 	 * be changed before traffic has started.
34891 	 */
34892 	uint8_t	tc5_pri_queue_id;
34893 	/*
34894 	 * pri assigned to MPLS TC(EXP) 6. This value can only
34895 	 * be changed before traffic has started.
34896 	 */
34897 	uint8_t	tc6_pri_queue_id;
34898 	/*
34899 	 * pri assigned to MPLS TC(EXP) 7. This value can only
34900 	 * be changed before traffic has started.
34901 	 */
34902 	uint8_t	tc7_pri_queue_id;
34903 } __rte_packed;
34904 
34905 /* hwrm_queue_mplstc2pri_cfg_output (size:128b/16B) */
34906 struct hwrm_queue_mplstc2pri_cfg_output {
34907 	/* The specific error status for the command. */
34908 	uint16_t	error_code;
34909 	/* The HWRM command request type. */
34910 	uint16_t	req_type;
34911 	/* The sequence ID from the original command. */
34912 	uint16_t	seq_id;
34913 	/* The length of the response data in number of bytes. */
34914 	uint16_t	resp_len;
34915 	uint8_t	unused_0[7];
34916 	/*
34917 	 * This field is used in Output records to indicate that the output
34918 	 * is completely written to RAM. This field should be read as '1'
34919 	 * to indicate that the output has been completely written.
34920 	 * When writing a command completion or response to an internal processor,
34921 	 * the order of writes has to be such that this field is written last.
34922 	 */
34923 	uint8_t	valid;
34924 } __rte_packed;
34925 
34926 /****************************
34927  * hwrm_queue_vlanpri_qcaps *
34928  ****************************/
34929 
34930 
34931 /* hwrm_queue_vlanpri_qcaps_input (size:192b/24B) */
34932 struct hwrm_queue_vlanpri_qcaps_input {
34933 	/* The HWRM command request type. */
34934 	uint16_t	req_type;
34935 	/*
34936 	 * The completion ring to send the completion event on. This should
34937 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
34938 	 */
34939 	uint16_t	cmpl_ring;
34940 	/*
34941 	 * The sequence ID is used by the driver for tracking multiple
34942 	 * commands. This ID is treated as opaque data by the firmware and
34943 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
34944 	 */
34945 	uint16_t	seq_id;
34946 	/*
34947 	 * The target ID of the command:
34948 	 * * 0x0-0xFFF8 - The function ID
34949 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
34950 	 * * 0xFFFD - Reserved for user-space HWRM interface
34951 	 * * 0xFFFF - HWRM
34952 	 */
34953 	uint16_t	target_id;
34954 	/*
34955 	 * A physical address pointer pointing to a host buffer that the
34956 	 * command's response data will be written. This can be either a host
34957 	 * physical address (HPA) or a guest physical address (GPA) and must
34958 	 * point to a physically contiguous block of memory.
34959 	 */
34960 	uint64_t	resp_addr;
34961 	/*
34962 	 * Port ID of port for which the table is being configured.
34963 	 * The HWRM needs to check whether this function is allowed
34964 	 * to configure VLAN priority to user priority mapping on this port.
34965 	 */
34966 	uint8_t	port_id;
34967 	uint8_t	unused_0[7];
34968 } __rte_packed;
34969 
34970 /* hwrm_queue_vlanpri_qcaps_output (size:128b/16B) */
34971 struct hwrm_queue_vlanpri_qcaps_output {
34972 	/* The specific error status for the command. */
34973 	uint16_t	error_code;
34974 	/* The HWRM command request type. */
34975 	uint16_t	req_type;
34976 	/* The sequence ID from the original command. */
34977 	uint16_t	seq_id;
34978 	/* The length of the response data in number of bytes. */
34979 	uint16_t	resp_len;
34980 	/*
34981 	 * This is the default user priority which all VLAN priority values
34982 	 * are mapped to if there is no VLAN priority to user priority mapping.
34983 	 */
34984 	uint8_t	hw_default_pri;
34985 	uint8_t	unused_0[6];
34986 	/*
34987 	 * This field is used in Output records to indicate that the output
34988 	 * is completely written to RAM. This field should be read as '1'
34989 	 * to indicate that the output has been completely written.
34990 	 * When writing a command completion or response to an internal processor,
34991 	 * the order of writes has to be such that this field is written last.
34992 	 */
34993 	uint8_t	valid;
34994 } __rte_packed;
34995 
34996 /*******************************
34997  * hwrm_queue_vlanpri2pri_qcfg *
34998  *******************************/
34999 
35000 
35001 /* hwrm_queue_vlanpri2pri_qcfg_input (size:192b/24B) */
35002 struct hwrm_queue_vlanpri2pri_qcfg_input {
35003 	/* The HWRM command request type. */
35004 	uint16_t	req_type;
35005 	/*
35006 	 * The completion ring to send the completion event on. This should
35007 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
35008 	 */
35009 	uint16_t	cmpl_ring;
35010 	/*
35011 	 * The sequence ID is used by the driver for tracking multiple
35012 	 * commands. This ID is treated as opaque data by the firmware and
35013 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
35014 	 */
35015 	uint16_t	seq_id;
35016 	/*
35017 	 * The target ID of the command:
35018 	 * * 0x0-0xFFF8 - The function ID
35019 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
35020 	 * * 0xFFFD - Reserved for user-space HWRM interface
35021 	 * * 0xFFFF - HWRM
35022 	 */
35023 	uint16_t	target_id;
35024 	/*
35025 	 * A physical address pointer pointing to a host buffer that the
35026 	 * command's response data will be written. This can be either a host
35027 	 * physical address (HPA) or a guest physical address (GPA) and must
35028 	 * point to a physically contiguous block of memory.
35029 	 */
35030 	uint64_t	resp_addr;
35031 	/*
35032 	 * Port ID of port for which the table is being configured.
35033 	 * The HWRM needs to check whether this function is allowed
35034 	 * to configure VLAN priority to user priority mapping on this port.
35035 	 */
35036 	uint8_t	port_id;
35037 	uint8_t	unused_0[7];
35038 } __rte_packed;
35039 
35040 /* hwrm_queue_vlanpri2pri_qcfg_output (size:192b/24B) */
35041 struct hwrm_queue_vlanpri2pri_qcfg_output {
35042 	/* The specific error status for the command. */
35043 	uint16_t	error_code;
35044 	/* The HWRM command request type. */
35045 	uint16_t	req_type;
35046 	/* The sequence ID from the original command. */
35047 	uint16_t	seq_id;
35048 	/* The length of the response data in number of bytes. */
35049 	uint16_t	resp_len;
35050 	/*
35051 	 * User priority assigned to VLAN priority 0. A value of 0xff
35052 	 * indicates that no user priority is assigned. The default user
35053 	 * priority will be used.
35054 	 */
35055 	uint8_t	vlanpri0_user_pri_id;
35056 	/*
35057 	 * User priority assigned to VLAN priority 1. A value of 0xff
35058 	 * indicates that no user priority is assigned. The default user
35059 	 * priority will be used.
35060 	 */
35061 	uint8_t	vlanpri1_user_pri_id;
35062 	/*
35063 	 * User priority assigned to VLAN priority 2. A value of 0xff
35064 	 * indicates that no user priority is assigned. The default user
35065 	 * priority will be used.
35066 	 */
35067 	uint8_t	vlanpri2_user_pri_id;
35068 	/*
35069 	 * User priority assigned to VLAN priority 3. A value of 0xff
35070 	 * indicates that no user priority is assigned. The default user
35071 	 * priority will be used.
35072 	 */
35073 	uint8_t	vlanpri3_user_pri_id;
35074 	/*
35075 	 * User priority assigned to VLAN priority 4. A value of 0xff
35076 	 * indicates that no user priority is assigned. The default user
35077 	 * priority will be used.
35078 	 */
35079 	uint8_t	vlanpri4_user_pri_id;
35080 	/*
35081 	 * User priority assigned to VLAN priority 5. A value of 0xff
35082 	 * indicates that no user priority is assigned. The default user
35083 	 * priority will be used.
35084 	 */
35085 	uint8_t	vlanpri5_user_pri_id;
35086 	/*
35087 	 * User priority assigned to VLAN priority 6. A value of 0xff
35088 	 * indicates that no user priority is assigned. The default user
35089 	 * priority will be used.
35090 	 */
35091 	uint8_t	vlanpri6_user_pri_id;
35092 	/*
35093 	 * User priority assigned to VLAN priority 7. A value of 0xff
35094 	 * indicates that no user priority is assigned. The default user
35095 	 * priority will be used.
35096 	 */
35097 	uint8_t	vlanpri7_user_pri_id;
35098 	uint8_t	unused_0[7];
35099 	/*
35100 	 * This field is used in Output records to indicate that the output
35101 	 * is completely written to RAM. This field should be read as '1'
35102 	 * to indicate that the output has been completely written.
35103 	 * When writing a command completion or response to an internal processor,
35104 	 * the order of writes has to be such that this field is written last.
35105 	 */
35106 	uint8_t	valid;
35107 } __rte_packed;
35108 
35109 /******************************
35110  * hwrm_queue_vlanpri2pri_cfg *
35111  ******************************/
35112 
35113 
35114 /* hwrm_queue_vlanpri2pri_cfg_input (size:256b/32B) */
35115 struct hwrm_queue_vlanpri2pri_cfg_input {
35116 	/* The HWRM command request type. */
35117 	uint16_t	req_type;
35118 	/*
35119 	 * The completion ring to send the completion event on. This should
35120 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
35121 	 */
35122 	uint16_t	cmpl_ring;
35123 	/*
35124 	 * The sequence ID is used by the driver for tracking multiple
35125 	 * commands. This ID is treated as opaque data by the firmware and
35126 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
35127 	 */
35128 	uint16_t	seq_id;
35129 	/*
35130 	 * The target ID of the command:
35131 	 * * 0x0-0xFFF8 - The function ID
35132 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
35133 	 * * 0xFFFD - Reserved for user-space HWRM interface
35134 	 * * 0xFFFF - HWRM
35135 	 */
35136 	uint16_t	target_id;
35137 	/*
35138 	 * A physical address pointer pointing to a host buffer that the
35139 	 * command's response data will be written. This can be either a host
35140 	 * physical address (HPA) or a guest physical address (GPA) and must
35141 	 * point to a physically contiguous block of memory.
35142 	 */
35143 	uint64_t	resp_addr;
35144 	uint32_t	enables;
35145 	/*
35146 	 * This bit must be '1' for the vlanpri0_user_pri_id field to be
35147 	 * configured.
35148 	 */
35149 	#define HWRM_QUEUE_VLANPRI2PRI_CFG_INPUT_ENABLES_VLANPRI0_USER_PRI_ID \
35150 		UINT32_C(0x1)
35151 	/*
35152 	 * This bit must be '1' for the vlanpri1_user_pri_id field to be
35153 	 * configured.
35154 	 */
35155 	#define HWRM_QUEUE_VLANPRI2PRI_CFG_INPUT_ENABLES_VLANPRI1_USER_PRI_ID \
35156 		UINT32_C(0x2)
35157 	/*
35158 	 * This bit must be '1' for the vlanpri2_user_pri_id field to be
35159 	 * configured.
35160 	 */
35161 	#define HWRM_QUEUE_VLANPRI2PRI_CFG_INPUT_ENABLES_VLANPRI2_USER_PRI_ID \
35162 		UINT32_C(0x4)
35163 	/*
35164 	 * This bit must be '1' for the vlanpri3_user_pri_id field to be
35165 	 * configured.
35166 	 */
35167 	#define HWRM_QUEUE_VLANPRI2PRI_CFG_INPUT_ENABLES_VLANPRI3_USER_PRI_ID \
35168 		UINT32_C(0x8)
35169 	/*
35170 	 * This bit must be '1' for the vlanpri4_user_pri_id field to be
35171 	 * configured.
35172 	 */
35173 	#define HWRM_QUEUE_VLANPRI2PRI_CFG_INPUT_ENABLES_VLANPRI4_USER_PRI_ID \
35174 		UINT32_C(0x10)
35175 	/*
35176 	 * This bit must be '1' for the vlanpri5_user_pri_id field to be
35177 	 * configured.
35178 	 */
35179 	#define HWRM_QUEUE_VLANPRI2PRI_CFG_INPUT_ENABLES_VLANPRI5_USER_PRI_ID \
35180 		UINT32_C(0x20)
35181 	/*
35182 	 * This bit must be '1' for the vlanpri6_user_pri_id field to be
35183 	 * configured.
35184 	 */
35185 	#define HWRM_QUEUE_VLANPRI2PRI_CFG_INPUT_ENABLES_VLANPRI6_USER_PRI_ID \
35186 		UINT32_C(0x40)
35187 	/*
35188 	 * This bit must be '1' for the vlanpri7_user_pri_id field to be
35189 	 * configured.
35190 	 */
35191 	#define HWRM_QUEUE_VLANPRI2PRI_CFG_INPUT_ENABLES_VLANPRI7_USER_PRI_ID \
35192 		UINT32_C(0x80)
35193 	/*
35194 	 * Port ID of port for which the table is being configured.
35195 	 * The HWRM needs to check whether this function is allowed
35196 	 * to configure VLAN priority to user priority mapping on this port.
35197 	 */
35198 	uint8_t	port_id;
35199 	uint8_t	unused_0[3];
35200 	/*
35201 	 * User priority assigned to VLAN priority 0. This value can only
35202 	 * be changed before traffic has started.
35203 	 */
35204 	uint8_t	vlanpri0_user_pri_id;
35205 	/*
35206 	 * User priority assigned to VLAN priority 1. This value can only
35207 	 * be changed before traffic has started.
35208 	 */
35209 	uint8_t	vlanpri1_user_pri_id;
35210 	/*
35211 	 * User priority assigned to VLAN priority 2. This value can only
35212 	 * be changed before traffic has started.
35213 	 */
35214 	uint8_t	vlanpri2_user_pri_id;
35215 	/*
35216 	 * User priority assigned to VLAN priority 3. This value can only
35217 	 * be changed before traffic has started.
35218 	 */
35219 	uint8_t	vlanpri3_user_pri_id;
35220 	/*
35221 	 * User priority assigned to VLAN priority 4. This value can only
35222 	 * be changed before traffic has started.
35223 	 */
35224 	uint8_t	vlanpri4_user_pri_id;
35225 	/*
35226 	 * User priority assigned to VLAN priority 5. This value can only
35227 	 * be changed before traffic has started.
35228 	 */
35229 	uint8_t	vlanpri5_user_pri_id;
35230 	/*
35231 	 * User priority assigned to VLAN priority 6. This value can only
35232 	 * be changed before traffic has started.
35233 	 */
35234 	uint8_t	vlanpri6_user_pri_id;
35235 	/*
35236 	 * User priority assigned to VLAN priority 7. This value can only
35237 	 * be changed before traffic has started.
35238 	 */
35239 	uint8_t	vlanpri7_user_pri_id;
35240 } __rte_packed;
35241 
35242 /* hwrm_queue_vlanpri2pri_cfg_output (size:128b/16B) */
35243 struct hwrm_queue_vlanpri2pri_cfg_output {
35244 	/* The specific error status for the command. */
35245 	uint16_t	error_code;
35246 	/* The HWRM command request type. */
35247 	uint16_t	req_type;
35248 	/* The sequence ID from the original command. */
35249 	uint16_t	seq_id;
35250 	/* The length of the response data in number of bytes. */
35251 	uint16_t	resp_len;
35252 	uint8_t	unused_0[7];
35253 	/*
35254 	 * This field is used in Output records to indicate that the output
35255 	 * is completely written to RAM. This field should be read as '1'
35256 	 * to indicate that the output has been completely written.
35257 	 * When writing a command completion or response to an internal processor,
35258 	 * the order of writes has to be such that this field is written last.
35259 	 */
35260 	uint8_t	valid;
35261 } __rte_packed;
35262 
35263 /*************************
35264  * hwrm_queue_global_cfg *
35265  *************************/
35266 
35267 
35268 /* hwrm_queue_global_cfg_input (size:192b/24B) */
35269 struct hwrm_queue_global_cfg_input {
35270 	/* The HWRM command request type. */
35271 	uint16_t	req_type;
35272 	/*
35273 	 * The completion ring to send the completion event on. This should
35274 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
35275 	 */
35276 	uint16_t	cmpl_ring;
35277 	/*
35278 	 * The sequence ID is used by the driver for tracking multiple
35279 	 * commands. This ID is treated as opaque data by the firmware and
35280 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
35281 	 */
35282 	uint16_t	seq_id;
35283 	/*
35284 	 * The target ID of the command:
35285 	 * * 0x0-0xFFF8 - The function ID
35286 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
35287 	 * * 0xFFFD - Reserved for user-space HWRM interface
35288 	 * * 0xFFFF - HWRM
35289 	 */
35290 	uint16_t	target_id;
35291 	/*
35292 	 * A physical address pointer pointing to a host buffer that the
35293 	 * command's response data will be written. This can be either a host
35294 	 * physical address (HPA) or a guest physical address (GPA) and must
35295 	 * point to a physically contiguous block of memory.
35296 	 */
35297 	uint64_t	resp_addr;
35298 	/*
35299 	 * Configuration mode for rx cos queues, configuring whether they
35300 	 * use one shared buffer pool (across ports or PCIe endpoints) or
35301 	 * independent per port or per endpoint buffer pools.
35302 	 */
35303 	uint8_t	mode;
35304 	/* One shared buffer pool to be used by all RX CoS queues */
35305 	#define HWRM_QUEUE_GLOBAL_CFG_INPUT_MODE_SHARED      UINT32_C(0x0)
35306 	/*
35307 	 * Each port or PCIe endpoint to use an independent buffer pool
35308 	 * for its RX CoS queues
35309 	 */
35310 	#define HWRM_QUEUE_GLOBAL_CFG_INPUT_MODE_INDEPENDENT UINT32_C(0x1)
35311 	#define HWRM_QUEUE_GLOBAL_CFG_INPUT_MODE_LAST \
35312 		HWRM_QUEUE_GLOBAL_CFG_INPUT_MODE_INDEPENDENT
35313 	uint8_t	unused_0;
35314 	uint16_t	enables;
35315 	/* This bit must be '1' when the mode field is configured. */
35316 	#define HWRM_QUEUE_GLOBAL_CFG_INPUT_ENABLES_MODE          UINT32_C(0x1)
35317 	/*
35318 	 * This bit must be '1' when the maximum bandwidth for queue group 0
35319 	 * (g0_max_bw) is configured.
35320 	 */
35321 	#define HWRM_QUEUE_GLOBAL_CFG_INPUT_ENABLES_G0_MAX_BW     UINT32_C(0x2)
35322 	/*
35323 	 * This bit must be '1' when the maximum bandwidth for queue group 1
35324 	 * (g1_max_bw) is configured.
35325 	 */
35326 	#define HWRM_QUEUE_GLOBAL_CFG_INPUT_ENABLES_G1_MAX_BW     UINT32_C(0x4)
35327 	/*
35328 	 * This bit must be '1' when the maximum bandwidth for queue group 2
35329 	 * (g2_max_bw) is configured.
35330 	 */
35331 	#define HWRM_QUEUE_GLOBAL_CFG_INPUT_ENABLES_G2_MAX_BW     UINT32_C(0x8)
35332 	/*
35333 	 * This bit must be '1' when the maximum bandwidth for queue group 3
35334 	 * (g3_max_bw) is configured.
35335 	 */
35336 	#define HWRM_QUEUE_GLOBAL_CFG_INPUT_ENABLES_G3_MAX_BW \
35337 		UINT32_C(0x10)
35338 	/*
35339 	 * Specifies the maximum receive rate, as a percentage of total link
35340 	 * bandwidth, of the receive traffic through queue group 0. A value
35341 	 * of 0 indicates no rate limit.
35342 	 *
35343 	 * A queue group is a set of queues, one per traffic class. In
35344 	 * single-host mode, each panel port has its own queue group, and thus,
35345 	 * this rate limit shapes the traffic received on a port, in this case,
35346 	 * through port 0. In multi-root or multi-host mode, each PCIe endpoint
35347 	 * on the NIC has its own queue group. In these cases, the rate limit
35348 	 * shapes the traffic sent to the host through one of the PCIe
35349 	 * endpoints, in this case endpoint 0.
35350 	 */
35351 	uint8_t	g0_max_bw;
35352 	/*
35353 	 * Specifies the maximum rate of the traffic through receive CoS queue
35354 	 * group 1 (for port 1 or PCIe endpoint 1). The rate is a percentage of
35355 	 * total link bandwidth (the sum of the bandwidths of all links). A
35356 	 * value of 0 indicates no rate limit.
35357 	 */
35358 	uint8_t	g1_max_bw;
35359 	/*
35360 	 * Specifies the maximum rate of the traffic through receive CoS queue
35361 	 * group 2 (for port 2 or PCIe endpoint 2). The rate is a percentage of
35362 	 * total link bandwidth (the sum of the bandwidths of all links). A
35363 	 * value of 0 indicates no rate limit.
35364 	 */
35365 	uint8_t	g2_max_bw;
35366 	/*
35367 	 * Specifies the maximum receive rate, in Mbps, of the receive traffic
35368 	 * through queue group 3 (for port 3 or PCIe endpoint 3). A value of 0
35369 	 * indicates no rate limit.
35370 	 */
35371 	uint8_t	g3_max_bw;
35372 } __rte_packed;
35373 
35374 /* hwrm_queue_global_cfg_output (size:128b/16B) */
35375 struct hwrm_queue_global_cfg_output {
35376 	/* The specific error status for the command. */
35377 	uint16_t	error_code;
35378 	/* The HWRM command request type. */
35379 	uint16_t	req_type;
35380 	/* The sequence ID from the original command. */
35381 	uint16_t	seq_id;
35382 	/* The length of the response data in number of bytes. */
35383 	uint16_t	resp_len;
35384 	uint8_t	unused_0[7];
35385 	/*
35386 	 * This field is used in Output records to indicate that the output
35387 	 * is completely written to RAM. This field should be read as '1'
35388 	 * to indicate that the output has been completely written.
35389 	 * When writing a command completion or response to an internal processor,
35390 	 * the order of writes has to be such that this field is written last.
35391 	 */
35392 	uint8_t	valid;
35393 } __rte_packed;
35394 
35395 /**************************
35396  * hwrm_queue_global_qcfg *
35397  **************************/
35398 
35399 
35400 /* hwrm_queue_global_qcfg_input (size:128b/16B) */
35401 struct hwrm_queue_global_qcfg_input {
35402 	/* The HWRM command request type. */
35403 	uint16_t	req_type;
35404 	/*
35405 	 * The completion ring to send the completion event on. This should
35406 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
35407 	 */
35408 	uint16_t	cmpl_ring;
35409 	/*
35410 	 * The sequence ID is used by the driver for tracking multiple
35411 	 * commands. This ID is treated as opaque data by the firmware and
35412 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
35413 	 */
35414 	uint16_t	seq_id;
35415 	/*
35416 	 * The target ID of the command:
35417 	 * * 0x0-0xFFF8 - The function ID
35418 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
35419 	 * * 0xFFFD - Reserved for user-space HWRM interface
35420 	 * * 0xFFFF - HWRM
35421 	 */
35422 	uint16_t	target_id;
35423 	/*
35424 	 * A physical address pointer pointing to a host buffer that the
35425 	 * command's response data will be written. This can be either a host
35426 	 * physical address (HPA) or a guest physical address (GPA) and must
35427 	 * point to a physically contiguous block of memory.
35428 	 */
35429 	uint64_t	resp_addr;
35430 } __rte_packed;
35431 
35432 /* hwrm_queue_global_qcfg_output (size:320b/40B) */
35433 struct hwrm_queue_global_qcfg_output {
35434 	/* The specific error status for the command. */
35435 	uint16_t	error_code;
35436 	/* The HWRM command request type. */
35437 	uint16_t	req_type;
35438 	/* The sequence ID from the original command. */
35439 	uint16_t	seq_id;
35440 	/* The length of the response data in number of bytes. */
35441 	uint16_t	resp_len;
35442 	/* Port or PCIe endpoint id to be mapped for buffer pool 0. */
35443 	uint8_t	buffer_pool_id0_map;
35444 	/* Port or PCIe endpoint id to be mapped for buffer pool 1. */
35445 	uint8_t	buffer_pool_id1_map;
35446 	/* Port or PCIe endpoint id to be mapped for buffer pool 2. */
35447 	uint8_t	buffer_pool_id2_map;
35448 	/* Port or PCIe endpoint id to be mapped for buffer pool 3. */
35449 	uint8_t	buffer_pool_id3_map;
35450 	/* Size of buffer pool 0 (KBytes). */
35451 	uint32_t	buffer_pool_id0_size;
35452 	/* Size of buffer pool 1 (KBytes). */
35453 	uint32_t	buffer_pool_id1_size;
35454 	/* Size of buffer pool 2 (KBytes). */
35455 	uint32_t	buffer_pool_id2_size;
35456 	/* Size of buffer pool 3 (KBytes). */
35457 	uint32_t	buffer_pool_id3_size;
35458 	uint16_t	flags;
35459 	/*
35460 	 * Enumeration denoting whether the rx buffer pool mapping is
35461 	 * per port or per PCIe endpoint
35462 	 */
35463 	#define HWRM_QUEUE_GLOBAL_QCFG_OUTPUT_FLAGS_MAPPING \
35464 		UINT32_C(0x1)
35465 	/*
35466 	 * The buffer_pool_id[0-3]_map field represents mapping of rx
35467 	 * buffer pools to a port.
35468 	 */
35469 	#define HWRM_QUEUE_GLOBAL_QCFG_OUTPUT_FLAGS_MAPPING_MAPPING_PER_PORT \
35470 		UINT32_C(0x0)
35471 	/*
35472 	 * The buffer_pool_id[0-3]_map field represents mapping of rx
35473 	 * buffer pools to a PCIe endpoint.
35474 	 */
35475 	#define HWRM_QUEUE_GLOBAL_QCFG_OUTPUT_FLAGS_MAPPING_MAPPING_PER_ENDPOINT \
35476 		UINT32_C(0x1)
35477 	#define HWRM_QUEUE_GLOBAL_QCFG_OUTPUT_FLAGS_MAPPING_LAST \
35478 		HWRM_QUEUE_GLOBAL_QCFG_OUTPUT_FLAGS_MAPPING_MAPPING_PER_ENDPOINT
35479 	/*
35480 	 * Configuration mode for rx cos queues, configuring whether they
35481 	 * use one shared buffer pool (across ports or PCIe endpoints) or
35482 	 * independent per port or per endpoint buffer pools.
35483 	 */
35484 	uint8_t	mode;
35485 	/* One shared buffer pool to be used by all RX CoS queues */
35486 	#define HWRM_QUEUE_GLOBAL_QCFG_OUTPUT_MODE_SHARED      UINT32_C(0x0)
35487 	/*
35488 	 * Each port or PCIe endpoint to use an independent buffer pool
35489 	 * for its RX CoS queues
35490 	 */
35491 	#define HWRM_QUEUE_GLOBAL_QCFG_OUTPUT_MODE_INDEPENDENT UINT32_C(0x1)
35492 	#define HWRM_QUEUE_GLOBAL_QCFG_OUTPUT_MODE_LAST \
35493 		HWRM_QUEUE_GLOBAL_QCFG_OUTPUT_MODE_INDEPENDENT
35494 	uint8_t	unused_0;
35495 	/*
35496 	 * Reports the rate limit applied to traffic through receive CoS queue
35497 	 * group 0. The rate limit is a percentage of total link bandwidth. A
35498 	 * value of 0 indicates no rate limit.
35499 	 *
35500 	 * A queue group is a set of queues, one per traffic class. In
35501 	 * single-host mode, each panel port has its own queue group, and thus,
35502 	 * this rate limit shapes the traffic received on a port, in this case,
35503 	 * through port 0. In multi-root or multi-host mode, each PCIe endpoint
35504 	 * on the NIC has its own queue group. In these cases, the rate limit
35505 	 * shapes the traffic sent to the host through one of the PCIe
35506 	 * endpoints, in this case endpoint 0.
35507 	 */
35508 	uint8_t	g0_max_bw;
35509 	/*
35510 	 * Reports the rate limit applied to traffic through receive CoS queue
35511 	 * group 1 (for port 1 or PCIe endpoint 1). The rate limit is a
35512 	 * percentage of total link bandwidth. A value of 0 indicates no rate
35513 	 * limit.
35514 	 */
35515 	uint8_t	g1_max_bw;
35516 	/*
35517 	 * Reports the rate limit applied to traffic through receive CoS queue
35518 	 * group 2 (for port 2 or PCIe endpoint 2). The rate limit is a
35519 	 * percentage of total link bandwidth. A value of 0 indicates no rate
35520 	 * limit.
35521 	 */
35522 	uint8_t	g2_max_bw;
35523 	/*
35524 	 * Reports the rate limit applied to traffic through receive CoS queue
35525 	 * group 3 (for port 3 or PCIe endpoint 3). The rate limit is a
35526 	 * percentage of total link bandwidth. A value of 0 indicates no rate
35527 	 * limit.
35528 	 */
35529 	uint8_t	g3_max_bw;
35530 	uint8_t	unused_1[3];
35531 	/*
35532 	 * This field is used in Output records to indicate that the output
35533 	 * is completely written to RAM. This field should be read as '1'
35534 	 * to indicate that the output has been completely written.
35535 	 * When writing a command completion or response to an internal processor,
35536 	 * the order of writes has to be such that this field is written last.
35537 	 */
35538 	uint8_t	valid;
35539 } __rte_packed;
35540 
35541 /*******************
35542  * hwrm_vnic_alloc *
35543  *******************/
35544 
35545 
35546 /* hwrm_vnic_alloc_input (size:192b/24B) */
35547 struct hwrm_vnic_alloc_input {
35548 	/* The HWRM command request type. */
35549 	uint16_t	req_type;
35550 	/*
35551 	 * The completion ring to send the completion event on. This should
35552 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
35553 	 */
35554 	uint16_t	cmpl_ring;
35555 	/*
35556 	 * The sequence ID is used by the driver for tracking multiple
35557 	 * commands. This ID is treated as opaque data by the firmware and
35558 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
35559 	 */
35560 	uint16_t	seq_id;
35561 	/*
35562 	 * The target ID of the command:
35563 	 * * 0x0-0xFFF8 - The function ID
35564 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
35565 	 * * 0xFFFD - Reserved for user-space HWRM interface
35566 	 * * 0xFFFF - HWRM
35567 	 */
35568 	uint16_t	target_id;
35569 	/*
35570 	 * A physical address pointer pointing to a host buffer that the
35571 	 * command's response data will be written. This can be either a host
35572 	 * physical address (HPA) or a guest physical address (GPA) and must
35573 	 * point to a physically contiguous block of memory.
35574 	 */
35575 	uint64_t	resp_addr;
35576 	uint32_t	flags;
35577 	/*
35578 	 * When this bit is '1', this VNIC is requested to
35579 	 * be the default VNIC for this function.
35580 	 */
35581 	#define HWRM_VNIC_ALLOC_INPUT_FLAGS_DEFAULT \
35582 		UINT32_C(0x1)
35583 	/*
35584 	 * When this bit is '1', proxy VEE PF is requesting
35585 	 * allocation of a default VNIC on behalf of virtio-net
35586 	 * function given in virtio_net_fid field.
35587 	 */
35588 	#define HWRM_VNIC_ALLOC_INPUT_FLAGS_VIRTIO_NET_FID_VALID \
35589 		UINT32_C(0x2)
35590 	/*
35591 	 * Virtio-net function's FID.
35592 	 * This virtio-net function is requesting allocation of default
35593 	 * VNIC through proxy VEE PF.
35594 	 */
35595 	uint16_t	virtio_net_fid;
35596 	uint8_t	unused_0[2];
35597 } __rte_packed;
35598 
35599 /* hwrm_vnic_alloc_output (size:128b/16B) */
35600 struct hwrm_vnic_alloc_output {
35601 	/* The specific error status for the command. */
35602 	uint16_t	error_code;
35603 	/* The HWRM command request type. */
35604 	uint16_t	req_type;
35605 	/* The sequence ID from the original command. */
35606 	uint16_t	seq_id;
35607 	/* The length of the response data in number of bytes. */
35608 	uint16_t	resp_len;
35609 	/* Logical vnic ID */
35610 	uint32_t	vnic_id;
35611 	uint8_t	unused_0[3];
35612 	/*
35613 	 * This field is used in Output records to indicate that the output
35614 	 * is completely written to RAM.  This field should be read as '1'
35615 	 * to indicate that the output has been completely written.
35616 	 * When writing a command completion or response to an internal processor,
35617 	 * the order of writes has to be such that this field is written last.
35618 	 */
35619 	uint8_t	valid;
35620 } __rte_packed;
35621 
35622 /********************
35623  * hwrm_vnic_update *
35624  ********************/
35625 
35626 
35627 /* hwrm_vnic_update_input (size:256b/32B) */
35628 struct hwrm_vnic_update_input {
35629 	/* The HWRM command request type. */
35630 	uint16_t	req_type;
35631 	/*
35632 	 * The completion ring to send the completion event on. This should
35633 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
35634 	 */
35635 	uint16_t	cmpl_ring;
35636 	/*
35637 	 * The sequence ID is used by the driver for tracking multiple
35638 	 * commands. This ID is treated as opaque data by the firmware and
35639 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
35640 	 */
35641 	uint16_t	seq_id;
35642 	/*
35643 	 * The target ID of the command:
35644 	 * * 0x0-0xFFF8 - The function ID
35645 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
35646 	 * * 0xFFFD - Reserved for user-space HWRM interface
35647 	 * * 0xFFFF - HWRM
35648 	 */
35649 	uint16_t	target_id;
35650 	/*
35651 	 * A physical address pointer pointing to a host buffer that the
35652 	 * command's response data will be written. This can be either a host
35653 	 * physical address (HPA) or a guest physical address (GPA) and must
35654 	 * point to a physically contiguous block of memory.
35655 	 */
35656 	uint64_t	resp_addr;
35657 	/* Logical vnic ID */
35658 	uint32_t	vnic_id;
35659 	uint32_t	enables;
35660 	/*
35661 	 * This bit must be '1' for the vnic_state field to be
35662 	 * configured.
35663 	 */
35664 	#define HWRM_VNIC_UPDATE_INPUT_ENABLES_VNIC_STATE_VALID \
35665 		UINT32_C(0x1)
35666 	/*
35667 	 * This bit must be '1' for the mru field to be
35668 	 * configured.
35669 	 */
35670 	#define HWRM_VNIC_UPDATE_INPUT_ENABLES_MRU_VALID \
35671 		UINT32_C(0x2)
35672 	/*
35673 	 * This bit must be '1' for the metadata_format_type field to be
35674 	 * configured.
35675 	 */
35676 	#define HWRM_VNIC_UPDATE_INPUT_ENABLES_METADATA_FORMAT_TYPE_VALID \
35677 		UINT32_C(0x4)
35678 	/*
35679 	 * This will update the context variable with the same name if
35680 	 * the corresponding enable is set.
35681 	 */
35682 	uint8_t	vnic_state;
35683 	/* Normal operation state for the VNIC. */
35684 	#define HWRM_VNIC_UPDATE_INPUT_VNIC_STATE_NORMAL UINT32_C(0x0)
35685 	/* All packets are dropped in this state. */
35686 	#define HWRM_VNIC_UPDATE_INPUT_VNIC_STATE_DROP   UINT32_C(0x1)
35687 	#define HWRM_VNIC_UPDATE_INPUT_VNIC_STATE_LAST \
35688 		HWRM_VNIC_UPDATE_INPUT_VNIC_STATE_DROP
35689 	/*
35690 	 * The metadata format type used in all the RX packet completions
35691 	 * going through this VNIC.
35692 	 */
35693 	uint8_t	metadata_format_type;
35694 	/* No metadata information. */
35695 	#define HWRM_VNIC_UPDATE_INPUT_METADATA_FORMAT_TYPE_NONE \
35696 		UINT32_C(0x0)
35697 	/*
35698 	 * Action record pointer (table_scope[4:0], act_rec_ptr[25:0],
35699 	 * vtag[19:0]).
35700 	 */
35701 	#define HWRM_VNIC_UPDATE_INPUT_METADATA_FORMAT_TYPE_ACT_RECORD_PTR \
35702 		UINT32_C(0x1)
35703 	/* Tunnel ID (tunnel_id[31:0], vtag[19:0]) */
35704 	#define HWRM_VNIC_UPDATE_INPUT_METADATA_FORMAT_TYPE_TUNNEL_ID \
35705 		UINT32_C(0x2)
35706 	/* Custom header data (updated_chdr_data[31:0], vtag[19:0]) */
35707 	#define HWRM_VNIC_UPDATE_INPUT_METADATA_FORMAT_TYPE_CUSTOM_HDR_DATA \
35708 		UINT32_C(0x3)
35709 	/* Header offsets (hdr_offsets[31:0], vtag[19:0]) */
35710 	#define HWRM_VNIC_UPDATE_INPUT_METADATA_FORMAT_TYPE_HDR_OFFSETS \
35711 		UINT32_C(0x4)
35712 	#define HWRM_VNIC_UPDATE_INPUT_METADATA_FORMAT_TYPE_LAST \
35713 		HWRM_VNIC_UPDATE_INPUT_METADATA_FORMAT_TYPE_HDR_OFFSETS
35714 	/*
35715 	 * The maximum receive unit of the vnic.
35716 	 * Each vnic is associated with a function.
35717 	 * The vnic mru value overwrites the mru setting of the
35718 	 * associated function.
35719 	 * The HWRM shall make sure that vnic mru does not exceed
35720 	 * the mru of the port the function is associated with.
35721 	 */
35722 	uint16_t	mru;
35723 	uint8_t	unused_1[4];
35724 } __rte_packed;
35725 
35726 /* hwrm_vnic_update_output (size:128b/16B) */
35727 struct hwrm_vnic_update_output {
35728 	/* The specific error status for the command. */
35729 	uint16_t	error_code;
35730 	/* The HWRM command request type. */
35731 	uint16_t	req_type;
35732 	/* The sequence ID from the original command. */
35733 	uint16_t	seq_id;
35734 	/* The length of the response data in number of bytes. */
35735 	uint16_t	resp_len;
35736 	uint8_t	unused_0[7];
35737 	/*
35738 	 * This field is used in Output records to indicate that the output
35739 	 * is completely written to RAM.  This field should be read as '1'
35740 	 * to indicate that the output has been completely written.
35741 	 * When writing a command completion or response to an internal
35742 	 * processor, the order of writes has to be such that this field is
35743 	 * written last.
35744 	 */
35745 	uint8_t	valid;
35746 } __rte_packed;
35747 
35748 /******************
35749  * hwrm_vnic_free *
35750  ******************/
35751 
35752 
35753 /* hwrm_vnic_free_input (size:192b/24B) */
35754 struct hwrm_vnic_free_input {
35755 	/* The HWRM command request type. */
35756 	uint16_t	req_type;
35757 	/*
35758 	 * The completion ring to send the completion event on. This should
35759 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
35760 	 */
35761 	uint16_t	cmpl_ring;
35762 	/*
35763 	 * The sequence ID is used by the driver for tracking multiple
35764 	 * commands. This ID is treated as opaque data by the firmware and
35765 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
35766 	 */
35767 	uint16_t	seq_id;
35768 	/*
35769 	 * The target ID of the command:
35770 	 * * 0x0-0xFFF8 - The function ID
35771 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
35772 	 * * 0xFFFD - Reserved for user-space HWRM interface
35773 	 * * 0xFFFF - HWRM
35774 	 */
35775 	uint16_t	target_id;
35776 	/*
35777 	 * A physical address pointer pointing to a host buffer that the
35778 	 * command's response data will be written. This can be either a host
35779 	 * physical address (HPA) or a guest physical address (GPA) and must
35780 	 * point to a physically contiguous block of memory.
35781 	 */
35782 	uint64_t	resp_addr;
35783 	/* Logical vnic ID */
35784 	uint32_t	vnic_id;
35785 	uint8_t	unused_0[4];
35786 } __rte_packed;
35787 
35788 /* hwrm_vnic_free_output (size:128b/16B) */
35789 struct hwrm_vnic_free_output {
35790 	/* The specific error status for the command. */
35791 	uint16_t	error_code;
35792 	/* The HWRM command request type. */
35793 	uint16_t	req_type;
35794 	/* The sequence ID from the original command. */
35795 	uint16_t	seq_id;
35796 	/* The length of the response data in number of bytes. */
35797 	uint16_t	resp_len;
35798 	uint8_t	unused_0[7];
35799 	/*
35800 	 * This field is used in Output records to indicate that the output
35801 	 * is completely written to RAM.  This field should be read as '1'
35802 	 * to indicate that the output has been completely written.
35803 	 * When writing a command completion or response to an internal processor,
35804 	 * the order of writes has to be such that this field is written last.
35805 	 */
35806 	uint8_t	valid;
35807 } __rte_packed;
35808 
35809 /*****************
35810  * hwrm_vnic_cfg *
35811  *****************/
35812 
35813 
35814 /* hwrm_vnic_cfg_input (size:384b/48B) */
35815 struct hwrm_vnic_cfg_input {
35816 	/* The HWRM command request type. */
35817 	uint16_t	req_type;
35818 	/*
35819 	 * The completion ring to send the completion event on. This should
35820 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
35821 	 */
35822 	uint16_t	cmpl_ring;
35823 	/*
35824 	 * The sequence ID is used by the driver for tracking multiple
35825 	 * commands. This ID is treated as opaque data by the firmware and
35826 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
35827 	 */
35828 	uint16_t	seq_id;
35829 	/*
35830 	 * The target ID of the command:
35831 	 * * 0x0-0xFFF8 - The function ID
35832 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
35833 	 * * 0xFFFD - Reserved for user-space HWRM interface
35834 	 * * 0xFFFF - HWRM
35835 	 */
35836 	uint16_t	target_id;
35837 	/*
35838 	 * A physical address pointer pointing to a host buffer that the
35839 	 * command's response data will be written. This can be either a host
35840 	 * physical address (HPA) or a guest physical address (GPA) and must
35841 	 * point to a physically contiguous block of memory.
35842 	 */
35843 	uint64_t	resp_addr;
35844 	uint32_t	flags;
35845 	/*
35846 	 * When this bit is '1', the VNIC is requested to
35847 	 * be the default VNIC for the function.
35848 	 */
35849 	#define HWRM_VNIC_CFG_INPUT_FLAGS_DEFAULT \
35850 		UINT32_C(0x1)
35851 	/*
35852 	 * When this bit is '1', the VNIC is being configured to
35853 	 * strip VLAN in the RX path.
35854 	 * If set to '0', then VLAN stripping is disabled on
35855 	 * this VNIC.
35856 	 */
35857 	#define HWRM_VNIC_CFG_INPUT_FLAGS_VLAN_STRIP_MODE \
35858 		UINT32_C(0x2)
35859 	/*
35860 	 * When this bit is '1', the VNIC is being configured to
35861 	 * buffer receive packets in the hardware until the host
35862 	 * posts new receive buffers.
35863 	 * If set to '0', then bd_stall is being configured to be
35864 	 * disabled on this VNIC.
35865 	 */
35866 	#define HWRM_VNIC_CFG_INPUT_FLAGS_BD_STALL_MODE \
35867 		UINT32_C(0x4)
35868 	/*
35869 	 * When this bit is '1', the VNIC is being configured to
35870 	 * receive both RoCE and non-RoCE traffic.
35871 	 * If set to '0', then this VNIC is not configured to be
35872 	 * operating in dual VNIC mode.
35873 	 */
35874 	#define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_DUAL_VNIC_MODE \
35875 		UINT32_C(0x8)
35876 	/*
35877 	 * When this flag is set to '1', the VNIC is requested to
35878 	 * be configured to receive only RoCE traffic.
35879 	 * If this flag is set to '0', then this flag shall be
35880 	 * ignored by the HWRM.
35881 	 * If roce_dual_vnic_mode flag is set to '1'
35882 	 * or roce_mirroring_capable_vnic_mode flag to 1,
35883 	 * then the HWRM client shall not set this flag to '1'.
35884 	 */
35885 	#define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_ONLY_VNIC_MODE \
35886 		UINT32_C(0x10)
35887 	/*
35888 	 * When a VNIC uses one destination ring group for certain
35889 	 * application (e.g. Receive Flow Steering) where
35890 	 * exact match is used to direct packets to a VNIC with one
35891 	 * destination ring group only, there is no need to configure
35892 	 * RSS indirection table for that VNIC as only one destination
35893 	 * ring group is used.
35894 	 *
35895 	 * This flag is used to enable a mode where
35896 	 * RSS is enabled in the VNIC using a RSS context
35897 	 * for computing RSS hash but the RSS indirection table is
35898 	 * not configured using hwrm_vnic_rss_cfg.
35899 	 *
35900 	 * If this mode is enabled, then the driver should not program
35901 	 * RSS indirection table for the RSS context that is used for
35902 	 * computing RSS hash only.
35903 	 */
35904 	#define HWRM_VNIC_CFG_INPUT_FLAGS_RSS_DFLT_CR_MODE \
35905 		UINT32_C(0x20)
35906 	/*
35907 	 * When this bit is '1', the VNIC is being configured to
35908 	 * receive both RoCE and non-RoCE traffic, but forward only the
35909 	 * RoCE traffic further. Also, RoCE traffic can be mirrored to
35910 	 * L2 driver.
35911 	 */
35912 	#define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_MODE \
35913 		UINT32_C(0x40)
35914 	uint32_t	enables;
35915 	/*
35916 	 * This bit must be '1' for the dflt_ring_grp field to be
35917 	 * configured.
35918 	 */
35919 	#define HWRM_VNIC_CFG_INPUT_ENABLES_DFLT_RING_GRP \
35920 		UINT32_C(0x1)
35921 	/*
35922 	 * This bit must be '1' for the rss_rule field to be
35923 	 * configured.
35924 	 */
35925 	#define HWRM_VNIC_CFG_INPUT_ENABLES_RSS_RULE \
35926 		UINT32_C(0x2)
35927 	/*
35928 	 * This bit must be '1' for the cos_rule field to be
35929 	 * configured.
35930 	 */
35931 	#define HWRM_VNIC_CFG_INPUT_ENABLES_COS_RULE \
35932 		UINT32_C(0x4)
35933 	/*
35934 	 * This bit must be '1' for the lb_rule field to be
35935 	 * configured.
35936 	 */
35937 	#define HWRM_VNIC_CFG_INPUT_ENABLES_LB_RULE \
35938 		UINT32_C(0x8)
35939 	/*
35940 	 * This bit must be '1' for the mru field to be
35941 	 * configured.
35942 	 */
35943 	#define HWRM_VNIC_CFG_INPUT_ENABLES_MRU \
35944 		UINT32_C(0x10)
35945 	/*
35946 	 * This bit must be '1' for the default_rx_ring_id field to be
35947 	 * configured.
35948 	 */
35949 	#define HWRM_VNIC_CFG_INPUT_ENABLES_DEFAULT_RX_RING_ID \
35950 		UINT32_C(0x20)
35951 	/*
35952 	 * This bit must be '1' for the default_cmpl_ring_id field to be
35953 	 * configured.
35954 	 */
35955 	#define HWRM_VNIC_CFG_INPUT_ENABLES_DEFAULT_CMPL_RING_ID \
35956 		UINT32_C(0x40)
35957 	/* This bit must be '1' for the queue_id field to be configured. */
35958 	#define HWRM_VNIC_CFG_INPUT_ENABLES_QUEUE_ID \
35959 		UINT32_C(0x80)
35960 	/* This bit must be '1' for the rx_csum_v2_mode field to be configured. */
35961 	#define HWRM_VNIC_CFG_INPUT_ENABLES_RX_CSUM_V2_MODE \
35962 		UINT32_C(0x100)
35963 	/* This bit must be '1' for the l2_cqe_mode field to be configured. */
35964 	#define HWRM_VNIC_CFG_INPUT_ENABLES_L2_CQE_MODE \
35965 		UINT32_C(0x200)
35966 	/* Logical vnic ID */
35967 	uint16_t	vnic_id;
35968 	/*
35969 	 * Default Completion ring for the VNIC.  This ring will
35970 	 * be chosen if packet does not match any RSS rules and if
35971 	 * there is no COS rule.
35972 	 */
35973 	uint16_t	dflt_ring_grp;
35974 	/*
35975 	 * RSS ID for RSS rule/table structure.  0xFF... (All Fs) if
35976 	 * there is no RSS rule.
35977 	 */
35978 	uint16_t	rss_rule;
35979 	/*
35980 	 * RSS ID for COS rule/table structure.  0xFF... (All Fs) if
35981 	 * there is no COS rule.
35982 	 */
35983 	uint16_t	cos_rule;
35984 	/*
35985 	 * RSS ID for load balancing rule/table structure.
35986 	 * 0xFF... (All Fs) if there is no LB rule.
35987 	 */
35988 	uint16_t	lb_rule;
35989 	/*
35990 	 * The maximum receive unit of the vnic.
35991 	 * Each vnic is associated with a function.
35992 	 * The vnic mru value overwrites the mru setting of the
35993 	 * associated function.
35994 	 * The HWRM shall make sure that vnic mru does not exceed
35995 	 * the mru of the port the function is associated with.
35996 	 */
35997 	uint16_t	mru;
35998 	/*
35999 	 * Default Rx ring for the VNIC.  This ring will
36000 	 * be chosen if packet does not match any RSS rules.
36001 	 * The aggregation ring associated with the Rx ring is
36002 	 * implied based on the Rx ring specified when the
36003 	 * aggregation ring was allocated.
36004 	 */
36005 	uint16_t	default_rx_ring_id;
36006 	/*
36007 	 * Default completion ring for the VNIC.  This ring will
36008 	 * be chosen if packet does not match any RSS rules.
36009 	 */
36010 	uint16_t	default_cmpl_ring_id;
36011 	/*
36012 	 * When specified, only incoming packets classified to the specified CoS
36013 	 * queue ID will be arriving on this VNIC.  Packet priority to CoS mapping
36014 	 * rules can be specified using HWRM_QUEUE_PRI2COS_CFG.  In this mode,
36015 	 * ntuple filters with VNIC destination specified are invalid since they
36016 	 * conflict with the CoS to VNIC steering rules in this mode.
36017 	 *
36018 	 * If this field is not specified, packet to VNIC steering will be
36019 	 * subject to the standard L2 filter rules and any additional ntuple
36020 	 * filter rules with destination VNIC specified.
36021 	 */
36022 	uint16_t	queue_id;
36023 	/*
36024 	 * If the device supports the RX V2 and RX TPA start V2 completion
36025 	 * records as indicated by the HWRM_VNIC_QCAPS command, this field is
36026 	 * used to specify the two RX checksum modes supported by these
36027 	 * completion records.
36028 	 */
36029 	uint8_t	rx_csum_v2_mode;
36030 	/*
36031 	 * When configured with this checksum mode, the number of header
36032 	 * groups in the delivered packet with a valid IP checksum and
36033 	 * the number of header groups in the delivered packet with a valid
36034 	 * L4 checksum are reported. Valid checksums are counted from the
36035 	 * outermost header group to the innermost header group, stopping at
36036 	 * the first error.  This is the default checksum mode supported if
36037 	 * the driver doesn't explicitly configure the RX checksum mode.
36038 	 */
36039 	#define HWRM_VNIC_CFG_INPUT_RX_CSUM_V2_MODE_DEFAULT UINT32_C(0x0)
36040 	/*
36041 	 * When configured with this checksum mode, the checksum status is
36042 	 * reported using 'all ok' mode. In the RX completion record, one
36043 	 * bit indicates if the IP checksum is valid for all the parsed
36044 	 * header groups with an IP checksum. Another bit indicates if the
36045 	 * L4 checksum is valid for all the parsed header groups with an L4
36046 	 * checksum. The number of header groups that were parsed by the
36047 	 * chip and passed in the delivered packet is also reported.
36048 	 */
36049 	#define HWRM_VNIC_CFG_INPUT_RX_CSUM_V2_MODE_ALL_OK  UINT32_C(0x1)
36050 	/*
36051 	 * Any rx_csum_v2_mode value larger than or equal to this is not
36052 	 * valid
36053 	 */
36054 	#define HWRM_VNIC_CFG_INPUT_RX_CSUM_V2_MODE_MAX     UINT32_C(0x2)
36055 	#define HWRM_VNIC_CFG_INPUT_RX_CSUM_V2_MODE_LAST \
36056 		HWRM_VNIC_CFG_INPUT_RX_CSUM_V2_MODE_MAX
36057 	/*
36058 	 * If the device supports different L2 RX CQE modes, as indicated by
36059 	 * the HWRM_VNIC_QCAPS command, this field is used to configure the
36060 	 * CQE mode.
36061 	 */
36062 	uint8_t	l2_cqe_mode;
36063 	/*
36064 	 * When configured with this cqe mode, A normal (32B) CQE
36065 	 * will be generated. This is the default mode.
36066 	 */
36067 	#define HWRM_VNIC_CFG_INPUT_L2_CQE_MODE_DEFAULT    UINT32_C(0x0)
36068 	/*
36069 	 * When configured with this cqe mode, A compressed (16B) CQE
36070 	 * will be generated. In this mode TPA and HDS are not supported.
36071 	 * Host drivers should not configure the TPA and HDS along with
36072 	 * compressed mode, per VNIC. FW returns error, if host drivers
36073 	 * try to configure the VNIC with compressed mode and (TPA or HDS).
36074 	 * The compressed completion does not include PTP data. Host
36075 	 * drivers should not use this mode to receive the PTP data.
36076 	 */
36077 	#define HWRM_VNIC_CFG_INPUT_L2_CQE_MODE_COMPRESSED UINT32_C(0x1)
36078 	/*
36079 	 * When configured with this cqe mode, HW generates either a 32B
36080 	 * completion or a 16B completion depending on use case within a
36081 	 * VNIC. For ex. a simple L2 packet could use the compressed form
36082 	 * while a PTP packet on the same VNIC would use the 32B form.
36083 	 */
36084 	#define HWRM_VNIC_CFG_INPUT_L2_CQE_MODE_MIXED      UINT32_C(0x2)
36085 	#define HWRM_VNIC_CFG_INPUT_L2_CQE_MODE_LAST \
36086 		HWRM_VNIC_CFG_INPUT_L2_CQE_MODE_MIXED
36087 	uint8_t	unused0[4];
36088 } __rte_packed;
36089 
36090 /* hwrm_vnic_cfg_output (size:128b/16B) */
36091 struct hwrm_vnic_cfg_output {
36092 	/* The specific error status for the command. */
36093 	uint16_t	error_code;
36094 	/* The HWRM command request type. */
36095 	uint16_t	req_type;
36096 	/* The sequence ID from the original command. */
36097 	uint16_t	seq_id;
36098 	/* The length of the response data in number of bytes. */
36099 	uint16_t	resp_len;
36100 	uint8_t	unused_0[7];
36101 	/*
36102 	 * This field is used in Output records to indicate that the output
36103 	 * is completely written to RAM.  This field should be read as '1'
36104 	 * to indicate that the output has been completely written.
36105 	 * When writing a command completion or response to an internal processor,
36106 	 * the order of writes has to be such that this field is written last.
36107 	 */
36108 	uint8_t	valid;
36109 } __rte_packed;
36110 
36111 /******************
36112  * hwrm_vnic_qcfg *
36113  ******************/
36114 
36115 
36116 /* hwrm_vnic_qcfg_input (size:256b/32B) */
36117 struct hwrm_vnic_qcfg_input {
36118 	/* The HWRM command request type. */
36119 	uint16_t	req_type;
36120 	/*
36121 	 * The completion ring to send the completion event on. This should
36122 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
36123 	 */
36124 	uint16_t	cmpl_ring;
36125 	/*
36126 	 * The sequence ID is used by the driver for tracking multiple
36127 	 * commands. This ID is treated as opaque data by the firmware and
36128 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
36129 	 */
36130 	uint16_t	seq_id;
36131 	/*
36132 	 * The target ID of the command:
36133 	 * * 0x0-0xFFF8 - The function ID
36134 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
36135 	 * * 0xFFFD - Reserved for user-space HWRM interface
36136 	 * * 0xFFFF - HWRM
36137 	 */
36138 	uint16_t	target_id;
36139 	/*
36140 	 * A physical address pointer pointing to a host buffer that the
36141 	 * command's response data will be written. This can be either a host
36142 	 * physical address (HPA) or a guest physical address (GPA) and must
36143 	 * point to a physically contiguous block of memory.
36144 	 */
36145 	uint64_t	resp_addr;
36146 	uint32_t	enables;
36147 	/*
36148 	 * This bit must be '1' for the vf_id_valid field to be
36149 	 * configured.
36150 	 */
36151 	#define HWRM_VNIC_QCFG_INPUT_ENABLES_VF_ID_VALID     UINT32_C(0x1)
36152 	/* Logical vnic ID */
36153 	uint32_t	vnic_id;
36154 	/* ID of Virtual Function whose VNIC resource is being queried. */
36155 	uint16_t	vf_id;
36156 	uint8_t	unused_0[6];
36157 } __rte_packed;
36158 
36159 /* hwrm_vnic_qcfg_output (size:256b/32B) */
36160 struct hwrm_vnic_qcfg_output {
36161 	/* The specific error status for the command. */
36162 	uint16_t	error_code;
36163 	/* The HWRM command request type. */
36164 	uint16_t	req_type;
36165 	/* The sequence ID from the original command. */
36166 	uint16_t	seq_id;
36167 	/* The length of the response data in number of bytes. */
36168 	uint16_t	resp_len;
36169 	/* Default Completion ring for the VNIC. */
36170 	uint16_t	dflt_ring_grp;
36171 	/*
36172 	 * RSS ID for RSS rule/table structure.  0xFF... (All Fs) if
36173 	 * there is no RSS rule.
36174 	 */
36175 	uint16_t	rss_rule;
36176 	/*
36177 	 * RSS ID for COS rule/table structure.  0xFF... (All Fs) if
36178 	 * there is no COS rule.
36179 	 */
36180 	uint16_t	cos_rule;
36181 	/*
36182 	 * RSS ID for load balancing rule/table structure.
36183 	 * 0xFF... (All Fs) if there is no LB rule.
36184 	 */
36185 	uint16_t	lb_rule;
36186 	/* The maximum receive unit of the vnic. */
36187 	uint16_t	mru;
36188 	uint8_t	unused_0[2];
36189 	uint32_t	flags;
36190 	/*
36191 	 * When this bit is '1', the VNIC is the default VNIC for
36192 	 * the function.
36193 	 */
36194 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_DEFAULT \
36195 		UINT32_C(0x1)
36196 	/*
36197 	 * When this bit is '1', the VNIC is configured to
36198 	 * strip VLAN in the RX path.
36199 	 * If set to '0', then VLAN stripping is disabled on
36200 	 * this VNIC.
36201 	 */
36202 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_VLAN_STRIP_MODE \
36203 		UINT32_C(0x2)
36204 	/*
36205 	 * When this bit is '1', the VNIC is configured to
36206 	 * buffer receive packets in the hardware until the host
36207 	 * posts new receive buffers.
36208 	 * If set to '0', then bd_stall is disabled on
36209 	 * this VNIC.
36210 	 */
36211 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_BD_STALL_MODE \
36212 		UINT32_C(0x4)
36213 	/*
36214 	 * When this bit is '1', the VNIC is configured to
36215 	 * receive both RoCE and non-RoCE traffic.
36216 	 * If set to '0', then this VNIC is not configured to
36217 	 * operate in dual VNIC mode.
36218 	 */
36219 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_DUAL_VNIC_MODE \
36220 		UINT32_C(0x8)
36221 	/*
36222 	 * When this flag is set to '1', the VNIC is configured to
36223 	 * receive only RoCE traffic.
36224 	 * When this flag is set to '0', the VNIC is not configured
36225 	 * to receive only RoCE traffic.
36226 	 * If roce_dual_vnic_mode flag and this flag both are set
36227 	 * to '1', then it is an invalid configuration of the
36228 	 * VNIC. The HWRM should not allow that type of
36229 	 * mis-configuration by HWRM clients.
36230 	 */
36231 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_ONLY_VNIC_MODE \
36232 		UINT32_C(0x10)
36233 	/*
36234 	 * When a VNIC uses one destination ring group for certain
36235 	 * application (e.g. Receive Flow Steering) where
36236 	 * exact match is used to direct packets to a VNIC with one
36237 	 * destination ring group only, there is no need to configure
36238 	 * RSS indirection table for that VNIC as only one destination
36239 	 * ring group is used.
36240 	 *
36241 	 * When this bit is set to '1', then the VNIC is enabled in a
36242 	 * mode where RSS is enabled in the VNIC using a RSS context
36243 	 * for computing RSS hash but the RSS indirection table is
36244 	 * not configured.
36245 	 */
36246 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_RSS_DFLT_CR_MODE \
36247 		UINT32_C(0x20)
36248 	/*
36249 	 * When this bit is '1', the VNIC is configured to
36250 	 * receive both RoCE and non-RoCE traffic, but forward only
36251 	 * RoCE traffic further. Also RoCE traffic can be mirrored to
36252 	 * L2 driver.
36253 	 */
36254 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_MODE \
36255 		UINT32_C(0x40)
36256 	/*
36257 	 * When this bit is '0', VNIC is in normal operation state.
36258 	 * When this bit is '1', VNIC drops all the received packets.
36259 	 */
36260 	#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_OPERATION_STATE \
36261 		UINT32_C(0x80)
36262 	/*
36263 	 * When returned with a valid CoS Queue id, the CoS Queue/VNIC association
36264 	 * is valid.  Otherwise it will return 0xFFFF to indicate no VNIC/CoS
36265 	 * queue association.
36266 	 */
36267 	uint16_t	queue_id;
36268 	/*
36269 	 * If the device supports the RX V2 and RX TPA start V2 completion
36270 	 * records as indicated by the HWRM_VNIC_QCAPS command, this field is
36271 	 * used to specify the current RX checksum mode configured for all the
36272 	 * RX rings of a VNIC.
36273 	 */
36274 	uint8_t	rx_csum_v2_mode;
36275 	/*
36276 	 * This value indicates that the VNIC is configured to use the
36277 	 * default RX checksum mode for all the rings associated with this
36278 	 * VNIC.
36279 	 */
36280 	#define HWRM_VNIC_QCFG_OUTPUT_RX_CSUM_V2_MODE_DEFAULT UINT32_C(0x0)
36281 	/*
36282 	 * This value indicates that the VNIC is configured to use the RX
36283 	 * checksum ‘all_ok’ mode for all the rings associated with this
36284 	 * VNIC.
36285 	 */
36286 	#define HWRM_VNIC_QCFG_OUTPUT_RX_CSUM_V2_MODE_ALL_OK  UINT32_C(0x1)
36287 	/*
36288 	 * Any rx_csum_v2_mode value larger than or equal to this is not
36289 	 * valid
36290 	 */
36291 	#define HWRM_VNIC_QCFG_OUTPUT_RX_CSUM_V2_MODE_MAX     UINT32_C(0x2)
36292 	#define HWRM_VNIC_QCFG_OUTPUT_RX_CSUM_V2_MODE_LAST \
36293 		HWRM_VNIC_QCFG_OUTPUT_RX_CSUM_V2_MODE_MAX
36294 	/*
36295 	 * If the device supports different L2 RX CQE modes, as indicated by
36296 	 * the HWRM_VNIC_QCAPS command, this field is used to convey the
36297 	 * configured CQE mode.
36298 	 */
36299 	uint8_t	l2_cqe_mode;
36300 	/*
36301 	 * This value indicates that the VNIC is configured with normal
36302 	 * (32B) CQE mode.
36303 	 */
36304 	#define HWRM_VNIC_QCFG_OUTPUT_L2_CQE_MODE_DEFAULT    UINT32_C(0x0)
36305 	/*
36306 	 * This value indicates that the VNIC is configured with compressed
36307 	 * (16B) CQE mode.
36308 	 */
36309 	#define HWRM_VNIC_QCFG_OUTPUT_L2_CQE_MODE_COMPRESSED UINT32_C(0x1)
36310 	/*
36311 	 * This value indicates that the VNIC is configured with mixed
36312 	 * CQE mode. HW generates either a 32B completion or a 16B
36313 	 * completion depending on use case within a VNIC.
36314 	 */
36315 	#define HWRM_VNIC_QCFG_OUTPUT_L2_CQE_MODE_MIXED      UINT32_C(0x2)
36316 	#define HWRM_VNIC_QCFG_OUTPUT_L2_CQE_MODE_LAST \
36317 		HWRM_VNIC_QCFG_OUTPUT_L2_CQE_MODE_MIXED
36318 	uint8_t	unused_1[3];
36319 	/*
36320 	 * This field is used in Output records to indicate that the output
36321 	 * is completely written to RAM.  This field should be read as '1'
36322 	 * to indicate that the output has been completely written.
36323 	 * When writing a command completion or response to an internal processor,
36324 	 * the order of writes has to be such that this field is written last.
36325 	 */
36326 	uint8_t	valid;
36327 } __rte_packed;
36328 
36329 /*******************
36330  * hwrm_vnic_qcaps *
36331  *******************/
36332 
36333 
36334 /* hwrm_vnic_qcaps_input (size:192b/24B) */
36335 struct hwrm_vnic_qcaps_input {
36336 	/* The HWRM command request type. */
36337 	uint16_t	req_type;
36338 	/*
36339 	 * The completion ring to send the completion event on. This should
36340 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
36341 	 */
36342 	uint16_t	cmpl_ring;
36343 	/*
36344 	 * The sequence ID is used by the driver for tracking multiple
36345 	 * commands. This ID is treated as opaque data by the firmware and
36346 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
36347 	 */
36348 	uint16_t	seq_id;
36349 	/*
36350 	 * The target ID of the command:
36351 	 * * 0x0-0xFFF8 - The function ID
36352 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
36353 	 * * 0xFFFD - Reserved for user-space HWRM interface
36354 	 * * 0xFFFF - HWRM
36355 	 */
36356 	uint16_t	target_id;
36357 	/*
36358 	 * A physical address pointer pointing to a host buffer that the
36359 	 * command's response data will be written. This can be either a host
36360 	 * physical address (HPA) or a guest physical address (GPA) and must
36361 	 * point to a physically contiguous block of memory.
36362 	 */
36363 	uint64_t	resp_addr;
36364 	uint32_t	enables;
36365 	uint8_t	unused_0[4];
36366 } __rte_packed;
36367 
36368 /* hwrm_vnic_qcaps_output (size:192b/24B) */
36369 struct hwrm_vnic_qcaps_output {
36370 	/* The specific error status for the command. */
36371 	uint16_t	error_code;
36372 	/* The HWRM command request type. */
36373 	uint16_t	req_type;
36374 	/* The sequence ID from the original command. */
36375 	uint16_t	seq_id;
36376 	/* The length of the response data in number of bytes. */
36377 	uint16_t	resp_len;
36378 	/* The maximum receive unit that is settable on a vnic. */
36379 	uint16_t	mru;
36380 	uint8_t	unused_0[2];
36381 	uint32_t	flags;
36382 	/* Unused. */
36383 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_UNUSED \
36384 		UINT32_C(0x1)
36385 	/*
36386 	 * When this bit is '1', the capability of stripping VLAN in
36387 	 * the RX path is supported on VNIC(s).
36388 	 * If set to '0', then VLAN stripping capability is
36389 	 * not supported on VNIC(s).
36390 	 */
36391 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_VLAN_STRIP_CAP \
36392 		UINT32_C(0x2)
36393 	/*
36394 	 * When this bit is '1', the capability to buffer receive
36395 	 * packets in the hardware until the host posts new receive buffers
36396 	 * is supported on VNIC(s).
36397 	 * If set to '0', then bd_stall capability is not supported
36398 	 * on VNIC(s).
36399 	 */
36400 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_BD_STALL_CAP \
36401 		UINT32_C(0x4)
36402 	/*
36403 	 * When this bit is '1', the capability to
36404 	 * receive both RoCE and non-RoCE traffic on VNIC(s) is
36405 	 * supported.
36406 	 * If set to '0', then the capability to receive
36407 	 * both RoCE and non-RoCE traffic on VNIC(s) is
36408 	 * not supported.
36409 	 */
36410 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_DUAL_VNIC_CAP \
36411 		UINT32_C(0x8)
36412 	/*
36413 	 * When this bit is set to '1', the capability to configure
36414 	 * a VNIC to receive only RoCE traffic is supported.
36415 	 * When this flag is set to '0', the VNIC capability to
36416 	 * configure to receive only RoCE traffic is not supported.
36417 	 */
36418 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_ONLY_VNIC_CAP \
36419 		UINT32_C(0x10)
36420 	/*
36421 	 * When this bit is set to '1', then the capability to enable
36422 	 * a VNIC in a mode where RSS context without configuring
36423 	 * RSS indirection table is supported (for RSS hash computation).
36424 	 * When this bit is set to '0', then a VNIC can not be configured
36425 	 * with a mode to enable RSS context without configuring RSS
36426 	 * indirection table.
36427 	 */
36428 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_RSS_DFLT_CR_CAP \
36429 		UINT32_C(0x20)
36430 	/*
36431 	 * When this bit is '1', the capability to
36432 	 * mirror the RoCE traffic is supported.
36433 	 * If set to '0', then the capability to mirror the
36434 	 * RoCE traffic is not supported.
36435 	 */
36436 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_CAP \
36437 		UINT32_C(0x40)
36438 	/*
36439 	 * When this bit is '1', the outermost RSS hashing capability
36440 	 * is supported. If set to '0', then the outermost RSS hashing
36441 	 * capability is not supported.
36442 	 */
36443 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_OUTERMOST_RSS_CAP \
36444 		UINT32_C(0x80)
36445 	/*
36446 	 * When this bit is '1', it indicates that firmware supports the
36447 	 * ability to steer incoming packets from one CoS queue to one
36448 	 * VNIC.  This optional feature can then be enabled
36449 	 * using HWRM_VNIC_CFG on any VNIC.  This feature is only
36450 	 * available when NVM option “enable_cos_classification” is set
36451 	 * to 1.  If set to '0', firmware does not support this feature.
36452 	 */
36453 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_COS_ASSIGNMENT_CAP \
36454 		UINT32_C(0x100)
36455 	/*
36456 	 * When this bit is '1', it indicates that HW and firmware supports
36457 	 * the use of RX V2 and RX TPA start V2 completion records for all
36458 	 * the RX rings of a VNIC. Once set, this feature is mandatory to
36459 	 * be used for the RX rings of the VNIC. Additionally, two new RX
36460 	 * checksum features supported by these completion records can be
36461 	 * configured using the HWRM_VNIC_CFG on a VNIC. If set to '0', the
36462 	 * HW and the firmware does not support this feature.
36463 	 */
36464 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_RX_CMPL_V2_CAP \
36465 		UINT32_C(0x200)
36466 	/*
36467 	 * When this bit is '1', it indicates that HW and firmware support
36468 	 * vnic state change. Host drivers can change the vnic state using
36469 	 * HWRM_VNIC_UPDATE. If set to '0', the HW and firmware do not
36470 	 * support this feature.
36471 	 */
36472 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_VNIC_STATE_CAP \
36473 		UINT32_C(0x400)
36474 	/*
36475 	 * When this bit is '1', it indicates that firmware supports
36476 	 * virtio-net functions default VNIC allocation using
36477 	 * HWRM_VNIC_ALLOC.
36478 	 * This capability is available only on Proxy VEE PF. If set to '0',
36479 	 * firmware does not support this feature.
36480 	 */
36481 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_VIRTIO_NET_VNIC_ALLOC_CAP \
36482 		UINT32_C(0x800)
36483 	/*
36484 	 * When this bit is set '1', then the capability to configure the
36485 	 * metadata format in the RX completion is supported for the VNIC.
36486 	 * When this bit is set to '0', then the capability to configure
36487 	 * the metadata format in the RX completion is not supported for
36488 	 * the VNIC.
36489 	 */
36490 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_METADATA_FORMAT_CAP \
36491 		UINT32_C(0x1000)
36492 	/*
36493 	 * When this bit is set '1', it indicates that firmware returns
36494 	 * INVALID_PARAM error, if host drivers choose invalid hash type
36495 	 * bit combinations in vnic_rss_cfg.
36496 	 */
36497 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_RSS_STRICT_HASH_TYPE_CAP \
36498 		UINT32_C(0x2000)
36499 	/*
36500 	 * When this bit is set '1', it indicates that firmware supports
36501 	 * the hash_type include and exclude flags in hwrm_vnic_rss_cfg.
36502 	 */
36503 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_RSS_HASH_TYPE_DELTA_CAP \
36504 		UINT32_C(0x4000)
36505 	/*
36506 	 * When this bit is '1', it indicates that HW is capable of using
36507 	 * Toeplitz algorithm. This mode uses Toeplitz algorithm and
36508 	 * provided Toeplitz hash key to hash the packets according to the
36509 	 * configured hash type and hash mode. The Toeplitz hash results and
36510 	 * the provided Toeplitz RSS indirection table are used to determine
36511 	 * the RSS rings.
36512 	 */
36513 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_RING_SELECT_MODE_TOEPLITZ_CAP \
36514 		UINT32_C(0x8000)
36515 	/*
36516 	 * When this bit is '1', it indicates that HW is capable of using
36517 	 * XOR algorithm. This mode uses XOR algorithm to hash the packets
36518 	 * according to the configured hash type and hash mode. The XOR
36519 	 * hash results and the provided XOR RSS indirection table are
36520 	 * used to determine the RSS rings. Host drivers provided hash key
36521 	 * is not honored in this mode.
36522 	 */
36523 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_RING_SELECT_MODE_XOR_CAP \
36524 		UINT32_C(0x10000)
36525 	/*
36526 	 * When this bit is '1', it indicates that HW is capable of using
36527 	 * checksum algorithm. In this mode, HW uses inner packets checksum
36528 	 * algorithm to distribute the packets across the rings and Toeplitz
36529 	 * algorithm to calculate the hash to convey it in the RX
36530 	 * completions. Host drivers should provide Toeplitz hash key.
36531 	 * As HW uses innermost packets checksum to distribute the packets
36532 	 * across the rings, host drivers can't convey hash  mode to choose
36533 	 * outer headers to calculate Toeplitz hash. FW will fail such
36534 	 * configuration.
36535 	 */
36536 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_RING_SELECT_MODE_TOEPLITZ_CHKSM_CAP \
36537 		UINT32_C(0x20000)
36538 	/*
36539 	 * When this bit is '1' HW supports hash calculation
36540 	 * based on IPV6 flow labels.
36541 	 */
36542 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_RSS_IPV6_FLOW_LABEL_CAP \
36543 		UINT32_C(0x40000)
36544 	/*
36545 	 * When this bit is '1', it indicates that HW and firmware supports
36546 	 * the use of RX V3 and RX TPA start V3 completion records for all
36547 	 * the RX rings of a VNIC. Once set, this feature is mandatory to
36548 	 * be used for the RX rings of the VNIC. If set to '0', the
36549 	 * HW and the firmware does not support this feature.
36550 	 */
36551 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_RX_CMPL_V3_CAP \
36552 		UINT32_C(0x80000)
36553 	/*
36554 	 * When this bit is '1' HW supports different RX CQE record types.
36555 	 * Host drivers can choose the mode based on their application
36556 	 * requirements like performance, TPA, HDS and PTP.
36557 	 */
36558 	#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_L2_CQE_MODE_CAP \
36559 		UINT32_C(0x100000)
36560 	/*
36561 	 * This field advertises the maximum concurrent TPA aggregations
36562 	 * supported by the VNIC on new devices that support TPA v2 or v3.
36563 	 * '0' means that both the TPA v2 and v3 are not supported.
36564 	 */
36565 	uint16_t	max_aggs_supported;
36566 	uint8_t	unused_1[5];
36567 	/*
36568 	 * This field is used in Output records to indicate that the output
36569 	 * is completely written to RAM.  This field should be read as '1'
36570 	 * to indicate that the output has been completely written.
36571 	 * When writing a command completion or response to an internal processor,
36572 	 * the order of writes has to be such that this field is written last.
36573 	 */
36574 	uint8_t	valid;
36575 } __rte_packed;
36576 
36577 /*********************
36578  * hwrm_vnic_tpa_cfg *
36579  *********************/
36580 
36581 
36582 /* hwrm_vnic_tpa_cfg_input (size:320b/40B) */
36583 struct hwrm_vnic_tpa_cfg_input {
36584 	/* The HWRM command request type. */
36585 	uint16_t	req_type;
36586 	/*
36587 	 * The completion ring to send the completion event on. This should
36588 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
36589 	 */
36590 	uint16_t	cmpl_ring;
36591 	/*
36592 	 * The sequence ID is used by the driver for tracking multiple
36593 	 * commands. This ID is treated as opaque data by the firmware and
36594 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
36595 	 */
36596 	uint16_t	seq_id;
36597 	/*
36598 	 * The target ID of the command:
36599 	 * * 0x0-0xFFF8 - The function ID
36600 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
36601 	 * * 0xFFFD - Reserved for user-space HWRM interface
36602 	 * * 0xFFFF - HWRM
36603 	 */
36604 	uint16_t	target_id;
36605 	/*
36606 	 * A physical address pointer pointing to a host buffer that the
36607 	 * command's response data will be written. This can be either a host
36608 	 * physical address (HPA) or a guest physical address (GPA) and must
36609 	 * point to a physically contiguous block of memory.
36610 	 */
36611 	uint64_t	resp_addr;
36612 	uint32_t	flags;
36613 	/*
36614 	 * When this bit is '1', the VNIC shall be configured to
36615 	 * perform transparent packet aggregation (TPA) of
36616 	 * non-tunneled TCP packets.
36617 	 */
36618 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_TPA \
36619 		UINT32_C(0x1)
36620 	/*
36621 	 * When this bit is '1', the VNIC shall be configured to
36622 	 * perform transparent packet aggregation (TPA) of
36623 	 * tunneled TCP packets.
36624 	 */
36625 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_ENCAP_TPA \
36626 		UINT32_C(0x2)
36627 	/*
36628 	 * When this bit is '1', the VNIC shall be configured to
36629 	 * perform transparent packet aggregation (TPA) according
36630 	 * to Windows Receive Segment Coalescing (RSC) rules.
36631 	 */
36632 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_RSC_WND_UPDATE \
36633 		UINT32_C(0x4)
36634 	/*
36635 	 * When this bit is '1', the VNIC shall be configured to
36636 	 * perform transparent packet aggregation (TPA) according
36637 	 * to Linux Generic Receive Offload (GRO) rules.
36638 	 */
36639 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO \
36640 		UINT32_C(0x8)
36641 	/*
36642 	 * When this bit is '1', the VNIC shall be configured to
36643 	 * perform transparent packet aggregation (TPA) for TCP
36644 	 * packets with IP ECN set to non-zero.
36645 	 */
36646 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_WITH_ECN \
36647 		UINT32_C(0x10)
36648 	/*
36649 	 * When this bit is '1', the VNIC shall be configured to
36650 	 * perform transparent packet aggregation (TPA) for
36651 	 * GRE tunneled TCP packets only if all packets have the
36652 	 * same GRE sequence.
36653 	 */
36654 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_WITH_SAME_GRE_SEQ \
36655 		UINT32_C(0x20)
36656 	/*
36657 	 * When this bit is '1' and the GRO mode is enabled,
36658 	 * the VNIC shall be configured to
36659 	 * perform transparent packet aggregation (TPA) for
36660 	 * TCP/IPv4 packets with consecutively increasing IPIDs.
36661 	 * In other words, the last packet that is being
36662 	 * aggregated to an already existing aggregation context
36663 	 * shall have IPID 1 more than the IPID of the last packet
36664 	 * that was aggregated in that aggregation context.
36665 	 */
36666 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO_IPID_CHECK \
36667 		UINT32_C(0x40)
36668 	/*
36669 	 * When this bit is '1' and the GRO mode is enabled,
36670 	 * the VNIC shall be configured to
36671 	 * perform transparent packet aggregation (TPA) for
36672 	 * TCP packets with the same TTL (IPv4) or Hop limit (IPv6)
36673 	 * value.
36674 	 */
36675 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO_TTL_CHECK \
36676 		UINT32_C(0x80)
36677 	/*
36678 	 * When this bit is '1' and the GRO mode is enabled,
36679 	 * the VNIC shall DMA payload data using GRO rules.
36680 	 * When this bit is '0', the VNIC shall DMA payload data
36681 	 * using the more efficient LRO rules of filling all
36682 	 * aggregation buffers.
36683 	 */
36684 	#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_PACK_AS_GRO \
36685 		UINT32_C(0x100)
36686 	uint32_t	enables;
36687 	/*
36688 	 * This bit must be '1' for the max_agg_segs field to be
36689 	 * configured.
36690 	 */
36691 	#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGG_SEGS      UINT32_C(0x1)
36692 	/*
36693 	 * This bit must be '1' for the max_aggs field to be
36694 	 * configured.
36695 	 */
36696 	#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGGS          UINT32_C(0x2)
36697 	/*
36698 	 * This bit must be '1' for the max_agg_timer field to be
36699 	 * configured.
36700 	 */
36701 	#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGG_TIMER     UINT32_C(0x4)
36702 	/* deprecated bit.  Do not use!!! */
36703 	#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MIN_AGG_LEN       UINT32_C(0x8)
36704 	/* Logical vnic ID */
36705 	uint16_t	vnic_id;
36706 	/*
36707 	 * This is the maximum number of TCP segments that can
36708 	 * be aggregated (unit is Log2). Max value is 31. On new
36709 	 * devices supporting TPA v2, the unit is multiples of 4 and
36710 	 * valid values are > 0 and <= 63.
36711 	 */
36712 	uint16_t	max_agg_segs;
36713 	/* 1 segment */
36714 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_1   UINT32_C(0x0)
36715 	/* 2 segments */
36716 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_2   UINT32_C(0x1)
36717 	/* 4 segments */
36718 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_4   UINT32_C(0x2)
36719 	/* 8 segments */
36720 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_8   UINT32_C(0x3)
36721 	/* Any segment size larger than this is not valid */
36722 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_MAX UINT32_C(0x1f)
36723 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_LAST \
36724 		HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_MAX
36725 	/*
36726 	 * This is the maximum number of aggregations this VNIC is
36727 	 * allowed (unit is Log2). Max value is 7. On new devices
36728 	 * supporting TPA v2, this is in unit of 1 and must be > 0
36729 	 * and <= max_aggs_supported in the hwrm_vnic_qcaps response
36730 	 * to enable TPA v2.
36731 	 */
36732 	uint16_t	max_aggs;
36733 	/* 1 aggregation */
36734 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_1   UINT32_C(0x0)
36735 	/* 2 aggregations */
36736 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_2   UINT32_C(0x1)
36737 	/* 4 aggregations */
36738 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_4   UINT32_C(0x2)
36739 	/* 8 aggregations */
36740 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_8   UINT32_C(0x3)
36741 	/* 16 aggregations */
36742 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_16  UINT32_C(0x4)
36743 	/* Any aggregation size larger than this is not valid */
36744 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_MAX UINT32_C(0x7)
36745 	#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_LAST \
36746 		HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_MAX
36747 	uint8_t	unused_0[2];
36748 	/*
36749 	 * This is the maximum amount of time allowed for
36750 	 * an aggregation context to complete after it was initiated.
36751 	 */
36752 	uint32_t	max_agg_timer;
36753 	/*
36754 	 * This is the minimum amount of payload length required to
36755 	 * start an aggregation context. This field is deprecated and
36756 	 * should be set to 0.  The minimum length is set by firmware
36757 	 * and can be queried using hwrm_vnic_tpa_qcfg.
36758 	 */
36759 	uint32_t	min_agg_len;
36760 } __rte_packed;
36761 
36762 /* hwrm_vnic_tpa_cfg_output (size:128b/16B) */
36763 struct hwrm_vnic_tpa_cfg_output {
36764 	/* The specific error status for the command. */
36765 	uint16_t	error_code;
36766 	/* The HWRM command request type. */
36767 	uint16_t	req_type;
36768 	/* The sequence ID from the original command. */
36769 	uint16_t	seq_id;
36770 	/* The length of the response data in number of bytes. */
36771 	uint16_t	resp_len;
36772 	uint8_t	unused_0[7];
36773 	/*
36774 	 * This field is used in Output records to indicate that the output
36775 	 * is completely written to RAM.  This field should be read as '1'
36776 	 * to indicate that the output has been completely written.
36777 	 * When writing a command completion or response to an internal processor,
36778 	 * the order of writes has to be such that this field is written last.
36779 	 */
36780 	uint8_t	valid;
36781 } __rte_packed;
36782 
36783 /*********************
36784  * hwrm_vnic_rss_cfg *
36785  *********************/
36786 
36787 
36788 /* hwrm_vnic_rss_cfg_input (size:384b/48B) */
36789 struct hwrm_vnic_rss_cfg_input {
36790 	/* The HWRM command request type. */
36791 	uint16_t	req_type;
36792 	/*
36793 	 * The completion ring to send the completion event on. This should
36794 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
36795 	 */
36796 	uint16_t	cmpl_ring;
36797 	/*
36798 	 * The sequence ID is used by the driver for tracking multiple
36799 	 * commands. This ID is treated as opaque data by the firmware and
36800 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
36801 	 */
36802 	uint16_t	seq_id;
36803 	/*
36804 	 * The target ID of the command:
36805 	 * * 0x0-0xFFF8 - The function ID
36806 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
36807 	 * * 0xFFFD - Reserved for user-space HWRM interface
36808 	 * * 0xFFFF - HWRM
36809 	 */
36810 	uint16_t	target_id;
36811 	/*
36812 	 * A physical address pointer pointing to a host buffer that the
36813 	 * command's response data will be written. This can be either a host
36814 	 * physical address (HPA) or a guest physical address (GPA) and must
36815 	 * point to a physically contiguous block of memory.
36816 	 */
36817 	uint64_t	resp_addr;
36818 	uint32_t	hash_type;
36819 	/*
36820 	 * When this bit is '1', the RSS hash shall be computed
36821 	 * over source and destination IPv4 addresses of IPv4
36822 	 * packets.
36823 	 */
36824 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_IPV4 \
36825 		UINT32_C(0x1)
36826 	/*
36827 	 * When this bit is '1', the RSS hash shall be computed
36828 	 * over source/destination IPv4 addresses and
36829 	 * source/destination ports of TCP/IPv4 packets.
36830 	 */
36831 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_TCP_IPV4 \
36832 		UINT32_C(0x2)
36833 	/*
36834 	 * When this bit is '1', the RSS hash shall be computed
36835 	 * over source/destination IPv4 addresses and
36836 	 * source/destination ports of UDP/IPv4 packets.
36837 	 */
36838 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV4 \
36839 		UINT32_C(0x4)
36840 	/*
36841 	 * When this bit is '1', the RSS hash shall be computed
36842 	 * over source and destination IPv6 addresses of IPv6
36843 	 * packets.
36844 	 */
36845 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_IPV6 \
36846 		UINT32_C(0x8)
36847 	/*
36848 	 * When this bit is '1', the RSS hash shall be computed
36849 	 * over source/destination IPv6 addresses and
36850 	 * source/destination ports of TCP/IPv6 packets.
36851 	 */
36852 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_TCP_IPV6 \
36853 		UINT32_C(0x10)
36854 	/*
36855 	 * When this bit is '1', the RSS hash shall be computed
36856 	 * over source/destination IPv6 addresses and
36857 	 * source/destination ports of UDP/IPv6 packets.
36858 	 */
36859 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV6 \
36860 		UINT32_C(0x20)
36861 	/*
36862 	 * When this bit is '1', the RSS hash shall be computed
36863 	 * over source, destination IPv6 addresses and flow label of IPv6
36864 	 * packets. Hash type ipv6 and ipv6_flow_label are mutually
36865 	 * exclusive. HW does not include the flow_label in hash
36866 	 * calculation for the packets that are matching tcp_ipv6 and
36867 	 * udp_ipv6 hash types. Host drivers should set this bit based on
36868 	 * rss_ipv6_flow_label_cap.
36869 	 */
36870 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_IPV6_FLOW_LABEL \
36871 		UINT32_C(0x40)
36872 	/* VNIC ID of VNIC associated with RSS table being configured. */
36873 	uint16_t	vnic_id;
36874 	/*
36875 	 * Specifies which VNIC ring table pair to configure.
36876 	 * Valid values range from 0 to 7.
36877 	 */
36878 	uint8_t	ring_table_pair_index;
36879 	/* Flags to specify different RSS hash modes. */
36880 	uint8_t	hash_mode_flags;
36881 	/*
36882 	 * When this bit is '1', it indicates using current RSS
36883 	 * hash mode setting configured in the device.
36884 	 */
36885 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_DEFAULT \
36886 		UINT32_C(0x1)
36887 	/*
36888 	 * When this bit is '1', it indicates requesting support of
36889 	 * RSS hashing over innermost 4 tuples {l3.src, l3.dest,
36890 	 * l4.src, l4.dest} for tunnel packets. For none-tunnel
36891 	 * packets, the RSS hash is computed over the normal
36892 	 * src/dest l3 and src/dest l4 headers.
36893 	 */
36894 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_INNERMOST_4 \
36895 		UINT32_C(0x2)
36896 	/*
36897 	 * When this bit is '1', it indicates requesting support of
36898 	 * RSS hashing over innermost 2 tuples {l3.src, l3.dest} for
36899 	 * tunnel packets. For none-tunnel packets, the RSS hash is
36900 	 * computed over the normal src/dest l3 headers.
36901 	 */
36902 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_INNERMOST_2 \
36903 		UINT32_C(0x4)
36904 	/*
36905 	 * When this bit is '1', it indicates requesting support of
36906 	 * RSS hashing over outermost 4 tuples {t_l3.src, t_l3.dest,
36907 	 * t_l4.src, t_l4.dest} for tunnel packets. For none-tunnel
36908 	 * packets, the RSS hash is computed over the normal
36909 	 * src/dest l3 and src/dest l4 headers.
36910 	 */
36911 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_OUTERMOST_4 \
36912 		UINT32_C(0x8)
36913 	/*
36914 	 * When this bit is '1', it indicates requesting support of
36915 	 * RSS hashing over outermost 2 tuples {t_l3.src, t_l3.dest} for
36916 	 * tunnel packets. For none-tunnel packets, the RSS hash is
36917 	 * computed over the normal src/dest l3 headers.
36918 	 */
36919 	#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_OUTERMOST_2 \
36920 		UINT32_C(0x10)
36921 	/* This is the address for rss ring group table */
36922 	uint64_t	ring_grp_tbl_addr;
36923 	/* This is the address for rss hash key table */
36924 	uint64_t	hash_key_tbl_addr;
36925 	/* Index to the rss indirection table. */
36926 	uint16_t	rss_ctx_idx;
36927 	uint8_t	flags;
36928 	/*
36929 	 * When this bit is '1', it indicates that the hash_type field is
36930 	 * interpreted as a change relative the current configuration. Each
36931 	 * '1' bit in hash_type represents a header to add to the current
36932 	 * hash. Zeroes designate the hash_type state bits that should remain
36933 	 * unchanged, if possible. If this constraint on the existing state
36934 	 * cannot be satisfied, then the implementation should preference
36935 	 * adding other headers so as to honor the request to add the
36936 	 * specified headers. It is an error to set this flag concurrently
36937 	 * with hash_type_exclude.
36938 	 */
36939 	#define HWRM_VNIC_RSS_CFG_INPUT_FLAGS_HASH_TYPE_INCLUDE \
36940 		UINT32_C(0x1)
36941 	/*
36942 	 * When this bit is '1', it indicates that the hash_type field is
36943 	 * interpreted as a change relative the current configuration. Each
36944 	 * '1' bit in hash_type represents a header to remove from the
36945 	 * current hash. Zeroes designate the hash_type state bits that
36946 	 * should remain unchanged, if possible. If this constraint on the
36947 	 * existing state cannot be satisfied, then the implementation should
36948 	 * preference removing other headers so as to honor the request to
36949 	 * remove the specified headers. It is an error to set this flag
36950 	 * concurrently with hash_type_include.
36951 	 */
36952 	#define HWRM_VNIC_RSS_CFG_INPUT_FLAGS_HASH_TYPE_EXCLUDE \
36953 		UINT32_C(0x2)
36954 	uint8_t	ring_select_mode;
36955 	/*
36956 	 * In this mode, HW uses Toeplitz algorithm and provided Toeplitz
36957 	 * hash key to hash the packets according to the configured hash
36958 	 * type and hash mode. The Toeplitz hash results and the provided
36959 	 * Toeplitz RSS indirection table are used to determine the RSS
36960 	 * rings.
36961 	 */
36962 	#define HWRM_VNIC_RSS_CFG_INPUT_RING_SELECT_MODE_TOEPLITZ \
36963 		UINT32_C(0x0)
36964 	/*
36965 	 * In this mode, HW uses XOR algorithm to hash the packets according
36966 	 * to the configured hash type and hash mode. The XOR hash results
36967 	 * and the provided XOR RSS indirection table are used to determine
36968 	 * the RSS rings. Host drivers provided hash key is not honored in
36969 	 * this mode.
36970 	 */
36971 	#define HWRM_VNIC_RSS_CFG_INPUT_RING_SELECT_MODE_XOR \
36972 		UINT32_C(0x1)
36973 	/*
36974 	 * In this mode, HW uses inner packets checksum algorithm to
36975 	 * distribute the packets across the rings and Toeplitz algorithm
36976 	 * to calculate the hash to convey it in the RX completions. Host
36977 	 * drivers should provide Toeplitz hash key. As HW uses innermost
36978 	 * packets checksum to distribute the packets across the rings,
36979 	 * host drivers can't convey hash mode to choose outer headers to
36980 	 * calculate Toeplitz hash. FW will fail such configuration.
36981 	 */
36982 	#define HWRM_VNIC_RSS_CFG_INPUT_RING_SELECT_MODE_TOEPLITZ_CHECKSUM \
36983 		UINT32_C(0x2)
36984 	#define HWRM_VNIC_RSS_CFG_INPUT_RING_SELECT_MODE_LAST \
36985 		HWRM_VNIC_RSS_CFG_INPUT_RING_SELECT_MODE_TOEPLITZ_CHECKSUM
36986 	uint8_t	unused_1[4];
36987 } __rte_packed;
36988 
36989 /* hwrm_vnic_rss_cfg_output (size:128b/16B) */
36990 struct hwrm_vnic_rss_cfg_output {
36991 	/* The specific error status for the command. */
36992 	uint16_t	error_code;
36993 	/* The HWRM command request type. */
36994 	uint16_t	req_type;
36995 	/* The sequence ID from the original command. */
36996 	uint16_t	seq_id;
36997 	/* The length of the response data in number of bytes. */
36998 	uint16_t	resp_len;
36999 	uint8_t	unused_0[7];
37000 	/*
37001 	 * This field is used in Output records to indicate that the output
37002 	 * is completely written to RAM.  This field should be read as '1'
37003 	 * to indicate that the output has been completely written.
37004 	 * When writing a command completion or response to an internal processor,
37005 	 * the order of writes has to be such that this field is written last.
37006 	 */
37007 	uint8_t	valid;
37008 } __rte_packed;
37009 
37010 /* hwrm_vnic_rss_cfg_cmd_err (size:64b/8B) */
37011 struct hwrm_vnic_rss_cfg_cmd_err {
37012 	/*
37013 	 * command specific error codes that goes to
37014 	 * the cmd_err field in Common HWRM Error Response.
37015 	 */
37016 	uint8_t	code;
37017 	/* Unknown error */
37018 	#define HWRM_VNIC_RSS_CFG_CMD_ERR_CODE_UNKNOWN \
37019 		UINT32_C(0x0)
37020 	/*
37021 	 * Unable to change global RSS mode to outer due to all active
37022 	 * interfaces are not ready to support outer RSS hashing.
37023 	 */
37024 	#define HWRM_VNIC_RSS_CFG_CMD_ERR_CODE_INTERFACE_NOT_READY \
37025 		UINT32_C(0x1)
37026 	#define HWRM_VNIC_RSS_CFG_CMD_ERR_CODE_LAST \
37027 		HWRM_VNIC_RSS_CFG_CMD_ERR_CODE_INTERFACE_NOT_READY
37028 	uint8_t	unused_0[7];
37029 } __rte_packed;
37030 
37031 /**********************
37032  * hwrm_vnic_rss_qcfg *
37033  **********************/
37034 
37035 
37036 /* hwrm_vnic_rss_qcfg_input (size:192b/24B) */
37037 struct hwrm_vnic_rss_qcfg_input {
37038 	/* The HWRM command request type. */
37039 	uint16_t	req_type;
37040 	/*
37041 	 * The completion ring to send the completion event on. This should
37042 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
37043 	 */
37044 	uint16_t	cmpl_ring;
37045 	/*
37046 	 * The sequence ID is used by the driver for tracking multiple
37047 	 * commands. This ID is treated as opaque data by the firmware and
37048 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
37049 	 */
37050 	uint16_t	seq_id;
37051 	/*
37052 	 * The target ID of the command:
37053 	 * * 0x0-0xFFF8 - The function ID
37054 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37055 	 * * 0xFFFD - Reserved for user-space HWRM interface
37056 	 * * 0xFFFF - HWRM
37057 	 */
37058 	uint16_t	target_id;
37059 	/*
37060 	 * A physical address pointer pointing to a host buffer that the
37061 	 * command's response data will be written. This can be either a host
37062 	 * physical address (HPA) or a guest physical address (GPA) and must
37063 	 * point to a physically contiguous block of memory.
37064 	 */
37065 	uint64_t	resp_addr;
37066 	/* Index to the rss indirection table. */
37067 	uint16_t	rss_ctx_idx;
37068 	uint8_t	unused_0[6];
37069 } __rte_packed;
37070 
37071 /* hwrm_vnic_rss_qcfg_output (size:512b/64B) */
37072 struct hwrm_vnic_rss_qcfg_output {
37073 	/* The specific error status for the command. */
37074 	uint16_t	error_code;
37075 	/* The HWRM command request type. */
37076 	uint16_t	req_type;
37077 	/* The sequence ID from the original command. */
37078 	uint16_t	seq_id;
37079 	/* The length of the response data in number of bytes. */
37080 	uint16_t	resp_len;
37081 	uint32_t	hash_type;
37082 	/*
37083 	 * When this bit is '1', the RSS hash shall be computed
37084 	 * over source and destination IPv4 addresses of IPv4
37085 	 * packets.
37086 	 */
37087 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_IPV4         UINT32_C(0x1)
37088 	/*
37089 	 * When this bit is '1', the RSS hash shall be computed
37090 	 * over source/destination IPv4 addresses and
37091 	 * source/destination ports of TCP/IPv4 packets.
37092 	 */
37093 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_TCP_IPV4     UINT32_C(0x2)
37094 	/*
37095 	 * When this bit is '1', the RSS hash shall be computed
37096 	 * over source/destination IPv4 addresses and
37097 	 * source/destination ports of UDP/IPv4 packets.
37098 	 */
37099 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_UDP_IPV4     UINT32_C(0x4)
37100 	/*
37101 	 * When this bit is '1', the RSS hash shall be computed
37102 	 * over source and destination IPv6 addresses of IPv6
37103 	 * packets.
37104 	 */
37105 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_IPV6         UINT32_C(0x8)
37106 	/*
37107 	 * When this bit is '1', the RSS hash shall be computed
37108 	 * over source/destination IPv6 addresses and
37109 	 * source/destination ports of TCP/IPv6 packets.
37110 	 */
37111 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_TCP_IPV6     UINT32_C(0x10)
37112 	/*
37113 	 * When this bit is '1', the RSS hash shall be computed
37114 	 * over source/destination IPv6 addresses and
37115 	 * source/destination ports of UDP/IPv6 packets.
37116 	 */
37117 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_UDP_IPV6     UINT32_C(0x20)
37118 	uint8_t	unused_0[4];
37119 	/* This is the value of rss hash key */
37120 	uint32_t	hash_key[10];
37121 	/* Flags to specify different RSS hash modes. */
37122 	uint8_t	hash_mode_flags;
37123 	/*
37124 	 * When this bit is '1', it indicates using current RSS
37125 	 * hash mode setting configured in the device.
37126 	 */
37127 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_DEFAULT \
37128 		UINT32_C(0x1)
37129 	/*
37130 	 * When this bit is '1', it indicates requesting support of
37131 	 * RSS hashing over innermost 4 tuples {l3.src, l3.dest,
37132 	 * l4.src, l4.dest} for tunnel packets. For none-tunnel
37133 	 * packets, the RSS hash is computed over the normal
37134 	 * src/dest l3 and src/dest l4 headers.
37135 	 */
37136 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_INNERMOST_4 \
37137 		UINT32_C(0x2)
37138 	/*
37139 	 * When this bit is '1', it indicates requesting support of
37140 	 * RSS hashing over innermost 2 tuples {l3.src, l3.dest} for
37141 	 * tunnel packets. For none-tunnel packets, the RSS hash is
37142 	 * computed over the normal src/dest l3 headers.
37143 	 */
37144 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_INNERMOST_2 \
37145 		UINT32_C(0x4)
37146 	/*
37147 	 * When this bit is '1', it indicates requesting support of
37148 	 * RSS hashing over outermost 4 tuples {t_l3.src, t_l3.dest,
37149 	 * t_l4.src, t_l4.dest} for tunnel packets. For none-tunnel
37150 	 * packets, the RSS hash is computed over the normal
37151 	 * src/dest l3 and src/dest l4 headers.
37152 	 */
37153 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_OUTERMOST_4 \
37154 		UINT32_C(0x8)
37155 	/*
37156 	 * When this bit is '1', it indicates requesting support of
37157 	 * RSS hashing over outermost 2 tuples {t_l3.src, t_l3.dest} for
37158 	 * tunnel packets. For none-tunnel packets, the RSS hash is
37159 	 * computed over the normal src/dest l3 headers.
37160 	 */
37161 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_OUTERMOST_2 \
37162 		UINT32_C(0x10)
37163 	uint8_t	ring_select_mode;
37164 	/*
37165 	 * In this mode, HW uses Toeplitz algorithm and provided Toeplitz
37166 	 * hash key to hash the packets according to the configured hash
37167 	 * type and hash mode. The Toeplitz hash results and the provided
37168 	 * Toeplitz RSS indirection table are used to determine the RSS
37169 	 * rings.
37170 	 */
37171 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_RING_SELECT_MODE_TOEPLITZ \
37172 		UINT32_C(0x0)
37173 	/*
37174 	 * In this mode, HW uses XOR algorithm to hash the packets according
37175 	 * to the configured hash type and hash mode. The XOR hash results
37176 	 * and the provided XOR RSS indirection table are used to determine
37177 	 * the RSS rings. Host drivers provided hash key is not honored in
37178 	 * this mode.
37179 	 */
37180 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_RING_SELECT_MODE_XOR \
37181 		UINT32_C(0x1)
37182 	/*
37183 	 * In this mode, HW uses inner packets checksum algorithm to
37184 	 * distribute the packets across the rings and Toeplitz algorithm
37185 	 * to calculate the hash to convey it in the RX completions. Host
37186 	 * drivers should provide Toeplitz hash key. As HW uses innermost
37187 	 * packets checksum to distribute the packets across the rings,
37188 	 * host drivers can't convey hash mode to choose outer headers to
37189 	 * calculate Toeplitz hash. FW will fail such configuration.
37190 	 */
37191 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_RING_SELECT_MODE_TOEPLITZ_CHECKSUM \
37192 		UINT32_C(0x2)
37193 	#define HWRM_VNIC_RSS_QCFG_OUTPUT_RING_SELECT_MODE_LAST \
37194 		HWRM_VNIC_RSS_QCFG_OUTPUT_RING_SELECT_MODE_TOEPLITZ_CHECKSUM
37195 	uint8_t	unused_1[5];
37196 	/*
37197 	 * This field is used in Output records to indicate that the output
37198 	 * is completely written to RAM.  This field should be read as '1'
37199 	 * to indicate that the output has been completely written.
37200 	 * When writing a command completion or response to an internal processor,
37201 	 * the order of writes has to be such that this field is written last.
37202 	 */
37203 	uint8_t	valid;
37204 } __rte_packed;
37205 
37206 /**************************
37207  * hwrm_vnic_plcmodes_cfg *
37208  **************************/
37209 
37210 
37211 /* hwrm_vnic_plcmodes_cfg_input (size:320b/40B) */
37212 struct hwrm_vnic_plcmodes_cfg_input {
37213 	/* The HWRM command request type. */
37214 	uint16_t	req_type;
37215 	/*
37216 	 * The completion ring to send the completion event on. This should
37217 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
37218 	 */
37219 	uint16_t	cmpl_ring;
37220 	/*
37221 	 * The sequence ID is used by the driver for tracking multiple
37222 	 * commands. This ID is treated as opaque data by the firmware and
37223 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
37224 	 */
37225 	uint16_t	seq_id;
37226 	/*
37227 	 * The target ID of the command:
37228 	 * * 0x0-0xFFF8 - The function ID
37229 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37230 	 * * 0xFFFD - Reserved for user-space HWRM interface
37231 	 * * 0xFFFF - HWRM
37232 	 */
37233 	uint16_t	target_id;
37234 	/*
37235 	 * A physical address pointer pointing to a host buffer that the
37236 	 * command's response data will be written. This can be either a host
37237 	 * physical address (HPA) or a guest physical address (GPA) and must
37238 	 * point to a physically contiguous block of memory.
37239 	 */
37240 	uint64_t	resp_addr;
37241 	uint32_t	flags;
37242 	/*
37243 	 * When this bit is '1', the VNIC shall be configured to
37244 	 * use regular placement algorithm.
37245 	 * By default, the regular placement algorithm shall be
37246 	 * enabled on the VNIC.
37247 	 */
37248 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_REGULAR_PLACEMENT \
37249 		UINT32_C(0x1)
37250 	/*
37251 	 * When this bit is '1', the VNIC shall be configured
37252 	 * use the jumbo placement algorithm.
37253 	 */
37254 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_JUMBO_PLACEMENT \
37255 		UINT32_C(0x2)
37256 	/*
37257 	 * When this bit is '1', the VNIC shall be configured
37258 	 * to enable Header-Data split for IPv4 packets according
37259 	 * to the following rules:
37260 	 * # If the packet is identified as TCP/IPv4, then the
37261 	 * packet is split at the beginning of the TCP payload.
37262 	 * # If the packet is identified as UDP/IPv4, then the
37263 	 * packet is split at the beginning of UDP payload.
37264 	 * # If the packet is identified as non-TCP and non-UDP
37265 	 * IPv4 packet, then the packet is split at the beginning
37266 	 * of the upper layer protocol header carried in the IPv4
37267 	 * packet.
37268 	 */
37269 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_IPV4 \
37270 		UINT32_C(0x4)
37271 	/*
37272 	 * When this bit is '1', the VNIC shall be configured
37273 	 * to enable Header-Data split for IPv6 packets according
37274 	 * to the following rules:
37275 	 * # If the packet is identified as TCP/IPv6, then the
37276 	 * packet is split at the beginning of the TCP payload.
37277 	 * # If the packet is identified as UDP/IPv6, then the
37278 	 * packet is split at the beginning of UDP payload.
37279 	 * # If the packet is identified as non-TCP and non-UDP
37280 	 * IPv6 packet, then the packet is split at the beginning
37281 	 * of the upper layer protocol header carried in the IPv6
37282 	 * packet.
37283 	 */
37284 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_IPV6 \
37285 		UINT32_C(0x8)
37286 	/*
37287 	 * When this bit is '1', the VNIC shall be configured
37288 	 * to enable Header-Data split for FCoE packets at the
37289 	 * beginning of FC payload.
37290 	 */
37291 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_FCOE \
37292 		UINT32_C(0x10)
37293 	/*
37294 	 * When this bit is '1', the VNIC shall be configured
37295 	 * to enable Header-Data split for RoCE packets at the
37296 	 * beginning of RoCE payload (after BTH/GRH headers).
37297 	 */
37298 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_ROCE \
37299 		UINT32_C(0x20)
37300 	/*
37301 	 * When this bit is '1', the VNIC shall be configured use the virtio
37302 	 * placement algorithm. This feature can only be configured when
37303 	 * proxy mode is supported on the function.
37304 	 */
37305 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_VIRTIO_PLACEMENT \
37306 		UINT32_C(0x40)
37307 	uint32_t	enables;
37308 	/*
37309 	 * This bit must be '1' for the jumbo_thresh_valid field to be
37310 	 * configured.
37311 	 */
37312 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_JUMBO_THRESH_VALID \
37313 		UINT32_C(0x1)
37314 	/*
37315 	 * This bit must be '1' for the hds_offset_valid field to be
37316 	 * configured.
37317 	 */
37318 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_HDS_OFFSET_VALID \
37319 		UINT32_C(0x2)
37320 	/*
37321 	 * This bit must be '1' for the hds_threshold_valid field to be
37322 	 * configured.
37323 	 */
37324 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_HDS_THRESHOLD_VALID \
37325 		UINT32_C(0x4)
37326 	/*
37327 	 * This bit must be '1' for the max_bds_valid field to be
37328 	 * configured.
37329 	 */
37330 	#define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_MAX_BDS_VALID \
37331 		UINT32_C(0x8)
37332 	/* Logical vnic ID */
37333 	uint32_t	vnic_id;
37334 	/*
37335 	 * When jumbo placement algorithm is enabled, this value
37336 	 * is used to determine the threshold for jumbo placement.
37337 	 * Packets with length larger than this value will be
37338 	 * placed according to the jumbo placement algorithm.
37339 	 */
37340 	uint16_t	jumbo_thresh;
37341 	/*
37342 	 * This value is used to determine the offset into
37343 	 * packet buffer where the split data (payload) will be
37344 	 * placed according to one of HDS placement algorithm.
37345 	 *
37346 	 * The lengths of packet buffers provided for split data
37347 	 * shall be larger than this value.
37348 	 */
37349 	uint16_t	hds_offset;
37350 	/*
37351 	 * When one of the HDS placement algorithm is enabled, this
37352 	 * value is used to determine the threshold for HDS
37353 	 * placement.
37354 	 * Packets with length larger than this value will be
37355 	 * placed according to the HDS placement algorithm.
37356 	 * This value shall be in multiple of 4 bytes.
37357 	 */
37358 	uint16_t	hds_threshold;
37359 	/*
37360 	 * When virtio placement algorithm is enabled, this
37361 	 * value is used to determine the maximum number of BDs
37362 	 * that can be used to place an Rx Packet.
37363 	 * If an incoming packet does not fit in the buffers described
37364 	 * by the max BDs, the packet will be dropped and an error
37365 	 * will be reported in the completion. Valid values for this
37366 	 * field are between 1 and 8. If the VNIC uses header-data-
37367 	 * separation and/or TPA with buffer spanning enabled, valid
37368 	 * values for this field are between 2 and 8.
37369 	 * This feature can only be configured when proxy mode is
37370 	 * supported on the function.
37371 	 */
37372 	uint16_t	max_bds;
37373 	uint8_t	unused_0[4];
37374 } __rte_packed;
37375 
37376 /* hwrm_vnic_plcmodes_cfg_output (size:128b/16B) */
37377 struct hwrm_vnic_plcmodes_cfg_output {
37378 	/* The specific error status for the command. */
37379 	uint16_t	error_code;
37380 	/* The HWRM command request type. */
37381 	uint16_t	req_type;
37382 	/* The sequence ID from the original command. */
37383 	uint16_t	seq_id;
37384 	/* The length of the response data in number of bytes. */
37385 	uint16_t	resp_len;
37386 	uint8_t	unused_0[7];
37387 	/*
37388 	 * This field is used in Output records to indicate that the output
37389 	 * is completely written to RAM.  This field should be read as '1'
37390 	 * to indicate that the output has been completely written.
37391 	 * When writing a command completion or response to an internal
37392 	 * processor, the order of writes has to be such that this field is
37393 	 * written last.
37394 	 */
37395 	uint8_t	valid;
37396 } __rte_packed;
37397 
37398 /***************************
37399  * hwrm_vnic_plcmodes_qcfg *
37400  ***************************/
37401 
37402 
37403 /* hwrm_vnic_plcmodes_qcfg_input (size:192b/24B) */
37404 struct hwrm_vnic_plcmodes_qcfg_input {
37405 	/* The HWRM command request type. */
37406 	uint16_t	req_type;
37407 	/*
37408 	 * The completion ring to send the completion event on. This should
37409 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
37410 	 */
37411 	uint16_t	cmpl_ring;
37412 	/*
37413 	 * The sequence ID is used by the driver for tracking multiple
37414 	 * commands. This ID is treated as opaque data by the firmware and
37415 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
37416 	 */
37417 	uint16_t	seq_id;
37418 	/*
37419 	 * The target ID of the command:
37420 	 * * 0x0-0xFFF8 - The function ID
37421 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37422 	 * * 0xFFFD - Reserved for user-space HWRM interface
37423 	 * * 0xFFFF - HWRM
37424 	 */
37425 	uint16_t	target_id;
37426 	/*
37427 	 * A physical address pointer pointing to a host buffer that the
37428 	 * command's response data will be written. This can be either a host
37429 	 * physical address (HPA) or a guest physical address (GPA) and must
37430 	 * point to a physically contiguous block of memory.
37431 	 */
37432 	uint64_t	resp_addr;
37433 	/* Logical vnic ID */
37434 	uint32_t	vnic_id;
37435 	uint8_t	unused_0[4];
37436 } __rte_packed;
37437 
37438 /* hwrm_vnic_plcmodes_qcfg_output (size:192b/24B) */
37439 struct hwrm_vnic_plcmodes_qcfg_output {
37440 	/* The specific error status for the command. */
37441 	uint16_t	error_code;
37442 	/* The HWRM command request type. */
37443 	uint16_t	req_type;
37444 	/* The sequence ID from the original command. */
37445 	uint16_t	seq_id;
37446 	/* The length of the response data in number of bytes. */
37447 	uint16_t	resp_len;
37448 	uint32_t	flags;
37449 	/*
37450 	 * When this bit is '1', the VNIC is configured to
37451 	 * use regular placement algorithm.
37452 	 */
37453 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_REGULAR_PLACEMENT \
37454 		UINT32_C(0x1)
37455 	/*
37456 	 * When this bit is '1', the VNIC is configured to
37457 	 * use the jumbo placement algorithm.
37458 	 */
37459 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_JUMBO_PLACEMENT \
37460 		UINT32_C(0x2)
37461 	/*
37462 	 * When this bit is '1', the VNIC is configured
37463 	 * to enable Header-Data split for IPv4 packets.
37464 	 */
37465 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_IPV4 \
37466 		UINT32_C(0x4)
37467 	/*
37468 	 * When this bit is '1', the VNIC is configured
37469 	 * to enable Header-Data split for IPv6 packets.
37470 	 */
37471 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_IPV6 \
37472 		UINT32_C(0x8)
37473 	/*
37474 	 * When this bit is '1', the VNIC is configured
37475 	 * to enable Header-Data split for FCoE packets.
37476 	 */
37477 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_FCOE \
37478 		UINT32_C(0x10)
37479 	/*
37480 	 * When this bit is '1', the VNIC is configured
37481 	 * to enable Header-Data split for RoCE packets.
37482 	 */
37483 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_ROCE \
37484 		UINT32_C(0x20)
37485 	/*
37486 	 * When this bit is '1', the VNIC is configured
37487 	 * to be the default VNIC of the requesting function.
37488 	 */
37489 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_DFLT_VNIC \
37490 		UINT32_C(0x40)
37491 	/*
37492 	 * When this bit is '1', the VNIC is configured to use the virtio
37493 	 * placement algorithm. This feature can only be configured when
37494 	 * proxy mode is supported on the function.
37495 	 */
37496 	#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_VIRTIO_PLACEMENT \
37497 		UINT32_C(0x80)
37498 	/*
37499 	 * When jumbo placement algorithm is enabled, this value
37500 	 * is used to determine the threshold for jumbo placement.
37501 	 * Packets with length larger than this value will be
37502 	 * placed according to the jumbo placement algorithm.
37503 	 */
37504 	uint16_t	jumbo_thresh;
37505 	/*
37506 	 * This value is used to determine the offset into
37507 	 * packet buffer where the split data (payload) will be
37508 	 * placed according to one of HDS placement algorithm.
37509 	 *
37510 	 * The lengths of packet buffers provided for split data
37511 	 * shall be larger than this value.
37512 	 */
37513 	uint16_t	hds_offset;
37514 	/*
37515 	 * When one of the HDS placement algorithm is enabled, this
37516 	 * value is used to determine the threshold for HDS
37517 	 * placement.
37518 	 * Packets with length larger than this value will be
37519 	 * placed according to the HDS placement algorithm.
37520 	 * This value shall be in multiple of 4 bytes.
37521 	 */
37522 	uint16_t	hds_threshold;
37523 	/*
37524 	 * When virtio placement algorithm is enabled, this
37525 	 * value is used to determine the maximum number of BDs
37526 	 * that can be used to place an Rx Packet.
37527 	 * If an incoming packet does not fit in the buffers described
37528 	 * by the max BDs, the packet will be dropped and an error
37529 	 * will be reported in the completion. Valid values for this
37530 	 * field are between 1 and 8. If the VNIC uses header-data-
37531 	 * separation and/or TPA with buffer spanning enabled, valid
37532 	 * values for this field are between 2 and 8.
37533 	 * This feature can only be configured when proxy mode is supported
37534 	 * on the function
37535 	 */
37536 	uint16_t	max_bds;
37537 	uint8_t	unused_0[3];
37538 	/*
37539 	 * This field is used in Output records to indicate that the output
37540 	 * is completely written to RAM.  This field should be read as '1'
37541 	 * to indicate that the output has been completely written.
37542 	 * When writing a command completion or response to an internal
37543 	 * processor, the order of writes has to be such that this field is
37544 	 * written last.
37545 	 */
37546 	uint8_t	valid;
37547 } __rte_packed;
37548 
37549 /**********************************
37550  * hwrm_vnic_rss_cos_lb_ctx_alloc *
37551  **********************************/
37552 
37553 
37554 /* hwrm_vnic_rss_cos_lb_ctx_alloc_input (size:128b/16B) */
37555 struct hwrm_vnic_rss_cos_lb_ctx_alloc_input {
37556 	/* The HWRM command request type. */
37557 	uint16_t	req_type;
37558 	/*
37559 	 * The completion ring to send the completion event on. This should
37560 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
37561 	 */
37562 	uint16_t	cmpl_ring;
37563 	/*
37564 	 * The sequence ID is used by the driver for tracking multiple
37565 	 * commands. This ID is treated as opaque data by the firmware and
37566 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
37567 	 */
37568 	uint16_t	seq_id;
37569 	/*
37570 	 * The target ID of the command:
37571 	 * * 0x0-0xFFF8 - The function ID
37572 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37573 	 * * 0xFFFD - Reserved for user-space HWRM interface
37574 	 * * 0xFFFF - HWRM
37575 	 */
37576 	uint16_t	target_id;
37577 	/*
37578 	 * A physical address pointer pointing to a host buffer that the
37579 	 * command's response data will be written. This can be either a host
37580 	 * physical address (HPA) or a guest physical address (GPA) and must
37581 	 * point to a physically contiguous block of memory.
37582 	 */
37583 	uint64_t	resp_addr;
37584 } __rte_packed;
37585 
37586 /* hwrm_vnic_rss_cos_lb_ctx_alloc_output (size:128b/16B) */
37587 struct hwrm_vnic_rss_cos_lb_ctx_alloc_output {
37588 	/* The specific error status for the command. */
37589 	uint16_t	error_code;
37590 	/* The HWRM command request type. */
37591 	uint16_t	req_type;
37592 	/* The sequence ID from the original command. */
37593 	uint16_t	seq_id;
37594 	/* The length of the response data in number of bytes. */
37595 	uint16_t	resp_len;
37596 	/* rss_cos_lb_ctx_id is 16 b */
37597 	uint16_t	rss_cos_lb_ctx_id;
37598 	uint8_t	unused_0[5];
37599 	/*
37600 	 * This field is used in Output records to indicate that the output
37601 	 * is completely written to RAM.  This field should be read as '1'
37602 	 * to indicate that the output has been completely written.
37603 	 * When writing a command completion or response to an internal processor,
37604 	 * the order of writes has to be such that this field is written last.
37605 	 */
37606 	uint8_t	valid;
37607 } __rte_packed;
37608 
37609 /*********************************
37610  * hwrm_vnic_rss_cos_lb_ctx_free *
37611  *********************************/
37612 
37613 
37614 /* hwrm_vnic_rss_cos_lb_ctx_free_input (size:192b/24B) */
37615 struct hwrm_vnic_rss_cos_lb_ctx_free_input {
37616 	/* The HWRM command request type. */
37617 	uint16_t	req_type;
37618 	/*
37619 	 * The completion ring to send the completion event on. This should
37620 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
37621 	 */
37622 	uint16_t	cmpl_ring;
37623 	/*
37624 	 * The sequence ID is used by the driver for tracking multiple
37625 	 * commands. This ID is treated as opaque data by the firmware and
37626 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
37627 	 */
37628 	uint16_t	seq_id;
37629 	/*
37630 	 * The target ID of the command:
37631 	 * * 0x0-0xFFF8 - The function ID
37632 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37633 	 * * 0xFFFD - Reserved for user-space HWRM interface
37634 	 * * 0xFFFF - HWRM
37635 	 */
37636 	uint16_t	target_id;
37637 	/*
37638 	 * A physical address pointer pointing to a host buffer that the
37639 	 * command's response data will be written. This can be either a host
37640 	 * physical address (HPA) or a guest physical address (GPA) and must
37641 	 * point to a physically contiguous block of memory.
37642 	 */
37643 	uint64_t	resp_addr;
37644 	/* rss_cos_lb_ctx_id is 16 b */
37645 	uint16_t	rss_cos_lb_ctx_id;
37646 	uint8_t	unused_0[6];
37647 } __rte_packed;
37648 
37649 /* hwrm_vnic_rss_cos_lb_ctx_free_output (size:128b/16B) */
37650 struct hwrm_vnic_rss_cos_lb_ctx_free_output {
37651 	/* The specific error status for the command. */
37652 	uint16_t	error_code;
37653 	/* The HWRM command request type. */
37654 	uint16_t	req_type;
37655 	/* The sequence ID from the original command. */
37656 	uint16_t	seq_id;
37657 	/* The length of the response data in number of bytes. */
37658 	uint16_t	resp_len;
37659 	uint8_t	unused_0[7];
37660 	/*
37661 	 * This field is used in Output records to indicate that the output
37662 	 * is completely written to RAM.  This field should be read as '1'
37663 	 * to indicate that the output has been completely written.
37664 	 * When writing a command completion or response to an internal processor,
37665 	 * the order of writes has to be such that this field is written last.
37666 	 */
37667 	uint8_t	valid;
37668 } __rte_packed;
37669 
37670 /*******************
37671  * hwrm_ring_alloc *
37672  *******************/
37673 
37674 
37675 /* hwrm_ring_alloc_input (size:704b/88B) */
37676 struct hwrm_ring_alloc_input {
37677 	/* The HWRM command request type. */
37678 	uint16_t	req_type;
37679 	/*
37680 	 * The completion ring to send the completion event on. This should
37681 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
37682 	 */
37683 	uint16_t	cmpl_ring;
37684 	/*
37685 	 * The sequence ID is used by the driver for tracking multiple
37686 	 * commands. This ID is treated as opaque data by the firmware and
37687 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
37688 	 */
37689 	uint16_t	seq_id;
37690 	/*
37691 	 * The target ID of the command:
37692 	 * * 0x0-0xFFF8 - The function ID
37693 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37694 	 * * 0xFFFD - Reserved for user-space HWRM interface
37695 	 * * 0xFFFF - HWRM
37696 	 */
37697 	uint16_t	target_id;
37698 	/*
37699 	 * A physical address pointer pointing to a host buffer that the
37700 	 * command's response data will be written. This can be either a host
37701 	 * physical address (HPA) or a guest physical address (GPA) and must
37702 	 * point to a physically contiguous block of memory.
37703 	 */
37704 	uint64_t	resp_addr;
37705 	uint32_t	enables;
37706 	/*
37707 	 * This bit must be '1' for the ring_arb_cfg field to be
37708 	 * configured.
37709 	 */
37710 	#define HWRM_RING_ALLOC_INPUT_ENABLES_RING_ARB_CFG \
37711 		UINT32_C(0x2)
37712 	/*
37713 	 * This bit must be '1' for the stat_ctx_id_valid field to be
37714 	 * configured.
37715 	 */
37716 	#define HWRM_RING_ALLOC_INPUT_ENABLES_STAT_CTX_ID_VALID \
37717 		UINT32_C(0x8)
37718 	/*
37719 	 * This bit must be '1' for the max_bw_valid field to be
37720 	 * configured.
37721 	 */
37722 	#define HWRM_RING_ALLOC_INPUT_ENABLES_MAX_BW_VALID \
37723 		UINT32_C(0x20)
37724 	/*
37725 	 * This bit must be '1' for the rx_ring_id field to be
37726 	 * configured.
37727 	 */
37728 	#define HWRM_RING_ALLOC_INPUT_ENABLES_RX_RING_ID_VALID \
37729 		UINT32_C(0x40)
37730 	/*
37731 	 * This bit must be '1' for the nq_ring_id field to be
37732 	 * configured.
37733 	 */
37734 	#define HWRM_RING_ALLOC_INPUT_ENABLES_NQ_RING_ID_VALID \
37735 		UINT32_C(0x80)
37736 	/*
37737 	 * This bit must be '1' for the rx_buf_size field to be
37738 	 * configured.
37739 	 */
37740 	#define HWRM_RING_ALLOC_INPUT_ENABLES_RX_BUF_SIZE_VALID \
37741 		UINT32_C(0x100)
37742 	/*
37743 	 * This bit must be '1' for the schq_id field to be
37744 	 * configured.
37745 	 */
37746 	#define HWRM_RING_ALLOC_INPUT_ENABLES_SCHQ_ID \
37747 		UINT32_C(0x200)
37748 	/*
37749 	 * This bit must be '1' for the mpc_chnls_type field to be
37750 	 * configured.
37751 	 */
37752 	#define HWRM_RING_ALLOC_INPUT_ENABLES_MPC_CHNLS_TYPE \
37753 		UINT32_C(0x400)
37754 	/* Ring Type. */
37755 	uint8_t	ring_type;
37756 	/* L2 Completion Ring (CR) */
37757 	#define HWRM_RING_ALLOC_INPUT_RING_TYPE_L2_CMPL   UINT32_C(0x0)
37758 	/* TX Ring (TR) */
37759 	#define HWRM_RING_ALLOC_INPUT_RING_TYPE_TX        UINT32_C(0x1)
37760 	/* RX Ring (RR) */
37761 	#define HWRM_RING_ALLOC_INPUT_RING_TYPE_RX        UINT32_C(0x2)
37762 	/* RoCE Notification Completion Ring (ROCE_CR) */
37763 	#define HWRM_RING_ALLOC_INPUT_RING_TYPE_ROCE_CMPL UINT32_C(0x3)
37764 	/* RX Aggregation Ring */
37765 	#define HWRM_RING_ALLOC_INPUT_RING_TYPE_RX_AGG    UINT32_C(0x4)
37766 	/* Notification Queue */
37767 	#define HWRM_RING_ALLOC_INPUT_RING_TYPE_NQ        UINT32_C(0x5)
37768 	#define HWRM_RING_ALLOC_INPUT_RING_TYPE_LAST \
37769 		HWRM_RING_ALLOC_INPUT_RING_TYPE_NQ
37770 	/*
37771 	 * This field controls the number of packets transmitted before a TX
37772 	 * completion is generated. Non-zero values for the field are only
37773 	 * valid if HWRM_FUNC_QCAPS indicates that the TX coalesced completion
37774 	 * records capability is supported.
37775 	 */
37776 	uint8_t	cmpl_coal_cnt;
37777 	/* Generates a legacy TX completion on every packet. */
37778 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_OFF UINT32_C(0x0)
37779 	/* Generates a TX coalesced completion for up to 4 TX packets. */
37780 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_4   UINT32_C(0x1)
37781 	/* Generates a TX coalesced completion for up to 8 TX packets. */
37782 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_8   UINT32_C(0x2)
37783 	/* Generates a TX coalesced completion for up to 12 TX packets. */
37784 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_12  UINT32_C(0x3)
37785 	/* Generates a TX coalesced completion for up to 16 TX packets. */
37786 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_16  UINT32_C(0x4)
37787 	/* Generates a TX coalesced completion for up to 24 TX packets. */
37788 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_24  UINT32_C(0x5)
37789 	/* Generates a TX coalesced completion for up to 32 TX packets. */
37790 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_32  UINT32_C(0x6)
37791 	/* Generates a TX coalesced completion for up to 48 TX packets. */
37792 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_48  UINT32_C(0x7)
37793 	/* Generates a TX coalesced completion for up to 64 TX packets. */
37794 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_64  UINT32_C(0x8)
37795 	/* Generates a TX coalesced completion for up to 96 TX packets. */
37796 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_96  UINT32_C(0x9)
37797 	/* Generates a TX coalesced completion for up to 128 TX packets. */
37798 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_128 UINT32_C(0xa)
37799 	/* Generates a TX coalesced completion for up to 192 TX packets. */
37800 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_192 UINT32_C(0xb)
37801 	/* Generates a TX coalesced completion for up to 256 TX packets. */
37802 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_256 UINT32_C(0xc)
37803 	/* Generates a TX coalesced completion for up to 320 TX packets. */
37804 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_320 UINT32_C(0xd)
37805 	/* Generates a TX coalesced completion for up to 384 TX packets. */
37806 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_384 UINT32_C(0xe)
37807 	/* Generates a TX coalesced completion up to the last packet. (Maximum coalescing). */
37808 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_MAX UINT32_C(0xf)
37809 	#define HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_LAST \
37810 		HWRM_RING_ALLOC_INPUT_CMPL_COAL_CNT_COAL_MAX
37811 	/* Ring allocation flags. */
37812 	uint16_t	flags;
37813 	/*
37814 	 * For Rx rings, the incoming packet data can be placed at either
37815 	 * a 0B or 2B offset from the start of the Rx packet buffer. When
37816 	 * '1', the received packet will be padded with 2B of zeros at the
37817 	 * front of the packet. Note that this flag is only used for
37818 	 * Rx rings and is ignored for all other rings included Rx
37819 	 * Aggregation rings.
37820 	 */
37821 	#define HWRM_RING_ALLOC_INPUT_FLAGS_RX_SOP_PAD \
37822 		UINT32_C(0x1)
37823 	/*
37824 	 * When the HW Doorbell Drop Recovery feature is enabled,
37825 	 * HW can flag false CQ overflow when CQ consumer index
37826 	 * doorbells are dropped when there really wasn't any overflow.
37827 	 * The CQE values could have already been processed by the driver,
37828 	 * but HW doesn't know about this because of the doorbell drop.
37829 	 * To avoid false detection of CQ overflow events,
37830 	 * it is recommended that CQ overflow detection is disabled
37831 	 * by the driver when HW based doorbell recovery is enabled.
37832 	 */
37833 	#define HWRM_RING_ALLOC_INPUT_FLAGS_DISABLE_CQ_OVERFLOW_DETECTION \
37834 		UINT32_C(0x2)
37835 	/*
37836 	 * This value is a pointer to the page table for the
37837 	 * Ring.
37838 	 */
37839 	uint64_t	page_tbl_addr;
37840 	/* First Byte Offset of the first entry in the first page. */
37841 	uint32_t	fbo;
37842 	/*
37843 	 * Actual page size in 2^page_size. The supported range is increments
37844 	 * in powers of 2 from 16 bytes to 1GB.
37845 	 * - 4 = 16 B
37846 	 *     Page size is 16 B.
37847 	 * - 12 = 4 KB
37848 	 *     Page size is 4 KB.
37849 	 * - 13 = 8 KB
37850 	 *     Page size is 8 KB.
37851 	 * - 16 = 64 KB
37852 	 *     Page size is 64 KB.
37853 	 * - 21 = 2 MB
37854 	 *     Page size is 2 MB.
37855 	 * - 22 = 4 MB
37856 	 *     Page size is 4 MB.
37857 	 * - 30 = 1 GB
37858 	 *     Page size is 1 GB.
37859 	 */
37860 	uint8_t	page_size;
37861 	/*
37862 	 * This value indicates the depth of page table.
37863 	 * For this version of the specification, value other than 0 or
37864 	 * 1 shall be considered as an invalid value.
37865 	 * When the page_tbl_depth = 0, then it is treated as a
37866 	 * special case with the following.
37867 	 * 1. FBO and page size fields are not valid.
37868 	 * 2. page_tbl_addr is the physical address of the first
37869 	 *    element of the ring.
37870 	 */
37871 	uint8_t	page_tbl_depth;
37872 	/* Used by a PF driver to associate a SCHQ with one of its TX rings. */
37873 	uint16_t	schq_id;
37874 	/*
37875 	 * Number of 16B units in the ring.  Minimum size for
37876 	 * a ring is 16 16B entries.
37877 	 */
37878 	uint32_t	length;
37879 	/*
37880 	 * Logical ring number for the ring to be allocated.
37881 	 * This value determines the position in the doorbell
37882 	 * area where the update to the ring will be made.
37883 	 *
37884 	 * For completion rings, this value is also the MSI-X
37885 	 * vector number for the function the completion ring is
37886 	 * associated with.
37887 	 */
37888 	uint16_t	logical_id;
37889 	/*
37890 	 * This field is used only when ring_type is a TX ring.
37891 	 * This value indicates what completion ring the TX ring
37892 	 * is associated with.
37893 	 */
37894 	uint16_t	cmpl_ring_id;
37895 	/*
37896 	 * This field is used only when ring_type is a TX ring.
37897 	 * This value indicates what CoS queue the TX ring
37898 	 * is associated with.
37899 	 */
37900 	uint16_t	queue_id;
37901 	/*
37902 	 * When allocating a Rx ring or Rx aggregation ring, this field
37903 	 * specifies the size of the buffer descriptors posted to the ring.
37904 	 */
37905 	uint16_t	rx_buf_size;
37906 	/*
37907 	 * When allocating an Rx aggregation ring, this field
37908 	 * specifies the associated Rx ring ID.
37909 	 */
37910 	uint16_t	rx_ring_id;
37911 	/*
37912 	 * When allocating a completion ring, this field
37913 	 * specifies the associated NQ ring ID.
37914 	 */
37915 	uint16_t	nq_ring_id;
37916 	/*
37917 	 * This field is used only when ring_type is a TX ring.
37918 	 * This field is used to configure arbitration related
37919 	 * parameters for a TX ring.
37920 	 */
37921 	uint16_t	ring_arb_cfg;
37922 	/* Arbitration policy used for the ring. */
37923 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_MASK \
37924 		UINT32_C(0xf)
37925 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_SFT       0
37926 	/*
37927 	 * Use strict priority for the TX ring.
37928 	 * Priority value is specified in arb_policy_param
37929 	 */
37930 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_SP \
37931 		UINT32_C(0x1)
37932 	/*
37933 	 * Use weighted fair queue arbitration for the TX ring.
37934 	 * Weight is specified in arb_policy_param
37935 	 */
37936 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_WFQ \
37937 		UINT32_C(0x2)
37938 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_LAST \
37939 		HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_WFQ
37940 	/* Reserved field. */
37941 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_RSVD_MASK \
37942 		UINT32_C(0xf0)
37943 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_RSVD_SFT             4
37944 	/*
37945 	 * Arbitration policy specific parameter.
37946 	 * # For strict priority arbitration policy, this field
37947 	 * represents a priority value. If set to 0, then the priority
37948 	 * is not specified and the HWRM is allowed to select
37949 	 * any priority for this TX ring.
37950 	 * # For weighted fair queue arbitration policy, this field
37951 	 * represents a weight value. If set to 0, then the weight
37952 	 * is not specified and the HWRM is allowed to select
37953 	 * any weight for this TX ring.
37954 	 */
37955 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_PARAM_MASK \
37956 		UINT32_C(0xff00)
37957 	#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_PARAM_SFT 8
37958 	uint16_t	unused_3;
37959 	/*
37960 	 * This field is reserved for the future use.
37961 	 * It shall be set to 0.
37962 	 */
37963 	uint32_t	reserved3;
37964 	/*
37965 	 * This field is used only when ring_type is a TX ring.
37966 	 * This input indicates what statistics context this ring
37967 	 * should be associated with.
37968 	 */
37969 	uint32_t	stat_ctx_id;
37970 	/*
37971 	 * This field is reserved for the future use.
37972 	 * It shall be set to 0.
37973 	 */
37974 	uint32_t	reserved4;
37975 	/*
37976 	 * This field is used only when ring_type is a TX ring
37977 	 * to specify maximum BW allocated to the TX ring.
37978 	 * The HWRM will translate this value into byte counter and
37979 	 * time interval used for this ring inside the device.
37980 	 */
37981 	uint32_t	max_bw;
37982 	/* The bandwidth value. */
37983 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_MASK \
37984 		UINT32_C(0xfffffff)
37985 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_SFT              0
37986 	/* The granularity of the value (bits or bytes). */
37987 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE \
37988 		UINT32_C(0x10000000)
37989 	/* Value is in bits. */
37990 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BITS \
37991 		(UINT32_C(0x0) << 28)
37992 	/* Value is in bytes. */
37993 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BYTES \
37994 		(UINT32_C(0x1) << 28)
37995 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_LAST \
37996 		HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BYTES
37997 	/* bw_value_unit is 3 b */
37998 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_MASK \
37999 		UINT32_C(0xe0000000)
38000 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_SFT         29
38001 	/* Value is in Mb or MB (base 10). */
38002 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_MEGA \
38003 		(UINT32_C(0x0) << 29)
38004 	/* Value is in Kb or KB (base 10). */
38005 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_KILO \
38006 		(UINT32_C(0x2) << 29)
38007 	/* Value is in bits or bytes. */
38008 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_BASE \
38009 		(UINT32_C(0x4) << 29)
38010 	/* Value is in Gb or GB (base 10). */
38011 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_GIGA \
38012 		(UINT32_C(0x6) << 29)
38013 	/* Value is in 1/100th of a percentage of total bandwidth. */
38014 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
38015 		(UINT32_C(0x1) << 29)
38016 	/* Invalid unit */
38017 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID \
38018 		(UINT32_C(0x7) << 29)
38019 	#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_LAST \
38020 		HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID
38021 	/*
38022 	 * This field is used only when ring_type is a Completion ring.
38023 	 * This value indicates what interrupt mode should be used
38024 	 * on this completion ring.
38025 	 * Note: In the legacy interrupt mode, no more than 16
38026 	 * completion rings are allowed.
38027 	 */
38028 	uint8_t	int_mode;
38029 	/* Legacy INTA */
38030 	#define HWRM_RING_ALLOC_INPUT_INT_MODE_LEGACY UINT32_C(0x0)
38031 	/* Reserved */
38032 	#define HWRM_RING_ALLOC_INPUT_INT_MODE_RSVD   UINT32_C(0x1)
38033 	/* MSI-X */
38034 	#define HWRM_RING_ALLOC_INPUT_INT_MODE_MSIX   UINT32_C(0x2)
38035 	/* No Interrupt - Polled mode */
38036 	#define HWRM_RING_ALLOC_INPUT_INT_MODE_POLL   UINT32_C(0x3)
38037 	#define HWRM_RING_ALLOC_INPUT_INT_MODE_LAST \
38038 		HWRM_RING_ALLOC_INPUT_INT_MODE_POLL
38039 	/* Midpath channel type */
38040 	uint8_t	mpc_chnls_type;
38041 	/*
38042 	 * Indicate the TX ring alloc MPC channel type is a MPC channel
38043 	 * with destination to the TX crypto engine block.
38044 	 */
38045 	#define HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_TCE     UINT32_C(0x0)
38046 	/*
38047 	 * Indicate the RX ring alloc MPC channel type is a MPC channel
38048 	 * with destination to the RX crypto engine block.
38049 	 */
38050 	#define HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_RCE     UINT32_C(0x1)
38051 	/*
38052 	 * Indicate the RX ring alloc MPC channel type is a MPC channel
38053 	 * with destination to the TX configurable flow processing block.
38054 	 */
38055 	#define HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_TE_CFA  UINT32_C(0x2)
38056 	/*
38057 	 * Indicate the RX ring alloc MPC channel type is a MPC channel
38058 	 * with destination to the RX configurable flow processing block.
38059 	 */
38060 	#define HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_RE_CFA  UINT32_C(0x3)
38061 	/*
38062 	 * Indicate the RX ring alloc MPC channel type is a MPC channel
38063 	 * with destination to the primate processor block.
38064 	 */
38065 	#define HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_PRIMATE UINT32_C(0x4)
38066 	#define HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_LAST \
38067 		HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_PRIMATE
38068 	uint8_t	unused_4[2];
38069 	/*
38070 	 * The cq_handle is specified when allocating a completion ring. For
38071 	 * devices that support NQs, this cq_handle will be included in the
38072 	 * NQE to specify which CQ should be read to retrieve the completion
38073 	 * record.
38074 	 */
38075 	uint64_t	cq_handle;
38076 } __rte_packed;
38077 
38078 /* hwrm_ring_alloc_output (size:128b/16B) */
38079 struct hwrm_ring_alloc_output {
38080 	/* The specific error status for the command. */
38081 	uint16_t	error_code;
38082 	/* The HWRM command request type. */
38083 	uint16_t	req_type;
38084 	/* The sequence ID from the original command. */
38085 	uint16_t	seq_id;
38086 	/* The length of the response data in number of bytes. */
38087 	uint16_t	resp_len;
38088 	/*
38089 	 * Physical number of ring allocated.
38090 	 * This value shall be unique for a ring type.
38091 	 */
38092 	uint16_t	ring_id;
38093 	/* Logical number of ring allocated. */
38094 	uint16_t	logical_ring_id;
38095 	/*
38096 	 * This field will tell whether to use ping or pong buffer
38097 	 * for first push operation.
38098 	 */
38099 	uint8_t	push_buffer_index;
38100 	/* Start push from ping buffer index */
38101 	#define HWRM_RING_ALLOC_OUTPUT_PUSH_BUFFER_INDEX_PING_BUFFER \
38102 		UINT32_C(0x0)
38103 	/* Start push from pong buffer index */
38104 	#define HWRM_RING_ALLOC_OUTPUT_PUSH_BUFFER_INDEX_PONG_BUFFER \
38105 		UINT32_C(0x1)
38106 	#define HWRM_RING_ALLOC_OUTPUT_PUSH_BUFFER_INDEX_LAST \
38107 		HWRM_RING_ALLOC_OUTPUT_PUSH_BUFFER_INDEX_PONG_BUFFER
38108 	uint8_t	unused_0[2];
38109 	/*
38110 	 * This field is used in Output records to indicate that the output
38111 	 * is completely written to RAM.  This field should be read as '1'
38112 	 * to indicate that the output has been completely written.
38113 	 * When writing a command completion or response to an internal processor,
38114 	 * the order of writes has to be such that this field is written last.
38115 	 */
38116 	uint8_t	valid;
38117 } __rte_packed;
38118 
38119 /******************
38120  * hwrm_ring_free *
38121  ******************/
38122 
38123 
38124 /* hwrm_ring_free_input (size:256b/32B) */
38125 struct hwrm_ring_free_input {
38126 	/* The HWRM command request type. */
38127 	uint16_t	req_type;
38128 	/*
38129 	 * The completion ring to send the completion event on. This should
38130 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
38131 	 */
38132 	uint16_t	cmpl_ring;
38133 	/*
38134 	 * The sequence ID is used by the driver for tracking multiple
38135 	 * commands. This ID is treated as opaque data by the firmware and
38136 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
38137 	 */
38138 	uint16_t	seq_id;
38139 	/*
38140 	 * The target ID of the command:
38141 	 * * 0x0-0xFFF8 - The function ID
38142 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38143 	 * * 0xFFFD - Reserved for user-space HWRM interface
38144 	 * * 0xFFFF - HWRM
38145 	 */
38146 	uint16_t	target_id;
38147 	/*
38148 	 * A physical address pointer pointing to a host buffer that the
38149 	 * command's response data will be written. This can be either a host
38150 	 * physical address (HPA) or a guest physical address (GPA) and must
38151 	 * point to a physically contiguous block of memory.
38152 	 */
38153 	uint64_t	resp_addr;
38154 	/* Ring Type. */
38155 	uint8_t	ring_type;
38156 	/* L2 Completion Ring (CR) */
38157 	#define HWRM_RING_FREE_INPUT_RING_TYPE_L2_CMPL   UINT32_C(0x0)
38158 	/* TX Ring (TR) */
38159 	#define HWRM_RING_FREE_INPUT_RING_TYPE_TX        UINT32_C(0x1)
38160 	/* RX Ring (RR) */
38161 	#define HWRM_RING_FREE_INPUT_RING_TYPE_RX        UINT32_C(0x2)
38162 	/* RoCE Notification Completion Ring (ROCE_CR) */
38163 	#define HWRM_RING_FREE_INPUT_RING_TYPE_ROCE_CMPL UINT32_C(0x3)
38164 	/* RX Aggregation Ring */
38165 	#define HWRM_RING_FREE_INPUT_RING_TYPE_RX_AGG    UINT32_C(0x4)
38166 	/* Notification Queue */
38167 	#define HWRM_RING_FREE_INPUT_RING_TYPE_NQ        UINT32_C(0x5)
38168 	#define HWRM_RING_FREE_INPUT_RING_TYPE_LAST \
38169 		HWRM_RING_FREE_INPUT_RING_TYPE_NQ
38170 	uint8_t	flags;
38171 	/*
38172 	 * If this bit is set to '1', ring_id in this command belongs to
38173 	 * virtio function. prod_idx in this command corresponds to doorbell
38174 	 * producer index. opaque field in this command needs to be inserted
38175 	 * by firmware in VEE_FLUSH completion record.
38176 	 * Firmware will poll the corresponding ring context to reach the
38177 	 * given producer index before sending successful response. It will
38178 	 * finish the completion using VEE_FLUSH completion record.
38179 	 *
38180 	 * If this bit is '0', firmware will not treat ring_id as virtio
38181 	 * ring and ignore prod_idx, opaque fields.
38182 	 *
38183 	 * This feature is not applicable for L2 or RoCE.
38184 	 */
38185 	#define HWRM_RING_FREE_INPUT_FLAGS_VIRTIO_RING_VALID UINT32_C(0x1)
38186 	#define HWRM_RING_FREE_INPUT_FLAGS_LAST \
38187 		HWRM_RING_FREE_INPUT_FLAGS_VIRTIO_RING_VALID
38188 	/* Physical number of ring allocated. */
38189 	uint16_t	ring_id;
38190 	/*
38191 	 * Ring BD producer index posted by the virtio block.
38192 	 * This field is valid if virtio_ring_valid flag is set.
38193 	 */
38194 	uint32_t	prod_idx;
38195 	/*
38196 	 * User defined opaque field to be inserted into VEE_FLUSH completion
38197 	 * record. This field is valid if virtio_ring_valid flag is set.
38198 	 */
38199 	uint32_t	opaque;
38200 	uint32_t	unused_1;
38201 } __rte_packed;
38202 
38203 /* hwrm_ring_free_output (size:128b/16B) */
38204 struct hwrm_ring_free_output {
38205 	/* The specific error status for the command. */
38206 	uint16_t	error_code;
38207 	/* The HWRM command request type. */
38208 	uint16_t	req_type;
38209 	/* The sequence ID from the original command. */
38210 	uint16_t	seq_id;
38211 	/* The length of the response data in number of bytes. */
38212 	uint16_t	resp_len;
38213 	uint8_t	unused_0[7];
38214 	/*
38215 	 * This field is used in Output records to indicate that the output
38216 	 * is completely written to RAM.  This field should be read as '1'
38217 	 * to indicate that the output has been completely written.
38218 	 * When writing a command completion or response to an internal processor,
38219 	 * the order of writes has to be such that this field is written last.
38220 	 */
38221 	uint8_t	valid;
38222 } __rte_packed;
38223 
38224 /*******************
38225  * hwrm_ring_reset *
38226  *******************/
38227 
38228 
38229 /* hwrm_ring_reset_input (size:192b/24B) */
38230 struct hwrm_ring_reset_input {
38231 	/* The HWRM command request type. */
38232 	uint16_t	req_type;
38233 	/*
38234 	 * The completion ring to send the completion event on. This should
38235 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
38236 	 */
38237 	uint16_t	cmpl_ring;
38238 	/*
38239 	 * The sequence ID is used by the driver for tracking multiple
38240 	 * commands. This ID is treated as opaque data by the firmware and
38241 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
38242 	 */
38243 	uint16_t	seq_id;
38244 	/*
38245 	 * The target ID of the command:
38246 	 * * 0x0-0xFFF8 - The function ID
38247 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38248 	 * * 0xFFFD - Reserved for user-space HWRM interface
38249 	 * * 0xFFFF - HWRM
38250 	 */
38251 	uint16_t	target_id;
38252 	/*
38253 	 * A physical address pointer pointing to a host buffer that the
38254 	 * command's response data will be written. This can be either a host
38255 	 * physical address (HPA) or a guest physical address (GPA) and must
38256 	 * point to a physically contiguous block of memory.
38257 	 */
38258 	uint64_t	resp_addr;
38259 	/* Ring Type. */
38260 	uint8_t	ring_type;
38261 	/* L2 Completion Ring (CR) */
38262 	#define HWRM_RING_RESET_INPUT_RING_TYPE_L2_CMPL     UINT32_C(0x0)
38263 	/* TX Ring (TR) */
38264 	#define HWRM_RING_RESET_INPUT_RING_TYPE_TX          UINT32_C(0x1)
38265 	/* RX Ring (RR) */
38266 	#define HWRM_RING_RESET_INPUT_RING_TYPE_RX          UINT32_C(0x2)
38267 	/* RoCE Notification Completion Ring (ROCE_CR) */
38268 	#define HWRM_RING_RESET_INPUT_RING_TYPE_ROCE_CMPL   UINT32_C(0x3)
38269 	/*
38270 	 * Rx Ring Group.  This is to reset rx and aggregation in an atomic
38271 	 * operation. Completion ring associated with this ring group is
38272 	 * not reset.
38273 	 */
38274 	#define HWRM_RING_RESET_INPUT_RING_TYPE_RX_RING_GRP UINT32_C(0x6)
38275 	#define HWRM_RING_RESET_INPUT_RING_TYPE_LAST \
38276 		HWRM_RING_RESET_INPUT_RING_TYPE_RX_RING_GRP
38277 	uint8_t	unused_0;
38278 	/*
38279 	 * Physical number of the ring. When ring type is rx_ring_grp, ring id
38280 	 * actually refers to ring group id.
38281 	 */
38282 	uint16_t	ring_id;
38283 	uint8_t	unused_1[4];
38284 } __rte_packed;
38285 
38286 /* hwrm_ring_reset_output (size:128b/16B) */
38287 struct hwrm_ring_reset_output {
38288 	/* The specific error status for the command. */
38289 	uint16_t	error_code;
38290 	/* The HWRM command request type. */
38291 	uint16_t	req_type;
38292 	/* The sequence ID from the original command. */
38293 	uint16_t	seq_id;
38294 	/* The length of the response data in number of bytes. */
38295 	uint16_t	resp_len;
38296 	/*
38297 	 * This field will tell whether to use ping or pong buffer
38298 	 * for first push operation.
38299 	 */
38300 	uint8_t	push_buffer_index;
38301 	/* Start push from ping buffer index */
38302 	#define HWRM_RING_RESET_OUTPUT_PUSH_BUFFER_INDEX_PING_BUFFER \
38303 		UINT32_C(0x0)
38304 	/* Start push from pong buffer index */
38305 	#define HWRM_RING_RESET_OUTPUT_PUSH_BUFFER_INDEX_PONG_BUFFER \
38306 		UINT32_C(0x1)
38307 	#define HWRM_RING_RESET_OUTPUT_PUSH_BUFFER_INDEX_LAST \
38308 		HWRM_RING_RESET_OUTPUT_PUSH_BUFFER_INDEX_PONG_BUFFER
38309 	uint8_t	unused_0[3];
38310 	/* Position of consumer index after ring reset completes. */
38311 	uint8_t	consumer_idx[3];
38312 	/*
38313 	 * This field is used in Output records to indicate that the output
38314 	 * is completely written to RAM.  This field should be read as '1'
38315 	 * to indicate that the output has been completely written.
38316 	 * When writing a command completion or response to an internal processor,
38317 	 * the order of writes has to be such that this field is written last.
38318 	 */
38319 	uint8_t	valid;
38320 } __rte_packed;
38321 
38322 /*****************
38323  * hwrm_ring_cfg *
38324  *****************/
38325 
38326 
38327 /* hwrm_ring_cfg_input (size:320b/40B) */
38328 struct hwrm_ring_cfg_input {
38329 	/* The HWRM command request type. */
38330 	uint16_t	req_type;
38331 	/*
38332 	 * The completion ring to send the completion event on. This should
38333 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
38334 	 */
38335 	uint16_t	cmpl_ring;
38336 	/*
38337 	 * The sequence ID is used by the driver for tracking multiple
38338 	 * commands. This ID is treated as opaque data by the firmware and
38339 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
38340 	 */
38341 	uint16_t	seq_id;
38342 	/*
38343 	 * The target ID of the command:
38344 	 * * 0x0-0xFFF8 - The function ID
38345 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38346 	 * * 0xFFFD - Reserved for user-space HWRM interface
38347 	 * * 0xFFFF - HWRM
38348 	 */
38349 	uint16_t	target_id;
38350 	/*
38351 	 * A physical address pointer pointing to a host buffer that the
38352 	 * command's response data will be written. This can be either a host
38353 	 * physical address (HPA) or a guest physical address (GPA) and must
38354 	 * point to a physically contiguous block of memory.
38355 	 */
38356 	uint64_t	resp_addr;
38357 	/* Ring Type. */
38358 	uint8_t	ring_type;
38359 	/* TX Ring (TR) */
38360 	#define HWRM_RING_CFG_INPUT_RING_TYPE_TX UINT32_C(0x1)
38361 	/* RX Ring (RR) */
38362 	#define HWRM_RING_CFG_INPUT_RING_TYPE_RX UINT32_C(0x2)
38363 	#define HWRM_RING_CFG_INPUT_RING_TYPE_LAST \
38364 		HWRM_RING_CFG_INPUT_RING_TYPE_RX
38365 	uint8_t	unused_0;
38366 	/* Physical number of the ring. */
38367 	uint16_t	ring_id;
38368 	/* Ring config enable bits. */
38369 	uint16_t	enables;
38370 	/*
38371 	 * For Rx rings, the incoming packet data can be placed at either
38372 	 * a 0B, 2B, 10B or 12B offset from the start of the Rx packet
38373 	 * buffer.
38374 	 * When '1', the received packet will be padded with 2B, 10B or 12B
38375 	 * of zeros at the front of the packet. The exact offset is specified
38376 	 * by rx_sop_pad_bytes parameter.
38377 	 * When '0', the received packet will not be padded.
38378 	 * Note that this flag is only used for Rx rings and is ignored
38379 	 * for all other rings included Rx Aggregation rings.
38380 	 */
38381 	#define HWRM_RING_CFG_INPUT_ENABLES_RX_SOP_PAD_ENABLE \
38382 		UINT32_C(0x1)
38383 	/*
38384 	 * Proxy mode enable, for Tx, Rx and Rx aggregation rings only.
38385 	 * When rings are allocated, the PCI function on which driver issues
38386 	 * HWRM_RING_CFG command is assumed to own the rings. Hardware takes
38387 	 * the buffer descriptors (BDs) from those rings is assumed to issue
38388 	 * packet payload DMA using same PCI function. When proxy mode is
38389 	 * enabled, hardware can perform payload DMA using another PCI
38390 	 * function on same or different host.
38391 	 * When set to '0', the PCI function on which driver issues
38392 	 * HWRM_RING_CFG command is used for host payload DMA operation.
38393 	 * When set to '1', the host PCI function specified by proxy_fid is
38394 	 * used for host payload DMA operation.
38395 	 */
38396 	#define HWRM_RING_CFG_INPUT_ENABLES_PROXY_MODE_ENABLE \
38397 		UINT32_C(0x2)
38398 	/*
38399 	 * Tx ring packet source interface override, for Tx rings only.
38400 	 * When TX rings are allocated, the PCI function on which driver
38401 	 * issues HWRM_RING_CFG is assumed to be source interface of
38402 	 * packets sent from TX ring.
38403 	 * When set to '1', the host PCI function specified by proxy_fid
38404 	 * is used as source interface of the transmitted packets.
38405 	 */
38406 	#define HWRM_RING_CFG_INPUT_ENABLES_TX_PROXY_SRC_INTF_OVERRIDE \
38407 		UINT32_C(0x4)
38408 	/* The schq_id field is valid */
38409 	#define HWRM_RING_CFG_INPUT_ENABLES_SCHQ_ID \
38410 		UINT32_C(0x8)
38411 	/* Update completion ring ID associated with Tx or Rx ring. */
38412 	#define HWRM_RING_CFG_INPUT_ENABLES_CMPL_RING_ID_UPDATE \
38413 		UINT32_C(0x10)
38414 	/*
38415 	 * When set to '1', metadata value provided by tx_metadata
38416 	 * field in this command is inserted in the lb_header_metadata
38417 	 * QP context field. When set to '0', no change done to metadata.
38418 	 * Firmware rejects the tx ring metadata programming with
38419 	 * HWRM_ERR_CODE_UNSUPPORTED error if the per function CFA BD
38420 	 * metadata feature is not disabled.
38421 	 */
38422 	#define HWRM_RING_CFG_INPUT_ENABLES_TX_METADATA \
38423 		UINT32_C(0x20)
38424 	/*
38425 	 * Proxy function FID value.
38426 	 * This value is only used when either proxy_mode_enable flag or
38427 	 * tx_proxy_svif_override is set to '1'.
38428 	 * When proxy_mode_enable is set to '1', it identifies a host PCI
38429 	 * function used for host payload DMA operations.
38430 	 * When tx_proxy_src_intf is set to '1', it identifies a host PCI
38431 	 * function as source interface for all transmitted packets from
38432 	 * the TX ring.
38433 	 */
38434 	uint16_t	proxy_fid;
38435 	/*
38436 	 * Identifies the new scheduler queue (SCHQ) to associate with the
38437 	 * ring. Only valid for Tx rings.
38438 	 * A value of zero indicates that the Tx ring should be associated
38439 	 * with the default scheduler queue (SCHQ).
38440 	 */
38441 	uint16_t	schq_id;
38442 	/*
38443 	 * This field is valid for TX or Rx rings. This value identifies the
38444 	 * new completion ring ID to associate with the TX or Rx ring.
38445 	 */
38446 	uint16_t	cmpl_ring_id;
38447 	/*
38448 	 * Rx SOP padding amount in bytes.
38449 	 * This value is only used when rx_sop_pad_enable flag is set to '1'.
38450 	 */
38451 	uint8_t	rx_sop_pad_bytes;
38452 	uint8_t	unused_1[3];
38453 	/*
38454 	 * When tx_metadata enable bit is set, value specified in this field
38455 	 * is copied to lb_header_metadata in the QP context.
38456 	 */
38457 	uint32_t	tx_metadata;
38458 	uint8_t	unused_2[4];
38459 } __rte_packed;
38460 
38461 /* hwrm_ring_cfg_output (size:128b/16B) */
38462 struct hwrm_ring_cfg_output {
38463 	/* The specific error status for the command. */
38464 	uint16_t	error_code;
38465 	/* The HWRM command request type. */
38466 	uint16_t	req_type;
38467 	/* The sequence ID from the original command. */
38468 	uint16_t	seq_id;
38469 	/* The length of the response data in number of bytes. */
38470 	uint16_t	resp_len;
38471 	uint8_t	unused_0[7];
38472 	/*
38473 	 * This field is used in Output records to indicate that the output
38474 	 * is completely written to RAM.  This field should be read as '1'
38475 	 * to indicate that the output has been completely written.
38476 	 * When writing a command completion or response to an internal
38477 	 * processor, the order of writes has to be such that this field is
38478 	 * written last.
38479 	 */
38480 	uint8_t	valid;
38481 } __rte_packed;
38482 
38483 /******************
38484  * hwrm_ring_qcfg *
38485  ******************/
38486 
38487 
38488 /* hwrm_ring_qcfg_input (size:192b/24B) */
38489 struct hwrm_ring_qcfg_input {
38490 	/* The HWRM command request type. */
38491 	uint16_t	req_type;
38492 	/*
38493 	 * The completion ring to send the completion event on. This should
38494 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
38495 	 */
38496 	uint16_t	cmpl_ring;
38497 	/*
38498 	 * The sequence ID is used by the driver for tracking multiple
38499 	 * commands. This ID is treated as opaque data by the firmware and
38500 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
38501 	 */
38502 	uint16_t	seq_id;
38503 	/*
38504 	 * The target ID of the command:
38505 	 * * 0x0-0xFFF8 - The function ID
38506 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38507 	 * * 0xFFFD - Reserved for user-space HWRM interface
38508 	 * * 0xFFFF - HWRM
38509 	 */
38510 	uint16_t	target_id;
38511 	/*
38512 	 * A physical address pointer pointing to a host buffer that the
38513 	 * command's response data will be written. This can be either a host
38514 	 * physical address (HPA) or a guest physical address (GPA) and must
38515 	 * point to a physically contiguous block of memory.
38516 	 */
38517 	uint64_t	resp_addr;
38518 	/* Ring Type. */
38519 	uint8_t	ring_type;
38520 	/* TX Ring (TR) */
38521 	#define HWRM_RING_QCFG_INPUT_RING_TYPE_TX UINT32_C(0x1)
38522 	/* RX Ring (RR) */
38523 	#define HWRM_RING_QCFG_INPUT_RING_TYPE_RX UINT32_C(0x2)
38524 	#define HWRM_RING_QCFG_INPUT_RING_TYPE_LAST \
38525 		HWRM_RING_QCFG_INPUT_RING_TYPE_RX
38526 	uint8_t	unused_0[5];
38527 	/* Physical number of the ring. */
38528 	uint16_t	ring_id;
38529 } __rte_packed;
38530 
38531 /* hwrm_ring_qcfg_output (size:256b/32B) */
38532 struct hwrm_ring_qcfg_output {
38533 	/* The specific error status for the command. */
38534 	uint16_t	error_code;
38535 	/* The HWRM command request type. */
38536 	uint16_t	req_type;
38537 	/* The sequence ID from the original command. */
38538 	uint16_t	seq_id;
38539 	/* The length of the response data in number of bytes. */
38540 	uint16_t	resp_len;
38541 	/* Ring config enable bits. */
38542 	uint16_t	enables;
38543 	/*
38544 	 * For Rx rings, the incoming packet data can be placed at either
38545 	 * a 0B, 2B, 10B or 12B offset from the start of the Rx packet
38546 	 * buffer.
38547 	 * When '1', the received packet will be padded with 2B, 10B or 12B
38548 	 * of zeros at the front of the packet. The exact offset is specified
38549 	 * by rx_sop_pad_bytes parameter.
38550 	 * When '0', the received packet will not be padded.
38551 	 * Note that this flag is only used for Rx rings and is ignored
38552 	 * for all other rings included Rx Aggregation rings.
38553 	 */
38554 	#define HWRM_RING_QCFG_OUTPUT_ENABLES_RX_SOP_PAD_ENABLE \
38555 		UINT32_C(0x1)
38556 	/*
38557 	 * Proxy mode enable, for Tx, Rx and Rx aggregation rings only.
38558 	 * When rings are allocated, the PCI function on which driver issues
38559 	 * HWRM_RING_CFG command is assumed to own the rings. Hardware takes
38560 	 * the buffer descriptors (BDs) from those rings is assumed to issue
38561 	 * packet payload DMA using same PCI function. When proxy mode is
38562 	 * enabled, hardware can perform payload DMA using another PCI
38563 	 * function on same or different host.
38564 	 * When set to '0', the PCI function on which driver issues
38565 	 * HWRM_RING_CFG command is used for host payload DMA operation.
38566 	 * When set to '1', the host PCI function specified by proxy_fid is
38567 	 * used for host payload DMA operation.
38568 	 */
38569 	#define HWRM_RING_QCFG_OUTPUT_ENABLES_PROXY_MODE_ENABLE \
38570 		UINT32_C(0x2)
38571 	/*
38572 	 * Tx ring packet source interface override, for Tx rings only.
38573 	 * When TX rings are allocated, the PCI function on which driver
38574 	 * issues HWRM_RING_CFG is assumed to be source interface of
38575 	 * packets sent from TX ring.
38576 	 * When set to '1', the host PCI function specified by proxy_fid is
38577 	 * used as source interface of the transmitted packets.
38578 	 */
38579 	#define HWRM_RING_QCFG_OUTPUT_ENABLES_TX_PROXY_SRC_INTF_OVERRIDE \
38580 		UINT32_C(0x4)
38581 	/*
38582 	 * Proxy function FID value.
38583 	 * This value is only used when either proxy_mode_enable flag or
38584 	 * tx_proxy_svif_override is set to '1'.
38585 	 * When proxy_mode_enable is set to '1', it identifies a host PCI
38586 	 * function used for host payload DMA operations.
38587 	 * When tx_proxy_src_intf is set to '1', it identifies a host PCI
38588 	 * function as source interface for all transmitted packets from the TX
38589 	 * ring.
38590 	 */
38591 	uint16_t	proxy_fid;
38592 	/*
38593 	 * Identifies the new scheduler queue (SCHQ) to associate with the
38594 	 * ring. Only valid for Tx rings.
38595 	 * A value of zero indicates that the Tx ring should be associated with
38596 	 * the default scheduler queue (SCHQ).
38597 	 */
38598 	uint16_t	schq_id;
38599 	/*
38600 	 * This field is used when ring_type is a TX or Rx ring.
38601 	 * This value indicates what completion ring the TX or Rx ring
38602 	 * is associated with.
38603 	 */
38604 	uint16_t	cmpl_ring_id;
38605 	/*
38606 	 * Rx SOP padding amount in bytes.
38607 	 * This value is only used when rx_sop_pad_enable flag is set to '1'.
38608 	 */
38609 	uint8_t	rx_sop_pad_bytes;
38610 	uint8_t	unused_0[3];
38611 	/* lb_header_metadata in the QP context is copied to this field. */
38612 	uint32_t	tx_metadata;
38613 	uint8_t	unused_1[7];
38614 	/*
38615 	 * This field is used in Output records to indicate that the output
38616 	 * is completely written to RAM.  This field should be read as '1'
38617 	 * to indicate that the output has been completely written.
38618 	 * When writing a command completion or response to an internal
38619 	 * processor, the order of writes has to be such that this field is
38620 	 * written last.
38621 	 */
38622 	uint8_t	valid;
38623 } __rte_packed;
38624 
38625 /**************************
38626  * hwrm_ring_aggint_qcaps *
38627  **************************/
38628 
38629 
38630 /* hwrm_ring_aggint_qcaps_input (size:128b/16B) */
38631 struct hwrm_ring_aggint_qcaps_input {
38632 	/* The HWRM command request type. */
38633 	uint16_t	req_type;
38634 	/*
38635 	 * The completion ring to send the completion event on. This should
38636 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
38637 	 */
38638 	uint16_t	cmpl_ring;
38639 	/*
38640 	 * The sequence ID is used by the driver for tracking multiple
38641 	 * commands. This ID is treated as opaque data by the firmware and
38642 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
38643 	 */
38644 	uint16_t	seq_id;
38645 	/*
38646 	 * The target ID of the command:
38647 	 * * 0x0-0xFFF8 - The function ID
38648 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38649 	 * * 0xFFFD - Reserved for user-space HWRM interface
38650 	 * * 0xFFFF - HWRM
38651 	 */
38652 	uint16_t	target_id;
38653 	/*
38654 	 * A physical address pointer pointing to a host buffer that the
38655 	 * command's response data will be written. This can be either a host
38656 	 * physical address (HPA) or a guest physical address (GPA) and must
38657 	 * point to a physically contiguous block of memory.
38658 	 */
38659 	uint64_t	resp_addr;
38660 } __rte_packed;
38661 
38662 /* hwrm_ring_aggint_qcaps_output (size:384b/48B) */
38663 struct hwrm_ring_aggint_qcaps_output {
38664 	/* The specific error status for the command. */
38665 	uint16_t	error_code;
38666 	/* The HWRM command request type. */
38667 	uint16_t	req_type;
38668 	/* The sequence ID from the original command. */
38669 	uint16_t	seq_id;
38670 	/* The length of the response data in number of bytes. */
38671 	uint16_t	resp_len;
38672 	uint32_t	cmpl_params;
38673 	/*
38674 	 * When this bit is set to '1', int_lat_tmr_min can be configured
38675 	 * on completion rings.
38676 	 */
38677 	#define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_INT_LAT_TMR_MIN \
38678 		UINT32_C(0x1)
38679 	/*
38680 	 * When this bit is set to '1', int_lat_tmr_max can be configured
38681 	 * on completion rings.
38682 	 */
38683 	#define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_INT_LAT_TMR_MAX \
38684 		UINT32_C(0x2)
38685 	/*
38686 	 * When this bit is set to '1', timer_reset can be enabled
38687 	 * on completion rings.
38688 	 */
38689 	#define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_TIMER_RESET \
38690 		UINT32_C(0x4)
38691 	/*
38692 	 * When this bit is set to '1', ring_idle can be enabled
38693 	 * on completion rings.
38694 	 */
38695 	#define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_RING_IDLE \
38696 		UINT32_C(0x8)
38697 	/*
38698 	 * When this bit is set to '1', num_cmpl_dma_aggr can be configured
38699 	 * on completion rings.
38700 	 */
38701 	#define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_NUM_CMPL_DMA_AGGR \
38702 		UINT32_C(0x10)
38703 	/*
38704 	 * When this bit is set to '1', num_cmpl_dma_aggr_during_int can be configured
38705 	 * on completion rings.
38706 	 */
38707 	#define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_NUM_CMPL_DMA_AGGR_DURING_INT \
38708 		UINT32_C(0x20)
38709 	/*
38710 	 * When this bit is set to '1', cmpl_aggr_dma_tmr can be configured
38711 	 * on completion rings.
38712 	 */
38713 	#define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_CMPL_AGGR_DMA_TMR \
38714 		UINT32_C(0x40)
38715 	/*
38716 	 * When this bit is set to '1', cmpl_aggr_dma_tmr_during_int can be configured
38717 	 * on completion rings.
38718 	 */
38719 	#define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_CMPL_AGGR_DMA_TMR_DURING_INT \
38720 		UINT32_C(0x80)
38721 	/*
38722 	 * When this bit is set to '1', num_cmpl_aggr_int can be configured
38723 	 * on completion rings.
38724 	 */
38725 	#define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_NUM_CMPL_AGGR_INT \
38726 		UINT32_C(0x100)
38727 	uint32_t	nq_params;
38728 	/*
38729 	 * When this bit is set to '1', int_lat_tmr_min can be configured
38730 	 * on notification queues.
38731 	 */
38732 	#define HWRM_RING_AGGINT_QCAPS_OUTPUT_NQ_PARAMS_INT_LAT_TMR_MIN \
38733 		UINT32_C(0x1)
38734 	/* Minimum value for num_cmpl_dma_aggr */
38735 	uint16_t	num_cmpl_dma_aggr_min;
38736 	/* Maximum value for num_cmpl_dma_aggr */
38737 	uint16_t	num_cmpl_dma_aggr_max;
38738 	/* Minimum value for num_cmpl_dma_aggr_during_int */
38739 	uint16_t	num_cmpl_dma_aggr_during_int_min;
38740 	/* Maximum value for num_cmpl_dma_aggr_during_int */
38741 	uint16_t	num_cmpl_dma_aggr_during_int_max;
38742 	/* Minimum value for cmpl_aggr_dma_tmr */
38743 	uint16_t	cmpl_aggr_dma_tmr_min;
38744 	/* Maximum value for cmpl_aggr_dma_tmr */
38745 	uint16_t	cmpl_aggr_dma_tmr_max;
38746 	/* Minimum value for cmpl_aggr_dma_tmr_during_int */
38747 	uint16_t	cmpl_aggr_dma_tmr_during_int_min;
38748 	/* Maximum value for cmpl_aggr_dma_tmr_during_int */
38749 	uint16_t	cmpl_aggr_dma_tmr_during_int_max;
38750 	/* Minimum value for int_lat_tmr_min */
38751 	uint16_t	int_lat_tmr_min_min;
38752 	/* Maximum value for int_lat_tmr_min */
38753 	uint16_t	int_lat_tmr_min_max;
38754 	/* Minimum value for int_lat_tmr_max */
38755 	uint16_t	int_lat_tmr_max_min;
38756 	/* Maximum value for int_lat_tmr_max */
38757 	uint16_t	int_lat_tmr_max_max;
38758 	/* Minimum value for num_cmpl_aggr_int */
38759 	uint16_t	num_cmpl_aggr_int_min;
38760 	/* Maximum value for num_cmpl_aggr_int */
38761 	uint16_t	num_cmpl_aggr_int_max;
38762 	/* The units for timer parameters, in nanoseconds. */
38763 	uint16_t	timer_units;
38764 	uint8_t	unused_0[1];
38765 	/*
38766 	 * This field is used in Output records to indicate that the output
38767 	 * is completely written to RAM.  This field should be read as '1'
38768 	 * to indicate that the output has been completely written.
38769 	 * When writing a command completion or response to an internal processor,
38770 	 * the order of writes has to be such that this field is written last.
38771 	 */
38772 	uint8_t	valid;
38773 } __rte_packed;
38774 
38775 /**************************************
38776  * hwrm_ring_cmpl_ring_qaggint_params *
38777  **************************************/
38778 
38779 
38780 /* hwrm_ring_cmpl_ring_qaggint_params_input (size:192b/24B) */
38781 struct hwrm_ring_cmpl_ring_qaggint_params_input {
38782 	/* The HWRM command request type. */
38783 	uint16_t	req_type;
38784 	/*
38785 	 * The completion ring to send the completion event on. This should
38786 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
38787 	 */
38788 	uint16_t	cmpl_ring;
38789 	/*
38790 	 * The sequence ID is used by the driver for tracking multiple
38791 	 * commands. This ID is treated as opaque data by the firmware and
38792 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
38793 	 */
38794 	uint16_t	seq_id;
38795 	/*
38796 	 * The target ID of the command:
38797 	 * * 0x0-0xFFF8 - The function ID
38798 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38799 	 * * 0xFFFD - Reserved for user-space HWRM interface
38800 	 * * 0xFFFF - HWRM
38801 	 */
38802 	uint16_t	target_id;
38803 	/*
38804 	 * A physical address pointer pointing to a host buffer that the
38805 	 * command's response data will be written. This can be either a host
38806 	 * physical address (HPA) or a guest physical address (GPA) and must
38807 	 * point to a physically contiguous block of memory.
38808 	 */
38809 	uint64_t	resp_addr;
38810 	/* Physical number of completion ring. */
38811 	uint16_t	ring_id;
38812 	uint16_t	flags;
38813 	#define HWRM_RING_CMPL_RING_QAGGINT_PARAMS_INPUT_FLAGS_UNUSED_0_MASK \
38814 		UINT32_C(0x3)
38815 	#define HWRM_RING_CMPL_RING_QAGGINT_PARAMS_INPUT_FLAGS_UNUSED_0_SFT 0
38816 	/*
38817 	 * Set this flag to 1 when querying parameters on a notification
38818 	 * queue. Set this flag to 0 when querying parameters on a
38819 	 * completion queue or completion ring.
38820 	 */
38821 	#define HWRM_RING_CMPL_RING_QAGGINT_PARAMS_INPUT_FLAGS_IS_NQ \
38822 		UINT32_C(0x4)
38823 	uint8_t	unused_0[4];
38824 } __rte_packed;
38825 
38826 /* hwrm_ring_cmpl_ring_qaggint_params_output (size:256b/32B) */
38827 struct hwrm_ring_cmpl_ring_qaggint_params_output {
38828 	/* The specific error status for the command. */
38829 	uint16_t	error_code;
38830 	/* The HWRM command request type. */
38831 	uint16_t	req_type;
38832 	/* The sequence ID from the original command. */
38833 	uint16_t	seq_id;
38834 	/* The length of the response data in number of bytes. */
38835 	uint16_t	resp_len;
38836 	uint16_t	flags;
38837 	/*
38838 	 * When this bit is set to '1', interrupt max
38839 	 * timer is reset whenever a completion is received.
38840 	 */
38841 	#define HWRM_RING_CMPL_RING_QAGGINT_PARAMS_OUTPUT_FLAGS_TIMER_RESET \
38842 		UINT32_C(0x1)
38843 	/*
38844 	 * When this bit is set to '1', ring idle mode
38845 	 * aggregation will be enabled.
38846 	 */
38847 	#define HWRM_RING_CMPL_RING_QAGGINT_PARAMS_OUTPUT_FLAGS_RING_IDLE \
38848 		UINT32_C(0x2)
38849 	/*
38850 	 * Number of completions to aggregate before DMA
38851 	 * during the normal mode.
38852 	 */
38853 	uint16_t	num_cmpl_dma_aggr;
38854 	/*
38855 	 * Number of completions to aggregate before DMA
38856 	 * during the interrupt mode.
38857 	 */
38858 	uint16_t	num_cmpl_dma_aggr_during_int;
38859 	/*
38860 	 * Timer used to aggregate completions before
38861 	 * DMA during the normal mode (not in interrupt mode).
38862 	 */
38863 	uint16_t	cmpl_aggr_dma_tmr;
38864 	/*
38865 	 * Timer used to aggregate completions before
38866 	 * DMA when in interrupt mode.
38867 	 */
38868 	uint16_t	cmpl_aggr_dma_tmr_during_int;
38869 	/* Minimum time between two interrupts. */
38870 	uint16_t	int_lat_tmr_min;
38871 	/*
38872 	 * Maximum wait time spent aggregating
38873 	 * completions before signaling the interrupt after the
38874 	 * interrupt is enabled.
38875 	 */
38876 	uint16_t	int_lat_tmr_max;
38877 	/*
38878 	 * Minimum number of completions aggregated before signaling
38879 	 * an interrupt.
38880 	 */
38881 	uint16_t	num_cmpl_aggr_int;
38882 	uint8_t	unused_0[7];
38883 	/*
38884 	 * This field is used in Output records to indicate that the output
38885 	 * is completely written to RAM.  This field should be read as '1'
38886 	 * to indicate that the output has been completely written.
38887 	 * When writing a command completion or response to an internal processor,
38888 	 * the order of writes has to be such that this field is written last.
38889 	 */
38890 	uint8_t	valid;
38891 } __rte_packed;
38892 
38893 /*****************************************
38894  * hwrm_ring_cmpl_ring_cfg_aggint_params *
38895  *****************************************/
38896 
38897 
38898 /* hwrm_ring_cmpl_ring_cfg_aggint_params_input (size:320b/40B) */
38899 struct hwrm_ring_cmpl_ring_cfg_aggint_params_input {
38900 	/* The HWRM command request type. */
38901 	uint16_t	req_type;
38902 	/*
38903 	 * The completion ring to send the completion event on. This should
38904 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
38905 	 */
38906 	uint16_t	cmpl_ring;
38907 	/*
38908 	 * The sequence ID is used by the driver for tracking multiple
38909 	 * commands. This ID is treated as opaque data by the firmware and
38910 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
38911 	 */
38912 	uint16_t	seq_id;
38913 	/*
38914 	 * The target ID of the command:
38915 	 * * 0x0-0xFFF8 - The function ID
38916 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38917 	 * * 0xFFFD - Reserved for user-space HWRM interface
38918 	 * * 0xFFFF - HWRM
38919 	 */
38920 	uint16_t	target_id;
38921 	/*
38922 	 * A physical address pointer pointing to a host buffer that the
38923 	 * command's response data will be written. This can be either a host
38924 	 * physical address (HPA) or a guest physical address (GPA) and must
38925 	 * point to a physically contiguous block of memory.
38926 	 */
38927 	uint64_t	resp_addr;
38928 	/* Physical number of completion ring. */
38929 	uint16_t	ring_id;
38930 	uint16_t	flags;
38931 	/*
38932 	 * When this bit is set to '1', interrupt latency max
38933 	 * timer is reset whenever a completion is received.
38934 	 */
38935 	#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_TIMER_RESET \
38936 		UINT32_C(0x1)
38937 	/*
38938 	 * When this bit is set to '1', ring idle mode
38939 	 * aggregation will be enabled.
38940 	 */
38941 	#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_RING_IDLE \
38942 		UINT32_C(0x2)
38943 	/*
38944 	 * Set this flag to 1 when configuring parameters on a
38945 	 * notification queue. Set this flag to 0 when configuring
38946 	 * parameters on a completion queue or completion ring.
38947 	 */
38948 	#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_IS_NQ \
38949 		UINT32_C(0x4)
38950 	/*
38951 	 * Number of completions to aggregate before DMA
38952 	 * during the normal mode.
38953 	 */
38954 	uint16_t	num_cmpl_dma_aggr;
38955 	/*
38956 	 * Number of completions to aggregate before DMA
38957 	 * during the interrupt mode.
38958 	 */
38959 	uint16_t	num_cmpl_dma_aggr_during_int;
38960 	/*
38961 	 * Timer used to aggregate completions before
38962 	 * DMA during the normal mode (not in interrupt mode).
38963 	 */
38964 	uint16_t	cmpl_aggr_dma_tmr;
38965 	/*
38966 	 * Timer used to aggregate completions before
38967 	 * DMA while in interrupt mode.
38968 	 */
38969 	uint16_t	cmpl_aggr_dma_tmr_during_int;
38970 	/* Minimum time between two interrupts. */
38971 	uint16_t	int_lat_tmr_min;
38972 	/*
38973 	 * Maximum wait time spent aggregating
38974 	 * completions before signaling the interrupt after the
38975 	 * interrupt is enabled.
38976 	 */
38977 	uint16_t	int_lat_tmr_max;
38978 	/*
38979 	 * Minimum number of completions aggregated before signaling
38980 	 * an interrupt.
38981 	 */
38982 	uint16_t	num_cmpl_aggr_int;
38983 	/*
38984 	 * Bitfield that indicates which parameters are to be applied. Only
38985 	 * required when configuring devices with notification queues, and
38986 	 * used in that case to set certain parameters on completion queues
38987 	 * and others on notification queues.
38988 	 */
38989 	uint16_t	enables;
38990 	/*
38991 	 * This bit must be '1' for the num_cmpl_dma_aggr field to be
38992 	 * configured.
38993 	 */
38994 	#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_DMA_AGGR \
38995 		UINT32_C(0x1)
38996 	/*
38997 	 * This bit must be '1' for the num_cmpl_dma_aggr_during_int field to be
38998 	 * configured.
38999 	 */
39000 	#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_DMA_AGGR_DURING_INT \
39001 		UINT32_C(0x2)
39002 	/*
39003 	 * This bit must be '1' for the cmpl_aggr_dma_tmr field to be
39004 	 * configured.
39005 	 */
39006 	#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_CMPL_AGGR_DMA_TMR \
39007 		UINT32_C(0x4)
39008 	/*
39009 	 * This bit must be '1' for the int_lat_tmr_min field to be
39010 	 * configured.
39011 	 */
39012 	#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_INT_LAT_TMR_MIN \
39013 		UINT32_C(0x8)
39014 	/*
39015 	 * This bit must be '1' for the int_lat_tmr_max field to be
39016 	 * configured.
39017 	 */
39018 	#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_INT_LAT_TMR_MAX \
39019 		UINT32_C(0x10)
39020 	/*
39021 	 * This bit must be '1' for the num_cmpl_aggr_int field to be
39022 	 * configured.
39023 	 */
39024 	#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_AGGR_INT \
39025 		UINT32_C(0x20)
39026 	uint8_t	unused_0[4];
39027 } __rte_packed;
39028 
39029 /* hwrm_ring_cmpl_ring_cfg_aggint_params_output (size:128b/16B) */
39030 struct hwrm_ring_cmpl_ring_cfg_aggint_params_output {
39031 	/* The specific error status for the command. */
39032 	uint16_t	error_code;
39033 	/* The HWRM command request type. */
39034 	uint16_t	req_type;
39035 	/* The sequence ID from the original command. */
39036 	uint16_t	seq_id;
39037 	/* The length of the response data in number of bytes. */
39038 	uint16_t	resp_len;
39039 	uint8_t	unused_0[7];
39040 	/*
39041 	 * This field is used in Output records to indicate that the output
39042 	 * is completely written to RAM.  This field should be read as '1'
39043 	 * to indicate that the output has been completely written.
39044 	 * When writing a command completion or response to an internal processor,
39045 	 * the order of writes has to be such that this field is written last.
39046 	 */
39047 	uint8_t	valid;
39048 } __rte_packed;
39049 
39050 /***********************
39051  * hwrm_ring_grp_alloc *
39052  ***********************/
39053 
39054 
39055 /* hwrm_ring_grp_alloc_input (size:192b/24B) */
39056 struct hwrm_ring_grp_alloc_input {
39057 	/* The HWRM command request type. */
39058 	uint16_t	req_type;
39059 	/*
39060 	 * The completion ring to send the completion event on. This should
39061 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
39062 	 */
39063 	uint16_t	cmpl_ring;
39064 	/*
39065 	 * The sequence ID is used by the driver for tracking multiple
39066 	 * commands. This ID is treated as opaque data by the firmware and
39067 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
39068 	 */
39069 	uint16_t	seq_id;
39070 	/*
39071 	 * The target ID of the command:
39072 	 * * 0x0-0xFFF8 - The function ID
39073 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39074 	 * * 0xFFFD - Reserved for user-space HWRM interface
39075 	 * * 0xFFFF - HWRM
39076 	 */
39077 	uint16_t	target_id;
39078 	/*
39079 	 * A physical address pointer pointing to a host buffer that the
39080 	 * command's response data will be written. This can be either a host
39081 	 * physical address (HPA) or a guest physical address (GPA) and must
39082 	 * point to a physically contiguous block of memory.
39083 	 */
39084 	uint64_t	resp_addr;
39085 	/*
39086 	 * This value identifies the CR associated with the ring
39087 	 * group.
39088 	 */
39089 	uint16_t	cr;
39090 	/*
39091 	 * This value identifies the main RR associated with the ring
39092 	 * group.
39093 	 */
39094 	uint16_t	rr;
39095 	/*
39096 	 * This value identifies the aggregation RR associated with
39097 	 * the ring group.  If this value is 0xFF... (All Fs), then no
39098 	 * Aggregation ring will be set.
39099 	 */
39100 	uint16_t	ar;
39101 	/*
39102 	 * This value identifies the statistics context associated
39103 	 * with the ring group.
39104 	 */
39105 	uint16_t	sc;
39106 } __rte_packed;
39107 
39108 /* hwrm_ring_grp_alloc_output (size:128b/16B) */
39109 struct hwrm_ring_grp_alloc_output {
39110 	/* The specific error status for the command. */
39111 	uint16_t	error_code;
39112 	/* The HWRM command request type. */
39113 	uint16_t	req_type;
39114 	/* The sequence ID from the original command. */
39115 	uint16_t	seq_id;
39116 	/* The length of the response data in number of bytes. */
39117 	uint16_t	resp_len;
39118 	/*
39119 	 * This is the ring group ID value.  Use this value to program
39120 	 * the default ring group for the VNIC or as table entries
39121 	 * in an RSS/COS context.
39122 	 */
39123 	uint32_t	ring_group_id;
39124 	uint8_t	unused_0[3];
39125 	/*
39126 	 * This field is used in Output records to indicate that the output
39127 	 * is completely written to RAM.  This field should be read as '1'
39128 	 * to indicate that the output has been completely written.
39129 	 * When writing a command completion or response to an internal processor,
39130 	 * the order of writes has to be such that this field is written last.
39131 	 */
39132 	uint8_t	valid;
39133 } __rte_packed;
39134 
39135 /**********************
39136  * hwrm_ring_grp_free *
39137  **********************/
39138 
39139 
39140 /* hwrm_ring_grp_free_input (size:192b/24B) */
39141 struct hwrm_ring_grp_free_input {
39142 	/* The HWRM command request type. */
39143 	uint16_t	req_type;
39144 	/*
39145 	 * The completion ring to send the completion event on. This should
39146 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
39147 	 */
39148 	uint16_t	cmpl_ring;
39149 	/*
39150 	 * The sequence ID is used by the driver for tracking multiple
39151 	 * commands. This ID is treated as opaque data by the firmware and
39152 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
39153 	 */
39154 	uint16_t	seq_id;
39155 	/*
39156 	 * The target ID of the command:
39157 	 * * 0x0-0xFFF8 - The function ID
39158 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39159 	 * * 0xFFFD - Reserved for user-space HWRM interface
39160 	 * * 0xFFFF - HWRM
39161 	 */
39162 	uint16_t	target_id;
39163 	/*
39164 	 * A physical address pointer pointing to a host buffer that the
39165 	 * command's response data will be written. This can be either a host
39166 	 * physical address (HPA) or a guest physical address (GPA) and must
39167 	 * point to a physically contiguous block of memory.
39168 	 */
39169 	uint64_t	resp_addr;
39170 	/* This is the ring group ID value. */
39171 	uint32_t	ring_group_id;
39172 	uint8_t	unused_0[4];
39173 } __rte_packed;
39174 
39175 /* hwrm_ring_grp_free_output (size:128b/16B) */
39176 struct hwrm_ring_grp_free_output {
39177 	/* The specific error status for the command. */
39178 	uint16_t	error_code;
39179 	/* The HWRM command request type. */
39180 	uint16_t	req_type;
39181 	/* The sequence ID from the original command. */
39182 	uint16_t	seq_id;
39183 	/* The length of the response data in number of bytes. */
39184 	uint16_t	resp_len;
39185 	uint8_t	unused_0[7];
39186 	/*
39187 	 * This field is used in Output records to indicate that the output
39188 	 * is completely written to RAM.  This field should be read as '1'
39189 	 * to indicate that the output has been completely written.
39190 	 * When writing a command completion or response to an internal processor,
39191 	 * the order of writes has to be such that this field is written last.
39192 	 */
39193 	uint8_t	valid;
39194 } __rte_packed;
39195 
39196 /************************
39197  * hwrm_ring_schq_alloc *
39198  ************************/
39199 
39200 
39201 /* hwrm_ring_schq_alloc_input (size:1088b/136B) */
39202 struct hwrm_ring_schq_alloc_input {
39203 	/* The HWRM command request type. */
39204 	uint16_t	req_type;
39205 	/*
39206 	 * The completion ring to send the completion event on. This should
39207 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
39208 	 */
39209 	uint16_t	cmpl_ring;
39210 	/*
39211 	 * The sequence ID is used by the driver for tracking multiple
39212 	 * commands. This ID is treated as opaque data by the firmware and
39213 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
39214 	 */
39215 	uint16_t	seq_id;
39216 	/*
39217 	 * The target ID of the command:
39218 	 * * 0x0-0xFFF8 - The function ID
39219 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39220 	 * * 0xFFFD - Reserved for user-space HWRM interface
39221 	 * * 0xFFFF - HWRM
39222 	 */
39223 	uint16_t	target_id;
39224 	/*
39225 	 * A physical address pointer pointing to a host buffer that the
39226 	 * command's response data will be written. This can be either a host
39227 	 * physical address (HPA) or a guest physical address (GPA) and must
39228 	 * point to a physically contiguous block of memory.
39229 	 */
39230 	uint64_t	resp_addr;
39231 	uint32_t	enables;
39232 	/*
39233 	 * This bit must be '1' for the tqm_ring0 fields to be
39234 	 * configured.
39235 	 */
39236 	#define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING0     UINT32_C(0x1)
39237 	/*
39238 	 * This bit must be '1' for the tqm_ring1 fields to be
39239 	 * configured.
39240 	 */
39241 	#define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING1     UINT32_C(0x2)
39242 	/*
39243 	 * This bit must be '1' for the tqm_ring2 fields to be
39244 	 * configured.
39245 	 */
39246 	#define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING2     UINT32_C(0x4)
39247 	/*
39248 	 * This bit must be '1' for the tqm_ring3 fields to be
39249 	 * configured.
39250 	 */
39251 	#define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING3     UINT32_C(0x8)
39252 	/*
39253 	 * This bit must be '1' for the tqm_ring4 fields to be
39254 	 * configured.
39255 	 */
39256 	#define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING4     UINT32_C(0x10)
39257 	/*
39258 	 * This bit must be '1' for the tqm_ring5 fields to be
39259 	 * configured.
39260 	 */
39261 	#define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING5     UINT32_C(0x20)
39262 	/*
39263 	 * This bit must be '1' for the tqm_ring6 fields to be
39264 	 * configured.
39265 	 */
39266 	#define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING6     UINT32_C(0x40)
39267 	/*
39268 	 * This bit must be '1' for the tqm_ring7 fields to be
39269 	 * configured.
39270 	 */
39271 	#define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING7     UINT32_C(0x80)
39272 	/* Reserved for future use. */
39273 	uint32_t	reserved;
39274 	/* TQM ring 0 page size and level. */
39275 	uint8_t	tqm_ring0_pg_size_tqm_ring0_lvl;
39276 	/* TQM ring 0 PBL indirect levels. */
39277 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_LVL_MASK \
39278 		UINT32_C(0xf)
39279 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_LVL_SFT       0
39280 	/* PBL pointer is physical start address. */
39281 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_LVL_LVL_0 \
39282 		UINT32_C(0x0)
39283 	/* PBL pointer points to PTE table. */
39284 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_LVL_LVL_1 \
39285 		UINT32_C(0x1)
39286 	/*
39287 	 * PBL pointer points to PDE table with each entry pointing to PTE
39288 	 * tables.
39289 	 */
39290 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_LVL_LVL_2 \
39291 		UINT32_C(0x2)
39292 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_LVL_LAST \
39293 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_LVL_LVL_2
39294 	/* TQM ring 0 page size. */
39295 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_MASK \
39296 		UINT32_C(0xf0)
39297 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_SFT   4
39298 	/* 4KB. */
39299 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_PG_4K \
39300 		(UINT32_C(0x0) << 4)
39301 	/* 8KB. */
39302 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_PG_8K \
39303 		(UINT32_C(0x1) << 4)
39304 	/* 64KB. */
39305 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_PG_64K \
39306 		(UINT32_C(0x2) << 4)
39307 	/* 2MB. */
39308 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_PG_2M \
39309 		(UINT32_C(0x3) << 4)
39310 	/* 8MB. */
39311 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_PG_8M \
39312 		(UINT32_C(0x4) << 4)
39313 	/* 1GB. */
39314 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_PG_1G \
39315 		(UINT32_C(0x5) << 4)
39316 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_LAST \
39317 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_PG_1G
39318 	/* TQM ring 1 page size and level. */
39319 	uint8_t	tqm_ring1_pg_size_tqm_ring1_lvl;
39320 	/* TQM ring 1 PBL indirect levels. */
39321 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_LVL_MASK \
39322 		UINT32_C(0xf)
39323 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_LVL_SFT       0
39324 	/* PBL pointer is physical start address. */
39325 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_LVL_LVL_0 \
39326 		UINT32_C(0x0)
39327 	/* PBL pointer points to PTE table. */
39328 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_LVL_LVL_1 \
39329 		UINT32_C(0x1)
39330 	/*
39331 	 * PBL pointer points to PDE table with each entry pointing to PTE
39332 	 * tables.
39333 	 */
39334 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_LVL_LVL_2 \
39335 		UINT32_C(0x2)
39336 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_LVL_LAST \
39337 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_LVL_LVL_2
39338 	/* TQM ring 1 page size. */
39339 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_MASK \
39340 		UINT32_C(0xf0)
39341 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_SFT   4
39342 	/* 4KB. */
39343 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_PG_4K \
39344 		(UINT32_C(0x0) << 4)
39345 	/* 8KB. */
39346 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_PG_8K \
39347 		(UINT32_C(0x1) << 4)
39348 	/* 64KB. */
39349 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_PG_64K \
39350 		(UINT32_C(0x2) << 4)
39351 	/* 2MB. */
39352 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_PG_2M \
39353 		(UINT32_C(0x3) << 4)
39354 	/* 8MB. */
39355 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_PG_8M \
39356 		(UINT32_C(0x4) << 4)
39357 	/* 1GB. */
39358 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_PG_1G \
39359 		(UINT32_C(0x5) << 4)
39360 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_LAST \
39361 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_PG_1G
39362 	/* TQM ring 2 page size and level. */
39363 	uint8_t	tqm_ring2_pg_size_tqm_ring2_lvl;
39364 	/* TQM ring 2 PBL indirect levels. */
39365 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_LVL_MASK \
39366 		UINT32_C(0xf)
39367 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_LVL_SFT       0
39368 	/* PBL pointer is physical start address. */
39369 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_LVL_LVL_0 \
39370 		UINT32_C(0x0)
39371 	/* PBL pointer points to PTE table. */
39372 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_LVL_LVL_1 \
39373 		UINT32_C(0x1)
39374 	/*
39375 	 * PBL pointer points to PDE table with each entry pointing to PTE
39376 	 * tables.
39377 	 */
39378 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_LVL_LVL_2 \
39379 		UINT32_C(0x2)
39380 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_LVL_LAST \
39381 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_LVL_LVL_2
39382 	/* TQM ring 2 page size. */
39383 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_MASK \
39384 		UINT32_C(0xf0)
39385 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_SFT   4
39386 	/* 4KB. */
39387 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_PG_4K \
39388 		(UINT32_C(0x0) << 4)
39389 	/* 8KB. */
39390 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_PG_8K \
39391 		(UINT32_C(0x1) << 4)
39392 	/* 64KB. */
39393 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_PG_64K \
39394 		(UINT32_C(0x2) << 4)
39395 	/* 2MB. */
39396 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_PG_2M \
39397 		(UINT32_C(0x3) << 4)
39398 	/* 8MB. */
39399 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_PG_8M \
39400 		(UINT32_C(0x4) << 4)
39401 	/* 1GB. */
39402 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_PG_1G \
39403 		(UINT32_C(0x5) << 4)
39404 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_LAST \
39405 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_PG_1G
39406 	/* TQM ring 3 page size and level. */
39407 	uint8_t	tqm_ring3_pg_size_tqm_ring3_lvl;
39408 	/* TQM ring 3 PBL indirect levels. */
39409 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_LVL_MASK \
39410 		UINT32_C(0xf)
39411 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_LVL_SFT       0
39412 	/* PBL pointer is physical start address. */
39413 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_LVL_LVL_0 \
39414 		UINT32_C(0x0)
39415 	/* PBL pointer points to PTE table. */
39416 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_LVL_LVL_1 \
39417 		UINT32_C(0x1)
39418 	/*
39419 	 * PBL pointer points to PDE table with each entry pointing to PTE
39420 	 * tables.
39421 	 */
39422 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_LVL_LVL_2 \
39423 		UINT32_C(0x2)
39424 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_LVL_LAST \
39425 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_LVL_LVL_2
39426 	/* TQM ring 3 page size. */
39427 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_MASK \
39428 		UINT32_C(0xf0)
39429 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_SFT   4
39430 	/* 4KB. */
39431 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_PG_4K \
39432 		(UINT32_C(0x0) << 4)
39433 	/* 8KB. */
39434 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_PG_8K \
39435 		(UINT32_C(0x1) << 4)
39436 	/* 64KB. */
39437 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_PG_64K \
39438 		(UINT32_C(0x2) << 4)
39439 	/* 2MB. */
39440 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_PG_2M \
39441 		(UINT32_C(0x3) << 4)
39442 	/* 8MB. */
39443 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_PG_8M \
39444 		(UINT32_C(0x4) << 4)
39445 	/* 1GB. */
39446 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_PG_1G \
39447 		(UINT32_C(0x5) << 4)
39448 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_LAST \
39449 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_PG_1G
39450 	/* TQM ring 4 page size and level. */
39451 	uint8_t	tqm_ring4_pg_size_tqm_ring4_lvl;
39452 	/* TQM ring 4 PBL indirect levels. */
39453 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_LVL_MASK \
39454 		UINT32_C(0xf)
39455 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_LVL_SFT       0
39456 	/* PBL pointer is physical start address. */
39457 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_LVL_LVL_0 \
39458 		UINT32_C(0x0)
39459 	/* PBL pointer points to PTE table. */
39460 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_LVL_LVL_1 \
39461 		UINT32_C(0x1)
39462 	/*
39463 	 * PBL pointer points to PDE table with each entry pointing to PTE
39464 	 * tables.
39465 	 */
39466 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_LVL_LVL_2 \
39467 		UINT32_C(0x2)
39468 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_LVL_LAST \
39469 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_LVL_LVL_2
39470 	/* TQM ring 4 page size. */
39471 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_MASK \
39472 		UINT32_C(0xf0)
39473 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_SFT   4
39474 	/* 4KB. */
39475 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_PG_4K \
39476 		(UINT32_C(0x0) << 4)
39477 	/* 8KB. */
39478 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_PG_8K \
39479 		(UINT32_C(0x1) << 4)
39480 	/* 64KB. */
39481 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_PG_64K \
39482 		(UINT32_C(0x2) << 4)
39483 	/* 2MB. */
39484 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_PG_2M \
39485 		(UINT32_C(0x3) << 4)
39486 	/* 8MB. */
39487 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_PG_8M \
39488 		(UINT32_C(0x4) << 4)
39489 	/* 1GB. */
39490 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_PG_1G \
39491 		(UINT32_C(0x5) << 4)
39492 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_LAST \
39493 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_PG_1G
39494 	/* TQM ring 5 page size and level. */
39495 	uint8_t	tqm_ring5_pg_size_tqm_ring5_lvl;
39496 	/* TQM ring 5 PBL indirect levels. */
39497 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_LVL_MASK \
39498 		UINT32_C(0xf)
39499 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_LVL_SFT       0
39500 	/* PBL pointer is physical start address. */
39501 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_LVL_LVL_0 \
39502 		UINT32_C(0x0)
39503 	/* PBL pointer points to PTE table. */
39504 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_LVL_LVL_1 \
39505 		UINT32_C(0x1)
39506 	/*
39507 	 * PBL pointer points to PDE table with each entry pointing to PTE
39508 	 * tables.
39509 	 */
39510 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_LVL_LVL_2 \
39511 		UINT32_C(0x2)
39512 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_LVL_LAST \
39513 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_LVL_LVL_2
39514 	/* TQM ring 5 page size. */
39515 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_MASK \
39516 		UINT32_C(0xf0)
39517 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_SFT   4
39518 	/* 4KB. */
39519 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_PG_4K \
39520 		(UINT32_C(0x0) << 4)
39521 	/* 8KB. */
39522 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_PG_8K \
39523 		(UINT32_C(0x1) << 4)
39524 	/* 64KB. */
39525 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_PG_64K \
39526 		(UINT32_C(0x2) << 4)
39527 	/* 2MB. */
39528 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_PG_2M \
39529 		(UINT32_C(0x3) << 4)
39530 	/* 8MB. */
39531 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_PG_8M \
39532 		(UINT32_C(0x4) << 4)
39533 	/* 1GB. */
39534 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_PG_1G \
39535 		(UINT32_C(0x5) << 4)
39536 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_LAST \
39537 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_PG_1G
39538 	/* TQM ring 6 page size and level. */
39539 	uint8_t	tqm_ring6_pg_size_tqm_ring6_lvl;
39540 	/* TQM ring 6 PBL indirect levels. */
39541 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_LVL_MASK \
39542 		UINT32_C(0xf)
39543 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_LVL_SFT       0
39544 	/* PBL pointer is physical start address. */
39545 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_LVL_LVL_0 \
39546 		UINT32_C(0x0)
39547 	/* PBL pointer points to PTE table. */
39548 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_LVL_LVL_1 \
39549 		UINT32_C(0x1)
39550 	/*
39551 	 * PBL pointer points to PDE table with each entry pointing to PTE
39552 	 * tables.
39553 	 */
39554 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_LVL_LVL_2 \
39555 		UINT32_C(0x2)
39556 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_LVL_LAST \
39557 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_LVL_LVL_2
39558 	/* TQM ring 6 page size. */
39559 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_MASK \
39560 		UINT32_C(0xf0)
39561 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_SFT   4
39562 	/* 4KB. */
39563 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_PG_4K \
39564 		(UINT32_C(0x0) << 4)
39565 	/* 8KB. */
39566 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_PG_8K \
39567 		(UINT32_C(0x1) << 4)
39568 	/* 64KB. */
39569 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_PG_64K \
39570 		(UINT32_C(0x2) << 4)
39571 	/* 2MB. */
39572 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_PG_2M \
39573 		(UINT32_C(0x3) << 4)
39574 	/* 8MB. */
39575 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_PG_8M \
39576 		(UINT32_C(0x4) << 4)
39577 	/* 1GB. */
39578 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_PG_1G \
39579 		(UINT32_C(0x5) << 4)
39580 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_LAST \
39581 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_PG_1G
39582 	/* TQM ring 7 page size and level. */
39583 	uint8_t	tqm_ring7_pg_size_tqm_ring7_lvl;
39584 	/* TQM ring 7 PBL indirect levels. */
39585 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_LVL_MASK \
39586 		UINT32_C(0xf)
39587 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_LVL_SFT       0
39588 	/* PBL pointer is physical start address. */
39589 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_LVL_LVL_0 \
39590 		UINT32_C(0x0)
39591 	/* PBL pointer points to PTE table. */
39592 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_LVL_LVL_1 \
39593 		UINT32_C(0x1)
39594 	/*
39595 	 * PBL pointer points to PDE table with each entry pointing to PTE
39596 	 * tables.
39597 	 */
39598 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_LVL_LVL_2 \
39599 		UINT32_C(0x2)
39600 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_LVL_LAST \
39601 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_LVL_LVL_2
39602 	/* TQM ring 7 page size. */
39603 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_MASK \
39604 		UINT32_C(0xf0)
39605 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_SFT   4
39606 	/* 4KB. */
39607 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_PG_4K \
39608 		(UINT32_C(0x0) << 4)
39609 	/* 8KB. */
39610 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_PG_8K \
39611 		(UINT32_C(0x1) << 4)
39612 	/* 64KB. */
39613 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_PG_64K \
39614 		(UINT32_C(0x2) << 4)
39615 	/* 2MB. */
39616 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_PG_2M \
39617 		(UINT32_C(0x3) << 4)
39618 	/* 8MB. */
39619 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_PG_8M \
39620 		(UINT32_C(0x4) << 4)
39621 	/* 1GB. */
39622 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_PG_1G \
39623 		(UINT32_C(0x5) << 4)
39624 	#define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_LAST \
39625 		HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_PG_1G
39626 	/* TQM ring 0 page directory. */
39627 	uint64_t	tqm_ring0_page_dir;
39628 	/* TQM ring 1 page directory. */
39629 	uint64_t	tqm_ring1_page_dir;
39630 	/* TQM ring 2 page directory. */
39631 	uint64_t	tqm_ring2_page_dir;
39632 	/* TQM ring 3 page directory. */
39633 	uint64_t	tqm_ring3_page_dir;
39634 	/* TQM ring 4 page directory. */
39635 	uint64_t	tqm_ring4_page_dir;
39636 	/* TQM ring 5 page directory. */
39637 	uint64_t	tqm_ring5_page_dir;
39638 	/* TQM ring 6 page directory. */
39639 	uint64_t	tqm_ring6_page_dir;
39640 	/* TQM ring 7 page directory. */
39641 	uint64_t	tqm_ring7_page_dir;
39642 	/*
39643 	 * Number of TQM ring 0 entries.
39644 	 *
39645 	 * TQM fastpath rings should be sized large enough to accommodate the
39646 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
39647 	 * that can be enqueued to the TQM ring.
39648 	 *
39649 	 * Note that TQM ring sizes cannot be extended while the system is
39650 	 * operational. If a PF driver needs to extend a TQM ring, it needs
39651 	 * to delete the SCHQ and then reallocate it.
39652 	 */
39653 	uint32_t	tqm_ring0_num_entries;
39654 	/*
39655 	 * Number of TQM ring 1 entries.
39656 	 *
39657 	 * TQM fastpath rings should be sized large enough to accommodate the
39658 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
39659 	 * that can be enqueued to the TQM ring.
39660 	 *
39661 	 * Note that TQM ring sizes cannot be extended while the system is
39662 	 * operational. If a PF driver needs to extend a TQM ring, it needs
39663 	 * to delete the SCHQ and then reallocate it.
39664 	 */
39665 	uint32_t	tqm_ring1_num_entries;
39666 	/*
39667 	 * Number of TQM ring 2 entries.
39668 	 *
39669 	 * TQM fastpath rings should be sized large enough to accommodate the
39670 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
39671 	 * that can be enqueued to the TQM ring.
39672 	 *
39673 	 * Note that TQM ring sizes cannot be extended while the system is
39674 	 * operational. If a PF driver needs to extend a TQM ring, it needs
39675 	 * to delete the SCHQ and then reallocate it.
39676 	 */
39677 	uint32_t	tqm_ring2_num_entries;
39678 	/*
39679 	 * Number of TQM ring 3 entries.
39680 	 *
39681 	 * TQM fastpath rings should be sized large enough to accommodate the
39682 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
39683 	 * that can be enqueued to the TQM ring.
39684 	 *
39685 	 * Note that TQM ring sizes cannot be extended while the system is
39686 	 * operational. If a PF driver needs to extend a TQM ring, it needs
39687 	 * to delete the SCHQ and then reallocate it.
39688 	 */
39689 	uint32_t	tqm_ring3_num_entries;
39690 	/*
39691 	 * Number of TQM ring 4 entries.
39692 	 *
39693 	 * TQM fastpath rings should be sized large enough to accommodate the
39694 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
39695 	 * that can be enqueued to the TQM ring.
39696 	 *
39697 	 * Note that TQM ring sizes cannot be extended while the system is
39698 	 * operational. If a PF driver needs to extend a TQM ring, it needs
39699 	 * to delete the SCHQ and then reallocate it.
39700 	 */
39701 	uint32_t	tqm_ring4_num_entries;
39702 	/*
39703 	 * Number of TQM ring 5 entries.
39704 	 *
39705 	 * TQM fastpath rings should be sized large enough to accommodate the
39706 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
39707 	 * that can be enqueued to the TQM ring.
39708 	 *
39709 	 * Note that TQM ring sizes cannot be extended while the system is
39710 	 * operational. If a PF driver needs to extend a TQM ring, it needs
39711 	 * to delete the SCHQ and then reallocate it.
39712 	 */
39713 	uint32_t	tqm_ring5_num_entries;
39714 	/*
39715 	 * Number of TQM ring 6 entries.
39716 	 *
39717 	 * TQM fastpath rings should be sized large enough to accommodate the
39718 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
39719 	 * that can be enqueued to the TQM ring.
39720 	 *
39721 	 * Note that TQM ring sizes cannot be extended while the system is
39722 	 * operational. If a PF driver needs to extend a TQM ring, it needs
39723 	 * to delete the SCHQ and then reallocate it.
39724 	 */
39725 	uint32_t	tqm_ring6_num_entries;
39726 	/*
39727 	 * Number of TQM ring 7 entries.
39728 	 *
39729 	 * TQM fastpath rings should be sized large enough to accommodate the
39730 	 * maximum number of QPs (either L2 or RoCE, or both if shared)
39731 	 * that can be enqueued to the TQM ring.
39732 	 *
39733 	 * Note that TQM ring sizes cannot be extended while the system is
39734 	 * operational. If a PF driver needs to extend a TQM ring, it needs
39735 	 * to delete the SCHQ and then reallocate it.
39736 	 */
39737 	uint32_t	tqm_ring7_num_entries;
39738 	/* Number of bytes that have been allocated for each context entry. */
39739 	uint16_t	tqm_entry_size;
39740 	uint8_t	unused_0[6];
39741 } __rte_packed;
39742 
39743 /* hwrm_ring_schq_alloc_output (size:128b/16B) */
39744 struct hwrm_ring_schq_alloc_output {
39745 	/* The specific error status for the command. */
39746 	uint16_t	error_code;
39747 	/* The HWRM command request type. */
39748 	uint16_t	req_type;
39749 	/* The sequence ID from the original command. */
39750 	uint16_t	seq_id;
39751 	/* The length of the response data in number of bytes. */
39752 	uint16_t	resp_len;
39753 	/*
39754 	 * This is an identifier for the SCHQ to be used in other HWRM commands
39755 	 * that need to reference this SCHQ. This value is greater than zero
39756 	 * (i.e. a schq_id of zero references the default SCHQ).
39757 	 */
39758 	uint16_t	schq_id;
39759 	uint8_t	unused_0[5];
39760 	/*
39761 	 * This field is used in Output records to indicate that the output
39762 	 * is completely written to RAM.  This field should be read as '1'
39763 	 * to indicate that the output has been completely written.
39764 	 * When writing a command completion or response to an internal processor,
39765 	 * the order of writes has to be such that this field is written last.
39766 	 */
39767 	uint8_t	valid;
39768 } __rte_packed;
39769 
39770 /**********************
39771  * hwrm_ring_schq_cfg *
39772  **********************/
39773 
39774 
39775 /* hwrm_ring_schq_cfg_input (size:768b/96B) */
39776 struct hwrm_ring_schq_cfg_input {
39777 	/* The HWRM command request type. */
39778 	uint16_t	req_type;
39779 	/*
39780 	 * The completion ring to send the completion event on. This should
39781 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
39782 	 */
39783 	uint16_t	cmpl_ring;
39784 	/*
39785 	 * The sequence ID is used by the driver for tracking multiple
39786 	 * commands. This ID is treated as opaque data by the firmware and
39787 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
39788 	 */
39789 	uint16_t	seq_id;
39790 	/*
39791 	 * The target ID of the command:
39792 	 * * 0x0-0xFFF8 - The function ID
39793 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39794 	 * * 0xFFFD - Reserved for user-space HWRM interface
39795 	 * * 0xFFFF - HWRM
39796 	 */
39797 	uint16_t	target_id;
39798 	/*
39799 	 * A physical address pointer pointing to a host buffer that the
39800 	 * command's response data will be written. This can be either a host
39801 	 * physical address (HPA) or a guest physical address (GPA) and must
39802 	 * point to a physically contiguous block of memory.
39803 	 */
39804 	uint64_t	resp_addr;
39805 	/*
39806 	 * Identifies the SCHQ being configured. A schq_id of zero refers to
39807 	 * the default SCHQ.
39808 	 */
39809 	uint16_t	schq_id;
39810 	/*
39811 	 * This field is an 8 bit bitmap that indicates which TCs are enabled
39812 	 * in this SCHQ. Bit 0 represents traffic class 0 and bit 7 represents
39813 	 * traffic class 7.
39814 	 */
39815 	uint8_t	tc_enabled;
39816 	uint8_t	unused_0;
39817 	uint32_t	flags;
39818 	/* The tc_max_bw array and the max_bw parameters are valid */
39819 	#define HWRM_RING_SCHQ_CFG_INPUT_FLAGS_TC_MAX_BW_ENABLED \
39820 		UINT32_C(0x1)
39821 	/* The tc_min_bw array is valid */
39822 	#define HWRM_RING_SCHQ_CFG_INPUT_FLAGS_TC_MIN_BW_ENABLED \
39823 		UINT32_C(0x2)
39824 	/* Maximum bandwidth of the traffic class, specified in Mbps. */
39825 	uint32_t	max_bw_tc0;
39826 	/* Maximum bandwidth of the traffic class, specified in Mbps. */
39827 	uint32_t	max_bw_tc1;
39828 	/* Maximum bandwidth of the traffic class, specified in Mbps. */
39829 	uint32_t	max_bw_tc2;
39830 	/* Maximum bandwidth of the traffic class, specified in Mbps. */
39831 	uint32_t	max_bw_tc3;
39832 	/* Maximum bandwidth of the traffic class, specified in Mbps. */
39833 	uint32_t	max_bw_tc4;
39834 	/* Maximum bandwidth of the traffic class, specified in Mbps. */
39835 	uint32_t	max_bw_tc5;
39836 	/* Maximum bandwidth of the traffic class, specified in Mbps. */
39837 	uint32_t	max_bw_tc6;
39838 	/* Maximum bandwidth of the traffic class, specified in Mbps. */
39839 	uint32_t	max_bw_tc7;
39840 	/*
39841 	 * Bandwidth reservation for the traffic class, specified in Mbps.
39842 	 * A value of zero signifies that traffic belonging to this class
39843 	 * shares the bandwidth reservation for the same traffic class of
39844 	 * the default SCHQ.
39845 	 */
39846 	uint32_t	min_bw_tc0;
39847 	/*
39848 	 * Bandwidth reservation for the traffic class, specified in Mbps.
39849 	 * A value of zero signifies that traffic belonging to this class
39850 	 * shares the bandwidth reservation for the same traffic class of
39851 	 * the default SCHQ.
39852 	 */
39853 	uint32_t	min_bw_tc1;
39854 	/*
39855 	 * Bandwidth reservation for the traffic class, specified in Mbps.
39856 	 * A value of zero signifies that traffic belonging to this class
39857 	 * shares the bandwidth reservation for the same traffic class of
39858 	 * the default SCHQ.
39859 	 */
39860 	uint32_t	min_bw_tc2;
39861 	/*
39862 	 * Bandwidth reservation for the traffic class, specified in Mbps.
39863 	 * A value of zero signifies that traffic belonging to this class
39864 	 * shares the bandwidth reservation for the same traffic class of
39865 	 * the default SCHQ.
39866 	 */
39867 	uint32_t	min_bw_tc3;
39868 	/*
39869 	 * Bandwidth reservation for the traffic class, specified in Mbps.
39870 	 * A value of zero signifies that traffic belonging to this class
39871 	 * shares the bandwidth reservation for the same traffic class of
39872 	 * the default SCHQ.
39873 	 */
39874 	uint32_t	min_bw_tc4;
39875 	/*
39876 	 * Bandwidth reservation for the traffic class, specified in Mbps.
39877 	 * A value of zero signifies that traffic belonging to this class
39878 	 * shares the bandwidth reservation for the same traffic class of
39879 	 * the default SCHQ.
39880 	 */
39881 	uint32_t	min_bw_tc5;
39882 	/*
39883 	 * Bandwidth reservation for the traffic class, specified in Mbps.
39884 	 * A value of zero signifies that traffic belonging to this class
39885 	 * shares the bandwidth reservation for the same traffic class of
39886 	 * the default SCHQ.
39887 	 */
39888 	uint32_t	min_bw_tc6;
39889 	/*
39890 	 * Bandwidth reservation for the traffic class, specified in Mbps.
39891 	 * A value of zero signifies that traffic belonging to this class
39892 	 * shares the bandwidth reservation for the same traffic class of
39893 	 * the default SCHQ.
39894 	 */
39895 	uint32_t	min_bw_tc7;
39896 	/*
39897 	 * Indicates the max bandwidth for all enabled traffic classes in
39898 	 * this SCHQ, specified in Mbps.
39899 	 */
39900 	uint32_t	max_bw;
39901 	uint8_t	unused_1[4];
39902 } __rte_packed;
39903 
39904 /* hwrm_ring_schq_cfg_output (size:128b/16B) */
39905 struct hwrm_ring_schq_cfg_output {
39906 	/* The specific error status for the command. */
39907 	uint16_t	error_code;
39908 	/* The HWRM command request type. */
39909 	uint16_t	req_type;
39910 	/* The sequence ID from the original command. */
39911 	uint16_t	seq_id;
39912 	/* The length of the response data in number of bytes. */
39913 	uint16_t	resp_len;
39914 	uint8_t	unused_0[7];
39915 	/*
39916 	 * This field is used in Output records to indicate that the output
39917 	 * is completely written to RAM.  This field should be read as '1'
39918 	 * to indicate that the output has been completely written.
39919 	 * When writing a command completion or response to an internal processor,
39920 	 * the order of writes has to be such that this field is written last.
39921 	 */
39922 	uint8_t	valid;
39923 } __rte_packed;
39924 
39925 /***********************
39926  * hwrm_ring_schq_free *
39927  ***********************/
39928 
39929 
39930 /* hwrm_ring_schq_free_input (size:192b/24B) */
39931 struct hwrm_ring_schq_free_input {
39932 	/* The HWRM command request type. */
39933 	uint16_t	req_type;
39934 	/*
39935 	 * The completion ring to send the completion event on. This should
39936 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
39937 	 */
39938 	uint16_t	cmpl_ring;
39939 	/*
39940 	 * The sequence ID is used by the driver for tracking multiple
39941 	 * commands. This ID is treated as opaque data by the firmware and
39942 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
39943 	 */
39944 	uint16_t	seq_id;
39945 	/*
39946 	 * The target ID of the command:
39947 	 * * 0x0-0xFFF8 - The function ID
39948 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39949 	 * * 0xFFFD - Reserved for user-space HWRM interface
39950 	 * * 0xFFFF - HWRM
39951 	 */
39952 	uint16_t	target_id;
39953 	/*
39954 	 * A physical address pointer pointing to a host buffer that the
39955 	 * command's response data will be written. This can be either a host
39956 	 * physical address (HPA) or a guest physical address (GPA) and must
39957 	 * point to a physically contiguous block of memory.
39958 	 */
39959 	uint64_t	resp_addr;
39960 	/* Identifies the SCHQ being freed. */
39961 	uint16_t	schq_id;
39962 	uint8_t	unused_0[6];
39963 } __rte_packed;
39964 
39965 /* hwrm_ring_schq_free_output (size:128b/16B) */
39966 struct hwrm_ring_schq_free_output {
39967 	/* The specific error status for the command. */
39968 	uint16_t	error_code;
39969 	/* The HWRM command request type. */
39970 	uint16_t	req_type;
39971 	/* The sequence ID from the original command. */
39972 	uint16_t	seq_id;
39973 	/* The length of the response data in number of bytes. */
39974 	uint16_t	resp_len;
39975 	uint8_t	unused_0[7];
39976 	/*
39977 	 * This field is used in Output records to indicate that the output
39978 	 * is completely written to RAM.  This field should be read as '1'
39979 	 * to indicate that the output has been completely written.
39980 	 * When writing a command completion or response to an internal processor,
39981 	 * the order of writes has to be such that this field is written last.
39982 	 */
39983 	uint8_t	valid;
39984 } __rte_packed;
39985 /*
39986  * special reserved flow ID to identify per function default
39987  * flows for vSwitch offload
39988  */
39989 #define DEFAULT_FLOW_ID 0xFFFFFFFFUL
39990 /*
39991  * special reserved flow ID to identify per function RoCEv1
39992  * flows
39993  */
39994 #define ROCEV1_FLOW_ID 0xFFFFFFFEUL
39995 /*
39996  * special reserved flow ID to identify per function RoCEv2
39997  * flows
39998  */
39999 #define ROCEV2_FLOW_ID 0xFFFFFFFDUL
40000 /*
40001  * special reserved flow ID to identify per function RoCEv2
40002  * CNP flows
40003  */
40004 #define ROCEV2_CNP_FLOW_ID 0xFFFFFFFCUL
40005 
40006 /****************************
40007  * hwrm_cfa_l2_filter_alloc *
40008  ****************************/
40009 
40010 
40011 /* hwrm_cfa_l2_filter_alloc_input (size:768b/96B) */
40012 struct hwrm_cfa_l2_filter_alloc_input {
40013 	/* The HWRM command request type. */
40014 	uint16_t	req_type;
40015 	/*
40016 	 * The completion ring to send the completion event on. This should
40017 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
40018 	 */
40019 	uint16_t	cmpl_ring;
40020 	/*
40021 	 * The sequence ID is used by the driver for tracking multiple
40022 	 * commands. This ID is treated as opaque data by the firmware and
40023 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
40024 	 */
40025 	uint16_t	seq_id;
40026 	/*
40027 	 * The target ID of the command:
40028 	 * * 0x0-0xFFF8 - The function ID
40029 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40030 	 * * 0xFFFD - Reserved for user-space HWRM interface
40031 	 * * 0xFFFF - HWRM
40032 	 */
40033 	uint16_t	target_id;
40034 	/*
40035 	 * A physical address pointer pointing to a host buffer that the
40036 	 * command's response data will be written. This can be either a host
40037 	 * physical address (HPA) or a guest physical address (GPA) and must
40038 	 * point to a physically contiguous block of memory.
40039 	 */
40040 	uint64_t	resp_addr;
40041 	uint32_t	flags;
40042 	/*
40043 	 * Enumeration denoting the RX, TX type of the resource.
40044 	 * This enumeration is used for resources that are similar for both
40045 	 * TX and RX paths of the chip.
40046 	 */
40047 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH \
40048 		UINT32_C(0x1)
40049 	/* tx path */
40050 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_TX \
40051 		UINT32_C(0x0)
40052 	/* rx path */
40053 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX \
40054 		UINT32_C(0x1)
40055 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_LAST \
40056 		HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX
40057 	/*
40058 	 * Setting of this flag indicates the applicability to the loopback
40059 	 * path.
40060 	 */
40061 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK \
40062 		UINT32_C(0x2)
40063 	/*
40064 	 * Setting of this flag indicates drop action. If this flag is not
40065 	 * set, then it should be considered accept action.
40066 	 */
40067 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_DROP \
40068 		UINT32_C(0x4)
40069 	/*
40070 	 * If this flag is set, all t_l2_* fields are invalid
40071 	 * and they should not be specified.
40072 	 * If this flag is set, then l2_* fields refer to
40073 	 * fields of outermost L2 header.
40074 	 */
40075 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_OUTERMOST \
40076 		UINT32_C(0x8)
40077 	/*
40078 	 * Enumeration denoting NO_ROCE_L2 to support old drivers.
40079 	 * New driver L2 for only L2 traffic, ROCE for roce and l2 traffic
40080 	 */
40081 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_MASK \
40082 		UINT32_C(0x30)
40083 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_SFT       4
40084 	/* To support old drivers */
40085 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_NO_ROCE_L2 \
40086 		(UINT32_C(0x0) << 4)
40087 	/* Only L2 traffic */
40088 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_L2 \
40089 		(UINT32_C(0x1) << 4)
40090 	/* Roce & L2 traffic */
40091 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_ROCE \
40092 		(UINT32_C(0x2) << 4)
40093 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_LAST \
40094 		HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_ROCE
40095 	/*
40096 	 * Setting of this flag indicates that no XDP filter is created with
40097 	 * L2 filter.
40098 	 * 0 - legacy behavior, XDP filter is created with L2 filter
40099 	 * 1 - XDP filter won't be created with L2 filter
40100 	 */
40101 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_XDP_DISABLE \
40102 		UINT32_C(0x40)
40103 	/*
40104 	 * Setting this flag to 1 indicate the L2 fields in this command
40105 	 * pertain to source fields. Setting this flag to 0 indicate the
40106 	 * L2 fields in this command pertain to the destination fields
40107 	 * and this is the default/legacy behavior.
40108 	 */
40109 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_SOURCE_VALID \
40110 		UINT32_C(0x80)
40111 	uint32_t	enables;
40112 	/*
40113 	 * This bit must be '1' for the l2_addr field to be
40114 	 * configured.
40115 	 */
40116 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR \
40117 		UINT32_C(0x1)
40118 	/*
40119 	 * This bit must be '1' for the l2_addr_mask field to be
40120 	 * configured.
40121 	 */
40122 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR_MASK \
40123 		UINT32_C(0x2)
40124 	/*
40125 	 * This bit must be '1' for the l2_ovlan field to be
40126 	 * configured.
40127 	 */
40128 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_OVLAN \
40129 		UINT32_C(0x4)
40130 	/*
40131 	 * This bit must be '1' for the l2_ovlan_mask field to be
40132 	 * configured.
40133 	 */
40134 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_OVLAN_MASK \
40135 		UINT32_C(0x8)
40136 	/*
40137 	 * This bit must be '1' for the l2_ivlan field to be
40138 	 * configured.
40139 	 */
40140 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN \
40141 		UINT32_C(0x10)
40142 	/*
40143 	 * This bit must be '1' for the l2_ivlan_mask field to be
40144 	 * configured.
40145 	 */
40146 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN_MASK \
40147 		UINT32_C(0x20)
40148 	/*
40149 	 * This bit must be '1' for the t_l2_addr field to be
40150 	 * configured.
40151 	 */
40152 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_ADDR \
40153 		UINT32_C(0x40)
40154 	/*
40155 	 * This bit must be '1' for the t_l2_addr_mask field to be
40156 	 * configured.
40157 	 */
40158 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_ADDR_MASK \
40159 		UINT32_C(0x80)
40160 	/*
40161 	 * This bit must be '1' for the t_l2_ovlan field to be
40162 	 * configured.
40163 	 */
40164 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_OVLAN \
40165 		UINT32_C(0x100)
40166 	/*
40167 	 * This bit must be '1' for the t_l2_ovlan_mask field to be
40168 	 * configured.
40169 	 */
40170 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_OVLAN_MASK \
40171 		UINT32_C(0x200)
40172 	/*
40173 	 * This bit must be '1' for the t_l2_ivlan field to be
40174 	 * configured.
40175 	 */
40176 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_IVLAN \
40177 		UINT32_C(0x400)
40178 	/*
40179 	 * This bit must be '1' for the t_l2_ivlan_mask field to be
40180 	 * configured.
40181 	 */
40182 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_IVLAN_MASK \
40183 		UINT32_C(0x800)
40184 	/*
40185 	 * This bit must be '1' for the src_type field to be
40186 	 * configured.
40187 	 */
40188 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_SRC_TYPE \
40189 		UINT32_C(0x1000)
40190 	/*
40191 	 * This bit must be '1' for the src_id field to be
40192 	 * configured.
40193 	 */
40194 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_SRC_ID \
40195 		UINT32_C(0x2000)
40196 	/*
40197 	 * This bit must be '1' for the tunnel_type field to be
40198 	 * configured.
40199 	 */
40200 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
40201 		UINT32_C(0x4000)
40202 	/*
40203 	 * This bit must be '1' for the dst_id field to be
40204 	 * configured.
40205 	 */
40206 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_DST_ID \
40207 		UINT32_C(0x8000)
40208 	/*
40209 	 * This bit must be '1' for the mirror_vnic_id field to be
40210 	 * configured.
40211 	 */
40212 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
40213 		UINT32_C(0x10000)
40214 	/*
40215 	 * This bit must be '1' for the num_vlans field to be
40216 	 * configured.
40217 	 */
40218 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_NUM_VLANS \
40219 		UINT32_C(0x20000)
40220 	/*
40221 	 * This bit must be '1' for the t_num_vlans field to be
40222 	 * configured.
40223 	 */
40224 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_NUM_VLANS \
40225 		UINT32_C(0x40000)
40226 	/*
40227 	 * This value sets the match value for the L2 MAC address.
40228 	 * Destination MAC address for RX path.
40229 	 * Source MAC address for TX path.
40230 	 */
40231 	uint8_t	l2_addr[6];
40232 	/* This value sets the match value for the number of VLANs. */
40233 	uint8_t	num_vlans;
40234 	/*
40235 	 * This value sets the match value for the number of VLANs
40236 	 * in the tunnel headers.
40237 	 */
40238 	uint8_t	t_num_vlans;
40239 	/*
40240 	 * This value sets the mask value for the L2 address.
40241 	 * A value of 0 will mask the corresponding bit from
40242 	 * compare.
40243 	 */
40244 	uint8_t	l2_addr_mask[6];
40245 	/* This value sets VLAN ID value for outer VLAN. */
40246 	uint16_t	l2_ovlan;
40247 	/*
40248 	 * This value sets the mask value for the ovlan id.
40249 	 * A value of 0 will mask the corresponding bit from
40250 	 * compare.
40251 	 */
40252 	uint16_t	l2_ovlan_mask;
40253 	/* This value sets VLAN ID value for inner VLAN. */
40254 	uint16_t	l2_ivlan;
40255 	/*
40256 	 * This value sets the mask value for the ivlan id.
40257 	 * A value of 0 will mask the corresponding bit from
40258 	 * compare.
40259 	 */
40260 	uint16_t	l2_ivlan_mask;
40261 	uint8_t	unused_1[2];
40262 	/*
40263 	 * This value sets the match value for the tunnel
40264 	 * L2 MAC address.
40265 	 * Destination MAC address for RX path.
40266 	 * Source MAC address for TX path.
40267 	 */
40268 	uint8_t	t_l2_addr[6];
40269 	uint8_t	unused_2[2];
40270 	/*
40271 	 * This value sets the mask value for the tunnel L2
40272 	 * address.
40273 	 * A value of 0 will mask the corresponding bit from
40274 	 * compare.
40275 	 */
40276 	uint8_t	t_l2_addr_mask[6];
40277 	/* This value sets VLAN ID value for tunnel outer VLAN. */
40278 	uint16_t	t_l2_ovlan;
40279 	/*
40280 	 * This value sets the mask value for the tunnel ovlan id.
40281 	 * A value of 0 will mask the corresponding bit from
40282 	 * compare.
40283 	 */
40284 	uint16_t	t_l2_ovlan_mask;
40285 	/* This value sets VLAN ID value for tunnel inner VLAN. */
40286 	uint16_t	t_l2_ivlan;
40287 	/*
40288 	 * This value sets the mask value for the tunnel ivlan id.
40289 	 * A value of 0 will mask the corresponding bit from
40290 	 * compare.
40291 	 */
40292 	uint16_t	t_l2_ivlan_mask;
40293 	/* This value identifies the type of source of the packet. */
40294 	uint8_t	src_type;
40295 	/* Network port */
40296 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_NPORT UINT32_C(0x0)
40297 	/* Physical function */
40298 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_PF    UINT32_C(0x1)
40299 	/* Virtual function */
40300 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_VF    UINT32_C(0x2)
40301 	/* Virtual NIC of a function */
40302 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_VNIC  UINT32_C(0x3)
40303 	/* Embedded processor for CFA management */
40304 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_KONG  UINT32_C(0x4)
40305 	/* Embedded processor for OOB management */
40306 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_APE   UINT32_C(0x5)
40307 	/* Embedded processor for RoCE */
40308 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_BONO  UINT32_C(0x6)
40309 	/* Embedded processor for network proxy functions */
40310 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_TANG  UINT32_C(0x7)
40311 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_LAST \
40312 		HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_TANG
40313 	uint8_t	unused_3;
40314 	/*
40315 	 * This value is the id of the source.
40316 	 * For a network port, it represents port_id.
40317 	 * For a physical function, it represents fid.
40318 	 * For a virtual function, it represents vf_id.
40319 	 * For a vnic, it represents vnic_id.
40320 	 * For embedded processors, this id is not valid.
40321 	 *
40322 	 * Notes:
40323 	 * 1. The function ID is implied if it src_id is
40324 	 *    not provided for a src_type that is either
40325 	 */
40326 	uint32_t	src_id;
40327 	/* Tunnel Type. */
40328 	uint8_t	tunnel_type;
40329 	/* Non-tunnel */
40330 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
40331 		UINT32_C(0x0)
40332 	/* Virtual eXtensible Local Area Network (VXLAN) */
40333 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
40334 		UINT32_C(0x1)
40335 	/* Network Virtualization Generic Routing Encapsulation (NVGRE) */
40336 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
40337 		UINT32_C(0x2)
40338 	/* Generic Routing Encapsulation (GRE) inside Ethernet payload */
40339 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
40340 		UINT32_C(0x3)
40341 	/* IP in IP */
40342 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
40343 		UINT32_C(0x4)
40344 	/* Generic Network Virtualization Encapsulation (Geneve) */
40345 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
40346 		UINT32_C(0x5)
40347 	/* Multi-Protocol Label Switching (MPLS) */
40348 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
40349 		UINT32_C(0x6)
40350 	/* Stateless Transport Tunnel (STT) */
40351 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \
40352 		UINT32_C(0x7)
40353 	/* Generic Routing Encapsulation (GRE) inside IP datagram payload */
40354 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
40355 		UINT32_C(0x8)
40356 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
40357 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
40358 		UINT32_C(0x9)
40359 	/*
40360 	 * Enhance Generic Routing Encapsulation (GRE version 1) inside IP
40361 	 * datagram payload
40362 	 */
40363 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
40364 		UINT32_C(0xa)
40365 	/* Use fixed layer 2 ether type of 0xFFFF */
40366 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
40367 		UINT32_C(0xb)
40368 	/*
40369 	 * IPV6 over virtual eXtensible Local Area Network with GPE header
40370 	 * (IPV6oVXLANGPE)
40371 	 */
40372 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
40373 		UINT32_C(0xc)
40374 	/* Any tunneled traffic */
40375 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
40376 		UINT32_C(0xff)
40377 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \
40378 		HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
40379 	uint8_t	unused_4;
40380 	/*
40381 	 * If set, this value shall represent the
40382 	 * Logical VNIC ID of the destination VNIC for the RX
40383 	 * path and network port id of the destination port for
40384 	 * the TX path.
40385 	 */
40386 	uint16_t	dst_id;
40387 	/*
40388 	 * Logical VNIC ID of the VNIC where traffic is
40389 	 * mirrored.
40390 	 */
40391 	uint16_t	mirror_vnic_id;
40392 	/*
40393 	 * This hint is provided to help in placing
40394 	 * the filter in the filter table.
40395 	 */
40396 	uint8_t	pri_hint;
40397 	/* No preference */
40398 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_NO_PREFER \
40399 		UINT32_C(0x0)
40400 	/* Above the given filter */
40401 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_ABOVE_FILTER \
40402 		UINT32_C(0x1)
40403 	/* Below the given filter */
40404 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_BELOW_FILTER \
40405 		UINT32_C(0x2)
40406 	/* As high as possible */
40407 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MAX \
40408 		UINT32_C(0x3)
40409 	/* As low as possible */
40410 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MIN \
40411 		UINT32_C(0x4)
40412 	#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_LAST \
40413 		HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MIN
40414 	uint8_t	unused_5;
40415 	uint32_t	unused_6;
40416 	/*
40417 	 * This is the ID of the filter that goes along with
40418 	 * the pri_hint.
40419 	 *
40420 	 * This field is valid only for the following values.
40421 	 * 1 - Above the given filter
40422 	 * 2 - Below the given filter
40423 	 */
40424 	uint64_t	l2_filter_id_hint;
40425 } __rte_packed;
40426 
40427 /* hwrm_cfa_l2_filter_alloc_output (size:192b/24B) */
40428 struct hwrm_cfa_l2_filter_alloc_output {
40429 	/* The specific error status for the command. */
40430 	uint16_t	error_code;
40431 	/* The HWRM command request type. */
40432 	uint16_t	req_type;
40433 	/* The sequence ID from the original command. */
40434 	uint16_t	seq_id;
40435 	/* The length of the response data in number of bytes. */
40436 	uint16_t	resp_len;
40437 	/*
40438 	 * This value identifies a set of CFA data structures used for an L2
40439 	 * context.
40440 	 */
40441 	uint64_t	l2_filter_id;
40442 	/*
40443 	 * The flow id value in bit 0-29 is the actual ID of the flow
40444 	 * associated with this filter and it shall be used to match
40445 	 * and associate the flow identifier returned in completion
40446 	 * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
40447 	 * shall indicate no valid flow id.
40448 	 */
40449 	uint32_t	flow_id;
40450 	/* Indicate the flow id value. */
40451 	#define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
40452 		UINT32_C(0x3fffffff)
40453 	#define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
40454 	/* Indicate type of the flow. */
40455 	#define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE \
40456 		UINT32_C(0x40000000)
40457 	/*
40458 	 * If this bit set to 0, then it indicates that the flow is
40459 	 * internal flow.
40460 	 */
40461 	#define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
40462 		(UINT32_C(0x0) << 30)
40463 	/*
40464 	 * If this bit is set to 1, then it indicates that the flow is
40465 	 * external flow.
40466 	 */
40467 	#define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
40468 		(UINT32_C(0x1) << 30)
40469 	#define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
40470 		HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
40471 	/* Indicate the flow direction. */
40472 	#define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR \
40473 		UINT32_C(0x80000000)
40474 	/* If this bit set to 0, then it indicates rx flow. */
40475 	#define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
40476 		(UINT32_C(0x0) << 31)
40477 	/* If this bit is set to 1, then it indicates that tx flow. */
40478 	#define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
40479 		(UINT32_C(0x1) << 31)
40480 	#define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
40481 		HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX
40482 	uint8_t	unused_0[3];
40483 	/*
40484 	 * This field is used in Output records to indicate that the output
40485 	 * is completely written to RAM. This field should be read as '1'
40486 	 * to indicate that the output has been completely written.
40487 	 * When writing a command completion or response to an internal
40488 	 * processor, the order of writes has to be such that this field is
40489 	 * written last.
40490 	 */
40491 	uint8_t	valid;
40492 } __rte_packed;
40493 
40494 /***************************
40495  * hwrm_cfa_l2_filter_free *
40496  ***************************/
40497 
40498 
40499 /* hwrm_cfa_l2_filter_free_input (size:192b/24B) */
40500 struct hwrm_cfa_l2_filter_free_input {
40501 	/* The HWRM command request type. */
40502 	uint16_t	req_type;
40503 	/*
40504 	 * The completion ring to send the completion event on. This should
40505 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
40506 	 */
40507 	uint16_t	cmpl_ring;
40508 	/*
40509 	 * The sequence ID is used by the driver for tracking multiple
40510 	 * commands. This ID is treated as opaque data by the firmware and
40511 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
40512 	 */
40513 	uint16_t	seq_id;
40514 	/*
40515 	 * The target ID of the command:
40516 	 * * 0x0-0xFFF8 - The function ID
40517 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40518 	 * * 0xFFFD - Reserved for user-space HWRM interface
40519 	 * * 0xFFFF - HWRM
40520 	 */
40521 	uint16_t	target_id;
40522 	/*
40523 	 * A physical address pointer pointing to a host buffer that the
40524 	 * command's response data will be written. This can be either a host
40525 	 * physical address (HPA) or a guest physical address (GPA) and must
40526 	 * point to a physically contiguous block of memory.
40527 	 */
40528 	uint64_t	resp_addr;
40529 	/*
40530 	 * This value identifies a set of CFA data structures used for an L2
40531 	 * context.
40532 	 */
40533 	uint64_t	l2_filter_id;
40534 } __rte_packed;
40535 
40536 /* hwrm_cfa_l2_filter_free_output (size:128b/16B) */
40537 struct hwrm_cfa_l2_filter_free_output {
40538 	/* The specific error status for the command. */
40539 	uint16_t	error_code;
40540 	/* The HWRM command request type. */
40541 	uint16_t	req_type;
40542 	/* The sequence ID from the original command. */
40543 	uint16_t	seq_id;
40544 	/* The length of the response data in number of bytes. */
40545 	uint16_t	resp_len;
40546 	uint8_t	unused_0[7];
40547 	/*
40548 	 * This field is used in Output records to indicate that the output
40549 	 * is completely written to RAM. This field should be read as '1'
40550 	 * to indicate that the output has been completely written.
40551 	 * When writing a command completion or response to an internal
40552 	 * processor, the order of writes has to be such that this field is
40553 	 * written last.
40554 	 */
40555 	uint8_t	valid;
40556 } __rte_packed;
40557 
40558 /**************************
40559  * hwrm_cfa_l2_filter_cfg *
40560  **************************/
40561 
40562 
40563 /* hwrm_cfa_l2_filter_cfg_input (size:320b/40B) */
40564 struct hwrm_cfa_l2_filter_cfg_input {
40565 	/* The HWRM command request type. */
40566 	uint16_t	req_type;
40567 	/*
40568 	 * The completion ring to send the completion event on. This should
40569 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
40570 	 */
40571 	uint16_t	cmpl_ring;
40572 	/*
40573 	 * The sequence ID is used by the driver for tracking multiple
40574 	 * commands. This ID is treated as opaque data by the firmware and
40575 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
40576 	 */
40577 	uint16_t	seq_id;
40578 	/*
40579 	 * The target ID of the command:
40580 	 * * 0x0-0xFFF8 - The function ID
40581 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40582 	 * * 0xFFFD - Reserved for user-space HWRM interface
40583 	 * * 0xFFFF - HWRM
40584 	 */
40585 	uint16_t	target_id;
40586 	/*
40587 	 * A physical address pointer pointing to a host buffer that the
40588 	 * command's response data will be written. This can be either a host
40589 	 * physical address (HPA) or a guest physical address (GPA) and must
40590 	 * point to a physically contiguous block of memory.
40591 	 */
40592 	uint64_t	resp_addr;
40593 	uint32_t	flags;
40594 	/*
40595 	 * Enumeration denoting the RX, TX type of the resource.
40596 	 * This enumeration is used for resources that are similar for both
40597 	 * TX and RX paths of the chip.
40598 	 */
40599 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH \
40600 		UINT32_C(0x1)
40601 	/* tx path */
40602 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_TX \
40603 		UINT32_C(0x0)
40604 	/* rx path */
40605 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_RX \
40606 		UINT32_C(0x1)
40607 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_LAST \
40608 		HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_RX
40609 	/*
40610 	 * Setting of this flag indicates drop action. If this flag is not
40611 	 * set, then it should be considered accept action.
40612 	 */
40613 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_DROP \
40614 		UINT32_C(0x2)
40615 	/*
40616 	 * Enumeration denoting NO_ROCE_L2 to support old drivers.
40617 	 * New driver L2 for only L2 traffic, ROCE for roce and l2 traffic
40618 	 */
40619 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_MASK \
40620 		UINT32_C(0xc)
40621 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_SFT       2
40622 	/* To support old drivers */
40623 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_NO_ROCE_L2 \
40624 		(UINT32_C(0x0) << 2)
40625 	/* Only L2 traffic */
40626 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_L2 \
40627 		(UINT32_C(0x1) << 2)
40628 	/* Roce & L2 traffic */
40629 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_ROCE \
40630 		(UINT32_C(0x2) << 2)
40631 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_LAST \
40632 		HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_ROCE
40633 	uint32_t	enables;
40634 	/*
40635 	 * This bit must be '1' for the dst_id field to be
40636 	 * configured.
40637 	 */
40638 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_ENABLES_DST_ID \
40639 		UINT32_C(0x1)
40640 	/*
40641 	 * This bit must be '1' for the new_mirror_vnic_id field to be
40642 	 * configured.
40643 	 */
40644 	#define HWRM_CFA_L2_FILTER_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID \
40645 		UINT32_C(0x2)
40646 	/*
40647 	 * This value identifies a set of CFA data structures used for an L2
40648 	 * context.
40649 	 */
40650 	uint64_t	l2_filter_id;
40651 	/*
40652 	 * If set, this value shall represent the
40653 	 * Logical VNIC ID of the destination VNIC for the RX
40654 	 * path and network port id of the destination port for
40655 	 * the TX path.
40656 	 */
40657 	uint32_t	dst_id;
40658 	/*
40659 	 * New Logical VNIC ID of the VNIC where traffic is
40660 	 * mirrored.
40661 	 */
40662 	uint32_t	new_mirror_vnic_id;
40663 } __rte_packed;
40664 
40665 /* hwrm_cfa_l2_filter_cfg_output (size:128b/16B) */
40666 struct hwrm_cfa_l2_filter_cfg_output {
40667 	/* The specific error status for the command. */
40668 	uint16_t	error_code;
40669 	/* The HWRM command request type. */
40670 	uint16_t	req_type;
40671 	/* The sequence ID from the original command. */
40672 	uint16_t	seq_id;
40673 	/* The length of the response data in number of bytes. */
40674 	uint16_t	resp_len;
40675 	uint8_t	unused_0[7];
40676 	/*
40677 	 * This field is used in Output records to indicate that the output
40678 	 * is completely written to RAM. This field should be read as '1'
40679 	 * to indicate that the output has been completely written.
40680 	 * When writing a command completion or response to an internal
40681 	 * processor, the order of writes has to be such that this field is
40682 	 * written last.
40683 	 */
40684 	uint8_t	valid;
40685 } __rte_packed;
40686 
40687 /***************************
40688  * hwrm_cfa_l2_set_rx_mask *
40689  ***************************/
40690 
40691 
40692 /* hwrm_cfa_l2_set_rx_mask_input (size:448b/56B) */
40693 struct hwrm_cfa_l2_set_rx_mask_input {
40694 	/* The HWRM command request type. */
40695 	uint16_t	req_type;
40696 	/*
40697 	 * The completion ring to send the completion event on. This should
40698 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
40699 	 */
40700 	uint16_t	cmpl_ring;
40701 	/*
40702 	 * The sequence ID is used by the driver for tracking multiple
40703 	 * commands. This ID is treated as opaque data by the firmware and
40704 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
40705 	 */
40706 	uint16_t	seq_id;
40707 	/*
40708 	 * The target ID of the command:
40709 	 * * 0x0-0xFFF8 - The function ID
40710 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40711 	 * * 0xFFFD - Reserved for user-space HWRM interface
40712 	 * * 0xFFFF - HWRM
40713 	 */
40714 	uint16_t	target_id;
40715 	/*
40716 	 * A physical address pointer pointing to a host buffer that the
40717 	 * command's response data will be written. This can be either a host
40718 	 * physical address (HPA) or a guest physical address (GPA) and must
40719 	 * point to a physically contiguous block of memory.
40720 	 */
40721 	uint64_t	resp_addr;
40722 	/* VNIC ID */
40723 	uint32_t	vnic_id;
40724 	uint32_t	mask;
40725 	/*
40726 	 * When this bit is '1', the function is requested to accept
40727 	 * multi-cast packets specified by the multicast addr table.
40728 	 */
40729 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_MCAST \
40730 		UINT32_C(0x2)
40731 	/*
40732 	 * When this bit is '1', the function is requested to accept
40733 	 * all multi-cast packets.
40734 	 */
40735 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ALL_MCAST \
40736 		UINT32_C(0x4)
40737 	/*
40738 	 * When this bit is '1', the function is requested to accept
40739 	 * broadcast packets.
40740 	 */
40741 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_BCAST \
40742 		UINT32_C(0x8)
40743 	/*
40744 	 * When this bit is '1', the function is requested to be
40745 	 * put in the promiscuous mode.
40746 	 *
40747 	 * The HWRM should accept any function to set up
40748 	 * promiscuous mode.
40749 	 *
40750 	 * The HWRM shall follow the semantics below for the
40751 	 * promiscuous mode support.
40752 	 * # When partitioning is not enabled on a port
40753 	 * (i.e. single PF on the port), then the PF shall
40754 	 * be allowed to be in the promiscuous mode. When the
40755 	 * PF is in the promiscuous mode, then it shall
40756 	 * receive all host bound traffic on that port.
40757 	 * # When partitioning is enabled on a port
40758 	 * (i.e. multiple PFs per port) and a PF on that
40759 	 * port is in the promiscuous mode, then the PF
40760 	 * receives all traffic within that partition as
40761 	 * identified by a unique identifier for the
40762 	 * PF (e.g. S-Tag). If a unique outer VLAN
40763 	 * for the PF is specified, then the setting of
40764 	 * promiscuous mode on that PF shall result in the
40765 	 * PF receiving all host bound traffic with matching
40766 	 * outer VLAN.
40767 	 * # A VF shall can be set in the promiscuous mode.
40768 	 * In the promiscuous mode, the VF does not receive any
40769 	 * traffic unless a unique outer VLAN for the
40770 	 * VF is specified. If a unique outer VLAN
40771 	 * for the VF is specified, then the setting of
40772 	 * promiscuous mode on that VF shall result in the
40773 	 * VF receiving all host bound traffic with the
40774 	 * matching outer VLAN.
40775 	 * # The HWRM shall allow the setting of promiscuous
40776 	 * mode on a function independently from the
40777 	 * promiscuous mode settings on other functions.
40778 	 */
40779 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_PROMISCUOUS \
40780 		UINT32_C(0x10)
40781 	/*
40782 	 * If this flag is set, the corresponding RX
40783 	 * filters shall be set up to cover multicast/broadcast
40784 	 * filters for the outermost Layer 2 destination MAC
40785 	 * address field.
40786 	 */
40787 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_OUTERMOST \
40788 		UINT32_C(0x20)
40789 	/*
40790 	 * If this flag is set, the corresponding RX
40791 	 * filters shall be set up to cover multicast/broadcast
40792 	 * filters for the VLAN-tagged packets that match the
40793 	 * TPID and VID fields of VLAN tags in the VLAN tag
40794 	 * table specified in this command.
40795 	 */
40796 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_VLANONLY \
40797 		UINT32_C(0x40)
40798 	/*
40799 	 * If this flag is set, the corresponding RX
40800 	 * filters shall be set up to cover multicast/broadcast
40801 	 * filters for non-VLAN tagged packets and VLAN-tagged
40802 	 * packets that match the TPID and VID fields of VLAN
40803 	 * tags in the VLAN tag table specified in this command.
40804 	 */
40805 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_VLAN_NONVLAN \
40806 		UINT32_C(0x80)
40807 	/*
40808 	 * If this flag is set, the corresponding RX
40809 	 * filters shall be set up to cover multicast/broadcast
40810 	 * filters for non-VLAN tagged packets and VLAN-tagged
40811 	 * packets matching any VLAN tag.
40812 	 *
40813 	 * If this flag is set, then the HWRM shall ignore
40814 	 * VLAN tags specified in vlan_tag_tbl.
40815 	 *
40816 	 * If none of vlanonly, vlan_nonvlan, and anyvlan_nonvlan
40817 	 * flags is set, then the HWRM shall ignore
40818 	 * VLAN tags specified in vlan_tag_tbl.
40819 	 *
40820 	 * The HWRM client shall set at most one flag out of
40821 	 * vlanonly, vlan_nonvlan, and anyvlan_nonvlan.
40822 	 */
40823 	#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ANYVLAN_NONVLAN \
40824 		UINT32_C(0x100)
40825 	/* This is the address for mcast address tbl. */
40826 	uint64_t	mc_tbl_addr;
40827 	/*
40828 	 * This value indicates how many entries in mc_tbl are valid.
40829 	 * Each entry is 6 bytes.
40830 	 */
40831 	uint32_t	num_mc_entries;
40832 	uint8_t	unused_0[4];
40833 	/*
40834 	 * This is the address for VLAN tag table.
40835 	 * Each VLAN entry in the table is 4 bytes of a VLAN tag
40836 	 * including TPID, PCP, DEI, and VID fields in network byte
40837 	 * order.
40838 	 */
40839 	uint64_t	vlan_tag_tbl_addr;
40840 	/*
40841 	 * This value indicates how many entries in vlan_tag_tbl are
40842 	 * valid. Each entry is 4 bytes.
40843 	 */
40844 	uint32_t	num_vlan_tags;
40845 	uint8_t	unused_1[4];
40846 } __rte_packed;
40847 
40848 /* hwrm_cfa_l2_set_rx_mask_output (size:128b/16B) */
40849 struct hwrm_cfa_l2_set_rx_mask_output {
40850 	/* The specific error status for the command. */
40851 	uint16_t	error_code;
40852 	/* The HWRM command request type. */
40853 	uint16_t	req_type;
40854 	/* The sequence ID from the original command. */
40855 	uint16_t	seq_id;
40856 	/* The length of the response data in number of bytes. */
40857 	uint16_t	resp_len;
40858 	uint8_t	unused_0[7];
40859 	/*
40860 	 * This field is used in Output records to indicate that the output
40861 	 * is completely written to RAM. This field should be read as '1'
40862 	 * to indicate that the output has been completely written.
40863 	 * When writing a command completion or response to an internal
40864 	 * processor, the order of writes has to be such that this field is
40865 	 * written last.
40866 	 */
40867 	uint8_t	valid;
40868 } __rte_packed;
40869 
40870 /* hwrm_cfa_l2_set_rx_mask_cmd_err (size:64b/8B) */
40871 struct hwrm_cfa_l2_set_rx_mask_cmd_err {
40872 	/*
40873 	 * command specific error codes that goes to
40874 	 * the cmd_err field in Common HWRM Error Response.
40875 	 */
40876 	uint8_t	code;
40877 	/* Unknown error */
40878 	#define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_UNKNOWN \
40879 		UINT32_C(0x0)
40880 	/* Unable to complete operation due to conflict with Ntuple Filter */
40881 	#define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_NTUPLE_FILTER_CONFLICT_ERR \
40882 		UINT32_C(0x1)
40883 	#define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_LAST \
40884 		HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_NTUPLE_FILTER_CONFLICT_ERR
40885 	uint8_t	unused_0[7];
40886 } __rte_packed;
40887 
40888 /*******************************
40889  * hwrm_cfa_vlan_antispoof_cfg *
40890  *******************************/
40891 
40892 
40893 /* hwrm_cfa_vlan_antispoof_cfg_input (size:256b/32B) */
40894 struct hwrm_cfa_vlan_antispoof_cfg_input {
40895 	/* The HWRM command request type. */
40896 	uint16_t	req_type;
40897 	/*
40898 	 * The completion ring to send the completion event on. This should
40899 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
40900 	 */
40901 	uint16_t	cmpl_ring;
40902 	/*
40903 	 * The sequence ID is used by the driver for tracking multiple
40904 	 * commands. This ID is treated as opaque data by the firmware and
40905 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
40906 	 */
40907 	uint16_t	seq_id;
40908 	/*
40909 	 * The target ID of the command:
40910 	 * * 0x0-0xFFF8 - The function ID
40911 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40912 	 * * 0xFFFD - Reserved for user-space HWRM interface
40913 	 * * 0xFFFF - HWRM
40914 	 */
40915 	uint16_t	target_id;
40916 	/*
40917 	 * A physical address pointer pointing to a host buffer that the
40918 	 * command's response data will be written. This can be either a host
40919 	 * physical address (HPA) or a guest physical address (GPA) and must
40920 	 * point to a physically contiguous block of memory.
40921 	 */
40922 	uint64_t	resp_addr;
40923 	/*
40924 	 * Function ID of the function that is being configured.
40925 	 * Only valid for a VF FID configured by the PF.
40926 	 */
40927 	uint16_t	fid;
40928 	uint8_t	unused_0[2];
40929 	/* Number of VLAN entries in the vlan_tag_mask_tbl. */
40930 	uint32_t	num_vlan_entries;
40931 	/*
40932 	 * The vlan_tag_mask_tbl_addr is the DMA address of the VLAN
40933 	 * antispoof table. Each table entry contains the 16-bit TPID
40934 	 * (0x8100 or 0x88a8 only), 16-bit VLAN ID, and a 16-bit mask,
40935 	 * all in network order to match hwrm_cfa_l2_set_rx_mask.
40936 	 * For an individual VLAN entry, the mask value should be 0xfff
40937 	 * for the 12-bit VLAN ID.
40938 	 */
40939 	uint64_t	vlan_tag_mask_tbl_addr;
40940 } __rte_packed;
40941 
40942 /* hwrm_cfa_vlan_antispoof_cfg_output (size:128b/16B) */
40943 struct hwrm_cfa_vlan_antispoof_cfg_output {
40944 	/* The specific error status for the command. */
40945 	uint16_t	error_code;
40946 	/* The HWRM command request type. */
40947 	uint16_t	req_type;
40948 	/* The sequence ID from the original command. */
40949 	uint16_t	seq_id;
40950 	/* The length of the response data in number of bytes. */
40951 	uint16_t	resp_len;
40952 	uint8_t	unused_0[7];
40953 	/*
40954 	 * This field is used in Output records to indicate that the output
40955 	 * is completely written to RAM. This field should be read as '1'
40956 	 * to indicate that the output has been completely written.
40957 	 * When writing a command completion or response to an internal
40958 	 * processor, the order of writes has to be such that this field is
40959 	 * written last.
40960 	 */
40961 	uint8_t	valid;
40962 } __rte_packed;
40963 
40964 /********************************
40965  * hwrm_cfa_vlan_antispoof_qcfg *
40966  ********************************/
40967 
40968 
40969 /* hwrm_cfa_vlan_antispoof_qcfg_input (size:256b/32B) */
40970 struct hwrm_cfa_vlan_antispoof_qcfg_input {
40971 	/* The HWRM command request type. */
40972 	uint16_t	req_type;
40973 	/*
40974 	 * The completion ring to send the completion event on. This should
40975 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
40976 	 */
40977 	uint16_t	cmpl_ring;
40978 	/*
40979 	 * The sequence ID is used by the driver for tracking multiple
40980 	 * commands. This ID is treated as opaque data by the firmware and
40981 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
40982 	 */
40983 	uint16_t	seq_id;
40984 	/*
40985 	 * The target ID of the command:
40986 	 * * 0x0-0xFFF8 - The function ID
40987 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40988 	 * * 0xFFFD - Reserved for user-space HWRM interface
40989 	 * * 0xFFFF - HWRM
40990 	 */
40991 	uint16_t	target_id;
40992 	/*
40993 	 * A physical address pointer pointing to a host buffer that the
40994 	 * command's response data will be written. This can be either a host
40995 	 * physical address (HPA) or a guest physical address (GPA) and must
40996 	 * point to a physically contiguous block of memory.
40997 	 */
40998 	uint64_t	resp_addr;
40999 	/*
41000 	 * Function ID of the function that is being queried.
41001 	 * Only valid for a VF FID queried by the PF.
41002 	 */
41003 	uint16_t	fid;
41004 	uint8_t	unused_0[2];
41005 	/*
41006 	 * Maximum number of VLAN entries the firmware is allowed to DMA
41007 	 * to vlan_tag_mask_tbl.
41008 	 */
41009 	uint32_t	max_vlan_entries;
41010 	/*
41011 	 * The vlan_tag_mask_tbl_addr is the DMA address of the VLAN
41012 	 * antispoof table to which firmware will DMA to. Each table
41013 	 * entry will contain the 16-bit TPID (0x8100 or 0x88a8 only),
41014 	 * 16-bit VLAN ID, and a 16-bit mask, all in network order to
41015 	 * match hwrm_cfa_l2_set_rx_mask. For an individual VLAN entry,
41016 	 * the mask value should be 0xfff for the 12-bit VLAN ID.
41017 	 */
41018 	uint64_t	vlan_tag_mask_tbl_addr;
41019 } __rte_packed;
41020 
41021 /* hwrm_cfa_vlan_antispoof_qcfg_output (size:128b/16B) */
41022 struct hwrm_cfa_vlan_antispoof_qcfg_output {
41023 	/* The specific error status for the command. */
41024 	uint16_t	error_code;
41025 	/* The HWRM command request type. */
41026 	uint16_t	req_type;
41027 	/* The sequence ID from the original command. */
41028 	uint16_t	seq_id;
41029 	/* The length of the response data in number of bytes. */
41030 	uint16_t	resp_len;
41031 	/* Number of valid entries DMAd by firmware to vlan_tag_mask_tbl. */
41032 	uint32_t	num_vlan_entries;
41033 	uint8_t	unused_0[3];
41034 	/*
41035 	 * This field is used in Output records to indicate that the output
41036 	 * is completely written to RAM. This field should be read as '1'
41037 	 * to indicate that the output has been completely written.
41038 	 * When writing a command completion or response to an internal
41039 	 * processor, the order of writes has to be such that this field is
41040 	 * written last.
41041 	 */
41042 	uint8_t	valid;
41043 } __rte_packed;
41044 
41045 /********************************
41046  * hwrm_cfa_tunnel_filter_alloc *
41047  ********************************/
41048 
41049 
41050 /* hwrm_cfa_tunnel_filter_alloc_input (size:704b/88B) */
41051 struct hwrm_cfa_tunnel_filter_alloc_input {
41052 	/* The HWRM command request type. */
41053 	uint16_t	req_type;
41054 	/*
41055 	 * The completion ring to send the completion event on. This should
41056 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
41057 	 */
41058 	uint16_t	cmpl_ring;
41059 	/*
41060 	 * The sequence ID is used by the driver for tracking multiple
41061 	 * commands. This ID is treated as opaque data by the firmware and
41062 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
41063 	 */
41064 	uint16_t	seq_id;
41065 	/*
41066 	 * The target ID of the command:
41067 	 * * 0x0-0xFFF8 - The function ID
41068 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
41069 	 * * 0xFFFD - Reserved for user-space HWRM interface
41070 	 * * 0xFFFF - HWRM
41071 	 */
41072 	uint16_t	target_id;
41073 	/*
41074 	 * A physical address pointer pointing to a host buffer that the
41075 	 * command's response data will be written. This can be either a host
41076 	 * physical address (HPA) or a guest physical address (GPA) and must
41077 	 * point to a physically contiguous block of memory.
41078 	 */
41079 	uint64_t	resp_addr;
41080 	uint32_t	flags;
41081 	/*
41082 	 * Setting of this flag indicates the applicability to the loopback
41083 	 * path.
41084 	 */
41085 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK \
41086 		UINT32_C(0x1)
41087 	uint32_t	enables;
41088 	/*
41089 	 * This bit must be '1' for the l2_filter_id field to be
41090 	 * configured.
41091 	 */
41092 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L2_FILTER_ID \
41093 		UINT32_C(0x1)
41094 	/*
41095 	 * This bit must be '1' for the l2_addr field to be
41096 	 * configured.
41097 	 */
41098 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR \
41099 		UINT32_C(0x2)
41100 	/*
41101 	 * This bit must be '1' for the l2_ivlan field to be
41102 	 * configured.
41103 	 */
41104 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN \
41105 		UINT32_C(0x4)
41106 	/*
41107 	 * This bit must be '1' for the l3_addr field to be
41108 	 * configured.
41109 	 */
41110 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L3_ADDR \
41111 		UINT32_C(0x8)
41112 	/*
41113 	 * This bit must be '1' for the l3_addr_type field to be
41114 	 * configured.
41115 	 */
41116 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L3_ADDR_TYPE \
41117 		UINT32_C(0x10)
41118 	/*
41119 	 * This bit must be '1' for the t_l3_addr_type field to be
41120 	 * configured.
41121 	 */
41122 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_T_L3_ADDR_TYPE \
41123 		UINT32_C(0x20)
41124 	/*
41125 	 * This bit must be '1' for the t_l3_addr field to be
41126 	 * configured.
41127 	 */
41128 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_T_L3_ADDR \
41129 		UINT32_C(0x40)
41130 	/*
41131 	 * This bit must be '1' for the tunnel_type field to be
41132 	 * configured.
41133 	 */
41134 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
41135 		UINT32_C(0x80)
41136 	/*
41137 	 * This bit must be '1' for the vni field to be
41138 	 * configured.
41139 	 */
41140 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_VNI \
41141 		UINT32_C(0x100)
41142 	/*
41143 	 * This bit must be '1' for the dst_vnic_id field to be
41144 	 * configured.
41145 	 */
41146 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_DST_VNIC_ID \
41147 		UINT32_C(0x200)
41148 	/*
41149 	 * This bit must be '1' for the mirror_vnic_id field to be
41150 	 * configured.
41151 	 */
41152 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
41153 		UINT32_C(0x400)
41154 	/*
41155 	 * This value identifies a set of CFA data structures used for an L2
41156 	 * context.
41157 	 */
41158 	uint64_t	l2_filter_id;
41159 	/*
41160 	 * This value sets the match value for the inner L2
41161 	 * MAC address.
41162 	 * Destination MAC address for RX path.
41163 	 * Source MAC address for TX path.
41164 	 */
41165 	uint8_t	l2_addr[6];
41166 	/*
41167 	 * This value sets VLAN ID value for inner VLAN.
41168 	 * Only 12-bits of VLAN ID are used in setting the filter.
41169 	 */
41170 	uint16_t	l2_ivlan;
41171 	/*
41172 	 * The value of inner destination IP address to be used in filtering.
41173 	 * For IPv4, first four bytes represent the IP address.
41174 	 */
41175 	uint32_t	l3_addr[4];
41176 	/*
41177 	 * The value of tunnel destination IP address to be used in filtering.
41178 	 * For IPv4, first four bytes represent the IP address.
41179 	 */
41180 	uint32_t	t_l3_addr[4];
41181 	/*
41182 	 * This value indicates the type of inner IP address.
41183 	 * 4 - IPv4
41184 	 * 6 - IPv6
41185 	 * All others are invalid.
41186 	 */
41187 	uint8_t	l3_addr_type;
41188 	/*
41189 	 * This value indicates the type of tunnel IP address.
41190 	 * 4 - IPv4
41191 	 * 6 - IPv6
41192 	 * All others are invalid.
41193 	 */
41194 	uint8_t	t_l3_addr_type;
41195 	/* Tunnel Type. */
41196 	uint8_t	tunnel_type;
41197 	/* Non-tunnel */
41198 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
41199 		UINT32_C(0x0)
41200 	/* Virtual eXtensible Local Area Network (VXLAN) */
41201 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
41202 		UINT32_C(0x1)
41203 	/* Network Virtualization Generic Routing Encapsulation (NVGRE) */
41204 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
41205 		UINT32_C(0x2)
41206 	/* Generic Routing Encapsulation (GRE) inside Ethernet payload */
41207 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
41208 		UINT32_C(0x3)
41209 	/* IP in IP */
41210 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
41211 		UINT32_C(0x4)
41212 	/* Generic Network Virtualization Encapsulation (Geneve) */
41213 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
41214 		UINT32_C(0x5)
41215 	/* Multi-Protocol Label Switching (MPLS) */
41216 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
41217 		UINT32_C(0x6)
41218 	/* Stateless Transport Tunnel (STT) */
41219 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \
41220 		UINT32_C(0x7)
41221 	/* Generic Routing Encapsulation (GRE) inside IP datagram payload */
41222 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
41223 		UINT32_C(0x8)
41224 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
41225 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
41226 		UINT32_C(0x9)
41227 	/*
41228 	 * Enhance Generic Routing Encapsulation (GRE version 1) inside IP
41229 	 * datagram payload
41230 	 */
41231 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
41232 		UINT32_C(0xa)
41233 	/* Use fixed layer 2 ether type of 0xFFFF */
41234 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
41235 		UINT32_C(0xb)
41236 	/*
41237 	 * IPV6 over virtual eXtensible Local Area Network with GPE header
41238 	 * (IPV6oVXLANGPE)
41239 	 */
41240 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
41241 		UINT32_C(0xc)
41242 	/* Any tunneled traffic */
41243 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
41244 		UINT32_C(0xff)
41245 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \
41246 		HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
41247 	/*
41248 	 * tunnel_flags allows the user to indicate the tunnel tag detection
41249 	 * for the tunnel type specified in tunnel_type.
41250 	 */
41251 	uint8_t	tunnel_flags;
41252 	/*
41253 	 * If the tunnel_type is geneve, then this bit indicates if we
41254 	 * need to match the geneve OAM packet.
41255 	 * If the tunnel_type is nvgre or gre, then this bit indicates if
41256 	 * we need to detect checksum present bit in geneve header.
41257 	 * If the tunnel_type is mpls, then this bit indicates if we need
41258 	 * to match mpls packet with explicit IPV4/IPV6 null header.
41259 	 */
41260 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_FLAGS_TUN_FLAGS_OAM_CHECKSUM_EXPLHDR \
41261 		UINT32_C(0x1)
41262 	/*
41263 	 * If the tunnel_type is geneve, then this bit indicates if we
41264 	 * need to detect the critical option bit set in the oam packet.
41265 	 * If the tunnel_type is nvgre or gre, then this bit indicates
41266 	 * if we need to match nvgre packets with key present bit set in
41267 	 * gre header.
41268 	 * If the tunnel_type is mpls, then this bit indicates if we
41269 	 * need to match mpls packet with S bit from inner/second label.
41270 	 */
41271 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_FLAGS_TUN_FLAGS_CRITICAL_OPT_S1 \
41272 		UINT32_C(0x2)
41273 	/*
41274 	 * If the tunnel_type is geneve, then this bit indicates if we
41275 	 * need to match geneve packet with extended header bit set in
41276 	 * geneve header.
41277 	 * If the tunnel_type is nvgre or gre, then this bit indicates
41278 	 * if we need to match nvgre packets with sequence number
41279 	 * present bit set in gre header.
41280 	 * If the tunnel_type is mpls, then this bit indicates if we
41281 	 * need to match mpls packet with S bit from out/first label.
41282 	 */
41283 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_FLAGS_TUN_FLAGS_EXTHDR_SEQNUM_S0 \
41284 		UINT32_C(0x4)
41285 	/*
41286 	 * Virtual Network Identifier (VNI). Only valid with
41287 	 * tunnel_types VXLAN, NVGRE, and Geneve.
41288 	 * Only lower 24-bits of VNI field are used
41289 	 * in setting up the filter.
41290 	 */
41291 	uint32_t	vni;
41292 	/* Logical VNIC ID of the destination VNIC. */
41293 	uint32_t	dst_vnic_id;
41294 	/*
41295 	 * Logical VNIC ID of the VNIC where traffic is
41296 	 * mirrored.
41297 	 */
41298 	uint32_t	mirror_vnic_id;
41299 } __rte_packed;
41300 
41301 /* hwrm_cfa_tunnel_filter_alloc_output (size:192b/24B) */
41302 struct hwrm_cfa_tunnel_filter_alloc_output {
41303 	/* The specific error status for the command. */
41304 	uint16_t	error_code;
41305 	/* The HWRM command request type. */
41306 	uint16_t	req_type;
41307 	/* The sequence ID from the original command. */
41308 	uint16_t	seq_id;
41309 	/* The length of the response data in number of bytes. */
41310 	uint16_t	resp_len;
41311 	/* This value is an opaque id into CFA data structures. */
41312 	uint64_t	tunnel_filter_id;
41313 	/*
41314 	 * The flow id value in bit 0-29 is the actual ID of the flow
41315 	 * associated with this filter and it shall be used to match
41316 	 * and associate the flow identifier returned in completion
41317 	 * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
41318 	 * shall indicate no valid flow id.
41319 	 */
41320 	uint32_t	flow_id;
41321 	/* Indicate the flow id value. */
41322 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
41323 		UINT32_C(0x3fffffff)
41324 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
41325 	/* Indicate type of the flow. */
41326 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE \
41327 		UINT32_C(0x40000000)
41328 	/*
41329 	 * If this bit set to 0, then it indicates that the flow is
41330 	 * internal flow.
41331 	 */
41332 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
41333 		(UINT32_C(0x0) << 30)
41334 	/*
41335 	 * If this bit is set to 1, then it indicates that the flow is
41336 	 * external flow.
41337 	 */
41338 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
41339 		(UINT32_C(0x1) << 30)
41340 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
41341 		HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
41342 	/* Indicate the flow direction. */
41343 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR \
41344 		UINT32_C(0x80000000)
41345 	/* If this bit set to 0, then it indicates rx flow. */
41346 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
41347 		(UINT32_C(0x0) << 31)
41348 	/* If this bit is set to 1, then it indicates that tx flow. */
41349 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
41350 		(UINT32_C(0x1) << 31)
41351 	#define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
41352 		HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX
41353 	uint8_t	unused_0[3];
41354 	/*
41355 	 * This field is used in Output records to indicate that the output
41356 	 * is completely written to RAM. This field should be read as '1'
41357 	 * to indicate that the output has been completely written.
41358 	 * When writing a command completion or response to an internal
41359 	 * processor, the order of writes has to be such that this field is
41360 	 * written last.
41361 	 */
41362 	uint8_t	valid;
41363 } __rte_packed;
41364 
41365 /*******************************
41366  * hwrm_cfa_tunnel_filter_free *
41367  *******************************/
41368 
41369 
41370 /* hwrm_cfa_tunnel_filter_free_input (size:192b/24B) */
41371 struct hwrm_cfa_tunnel_filter_free_input {
41372 	/* The HWRM command request type. */
41373 	uint16_t	req_type;
41374 	/*
41375 	 * The completion ring to send the completion event on. This should
41376 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
41377 	 */
41378 	uint16_t	cmpl_ring;
41379 	/*
41380 	 * The sequence ID is used by the driver for tracking multiple
41381 	 * commands. This ID is treated as opaque data by the firmware and
41382 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
41383 	 */
41384 	uint16_t	seq_id;
41385 	/*
41386 	 * The target ID of the command:
41387 	 * * 0x0-0xFFF8 - The function ID
41388 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
41389 	 * * 0xFFFD - Reserved for user-space HWRM interface
41390 	 * * 0xFFFF - HWRM
41391 	 */
41392 	uint16_t	target_id;
41393 	/*
41394 	 * A physical address pointer pointing to a host buffer that the
41395 	 * command's response data will be written. This can be either a host
41396 	 * physical address (HPA) or a guest physical address (GPA) and must
41397 	 * point to a physically contiguous block of memory.
41398 	 */
41399 	uint64_t	resp_addr;
41400 	/* This value is an opaque id into CFA data structures. */
41401 	uint64_t	tunnel_filter_id;
41402 } __rte_packed;
41403 
41404 /* hwrm_cfa_tunnel_filter_free_output (size:128b/16B) */
41405 struct hwrm_cfa_tunnel_filter_free_output {
41406 	/* The specific error status for the command. */
41407 	uint16_t	error_code;
41408 	/* The HWRM command request type. */
41409 	uint16_t	req_type;
41410 	/* The sequence ID from the original command. */
41411 	uint16_t	seq_id;
41412 	/* The length of the response data in number of bytes. */
41413 	uint16_t	resp_len;
41414 	uint8_t	unused_0[7];
41415 	/*
41416 	 * This field is used in Output records to indicate that the output
41417 	 * is completely written to RAM. This field should be read as '1'
41418 	 * to indicate that the output has been completely written.
41419 	 * When writing a command completion or response to an internal
41420 	 * processor, the order of writes has to be such that this field is
41421 	 * written last.
41422 	 */
41423 	uint8_t	valid;
41424 } __rte_packed;
41425 
41426 /***************************************
41427  * hwrm_cfa_redirect_tunnel_type_alloc *
41428  ***************************************/
41429 
41430 
41431 /* hwrm_cfa_redirect_tunnel_type_alloc_input (size:192b/24B) */
41432 struct hwrm_cfa_redirect_tunnel_type_alloc_input {
41433 	/* The HWRM command request type. */
41434 	uint16_t	req_type;
41435 	/*
41436 	 * The completion ring to send the completion event on. This should
41437 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
41438 	 */
41439 	uint16_t	cmpl_ring;
41440 	/*
41441 	 * The sequence ID is used by the driver for tracking multiple
41442 	 * commands. This ID is treated as opaque data by the firmware and
41443 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
41444 	 */
41445 	uint16_t	seq_id;
41446 	/*
41447 	 * The target ID of the command:
41448 	 * * 0x0-0xFFF8 - The function ID
41449 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
41450 	 * * 0xFFFD - Reserved for user-space HWRM interface
41451 	 * * 0xFFFF - HWRM
41452 	 */
41453 	uint16_t	target_id;
41454 	/*
41455 	 * A physical address pointer pointing to a host buffer that the
41456 	 * command's response data will be written. This can be either a host
41457 	 * physical address (HPA) or a guest physical address (GPA) and must
41458 	 * point to a physically contiguous block of memory.
41459 	 */
41460 	uint64_t	resp_addr;
41461 	/* The destination function id, to whom the traffic is redirected. */
41462 	uint16_t	dest_fid;
41463 	/* Tunnel Type. */
41464 	uint8_t	tunnel_type;
41465 	/* Non-tunnel */
41466 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
41467 		UINT32_C(0x0)
41468 	/* Virtual eXtensible Local Area Network (VXLAN) */
41469 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
41470 		UINT32_C(0x1)
41471 	/* Network Virtualization Generic Routing Encapsulation (NVGRE) */
41472 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
41473 		UINT32_C(0x2)
41474 	/* Generic Routing Encapsulation (GRE) inside Ethernet payload */
41475 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
41476 		UINT32_C(0x3)
41477 	/* IP in IP */
41478 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
41479 		UINT32_C(0x4)
41480 	/* Generic Network Virtualization Encapsulation (Geneve) */
41481 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
41482 		UINT32_C(0x5)
41483 	/* Multi-Protocol Label Switching (MPLS) */
41484 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
41485 		UINT32_C(0x6)
41486 	/* Stateless Transport Tunnel (STT) */
41487 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_STT \
41488 		UINT32_C(0x7)
41489 	/* Generic Routing Encapsulation (GRE) inside IP datagram payload */
41490 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
41491 		UINT32_C(0x8)
41492 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
41493 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
41494 		UINT32_C(0x9)
41495 	/*
41496 	 * Enhance Generic Routing Encapsulation (GRE version 1) inside IP
41497 	 * datagram payload
41498 	 */
41499 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
41500 		UINT32_C(0xa)
41501 	/* Use fixed layer 2 ether type of 0xFFFF */
41502 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
41503 		UINT32_C(0xb)
41504 	/*
41505 	 * IPV6 over virtual eXtensible Local Area Network with GPE header
41506 	 * (IPV6oVXLANGPE)
41507 	 */
41508 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
41509 		UINT32_C(0xc)
41510 	/* Any tunneled traffic */
41511 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
41512 		UINT32_C(0xff)
41513 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_LAST \
41514 		HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
41515 	/* Tunnel alloc flags. */
41516 	uint8_t	flags;
41517 	/*
41518 	 * Setting of this flag indicates modify existing redirect tunnel
41519 	 * to new destination function ID.
41520 	 */
41521 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_FLAGS_MODIFY_DST \
41522 		UINT32_C(0x1)
41523 	uint8_t	unused_0[4];
41524 } __rte_packed;
41525 
41526 /* hwrm_cfa_redirect_tunnel_type_alloc_output (size:128b/16B) */
41527 struct hwrm_cfa_redirect_tunnel_type_alloc_output {
41528 	/* The specific error status for the command. */
41529 	uint16_t	error_code;
41530 	/* The HWRM command request type. */
41531 	uint16_t	req_type;
41532 	/* The sequence ID from the original command. */
41533 	uint16_t	seq_id;
41534 	/* The length of the response data in number of bytes. */
41535 	uint16_t	resp_len;
41536 	uint8_t	unused_0[7];
41537 	/*
41538 	 * This field is used in Output records to indicate that the output
41539 	 * is completely written to RAM. This field should be read as '1'
41540 	 * to indicate that the output has been completely written.
41541 	 * When writing a command completion or response to an internal
41542 	 * processor, the order of writes has to be such that this field is
41543 	 * written last.
41544 	 */
41545 	uint8_t	valid;
41546 } __rte_packed;
41547 
41548 /**************************************
41549  * hwrm_cfa_redirect_tunnel_type_free *
41550  **************************************/
41551 
41552 
41553 /* hwrm_cfa_redirect_tunnel_type_free_input (size:192b/24B) */
41554 struct hwrm_cfa_redirect_tunnel_type_free_input {
41555 	/* The HWRM command request type. */
41556 	uint16_t	req_type;
41557 	/*
41558 	 * The completion ring to send the completion event on. This should
41559 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
41560 	 */
41561 	uint16_t	cmpl_ring;
41562 	/*
41563 	 * The sequence ID is used by the driver for tracking multiple
41564 	 * commands. This ID is treated as opaque data by the firmware and
41565 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
41566 	 */
41567 	uint16_t	seq_id;
41568 	/*
41569 	 * The target ID of the command:
41570 	 * * 0x0-0xFFF8 - The function ID
41571 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
41572 	 * * 0xFFFD - Reserved for user-space HWRM interface
41573 	 * * 0xFFFF - HWRM
41574 	 */
41575 	uint16_t	target_id;
41576 	/*
41577 	 * A physical address pointer pointing to a host buffer that the
41578 	 * command's response data will be written. This can be either a host
41579 	 * physical address (HPA) or a guest physical address (GPA) and must
41580 	 * point to a physically contiguous block of memory.
41581 	 */
41582 	uint64_t	resp_addr;
41583 	/* The destination function id, to whom the traffic is redirected. */
41584 	uint16_t	dest_fid;
41585 	/* Tunnel Type. */
41586 	uint8_t	tunnel_type;
41587 	/* Non-tunnel */
41588 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_NONTUNNEL \
41589 		UINT32_C(0x0)
41590 	/* Virtual eXtensible Local Area Network (VXLAN) */
41591 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_VXLAN \
41592 		UINT32_C(0x1)
41593 	/* Network Virtualization Generic Routing Encapsulation (NVGRE) */
41594 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_NVGRE \
41595 		UINT32_C(0x2)
41596 	/* Generic Routing Encapsulation (GRE) inside Ethernet payload */
41597 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_L2GRE \
41598 		UINT32_C(0x3)
41599 	/* IP in IP */
41600 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_IPIP \
41601 		UINT32_C(0x4)
41602 	/* Generic Network Virtualization Encapsulation (Geneve) */
41603 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_GENEVE \
41604 		UINT32_C(0x5)
41605 	/* Multi-Protocol Label Switching (MPLS) */
41606 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_MPLS \
41607 		UINT32_C(0x6)
41608 	/* Stateless Transport Tunnel (STT) */
41609 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_STT \
41610 		UINT32_C(0x7)
41611 	/* Generic Routing Encapsulation (GRE) inside IP datagram payload */
41612 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_IPGRE \
41613 		UINT32_C(0x8)
41614 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
41615 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_VXLAN_V4 \
41616 		UINT32_C(0x9)
41617 	/*
41618 	 * Enhance Generic Routing Encapsulation (GRE version 1) inside IP
41619 	 * datagram payload
41620 	 */
41621 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_IPGRE_V1 \
41622 		UINT32_C(0xa)
41623 	/* Use fixed layer 2 ether type of 0xFFFF */
41624 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_L2_ETYPE \
41625 		UINT32_C(0xb)
41626 	/*
41627 	 * IPV6 over virtual eXtensible Local Area Network with GPE header
41628 	 * (IPV6oVXLANGPE)
41629 	 */
41630 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
41631 		UINT32_C(0xc)
41632 	/* Any tunneled traffic */
41633 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_ANYTUNNEL \
41634 		UINT32_C(0xff)
41635 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_LAST \
41636 		HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_ANYTUNNEL
41637 	uint8_t	unused_0[5];
41638 } __rte_packed;
41639 
41640 /* hwrm_cfa_redirect_tunnel_type_free_output (size:128b/16B) */
41641 struct hwrm_cfa_redirect_tunnel_type_free_output {
41642 	/* The specific error status for the command. */
41643 	uint16_t	error_code;
41644 	/* The HWRM command request type. */
41645 	uint16_t	req_type;
41646 	/* The sequence ID from the original command. */
41647 	uint16_t	seq_id;
41648 	/* The length of the response data in number of bytes. */
41649 	uint16_t	resp_len;
41650 	uint8_t	unused_0[7];
41651 	/*
41652 	 * This field is used in Output records to indicate that the output
41653 	 * is completely written to RAM. This field should be read as '1'
41654 	 * to indicate that the output has been completely written.
41655 	 * When writing a command completion or response to an internal
41656 	 * processor, the order of writes has to be such that this field is
41657 	 * written last.
41658 	 */
41659 	uint8_t	valid;
41660 } __rte_packed;
41661 
41662 /**************************************
41663  * hwrm_cfa_redirect_tunnel_type_info *
41664  **************************************/
41665 
41666 
41667 /* hwrm_cfa_redirect_tunnel_type_info_input (size:192b/24B) */
41668 struct hwrm_cfa_redirect_tunnel_type_info_input {
41669 	/* The HWRM command request type. */
41670 	uint16_t	req_type;
41671 	/*
41672 	 * The completion ring to send the completion event on. This should
41673 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
41674 	 */
41675 	uint16_t	cmpl_ring;
41676 	/*
41677 	 * The sequence ID is used by the driver for tracking multiple
41678 	 * commands. This ID is treated as opaque data by the firmware and
41679 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
41680 	 */
41681 	uint16_t	seq_id;
41682 	/*
41683 	 * The target ID of the command:
41684 	 * * 0x0-0xFFF8 - The function ID
41685 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
41686 	 * * 0xFFFD - Reserved for user-space HWRM interface
41687 	 * * 0xFFFF - HWRM
41688 	 */
41689 	uint16_t	target_id;
41690 	/*
41691 	 * A physical address pointer pointing to a host buffer that the
41692 	 * command's response data will be written. This can be either a host
41693 	 * physical address (HPA) or a guest physical address (GPA) and must
41694 	 * point to a physically contiguous block of memory.
41695 	 */
41696 	uint64_t	resp_addr;
41697 	/* The source function id. */
41698 	uint16_t	src_fid;
41699 	/* Tunnel Type. */
41700 	uint8_t	tunnel_type;
41701 	/* Non-tunnel */
41702 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_NONTUNNEL \
41703 		UINT32_C(0x0)
41704 	/* Virtual eXtensible Local Area Network (VXLAN) */
41705 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_VXLAN \
41706 		UINT32_C(0x1)
41707 	/* Network Virtualization Generic Routing Encapsulation (NVGRE) */
41708 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_NVGRE \
41709 		UINT32_C(0x2)
41710 	/* Generic Routing Encapsulation (GRE) inside Ethernet payload */
41711 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_L2GRE \
41712 		UINT32_C(0x3)
41713 	/* IP in IP */
41714 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_IPIP \
41715 		UINT32_C(0x4)
41716 	/* Generic Network Virtualization Encapsulation (Geneve) */
41717 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_GENEVE \
41718 		UINT32_C(0x5)
41719 	/* Multi-Protocol Label Switching (MPLS) */
41720 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_MPLS \
41721 		UINT32_C(0x6)
41722 	/* Stateless Transport Tunnel (STT) */
41723 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_STT \
41724 		UINT32_C(0x7)
41725 	/* Generic Routing Encapsulation (GRE) inside IP datagram payload */
41726 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_IPGRE \
41727 		UINT32_C(0x8)
41728 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
41729 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_VXLAN_V4 \
41730 		UINT32_C(0x9)
41731 	/*
41732 	 * Enhance Generic Routing Encapsulation (GRE version 1) inside IP
41733 	 * datagram payload
41734 	 */
41735 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_IPGRE_V1 \
41736 		UINT32_C(0xa)
41737 	/* Use fixed layer 2 ether type of 0xFFFF */
41738 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_L2_ETYPE \
41739 		UINT32_C(0xb)
41740 	/*
41741 	 * IPV6 over virtual eXtensible Local Area Network with GPE header
41742 	 * (IPV6oVXLANGPE)
41743 	 */
41744 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
41745 		UINT32_C(0xc)
41746 	/* Any tunneled traffic */
41747 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_ANYTUNNEL \
41748 		UINT32_C(0xff)
41749 	#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_LAST \
41750 		HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_ANYTUNNEL
41751 	uint8_t	unused_0[5];
41752 } __rte_packed;
41753 
41754 /* hwrm_cfa_redirect_tunnel_type_info_output (size:128b/16B) */
41755 struct hwrm_cfa_redirect_tunnel_type_info_output {
41756 	/* The specific error status for the command. */
41757 	uint16_t	error_code;
41758 	/* The HWRM command request type. */
41759 	uint16_t	req_type;
41760 	/* The sequence ID from the original command. */
41761 	uint16_t	seq_id;
41762 	/* The length of the response data in number of bytes. */
41763 	uint16_t	resp_len;
41764 	/* The destination function id, to whom the traffic is redirected. */
41765 	uint16_t	dest_fid;
41766 	uint8_t	unused_0[5];
41767 	/*
41768 	 * This field is used in Output records to indicate that the output
41769 	 * is completely written to RAM. This field should be read as '1'
41770 	 * to indicate that the output has been completely written.
41771 	 * When writing a command completion or response to an internal
41772 	 * processor, the order of writes has to be such that this field is
41773 	 * written last.
41774 	 */
41775 	uint8_t	valid;
41776 } __rte_packed;
41777 
41778 /* hwrm_vxlan_ipv4_hdr (size:128b/16B) */
41779 struct hwrm_vxlan_ipv4_hdr {
41780 	/* IPv4 version and header length. */
41781 	uint8_t	ver_hlen;
41782 	/* IPv4 header length */
41783 	#define HWRM_VXLAN_IPV4_HDR_VER_HLEN_HEADER_LENGTH_MASK UINT32_C(0xf)
41784 	#define HWRM_VXLAN_IPV4_HDR_VER_HLEN_HEADER_LENGTH_SFT 0
41785 	/* Version */
41786 	#define HWRM_VXLAN_IPV4_HDR_VER_HLEN_VERSION_MASK      UINT32_C(0xf0)
41787 	#define HWRM_VXLAN_IPV4_HDR_VER_HLEN_VERSION_SFT       4
41788 	/* IPv4 type of service. */
41789 	uint8_t	tos;
41790 	/* IPv4 identification. */
41791 	uint16_t	ip_id;
41792 	/* IPv4 flags and offset. */
41793 	uint16_t	flags_frag_offset;
41794 	/* IPv4 TTL. */
41795 	uint8_t	ttl;
41796 	/* IPv4 protocol. */
41797 	uint8_t	protocol;
41798 	/* IPv4 source address. */
41799 	uint32_t	src_ip_addr;
41800 	/* IPv4 destination address. */
41801 	uint32_t	dest_ip_addr;
41802 } __rte_packed;
41803 
41804 /* hwrm_vxlan_ipv6_hdr (size:320b/40B) */
41805 struct hwrm_vxlan_ipv6_hdr {
41806 	/* IPv6 version, traffic class and flow label. */
41807 	uint32_t	ver_tc_flow_label;
41808 	/* IPv6 version shift */
41809 	#define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_VER_SFT \
41810 		UINT32_C(0x1c)
41811 	/* IPv6 version mask */
41812 	#define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_VER_MASK \
41813 		UINT32_C(0xf0000000)
41814 	/* IPv6 TC shift */
41815 	#define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_TC_SFT \
41816 		UINT32_C(0x14)
41817 	/* IPv6 TC mask */
41818 	#define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_TC_MASK \
41819 		UINT32_C(0xff00000)
41820 	/* IPv6 flow label shift */
41821 	#define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_FLOW_LABEL_SFT \
41822 		UINT32_C(0x0)
41823 	/* IPv6 flow label mask */
41824 	#define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_FLOW_LABEL_MASK \
41825 		UINT32_C(0xfffff)
41826 	#define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_LAST \
41827 		HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_FLOW_LABEL_MASK
41828 	/* IPv6 payload length. */
41829 	uint16_t	payload_len;
41830 	/* IPv6 next header. */
41831 	uint8_t	next_hdr;
41832 	/* IPv6 TTL. */
41833 	uint8_t	ttl;
41834 	/* IPv6 source address. */
41835 	uint32_t	src_ip_addr[4];
41836 	/* IPv6 destination address. */
41837 	uint32_t	dest_ip_addr[4];
41838 } __rte_packed;
41839 
41840 /* hwrm_cfa_encap_data_vxlan (size:640b/80B) */
41841 struct hwrm_cfa_encap_data_vxlan {
41842 	/* Source MAC address. */
41843 	uint8_t	src_mac_addr[6];
41844 	/* reserved. */
41845 	uint16_t	unused_0;
41846 	/* Destination MAC address. */
41847 	uint8_t	dst_mac_addr[6];
41848 	/* Number of VLAN tags. */
41849 	uint8_t	num_vlan_tags;
41850 	/* reserved. */
41851 	uint8_t	unused_1;
41852 	/* Outer VLAN TPID. */
41853 	uint16_t	ovlan_tpid;
41854 	/* Outer VLAN TCI. */
41855 	uint16_t	ovlan_tci;
41856 	/* Inner VLAN TPID. */
41857 	uint16_t	ivlan_tpid;
41858 	/* Inner VLAN TCI. */
41859 	uint16_t	ivlan_tci;
41860 	/* L3 header fields. */
41861 	uint32_t	l3[10];
41862 	/* IP version mask. */
41863 	#define HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_MASK UINT32_C(0xf)
41864 	/* IP version 4. */
41865 	#define HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_IPV4 UINT32_C(0x4)
41866 	/* IP version 6. */
41867 	#define HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_IPV6 UINT32_C(0x6)
41868 	#define HWRM_CFA_ENCAP_DATA_VXLAN_L3_LAST \
41869 		HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_IPV6
41870 	/* UDP source port. */
41871 	uint16_t	src_port;
41872 	/* UDP destination port. */
41873 	uint16_t	dst_port;
41874 	/* VXLAN Network Identifier. */
41875 	uint32_t	vni;
41876 	/*
41877 	 * 3 bytes VXLAN header reserve fields from 1st dword of the VXLAN
41878 	 * header.
41879 	 */
41880 	uint8_t	hdr_rsvd0[3];
41881 	/* 1 byte VXLAN header reserve field from 2nd dword of the VXLAN header. */
41882 	uint8_t	hdr_rsvd1;
41883 	/* VXLAN header flags field. */
41884 	uint8_t	hdr_flags;
41885 	uint8_t	unused[3];
41886 } __rte_packed;
41887 
41888 /*******************************
41889  * hwrm_cfa_encap_record_alloc *
41890  *******************************/
41891 
41892 
41893 /* hwrm_cfa_encap_record_alloc_input (size:832b/104B) */
41894 struct hwrm_cfa_encap_record_alloc_input {
41895 	/* The HWRM command request type. */
41896 	uint16_t	req_type;
41897 	/*
41898 	 * The completion ring to send the completion event on. This should
41899 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
41900 	 */
41901 	uint16_t	cmpl_ring;
41902 	/*
41903 	 * The sequence ID is used by the driver for tracking multiple
41904 	 * commands. This ID is treated as opaque data by the firmware and
41905 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
41906 	 */
41907 	uint16_t	seq_id;
41908 	/*
41909 	 * The target ID of the command:
41910 	 * * 0x0-0xFFF8 - The function ID
41911 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
41912 	 * * 0xFFFD - Reserved for user-space HWRM interface
41913 	 * * 0xFFFF - HWRM
41914 	 */
41915 	uint16_t	target_id;
41916 	/*
41917 	 * A physical address pointer pointing to a host buffer that the
41918 	 * command's response data will be written. This can be either a host
41919 	 * physical address (HPA) or a guest physical address (GPA) and must
41920 	 * point to a physically contiguous block of memory.
41921 	 */
41922 	uint64_t	resp_addr;
41923 	uint32_t	flags;
41924 	/*
41925 	 * Setting of this flag indicates the applicability to the loopback
41926 	 * path.
41927 	 */
41928 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_FLAGS_LOOPBACK \
41929 		UINT32_C(0x1)
41930 	/*
41931 	 * Setting of this flag indicates this encap record is external
41932 	 * encap record. Resetting of this flag indicates this flag is
41933 	 * internal encap record and this is the default setting.
41934 	 */
41935 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_FLAGS_EXTERNAL \
41936 		UINT32_C(0x2)
41937 	/* Encapsulation Type. */
41938 	uint8_t	encap_type;
41939 	/* Virtual eXtensible Local Area Network (VXLAN) */
41940 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VXLAN \
41941 		UINT32_C(0x1)
41942 	/* Network Virtualization Generic Routing Encapsulation (NVGRE) */
41943 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_NVGRE \
41944 		UINT32_C(0x2)
41945 	/* Generic Routing Encapsulation (GRE) after inside Ethernet payload */
41946 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_L2GRE \
41947 		UINT32_C(0x3)
41948 	/* IP in IP */
41949 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_IPIP \
41950 		UINT32_C(0x4)
41951 	/* Generic Network Virtualization Encapsulation (Geneve) */
41952 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_GENEVE \
41953 		UINT32_C(0x5)
41954 	/* Multi-Protocol Label Switching (MPLS) */
41955 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_MPLS \
41956 		UINT32_C(0x6)
41957 	/* VLAN */
41958 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VLAN \
41959 		UINT32_C(0x7)
41960 	/* Generic Routing Encapsulation (GRE) inside IP datagram payload */
41961 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_IPGRE \
41962 		UINT32_C(0x8)
41963 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
41964 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VXLAN_V4 \
41965 		UINT32_C(0x9)
41966 	/*
41967 	 * Enhance Generic Routing Encapsulation (GRE version 1) inside IP
41968 	 * datagram payload
41969 	 */
41970 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_IPGRE_V1 \
41971 		UINT32_C(0xa)
41972 	/* Use fixed layer 2 ether type of 0xFFFF */
41973 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_L2_ETYPE \
41974 		UINT32_C(0xb)
41975 	/*
41976 	 * IPV6 over virtual eXtensible Local Area Network with GPE header
41977 	 * (IPV6oVXLANGPE)
41978 	 */
41979 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VXLAN_GPE_V6 \
41980 		UINT32_C(0xc)
41981 	#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_LAST \
41982 		HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VXLAN_GPE_V6
41983 	uint8_t	unused_0[3];
41984 	/* This value is encap data used for the given encap type. */
41985 	uint32_t	encap_data[20];
41986 } __rte_packed;
41987 
41988 /* hwrm_cfa_encap_record_alloc_output (size:128b/16B) */
41989 struct hwrm_cfa_encap_record_alloc_output {
41990 	/* The specific error status for the command. */
41991 	uint16_t	error_code;
41992 	/* The HWRM command request type. */
41993 	uint16_t	req_type;
41994 	/* The sequence ID from the original command. */
41995 	uint16_t	seq_id;
41996 	/* The length of the response data in number of bytes. */
41997 	uint16_t	resp_len;
41998 	/* This value is an opaque id into CFA data structures. */
41999 	uint32_t	encap_record_id;
42000 	uint8_t	unused_0[3];
42001 	/*
42002 	 * This field is used in Output records to indicate that the output
42003 	 * is completely written to RAM. This field should be read as '1'
42004 	 * to indicate that the output has been completely written.
42005 	 * When writing a command completion or response to an internal
42006 	 * processor, the order of writes has to be such that this field is
42007 	 * written last.
42008 	 */
42009 	uint8_t	valid;
42010 } __rte_packed;
42011 
42012 /******************************
42013  * hwrm_cfa_encap_record_free *
42014  ******************************/
42015 
42016 
42017 /* hwrm_cfa_encap_record_free_input (size:192b/24B) */
42018 struct hwrm_cfa_encap_record_free_input {
42019 	/* The HWRM command request type. */
42020 	uint16_t	req_type;
42021 	/*
42022 	 * The completion ring to send the completion event on. This should
42023 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
42024 	 */
42025 	uint16_t	cmpl_ring;
42026 	/*
42027 	 * The sequence ID is used by the driver for tracking multiple
42028 	 * commands. This ID is treated as opaque data by the firmware and
42029 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
42030 	 */
42031 	uint16_t	seq_id;
42032 	/*
42033 	 * The target ID of the command:
42034 	 * * 0x0-0xFFF8 - The function ID
42035 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42036 	 * * 0xFFFD - Reserved for user-space HWRM interface
42037 	 * * 0xFFFF - HWRM
42038 	 */
42039 	uint16_t	target_id;
42040 	/*
42041 	 * A physical address pointer pointing to a host buffer that the
42042 	 * command's response data will be written. This can be either a host
42043 	 * physical address (HPA) or a guest physical address (GPA) and must
42044 	 * point to a physically contiguous block of memory.
42045 	 */
42046 	uint64_t	resp_addr;
42047 	/* This value is an opaque id into CFA data structures. */
42048 	uint32_t	encap_record_id;
42049 	uint8_t	unused_0[4];
42050 } __rte_packed;
42051 
42052 /* hwrm_cfa_encap_record_free_output (size:128b/16B) */
42053 struct hwrm_cfa_encap_record_free_output {
42054 	/* The specific error status for the command. */
42055 	uint16_t	error_code;
42056 	/* The HWRM command request type. */
42057 	uint16_t	req_type;
42058 	/* The sequence ID from the original command. */
42059 	uint16_t	seq_id;
42060 	/* The length of the response data in number of bytes. */
42061 	uint16_t	resp_len;
42062 	uint8_t	unused_0[7];
42063 	/*
42064 	 * This field is used in Output records to indicate that the output
42065 	 * is completely written to RAM. This field should be read as '1'
42066 	 * to indicate that the output has been completely written.
42067 	 * When writing a command completion or response to an internal
42068 	 * processor, the order of writes has to be such that this field is
42069 	 * written last.
42070 	 */
42071 	uint8_t	valid;
42072 } __rte_packed;
42073 
42074 /********************************
42075  * hwrm_cfa_ntuple_filter_alloc *
42076  ********************************/
42077 
42078 
42079 /* hwrm_cfa_ntuple_filter_alloc_input (size:1024b/128B) */
42080 struct hwrm_cfa_ntuple_filter_alloc_input {
42081 	/* The HWRM command request type. */
42082 	uint16_t	req_type;
42083 	/*
42084 	 * The completion ring to send the completion event on. This should
42085 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
42086 	 */
42087 	uint16_t	cmpl_ring;
42088 	/*
42089 	 * The sequence ID is used by the driver for tracking multiple
42090 	 * commands. This ID is treated as opaque data by the firmware and
42091 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
42092 	 */
42093 	uint16_t	seq_id;
42094 	/*
42095 	 * The target ID of the command:
42096 	 * * 0x0-0xFFF8 - The function ID
42097 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42098 	 * * 0xFFFD - Reserved for user-space HWRM interface
42099 	 * * 0xFFFF - HWRM
42100 	 */
42101 	uint16_t	target_id;
42102 	/*
42103 	 * A physical address pointer pointing to a host buffer that the
42104 	 * command's response data will be written. This can be either a host
42105 	 * physical address (HPA) or a guest physical address (GPA) and must
42106 	 * point to a physically contiguous block of memory.
42107 	 */
42108 	uint64_t	resp_addr;
42109 	uint32_t	flags;
42110 	/*
42111 	 * Setting of this flag indicates the applicability to the loopback
42112 	 * path.
42113 	 */
42114 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK \
42115 		UINT32_C(0x1)
42116 	/*
42117 	 * Setting of this flag indicates drop action. If this flag is not
42118 	 * set, then it should be considered accept action.
42119 	 */
42120 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DROP \
42121 		UINT32_C(0x2)
42122 	/*
42123 	 * Setting of this flag indicates that a meter is expected to be
42124 	 * attached to this flow. This hint can be used when choosing the
42125 	 * action record format required for the flow.
42126 	 */
42127 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_METER \
42128 		UINT32_C(0x4)
42129 	/*
42130 	 * Setting of this flag indicates that the dst_id field contains
42131 	 * function ID. If this is not set it indicates dest_id is VNIC
42132 	 * or VPORT.
42133 	 */
42134 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DEST_FID \
42135 		UINT32_C(0x8)
42136 	/*
42137 	 * Setting of this flag indicates match on arp reply when ethertype
42138 	 * is 0x0806. If this is not set it indicates no specific arp opcode
42139 	 * matching.
42140 	 */
42141 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_ARP_REPLY \
42142 		UINT32_C(0x10)
42143 	/*
42144 	 * Setting of this flag indicates that the dst_id field contains RFS
42145 	 * ring table index. If this is not set it indicates dst_id is VNIC
42146 	 * or VPORT or function ID.  Note dest_fid and dest_rfs_ring_idx
42147 	 * can’t be set at the same time.
42148 	 */
42149 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DEST_RFS_RING_IDX \
42150 		UINT32_C(0x20)
42151 	/*
42152 	 * Setting of this flag indicates that when the ntuple filter is
42153 	 * created, the L2 context should not be used in the filter.  This
42154 	 * allows packet from different L2 contexts to match and be directed
42155 	 * to the same destination.
42156 	 */
42157 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_NO_L2_CONTEXT \
42158 		UINT32_C(0x40)
42159 	uint32_t	enables;
42160 	/*
42161 	 * This bit must be '1' for the l2_filter_id field to be
42162 	 * configured.
42163 	 */
42164 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_L2_FILTER_ID \
42165 		UINT32_C(0x1)
42166 	/*
42167 	 * This bit must be '1' for the ethertype field to be
42168 	 * configured.
42169 	 */
42170 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_ETHERTYPE \
42171 		UINT32_C(0x2)
42172 	/*
42173 	 * This bit must be '1' for the tunnel_type field to be
42174 	 * configured.
42175 	 */
42176 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
42177 		UINT32_C(0x4)
42178 	/*
42179 	 * This bit must be '1' for the src_macaddr field to be
42180 	 * configured.
42181 	 */
42182 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_MACADDR \
42183 		UINT32_C(0x8)
42184 	/*
42185 	 * This bit must be '1' for the ipaddr_type field to be
42186 	 * configured.
42187 	 */
42188 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_IPADDR_TYPE \
42189 		UINT32_C(0x10)
42190 	/*
42191 	 * This bit must be '1' for the src_ipaddr field to be
42192 	 * configured.
42193 	 */
42194 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR \
42195 		UINT32_C(0x20)
42196 	/*
42197 	 * This bit must be '1' for the src_ipaddr_mask field to be
42198 	 * configured.
42199 	 */
42200 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR_MASK \
42201 		UINT32_C(0x40)
42202 	/*
42203 	 * This bit must be '1' for the dst_ipaddr field to be
42204 	 * configured.
42205 	 */
42206 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR \
42207 		UINT32_C(0x80)
42208 	/*
42209 	 * This bit must be '1' for the dst_ipaddr_mask field to be
42210 	 * configured.
42211 	 */
42212 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR_MASK \
42213 		UINT32_C(0x100)
42214 	/*
42215 	 * This bit must be '1' for the ip_protocol field to be
42216 	 * configured.
42217 	 */
42218 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_IP_PROTOCOL \
42219 		UINT32_C(0x200)
42220 	/*
42221 	 * This bit must be '1' for the src_port field to be
42222 	 * configured.
42223 	 */
42224 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT \
42225 		UINT32_C(0x400)
42226 	/*
42227 	 * This bit must be '1' for the src_port_mask field to be
42228 	 * configured.
42229 	 */
42230 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT_MASK \
42231 		UINT32_C(0x800)
42232 	/*
42233 	 * This bit must be '1' for the dst_port field to be
42234 	 * configured.
42235 	 */
42236 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_PORT \
42237 		UINT32_C(0x1000)
42238 	/*
42239 	 * This bit must be '1' for the dst_port_mask field to be
42240 	 * configured.
42241 	 */
42242 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_PORT_MASK \
42243 		UINT32_C(0x2000)
42244 	/*
42245 	 * This bit must be '1' for the pri_hint field to be
42246 	 * configured.
42247 	 */
42248 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_PRI_HINT \
42249 		UINT32_C(0x4000)
42250 	/*
42251 	 * This bit must be '1' for the ntuple_filter_id field to be
42252 	 * configured.
42253 	 */
42254 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_NTUPLE_FILTER_ID \
42255 		UINT32_C(0x8000)
42256 	/*
42257 	 * This bit must be '1' for the dst_id field to be
42258 	 * configured.
42259 	 */
42260 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_ID \
42261 		UINT32_C(0x10000)
42262 	/*
42263 	 * This bit must be '1' for the mirror_vnic_id field to be
42264 	 * configured.
42265 	 */
42266 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
42267 		UINT32_C(0x20000)
42268 	/*
42269 	 * This bit must be '1' for the dst_macaddr field to be
42270 	 * configured.
42271 	 */
42272 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_MACADDR \
42273 		UINT32_C(0x40000)
42274 	/* This flag is deprecated. */
42275 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_RFS_RING_TBL_IDX \
42276 		UINT32_C(0x80000)
42277 	/*
42278 	 * This value identifies a set of CFA data structures used for an L2
42279 	 * context.
42280 	 */
42281 	uint64_t	l2_filter_id;
42282 	/*
42283 	 * This value indicates the source MAC address in
42284 	 * the Ethernet header.
42285 	 */
42286 	uint8_t	src_macaddr[6];
42287 	/* This value indicates the ethertype in the Ethernet header. */
42288 	uint16_t	ethertype;
42289 	/*
42290 	 * This value indicates the type of IP address.
42291 	 * 4 - IPv4
42292 	 * 6 - IPv6
42293 	 * All others are invalid.
42294 	 */
42295 	uint8_t	ip_addr_type;
42296 	/* invalid */
42297 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN \
42298 		UINT32_C(0x0)
42299 	/* IPv4 */
42300 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV4 \
42301 		UINT32_C(0x4)
42302 	/* IPv6 */
42303 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6 \
42304 		UINT32_C(0x6)
42305 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_LAST \
42306 		HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6
42307 	/*
42308 	 * The value of protocol filed in IP header.
42309 	 * Applies to UDP and TCP traffic.
42310 	 * 6 - TCP
42311 	 * 17 - UDP
42312 	 */
42313 	uint8_t	ip_protocol;
42314 	/* invalid */
42315 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN \
42316 		UINT32_C(0x0)
42317 	/* TCP */
42318 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_TCP \
42319 		UINT32_C(0x6)
42320 	/* UDP */
42321 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP \
42322 		UINT32_C(0x11)
42323 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_LAST \
42324 		HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP
42325 	/*
42326 	 * If set, this value shall represent the
42327 	 * Logical VNIC ID of the destination VNIC for the RX
42328 	 * path and network port id of the destination port for
42329 	 * the TX path.
42330 	 */
42331 	uint16_t	dst_id;
42332 	/*
42333 	 * Logical VNIC ID of the VNIC where traffic is
42334 	 * mirrored.
42335 	 */
42336 	uint16_t	mirror_vnic_id;
42337 	/*
42338 	 * This value indicates the tunnel type for this filter.
42339 	 * If this field is not specified, then the filter shall
42340 	 * apply to both non-tunneled and tunneled packets.
42341 	 * If this field conflicts with the tunnel_type specified
42342 	 * in the l2_filter_id, then the HWRM shall return an
42343 	 * error for this command.
42344 	 */
42345 	uint8_t	tunnel_type;
42346 	/* Non-tunnel */
42347 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
42348 		UINT32_C(0x0)
42349 	/* Virtual eXtensible Local Area Network (VXLAN) */
42350 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
42351 		UINT32_C(0x1)
42352 	/* Network Virtualization Generic Routing Encapsulation (NVGRE) */
42353 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
42354 		UINT32_C(0x2)
42355 	/* Generic Routing Encapsulation (GRE) inside Ethernet payload */
42356 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
42357 		UINT32_C(0x3)
42358 	/* IP in IP */
42359 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
42360 		UINT32_C(0x4)
42361 	/* Generic Network Virtualization Encapsulation (Geneve) */
42362 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
42363 		UINT32_C(0x5)
42364 	/* Multi-Protocol Label Switching (MPLS) */
42365 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
42366 		UINT32_C(0x6)
42367 	/* Stateless Transport Tunnel (STT) */
42368 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \
42369 		UINT32_C(0x7)
42370 	/* Generic Routing Encapsulation (GRE) inside IP datagram payload */
42371 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
42372 		UINT32_C(0x8)
42373 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
42374 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
42375 		UINT32_C(0x9)
42376 	/*
42377 	 * Enhance Generic Routing Encapsulation (GRE version 1) inside IP
42378 	 * datagram payload
42379 	 */
42380 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
42381 		UINT32_C(0xa)
42382 	/* Use fixed layer 2 ether type of 0xFFFF */
42383 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
42384 		UINT32_C(0xb)
42385 	/*
42386 	 * IPV6 over virtual eXtensible Local Area Network with GPE header
42387 	 * (IPV6oVXLANGPE)
42388 	 */
42389 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
42390 		UINT32_C(0xc)
42391 	/* Any tunneled traffic */
42392 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
42393 		UINT32_C(0xff)
42394 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \
42395 		HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
42396 	/*
42397 	 * This hint is provided to help in placing
42398 	 * the filter in the filter table.
42399 	 */
42400 	uint8_t	pri_hint;
42401 	/* No preference */
42402 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_NO_PREFER \
42403 		UINT32_C(0x0)
42404 	/* Above the given filter */
42405 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_ABOVE \
42406 		UINT32_C(0x1)
42407 	/* Below the given filter */
42408 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_BELOW \
42409 		UINT32_C(0x2)
42410 	/* As high as possible */
42411 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_HIGHEST \
42412 		UINT32_C(0x3)
42413 	/* As low as possible */
42414 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LOWEST \
42415 		UINT32_C(0x4)
42416 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LAST \
42417 		HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LOWEST
42418 	/*
42419 	 * The value of source IP address to be used in filtering.
42420 	 * For IPv4, first four bytes represent the IP address.
42421 	 */
42422 	uint32_t	src_ipaddr[4];
42423 	/*
42424 	 * The value of source IP address mask to be used in
42425 	 * filtering.
42426 	 * For IPv4, first four bytes represent the IP address mask.
42427 	 */
42428 	uint32_t	src_ipaddr_mask[4];
42429 	/*
42430 	 * The value of destination IP address to be used in filtering.
42431 	 * For IPv4, first four bytes represent the IP address.
42432 	 */
42433 	uint32_t	dst_ipaddr[4];
42434 	/*
42435 	 * The value of destination IP address mask to be used in
42436 	 * filtering.
42437 	 * For IPv4, first four bytes represent the IP address mask.
42438 	 */
42439 	uint32_t	dst_ipaddr_mask[4];
42440 	/*
42441 	 * The value of source port to be used in filtering.
42442 	 * Applies to UDP and TCP traffic.
42443 	 */
42444 	uint16_t	src_port;
42445 	/*
42446 	 * The value of source port mask to be used in filtering.
42447 	 * Applies to UDP and TCP traffic.
42448 	 */
42449 	uint16_t	src_port_mask;
42450 	/*
42451 	 * The value of destination port to be used in filtering.
42452 	 * Applies to UDP and TCP traffic.
42453 	 */
42454 	uint16_t	dst_port;
42455 	/*
42456 	 * The value of destination port mask to be used in
42457 	 * filtering.
42458 	 * Applies to UDP and TCP traffic.
42459 	 */
42460 	uint16_t	dst_port_mask;
42461 	/*
42462 	 * This is the ID of the filter that goes along with
42463 	 * the pri_hint.
42464 	 */
42465 	uint64_t	ntuple_filter_id_hint;
42466 } __rte_packed;
42467 
42468 /* hwrm_cfa_ntuple_filter_alloc_output (size:192b/24B) */
42469 struct hwrm_cfa_ntuple_filter_alloc_output {
42470 	/* The specific error status for the command. */
42471 	uint16_t	error_code;
42472 	/* The HWRM command request type. */
42473 	uint16_t	req_type;
42474 	/* The sequence ID from the original command. */
42475 	uint16_t	seq_id;
42476 	/* The length of the response data in number of bytes. */
42477 	uint16_t	resp_len;
42478 	/* This value is an opaque id into CFA data structures. */
42479 	uint64_t	ntuple_filter_id;
42480 	/*
42481 	 * The flow id value in bit 0-29 is the actual ID of the flow
42482 	 * associated with this filter and it shall be used to match
42483 	 * and associate the flow identifier returned in completion
42484 	 * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
42485 	 * shall indicate no valid flow id.
42486 	 */
42487 	uint32_t	flow_id;
42488 	/* Indicate the flow id value. */
42489 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
42490 		UINT32_C(0x3fffffff)
42491 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
42492 	/* Indicate type of the flow. */
42493 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE \
42494 		UINT32_C(0x40000000)
42495 	/*
42496 	 * If this bit set to 0, then it indicates that the flow is
42497 	 * internal flow.
42498 	 */
42499 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
42500 		(UINT32_C(0x0) << 30)
42501 	/*
42502 	 * If this bit is set to 1, then it indicates that the flow is
42503 	 * external flow.
42504 	 */
42505 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
42506 		(UINT32_C(0x1) << 30)
42507 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
42508 		HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
42509 	/* Indicate the flow direction. */
42510 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR \
42511 		UINT32_C(0x80000000)
42512 	/* If this bit set to 0, then it indicates rx flow. */
42513 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
42514 		(UINT32_C(0x0) << 31)
42515 	/* If this bit is set to 1, then it indicates that tx flow. */
42516 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
42517 		(UINT32_C(0x1) << 31)
42518 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
42519 		HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX
42520 	uint8_t	unused_0[3];
42521 	/*
42522 	 * This field is used in Output records to indicate that the output
42523 	 * is completely written to RAM. This field should be read as '1'
42524 	 * to indicate that the output has been completely written.
42525 	 * When writing a command completion or response to an internal
42526 	 * processor, the order of writes has to be such that this field is
42527 	 * written last.
42528 	 */
42529 	uint8_t	valid;
42530 } __rte_packed;
42531 
42532 /* hwrm_cfa_ntuple_filter_alloc_cmd_err (size:64b/8B) */
42533 struct hwrm_cfa_ntuple_filter_alloc_cmd_err {
42534 	/*
42535 	 * command specific error codes that goes to
42536 	 * the cmd_err field in Common HWRM Error Response.
42537 	 */
42538 	uint8_t	code;
42539 	/* Unknown error */
42540 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_UNKNOWN \
42541 		UINT32_C(0x0)
42542 	/* Unable to complete operation due to conflict with Rx Mask VLAN */
42543 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_RX_MASK_VLAN_CONFLICT_ERR \
42544 		UINT32_C(0x1)
42545 	#define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_LAST \
42546 		HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_RX_MASK_VLAN_CONFLICT_ERR
42547 	uint8_t	unused_0[7];
42548 } __rte_packed;
42549 
42550 /*******************************
42551  * hwrm_cfa_ntuple_filter_free *
42552  *******************************/
42553 
42554 
42555 /* hwrm_cfa_ntuple_filter_free_input (size:192b/24B) */
42556 struct hwrm_cfa_ntuple_filter_free_input {
42557 	/* The HWRM command request type. */
42558 	uint16_t	req_type;
42559 	/*
42560 	 * The completion ring to send the completion event on. This should
42561 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
42562 	 */
42563 	uint16_t	cmpl_ring;
42564 	/*
42565 	 * The sequence ID is used by the driver for tracking multiple
42566 	 * commands. This ID is treated as opaque data by the firmware and
42567 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
42568 	 */
42569 	uint16_t	seq_id;
42570 	/*
42571 	 * The target ID of the command:
42572 	 * * 0x0-0xFFF8 - The function ID
42573 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42574 	 * * 0xFFFD - Reserved for user-space HWRM interface
42575 	 * * 0xFFFF - HWRM
42576 	 */
42577 	uint16_t	target_id;
42578 	/*
42579 	 * A physical address pointer pointing to a host buffer that the
42580 	 * command's response data will be written. This can be either a host
42581 	 * physical address (HPA) or a guest physical address (GPA) and must
42582 	 * point to a physically contiguous block of memory.
42583 	 */
42584 	uint64_t	resp_addr;
42585 	/* This value is an opaque id into CFA data structures. */
42586 	uint64_t	ntuple_filter_id;
42587 } __rte_packed;
42588 
42589 /* hwrm_cfa_ntuple_filter_free_output (size:128b/16B) */
42590 struct hwrm_cfa_ntuple_filter_free_output {
42591 	/* The specific error status for the command. */
42592 	uint16_t	error_code;
42593 	/* The HWRM command request type. */
42594 	uint16_t	req_type;
42595 	/* The sequence ID from the original command. */
42596 	uint16_t	seq_id;
42597 	/* The length of the response data in number of bytes. */
42598 	uint16_t	resp_len;
42599 	uint8_t	unused_0[7];
42600 	/*
42601 	 * This field is used in Output records to indicate that the output
42602 	 * is completely written to RAM. This field should be read as '1'
42603 	 * to indicate that the output has been completely written.
42604 	 * When writing a command completion or response to an internal
42605 	 * processor, the order of writes has to be such that this field is
42606 	 * written last.
42607 	 */
42608 	uint8_t	valid;
42609 } __rte_packed;
42610 
42611 /******************************
42612  * hwrm_cfa_ntuple_filter_cfg *
42613  ******************************/
42614 
42615 
42616 /* hwrm_cfa_ntuple_filter_cfg_input (size:384b/48B) */
42617 struct hwrm_cfa_ntuple_filter_cfg_input {
42618 	/* The HWRM command request type. */
42619 	uint16_t	req_type;
42620 	/*
42621 	 * The completion ring to send the completion event on. This should
42622 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
42623 	 */
42624 	uint16_t	cmpl_ring;
42625 	/*
42626 	 * The sequence ID is used by the driver for tracking multiple
42627 	 * commands. This ID is treated as opaque data by the firmware and
42628 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
42629 	 */
42630 	uint16_t	seq_id;
42631 	/*
42632 	 * The target ID of the command:
42633 	 * * 0x0-0xFFF8 - The function ID
42634 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42635 	 * * 0xFFFD - Reserved for user-space HWRM interface
42636 	 * * 0xFFFF - HWRM
42637 	 */
42638 	uint16_t	target_id;
42639 	/*
42640 	 * A physical address pointer pointing to a host buffer that the
42641 	 * command's response data will be written. This can be either a host
42642 	 * physical address (HPA) or a guest physical address (GPA) and must
42643 	 * point to a physically contiguous block of memory.
42644 	 */
42645 	uint64_t	resp_addr;
42646 	uint32_t	enables;
42647 	/*
42648 	 * This bit must be '1' for the new_dst_id field to be
42649 	 * configured.
42650 	 */
42651 	#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_DST_ID \
42652 		UINT32_C(0x1)
42653 	/*
42654 	 * This bit must be '1' for the new_mirror_vnic_id field to be
42655 	 * configured.
42656 	 */
42657 	#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID \
42658 		UINT32_C(0x2)
42659 	/*
42660 	 * This bit must be '1' for the new_meter_instance_id field to be
42661 	 * configured.
42662 	 */
42663 	#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_METER_INSTANCE_ID \
42664 		UINT32_C(0x4)
42665 	uint32_t	flags;
42666 	/*
42667 	 * Setting this bit to 1 indicates that dest_id field contains FID.
42668 	 * Setting this to 0 indicates that dest_id field contains VNIC or
42669 	 * VPORT.
42670 	 */
42671 	#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_FLAGS_DEST_FID \
42672 		UINT32_C(0x1)
42673 	/*
42674 	 * Setting of this flag indicates that the new_dst_id field contains
42675 	 * RFS ring table index. If this is not set it indicates new_dst_id
42676 	 * is VNIC or VPORT or function ID.  Note dest_fid and
42677 	 * dest_rfs_ring_idx can’t be set at the same time.
42678 	 */
42679 	#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_FLAGS_DEST_RFS_RING_IDX \
42680 		UINT32_C(0x2)
42681 	/*
42682 	 * Setting of this flag indicates that when the ntuple filter is
42683 	 * created, the L2 context should not be used in the filter.  This
42684 	 * allows packet from different L2 contexts to match and be directed
42685 	 * to the same destination.
42686 	 */
42687 	#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_FLAGS_NO_L2_CONTEXT \
42688 		UINT32_C(0x4)
42689 	/* This value is an opaque id into CFA data structures. */
42690 	uint64_t	ntuple_filter_id;
42691 	/*
42692 	 * If set, this value shall represent the new
42693 	 * Logical VNIC ID of the destination VNIC for the RX
42694 	 * path and new network port id of the destination port for
42695 	 * the TX path.
42696 	 */
42697 	uint32_t	new_dst_id;
42698 	/*
42699 	 * New Logical VNIC ID of the VNIC where traffic is
42700 	 * mirrored.
42701 	 */
42702 	uint32_t	new_mirror_vnic_id;
42703 	/*
42704 	 * New meter to attach to the flow. Specifying the
42705 	 * invalid instance ID is used to remove any existing
42706 	 * meter from the flow.
42707 	 */
42708 	uint16_t	new_meter_instance_id;
42709 	/*
42710 	 * A value of 0xfff is considered invalid and implies the
42711 	 * instance is not configured.
42712 	 */
42713 	#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID \
42714 		UINT32_C(0xffff)
42715 	#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_LAST \
42716 		HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID
42717 	uint8_t	unused_1[6];
42718 } __rte_packed;
42719 
42720 /* hwrm_cfa_ntuple_filter_cfg_output (size:128b/16B) */
42721 struct hwrm_cfa_ntuple_filter_cfg_output {
42722 	/* The specific error status for the command. */
42723 	uint16_t	error_code;
42724 	/* The HWRM command request type. */
42725 	uint16_t	req_type;
42726 	/* The sequence ID from the original command. */
42727 	uint16_t	seq_id;
42728 	/* The length of the response data in number of bytes. */
42729 	uint16_t	resp_len;
42730 	uint8_t	unused_0[7];
42731 	/*
42732 	 * This field is used in Output records to indicate that the output
42733 	 * is completely written to RAM. This field should be read as '1'
42734 	 * to indicate that the output has been completely written.
42735 	 * When writing a command completion or response to an internal
42736 	 * processor, the order of writes has to be such that this field is
42737 	 * written last.
42738 	 */
42739 	uint8_t	valid;
42740 } __rte_packed;
42741 
42742 /**************************
42743  * hwrm_cfa_em_flow_alloc *
42744  **************************/
42745 
42746 
42747 /* hwrm_cfa_em_flow_alloc_input (size:896b/112B) */
42748 struct hwrm_cfa_em_flow_alloc_input {
42749 	/* The HWRM command request type. */
42750 	uint16_t	req_type;
42751 	/*
42752 	 * The completion ring to send the completion event on. This should
42753 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
42754 	 */
42755 	uint16_t	cmpl_ring;
42756 	/*
42757 	 * The sequence ID is used by the driver for tracking multiple
42758 	 * commands. This ID is treated as opaque data by the firmware and
42759 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
42760 	 */
42761 	uint16_t	seq_id;
42762 	/*
42763 	 * The target ID of the command:
42764 	 * * 0x0-0xFFF8 - The function ID
42765 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42766 	 * * 0xFFFD - Reserved for user-space HWRM interface
42767 	 * * 0xFFFF - HWRM
42768 	 */
42769 	uint16_t	target_id;
42770 	/*
42771 	 * A physical address pointer pointing to a host buffer that the
42772 	 * command's response data will be written. This can be either a host
42773 	 * physical address (HPA) or a guest physical address (GPA) and must
42774 	 * point to a physically contiguous block of memory.
42775 	 */
42776 	uint64_t	resp_addr;
42777 	uint32_t	flags;
42778 	/*
42779 	 * Enumeration denoting the RX, TX type of the resource.
42780 	 * This enumeration is used for resources that are similar for both
42781 	 * TX and RX paths of the chip.
42782 	 */
42783 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH         UINT32_C(0x1)
42784 	/* tx path */
42785 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_TX        UINT32_C(0x0)
42786 	/* rx path */
42787 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_RX        UINT32_C(0x1)
42788 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_LAST \
42789 		HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_RX
42790 	/*
42791 	 * Setting of this flag indicates enabling of a byte counter for a
42792 	 * given flow.
42793 	 */
42794 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_BYTE_CTR     UINT32_C(0x2)
42795 	/*
42796 	 * Setting of this flag indicates enabling of a packet counter for a
42797 	 * given flow.
42798 	 */
42799 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PKT_CTR      UINT32_C(0x4)
42800 	/*
42801 	 * Setting of this flag indicates de-capsulation action for the
42802 	 * given flow.
42803 	 */
42804 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_DECAP        UINT32_C(0x8)
42805 	/*
42806 	 * Setting of this flag indicates encapsulation action for the
42807 	 * given flow.
42808 	 */
42809 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_ENCAP        UINT32_C(0x10)
42810 	/*
42811 	 * Setting of this flag indicates drop action. If this flag is not
42812 	 * set, then it should be considered accept action.
42813 	 */
42814 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_DROP         UINT32_C(0x20)
42815 	/*
42816 	 * Setting of this flag indicates that a meter is expected to be
42817 	 * attached to this flow. This hint can be used when choosing the
42818 	 * action record format required for the flow.
42819 	 */
42820 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_METER        UINT32_C(0x40)
42821 	uint32_t	enables;
42822 	/*
42823 	 * This bit must be '1' for the l2_filter_id field to be
42824 	 * configured.
42825 	 */
42826 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_L2_FILTER_ID \
42827 		UINT32_C(0x1)
42828 	/*
42829 	 * This bit must be '1' for the tunnel_type field to be
42830 	 * configured.
42831 	 */
42832 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
42833 		UINT32_C(0x2)
42834 	/*
42835 	 * This bit must be '1' for the tunnel_id field to be
42836 	 * configured.
42837 	 */
42838 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_TUNNEL_ID \
42839 		UINT32_C(0x4)
42840 	/*
42841 	 * This bit must be '1' for the src_macaddr field to be
42842 	 * configured.
42843 	 */
42844 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_MACADDR \
42845 		UINT32_C(0x8)
42846 	/*
42847 	 * This bit must be '1' for the dst_macaddr field to be
42848 	 * configured.
42849 	 */
42850 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_MACADDR \
42851 		UINT32_C(0x10)
42852 	/*
42853 	 * This bit must be '1' for the ovlan_vid field to be
42854 	 * configured.
42855 	 */
42856 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_OVLAN_VID \
42857 		UINT32_C(0x20)
42858 	/*
42859 	 * This bit must be '1' for the ivlan_vid field to be
42860 	 * configured.
42861 	 */
42862 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IVLAN_VID \
42863 		UINT32_C(0x40)
42864 	/*
42865 	 * This bit must be '1' for the ethertype field to be
42866 	 * configured.
42867 	 */
42868 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_ETHERTYPE \
42869 		UINT32_C(0x80)
42870 	/*
42871 	 * This bit must be '1' for the src_ipaddr field to be
42872 	 * configured.
42873 	 */
42874 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_IPADDR \
42875 		UINT32_C(0x100)
42876 	/*
42877 	 * This bit must be '1' for the dst_ipaddr field to be
42878 	 * configured.
42879 	 */
42880 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_IPADDR \
42881 		UINT32_C(0x200)
42882 	/*
42883 	 * This bit must be '1' for the ipaddr_type field to be
42884 	 * configured.
42885 	 */
42886 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IPADDR_TYPE \
42887 		UINT32_C(0x400)
42888 	/*
42889 	 * This bit must be '1' for the ip_protocol field to be
42890 	 * configured.
42891 	 */
42892 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IP_PROTOCOL \
42893 		UINT32_C(0x800)
42894 	/*
42895 	 * This bit must be '1' for the src_port field to be
42896 	 * configured.
42897 	 */
42898 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_PORT \
42899 		UINT32_C(0x1000)
42900 	/*
42901 	 * This bit must be '1' for the dst_port field to be
42902 	 * configured.
42903 	 */
42904 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_PORT \
42905 		UINT32_C(0x2000)
42906 	/*
42907 	 * This bit must be '1' for the dst_id field to be
42908 	 * configured.
42909 	 */
42910 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_ID \
42911 		UINT32_C(0x4000)
42912 	/*
42913 	 * This bit must be '1' for the mirror_vnic_id field to be
42914 	 * configured.
42915 	 */
42916 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
42917 		UINT32_C(0x8000)
42918 	/*
42919 	 * This bit must be '1' for the encap_record_id field to be
42920 	 * configured.
42921 	 */
42922 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_ENCAP_RECORD_ID \
42923 		UINT32_C(0x10000)
42924 	/*
42925 	 * This bit must be '1' for the meter_instance_id field to be
42926 	 * configured.
42927 	 */
42928 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_METER_INSTANCE_ID \
42929 		UINT32_C(0x20000)
42930 	/*
42931 	 * This value identifies a set of CFA data structures used for an L2
42932 	 * context.
42933 	 */
42934 	uint64_t	l2_filter_id;
42935 	/* Tunnel Type. */
42936 	uint8_t	tunnel_type;
42937 	/* Non-tunnel */
42938 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
42939 		UINT32_C(0x0)
42940 	/* Virtual eXtensible Local Area Network (VXLAN) */
42941 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
42942 		UINT32_C(0x1)
42943 	/* Network Virtualization Generic Routing Encapsulation (NVGRE) */
42944 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
42945 		UINT32_C(0x2)
42946 	/* Generic Routing Encapsulation (GRE) inside Ethernet payload */
42947 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
42948 		UINT32_C(0x3)
42949 	/* IP in IP */
42950 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
42951 		UINT32_C(0x4)
42952 	/* Generic Network Virtualization Encapsulation (Geneve) */
42953 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
42954 		UINT32_C(0x5)
42955 	/* Multi-Protocol Label Switching (MPLS) */
42956 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
42957 		UINT32_C(0x6)
42958 	/* Stateless Transport Tunnel (STT) */
42959 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_STT \
42960 		UINT32_C(0x7)
42961 	/* Generic Routing Encapsulation (GRE) inside IP datagram payload */
42962 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
42963 		UINT32_C(0x8)
42964 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
42965 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
42966 		UINT32_C(0x9)
42967 	/*
42968 	 * Enhance Generic Routing Encapsulation (GRE version 1) inside IP
42969 	 * datagram payload
42970 	 */
42971 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
42972 		UINT32_C(0xa)
42973 	/* Use fixed layer 2 ether type of 0xFFFF */
42974 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
42975 		UINT32_C(0xb)
42976 	/*
42977 	 * IPV6 over virtual eXtensible Local Area Network with GPE header
42978 	 * (IPV6oVXLANGPE)
42979 	 */
42980 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
42981 		UINT32_C(0xc)
42982 	/* Any tunneled traffic */
42983 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
42984 		UINT32_C(0xff)
42985 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_LAST \
42986 		HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
42987 	uint8_t	unused_0[3];
42988 	/*
42989 	 * Tunnel identifier.
42990 	 * Virtual Network Identifier (VNI). Only valid with
42991 	 * tunnel_types VXLAN, NVGRE, and Geneve.
42992 	 * Only lower 24-bits of VNI field are used
42993 	 * in setting up the filter.
42994 	 */
42995 	uint32_t	tunnel_id;
42996 	/*
42997 	 * This value indicates the source MAC address in
42998 	 * the Ethernet header.
42999 	 */
43000 	uint8_t	src_macaddr[6];
43001 	/* The meter instance to attach to the flow. */
43002 	uint16_t	meter_instance_id;
43003 	/*
43004 	 * A value of 0xfff is considered invalid and implies the
43005 	 * instance is not configured.
43006 	 */
43007 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_INVALID \
43008 		UINT32_C(0xffff)
43009 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_LAST \
43010 		HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_INVALID
43011 	/*
43012 	 * This value indicates the destination MAC address in
43013 	 * the Ethernet header.
43014 	 */
43015 	uint8_t	dst_macaddr[6];
43016 	/*
43017 	 * This value indicates the VLAN ID of the outer VLAN tag
43018 	 * in the Ethernet header.
43019 	 */
43020 	uint16_t	ovlan_vid;
43021 	/*
43022 	 * This value indicates the VLAN ID of the inner VLAN tag
43023 	 * in the Ethernet header.
43024 	 */
43025 	uint16_t	ivlan_vid;
43026 	/* This value indicates the ethertype in the Ethernet header. */
43027 	uint16_t	ethertype;
43028 	/*
43029 	 * This value indicates the type of IP address.
43030 	 * 4 - IPv4
43031 	 * 6 - IPv6
43032 	 * All others are invalid.
43033 	 */
43034 	uint8_t	ip_addr_type;
43035 	/* invalid */
43036 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN UINT32_C(0x0)
43037 	/* IPv4 */
43038 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV4    UINT32_C(0x4)
43039 	/* IPv6 */
43040 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV6    UINT32_C(0x6)
43041 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_LAST \
43042 		HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV6
43043 	/*
43044 	 * The value of protocol filed in IP header.
43045 	 * Applies to UDP and TCP traffic.
43046 	 * 6 - TCP
43047 	 * 17 - UDP
43048 	 */
43049 	uint8_t	ip_protocol;
43050 	/* invalid */
43051 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN UINT32_C(0x0)
43052 	/* TCP */
43053 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_TCP     UINT32_C(0x6)
43054 	/* UDP */
43055 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UDP     UINT32_C(0x11)
43056 	#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_LAST \
43057 		HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UDP
43058 	uint8_t	unused_1[2];
43059 	/*
43060 	 * The value of source IP address to be used in filtering.
43061 	 * For IPv4, first four bytes represent the IP address.
43062 	 */
43063 	uint32_t	src_ipaddr[4];
43064 	/*
43065 	 * big_endian = True
43066 	 *     The value of destination IP address to be used in filtering.
43067 	 *     For IPv4, first four bytes represent the IP address.
43068 	 */
43069 	uint32_t	dst_ipaddr[4];
43070 	/*
43071 	 * The value of source port to be used in filtering.
43072 	 * Applies to UDP and TCP traffic.
43073 	 */
43074 	uint16_t	src_port;
43075 	/*
43076 	 * The value of destination port to be used in filtering.
43077 	 * Applies to UDP and TCP traffic.
43078 	 */
43079 	uint16_t	dst_port;
43080 	/*
43081 	 * If set, this value shall represent the
43082 	 * Logical VNIC ID of the destination VNIC for the RX
43083 	 * path and network port id of the destination port for
43084 	 * the TX path.
43085 	 */
43086 	uint16_t	dst_id;
43087 	/*
43088 	 * Logical VNIC ID of the VNIC where traffic is
43089 	 * mirrored.
43090 	 */
43091 	uint16_t	mirror_vnic_id;
43092 	/* Logical ID of the encapsulation record. */
43093 	uint32_t	encap_record_id;
43094 	uint8_t	unused_2[4];
43095 } __rte_packed;
43096 
43097 /* hwrm_cfa_em_flow_alloc_output (size:192b/24B) */
43098 struct hwrm_cfa_em_flow_alloc_output {
43099 	/* The specific error status for the command. */
43100 	uint16_t	error_code;
43101 	/* The HWRM command request type. */
43102 	uint16_t	req_type;
43103 	/* The sequence ID from the original command. */
43104 	uint16_t	seq_id;
43105 	/* The length of the response data in number of bytes. */
43106 	uint16_t	resp_len;
43107 	/* This value is an opaque id into CFA data structures. */
43108 	uint64_t	em_filter_id;
43109 	/*
43110 	 * The flow id value in bit 0-29 is the actual ID of the flow
43111 	 * associated with this filter and it shall be used to match
43112 	 * and associate the flow identifier returned in completion
43113 	 * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
43114 	 * shall indicate no valid flow id.
43115 	 */
43116 	uint32_t	flow_id;
43117 	/* Indicate the flow id value. */
43118 	#define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
43119 		UINT32_C(0x3fffffff)
43120 	#define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
43121 	/* Indicate type of the flow. */
43122 	#define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE \
43123 		UINT32_C(0x40000000)
43124 	/*
43125 	 * If this bit set to 0, then it indicates that the flow is
43126 	 * internal flow.
43127 	 */
43128 	#define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
43129 		(UINT32_C(0x0) << 30)
43130 	/*
43131 	 * If this bit is set to 1, then it indicates that the flow is
43132 	 * external flow.
43133 	 */
43134 	#define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
43135 		(UINT32_C(0x1) << 30)
43136 	#define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
43137 		HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
43138 	/* Indicate the flow direction. */
43139 	#define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR \
43140 		UINT32_C(0x80000000)
43141 	/* If this bit set to 0, then it indicates rx flow. */
43142 	#define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
43143 		(UINT32_C(0x0) << 31)
43144 	/* If this bit is set to 1, then it indicates that tx flow. */
43145 	#define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
43146 		(UINT32_C(0x1) << 31)
43147 	#define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
43148 		HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_TX
43149 	uint8_t	unused_0[3];
43150 	/*
43151 	 * This field is used in Output records to indicate that the output
43152 	 * is completely written to RAM. This field should be read as '1'
43153 	 * to indicate that the output has been completely written.
43154 	 * When writing a command completion or response to an internal
43155 	 * processor, the order of writes has to be such that this field is
43156 	 * written last.
43157 	 */
43158 	uint8_t	valid;
43159 } __rte_packed;
43160 
43161 /*************************
43162  * hwrm_cfa_em_flow_free *
43163  *************************/
43164 
43165 
43166 /* hwrm_cfa_em_flow_free_input (size:192b/24B) */
43167 struct hwrm_cfa_em_flow_free_input {
43168 	/* The HWRM command request type. */
43169 	uint16_t	req_type;
43170 	/*
43171 	 * The completion ring to send the completion event on. This should
43172 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
43173 	 */
43174 	uint16_t	cmpl_ring;
43175 	/*
43176 	 * The sequence ID is used by the driver for tracking multiple
43177 	 * commands. This ID is treated as opaque data by the firmware and
43178 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
43179 	 */
43180 	uint16_t	seq_id;
43181 	/*
43182 	 * The target ID of the command:
43183 	 * * 0x0-0xFFF8 - The function ID
43184 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43185 	 * * 0xFFFD - Reserved for user-space HWRM interface
43186 	 * * 0xFFFF - HWRM
43187 	 */
43188 	uint16_t	target_id;
43189 	/*
43190 	 * A physical address pointer pointing to a host buffer that the
43191 	 * command's response data will be written. This can be either a host
43192 	 * physical address (HPA) or a guest physical address (GPA) and must
43193 	 * point to a physically contiguous block of memory.
43194 	 */
43195 	uint64_t	resp_addr;
43196 	/* This value is an opaque id into CFA data structures. */
43197 	uint64_t	em_filter_id;
43198 } __rte_packed;
43199 
43200 /* hwrm_cfa_em_flow_free_output (size:128b/16B) */
43201 struct hwrm_cfa_em_flow_free_output {
43202 	/* The specific error status for the command. */
43203 	uint16_t	error_code;
43204 	/* The HWRM command request type. */
43205 	uint16_t	req_type;
43206 	/* The sequence ID from the original command. */
43207 	uint16_t	seq_id;
43208 	/* The length of the response data in number of bytes. */
43209 	uint16_t	resp_len;
43210 	uint8_t	unused_0[7];
43211 	/*
43212 	 * This field is used in Output records to indicate that the output
43213 	 * is completely written to RAM. This field should be read as '1'
43214 	 * to indicate that the output has been completely written.
43215 	 * When writing a command completion or response to an internal
43216 	 * processor, the order of writes has to be such that this field is
43217 	 * written last.
43218 	 */
43219 	uint8_t	valid;
43220 } __rte_packed;
43221 
43222 /************************
43223  * hwrm_cfa_meter_qcaps *
43224  ************************/
43225 
43226 
43227 /* hwrm_cfa_meter_qcaps_input (size:128b/16B) */
43228 struct hwrm_cfa_meter_qcaps_input {
43229 	/* The HWRM command request type. */
43230 	uint16_t	req_type;
43231 	/*
43232 	 * The completion ring to send the completion event on. This should
43233 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
43234 	 */
43235 	uint16_t	cmpl_ring;
43236 	/*
43237 	 * The sequence ID is used by the driver for tracking multiple
43238 	 * commands. This ID is treated as opaque data by the firmware and
43239 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
43240 	 */
43241 	uint16_t	seq_id;
43242 	/*
43243 	 * The target ID of the command:
43244 	 * * 0x0-0xFFF8 - The function ID
43245 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43246 	 * * 0xFFFD - Reserved for user-space HWRM interface
43247 	 * * 0xFFFF - HWRM
43248 	 */
43249 	uint16_t	target_id;
43250 	/*
43251 	 * A physical address pointer pointing to a host buffer that the
43252 	 * command's response data will be written. This can be either a host
43253 	 * physical address (HPA) or a guest physical address (GPA) and must
43254 	 * point to a physically contiguous block of memory.
43255 	 */
43256 	uint64_t	resp_addr;
43257 } __rte_packed;
43258 
43259 /* hwrm_cfa_meter_qcaps_output (size:320b/40B) */
43260 struct hwrm_cfa_meter_qcaps_output {
43261 	/* The specific error status for the command. */
43262 	uint16_t	error_code;
43263 	/* The HWRM command request type. */
43264 	uint16_t	req_type;
43265 	/* The sequence ID from the original command. */
43266 	uint16_t	seq_id;
43267 	/* The length of the response data in number of bytes. */
43268 	uint16_t	resp_len;
43269 	uint32_t	flags;
43270 	/*
43271 	 * Enumeration denoting the clock at which the Meter is running
43272 	 * with. This enumeration is used for resources that are similar
43273 	 * for both TX and RX paths of the chip.
43274 	 */
43275 	#define HWRM_CFA_METER_QCAPS_OUTPUT_FLAGS_CLOCK_MASK  UINT32_C(0xf)
43276 	#define HWRM_CFA_METER_QCAPS_OUTPUT_FLAGS_CLOCK_SFT   0
43277 	/* 375 MHz */
43278 	#define HWRM_CFA_METER_QCAPS_OUTPUT_FLAGS_CLOCK_375MHZ  UINT32_C(0x0)
43279 	/* 625 MHz */
43280 	#define HWRM_CFA_METER_QCAPS_OUTPUT_FLAGS_CLOCK_625MHZ  UINT32_C(0x1)
43281 	#define HWRM_CFA_METER_QCAPS_OUTPUT_FLAGS_CLOCK_LAST \
43282 		HWRM_CFA_METER_QCAPS_OUTPUT_FLAGS_CLOCK_625MHZ
43283 	uint8_t	unused_0[4];
43284 	/*
43285 	 * The minimum guaranteed number of tx meter profiles supported
43286 	 * for this function.
43287 	 */
43288 	uint16_t	min_tx_profile;
43289 	/*
43290 	 * The maximum non-guaranteed number of tx meter profiles supported
43291 	 * for this function.
43292 	 */
43293 	uint16_t	max_tx_profile;
43294 	/*
43295 	 * The minimum guaranteed number of rx meter profiles supported
43296 	 * for this function.
43297 	 */
43298 	uint16_t	min_rx_profile;
43299 	/*
43300 	 * The maximum non-guaranteed number of rx meter profiles supported
43301 	 * for this function.
43302 	 */
43303 	uint16_t	max_rx_profile;
43304 	/*
43305 	 * The minimum guaranteed number of tx meter instances supported
43306 	 * for this function.
43307 	 */
43308 	uint16_t	min_tx_instance;
43309 	/*
43310 	 * The maximum non-guaranteed number of tx meter instances supported
43311 	 * for this function.
43312 	 */
43313 	uint16_t	max_tx_instance;
43314 	/*
43315 	 * The minimum guaranteed number of rx meter instances supported
43316 	 * for this function.
43317 	 */
43318 	uint16_t	min_rx_instance;
43319 	/*
43320 	 * The maximum non-guaranteed number of rx meter instances supported
43321 	 * for this function.
43322 	 */
43323 	uint16_t	max_rx_instance;
43324 	uint8_t	unused_1[7];
43325 	/*
43326 	 * This field is used in Output records to indicate that the output
43327 	 * is completely written to RAM. This field should be read as '1'
43328 	 * to indicate that the output has been completely written.
43329 	 * When writing a command completion or response to an internal
43330 	 * processor, the order of writes has to be such that this field is
43331 	 * written last.
43332 	 */
43333 	uint8_t	valid;
43334 } __rte_packed;
43335 
43336 /********************************
43337  * hwrm_cfa_meter_profile_alloc *
43338  ********************************/
43339 
43340 
43341 /* hwrm_cfa_meter_profile_alloc_input (size:320b/40B) */
43342 struct hwrm_cfa_meter_profile_alloc_input {
43343 	/* The HWRM command request type. */
43344 	uint16_t	req_type;
43345 	/*
43346 	 * The completion ring to send the completion event on. This should
43347 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
43348 	 */
43349 	uint16_t	cmpl_ring;
43350 	/*
43351 	 * The sequence ID is used by the driver for tracking multiple
43352 	 * commands. This ID is treated as opaque data by the firmware and
43353 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
43354 	 */
43355 	uint16_t	seq_id;
43356 	/*
43357 	 * The target ID of the command:
43358 	 * * 0x0-0xFFF8 - The function ID
43359 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43360 	 * * 0xFFFD - Reserved for user-space HWRM interface
43361 	 * * 0xFFFF - HWRM
43362 	 */
43363 	uint16_t	target_id;
43364 	/*
43365 	 * A physical address pointer pointing to a host buffer that the
43366 	 * command's response data will be written. This can be either a host
43367 	 * physical address (HPA) or a guest physical address (GPA) and must
43368 	 * point to a physically contiguous block of memory.
43369 	 */
43370 	uint64_t	resp_addr;
43371 	uint8_t	flags;
43372 	/*
43373 	 * Enumeration denoting the RX, TX type of the resource.
43374 	 * This enumeration is used for resources that are similar for both
43375 	 * TX and RX paths of the chip.
43376 	 */
43377 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH     UINT32_C(0x1)
43378 	/* tx path */
43379 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH_TX \
43380 		UINT32_C(0x0)
43381 	/* rx path */
43382 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH_RX \
43383 		UINT32_C(0x1)
43384 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH_LAST \
43385 		HWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH_RX
43386 	/* The meter algorithm type. */
43387 	uint8_t	meter_type;
43388 	/* RFC 2697 (srTCM) */
43389 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_RFC2697 \
43390 		UINT32_C(0x0)
43391 	/* RFC 2698 (trTCM) */
43392 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_RFC2698 \
43393 		UINT32_C(0x1)
43394 	/* RFC 4115 (trTCM) */
43395 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_RFC4115 \
43396 		UINT32_C(0x2)
43397 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_LAST \
43398 		HWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_RFC4115
43399 	/*
43400 	 * This field is reserved for the future use.
43401 	 * It shall be set to 0.
43402 	 */
43403 	uint16_t	reserved1;
43404 	/*
43405 	 * This field is reserved for the future use.
43406 	 * It shall be set to 0.
43407 	 */
43408 	uint32_t	reserved2;
43409 	/* A meter rate specified in bytes-per-second. */
43410 	uint32_t	commit_rate;
43411 	/* The bandwidth value. */
43412 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_MASK \
43413 		UINT32_C(0xfffffff)
43414 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_SFT \
43415 		0
43416 	/* The granularity of the value (bits or bytes). */
43417 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE \
43418 		UINT32_C(0x10000000)
43419 	/* Value is in bits. */
43420 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE_BITS \
43421 		(UINT32_C(0x0) << 28)
43422 	/* Value is in bytes. */
43423 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE_BYTES \
43424 		(UINT32_C(0x1) << 28)
43425 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE_LAST \
43426 		HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE_BYTES
43427 	/* bw_value_unit is 3 b */
43428 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_MASK \
43429 		UINT32_C(0xe0000000)
43430 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_SFT \
43431 		29
43432 	/* Value is in Mb or MB (base 10). */
43433 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_MEGA \
43434 		(UINT32_C(0x0) << 29)
43435 	/* Value is in Kb or KB (base 10). */
43436 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_KILO \
43437 		(UINT32_C(0x2) << 29)
43438 	/* Value is in bits or bytes. */
43439 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_BASE \
43440 		(UINT32_C(0x4) << 29)
43441 	/* Value is in Gb or GB (base 10). */
43442 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_GIGA \
43443 		(UINT32_C(0x6) << 29)
43444 	/* Value is in 1/100th of a percentage of total bandwidth. */
43445 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_PERCENT1_100 \
43446 		(UINT32_C(0x1) << 29)
43447 	/* Raw value */
43448 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_RAW \
43449 		(UINT32_C(0x7) << 29)
43450 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_LAST \
43451 		HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_RAW
43452 	/* A meter burst size specified in bytes. */
43453 	uint32_t	commit_burst;
43454 	/* The bandwidth value. */
43455 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_MASK \
43456 		UINT32_C(0xfffffff)
43457 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_SFT \
43458 		0
43459 	/* The granularity of the value (bits or bytes). */
43460 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE \
43461 		UINT32_C(0x10000000)
43462 	/* Value is in bits. */
43463 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE_BITS \
43464 		(UINT32_C(0x0) << 28)
43465 	/* Value is in bytes. */
43466 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE_BYTES \
43467 		(UINT32_C(0x1) << 28)
43468 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE_LAST \
43469 		HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE_BYTES
43470 	/* bw_value_unit is 3 b */
43471 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_MASK \
43472 		UINT32_C(0xe0000000)
43473 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_SFT \
43474 		29
43475 	/* Value is in Mb or MB (base 10). */
43476 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_MEGA \
43477 		(UINT32_C(0x0) << 29)
43478 	/* Value is in Kb or KB (base 10). */
43479 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_KILO \
43480 		(UINT32_C(0x2) << 29)
43481 	/* Value is in bits or bytes. */
43482 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_BASE \
43483 		(UINT32_C(0x4) << 29)
43484 	/* Value is in Gb or GB (base 10). */
43485 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_GIGA \
43486 		(UINT32_C(0x6) << 29)
43487 	/* Value is in 1/100th of a percentage of total bandwidth. */
43488 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_PERCENT1_100 \
43489 		(UINT32_C(0x1) << 29)
43490 	/* Invalid value */
43491 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_INVALID \
43492 		(UINT32_C(0x7) << 29)
43493 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_LAST \
43494 		HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_INVALID
43495 	/* A meter rate specified in bytes-per-second. */
43496 	uint32_t	excess_peak_rate;
43497 	/* The bandwidth value. */
43498 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_MASK \
43499 		UINT32_C(0xfffffff)
43500 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_SFT \
43501 		0
43502 	/* The granularity of the value (bits or bytes). */
43503 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE \
43504 		UINT32_C(0x10000000)
43505 	/* Value is in bits. */
43506 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE_BITS \
43507 		(UINT32_C(0x0) << 28)
43508 	/* Value is in bytes. */
43509 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE_BYTES \
43510 		(UINT32_C(0x1) << 28)
43511 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE_LAST \
43512 		HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE_BYTES
43513 	/* bw_value_unit is 3 b */
43514 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_MASK \
43515 		UINT32_C(0xe0000000)
43516 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_SFT \
43517 		29
43518 	/* Value is in Mb or MB (base 10). */
43519 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_MEGA \
43520 		(UINT32_C(0x0) << 29)
43521 	/* Value is in Kb or KB (base 10). */
43522 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_KILO \
43523 		(UINT32_C(0x2) << 29)
43524 	/* Value is in bits or bytes. */
43525 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_BASE \
43526 		(UINT32_C(0x4) << 29)
43527 	/* Value is in Gb or GB (base 10). */
43528 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_GIGA \
43529 		(UINT32_C(0x6) << 29)
43530 	/* Value is in 1/100th of a percentage of total bandwidth. */
43531 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_PERCENT1_100 \
43532 		(UINT32_C(0x1) << 29)
43533 	/* Raw unit */
43534 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_RAW \
43535 		(UINT32_C(0x7) << 29)
43536 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_LAST \
43537 		HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_RAW
43538 	/* A meter burst size specified in bytes. */
43539 	uint32_t	excess_peak_burst;
43540 	/* The bandwidth value. */
43541 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_MASK \
43542 		UINT32_C(0xfffffff)
43543 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_SFT \
43544 		0
43545 	/* The granularity of the value (bits or bytes). */
43546 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE \
43547 		UINT32_C(0x10000000)
43548 	/* Value is in bits. */
43549 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE_BITS \
43550 		(UINT32_C(0x0) << 28)
43551 	/* Value is in bytes. */
43552 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE_BYTES \
43553 		(UINT32_C(0x1) << 28)
43554 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE_LAST \
43555 		HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE_BYTES
43556 	/* bw_value_unit is 3 b */
43557 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_MASK \
43558 		UINT32_C(0xe0000000)
43559 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_SFT \
43560 		29
43561 	/* Value is in Mb or MB (base 10). */
43562 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_MEGA \
43563 		(UINT32_C(0x0) << 29)
43564 	/* Value is in Kb or KB (base 10). */
43565 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_KILO \
43566 		(UINT32_C(0x2) << 29)
43567 	/* Value is in bits or bytes. */
43568 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_BASE \
43569 		(UINT32_C(0x4) << 29)
43570 	/* Value is in Gb or GB (base 10). */
43571 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_GIGA \
43572 		(UINT32_C(0x6) << 29)
43573 	/* Value is in 1/100th of a percentage of total bandwidth. */
43574 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_PERCENT1_100 \
43575 		(UINT32_C(0x1) << 29)
43576 	/* Invalid unit */
43577 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_INVALID \
43578 		(UINT32_C(0x7) << 29)
43579 	#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_LAST \
43580 		HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_INVALID
43581 } __rte_packed;
43582 
43583 /* hwrm_cfa_meter_profile_alloc_output (size:128b/16B) */
43584 struct hwrm_cfa_meter_profile_alloc_output {
43585 	/* The specific error status for the command. */
43586 	uint16_t	error_code;
43587 	/* The HWRM command request type. */
43588 	uint16_t	req_type;
43589 	/* The sequence ID from the original command. */
43590 	uint16_t	seq_id;
43591 	/* The length of the response data in number of bytes. */
43592 	uint16_t	resp_len;
43593 	/* This value identifies a meter profile in CFA. */
43594 	uint16_t	meter_profile_id;
43595 	/*
43596 	 * A value of 0xfff is considered invalid and implies the
43597 	 * profile is not configured.
43598 	 */
43599 	#define HWRM_CFA_METER_PROFILE_ALLOC_OUTPUT_METER_PROFILE_ID_INVALID \
43600 		UINT32_C(0xffff)
43601 	#define HWRM_CFA_METER_PROFILE_ALLOC_OUTPUT_METER_PROFILE_ID_LAST \
43602 		HWRM_CFA_METER_PROFILE_ALLOC_OUTPUT_METER_PROFILE_ID_INVALID
43603 	uint8_t	unused_0[5];
43604 	/*
43605 	 * This field is used in Output records to indicate that the output
43606 	 * is completely written to RAM. This field should be read as '1'
43607 	 * to indicate that the output has been completely written.
43608 	 * When writing a command completion or response to an internal
43609 	 * processor, the order of writes has to be such that this field is
43610 	 * written last.
43611 	 */
43612 	uint8_t	valid;
43613 } __rte_packed;
43614 
43615 /*******************************
43616  * hwrm_cfa_meter_profile_free *
43617  *******************************/
43618 
43619 
43620 /* hwrm_cfa_meter_profile_free_input (size:192b/24B) */
43621 struct hwrm_cfa_meter_profile_free_input {
43622 	/* The HWRM command request type. */
43623 	uint16_t	req_type;
43624 	/*
43625 	 * The completion ring to send the completion event on. This should
43626 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
43627 	 */
43628 	uint16_t	cmpl_ring;
43629 	/*
43630 	 * The sequence ID is used by the driver for tracking multiple
43631 	 * commands. This ID is treated as opaque data by the firmware and
43632 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
43633 	 */
43634 	uint16_t	seq_id;
43635 	/*
43636 	 * The target ID of the command:
43637 	 * * 0x0-0xFFF8 - The function ID
43638 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43639 	 * * 0xFFFD - Reserved for user-space HWRM interface
43640 	 * * 0xFFFF - HWRM
43641 	 */
43642 	uint16_t	target_id;
43643 	/*
43644 	 * A physical address pointer pointing to a host buffer that the
43645 	 * command's response data will be written. This can be either a host
43646 	 * physical address (HPA) or a guest physical address (GPA) and must
43647 	 * point to a physically contiguous block of memory.
43648 	 */
43649 	uint64_t	resp_addr;
43650 	uint8_t	flags;
43651 	/*
43652 	 * Enumeration denoting the RX, TX type of the resource.
43653 	 * This enumeration is used for resources that are similar for both
43654 	 * TX and RX paths of the chip.
43655 	 */
43656 	#define HWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH     UINT32_C(0x1)
43657 	/* tx path */
43658 	#define HWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH_TX \
43659 		UINT32_C(0x0)
43660 	/* rx path */
43661 	#define HWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH_RX \
43662 		UINT32_C(0x1)
43663 	#define HWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH_LAST \
43664 		HWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH_RX
43665 	uint8_t	unused_0;
43666 	/* This value identifies a meter profile in CFA. */
43667 	uint16_t	meter_profile_id;
43668 	/*
43669 	 * A value of 0xfff is considered invalid and implies the
43670 	 * profile is not configured.
43671 	 */
43672 	#define HWRM_CFA_METER_PROFILE_FREE_INPUT_METER_PROFILE_ID_INVALID \
43673 		UINT32_C(0xffff)
43674 	#define HWRM_CFA_METER_PROFILE_FREE_INPUT_METER_PROFILE_ID_LAST \
43675 		HWRM_CFA_METER_PROFILE_FREE_INPUT_METER_PROFILE_ID_INVALID
43676 	uint8_t	unused_1[4];
43677 } __rte_packed;
43678 
43679 /* hwrm_cfa_meter_profile_free_output (size:128b/16B) */
43680 struct hwrm_cfa_meter_profile_free_output {
43681 	/* The specific error status for the command. */
43682 	uint16_t	error_code;
43683 	/* The HWRM command request type. */
43684 	uint16_t	req_type;
43685 	/* The sequence ID from the original command. */
43686 	uint16_t	seq_id;
43687 	/* The length of the response data in number of bytes. */
43688 	uint16_t	resp_len;
43689 	uint8_t	unused_0[7];
43690 	/*
43691 	 * This field is used in Output records to indicate that the output
43692 	 * is completely written to RAM. This field should be read as '1'
43693 	 * to indicate that the output has been completely written.
43694 	 * When writing a command completion or response to an internal
43695 	 * processor, the order of writes has to be such that this field is
43696 	 * written last.
43697 	 */
43698 	uint8_t	valid;
43699 } __rte_packed;
43700 
43701 /******************************
43702  * hwrm_cfa_meter_profile_cfg *
43703  ******************************/
43704 
43705 
43706 /* hwrm_cfa_meter_profile_cfg_input (size:320b/40B) */
43707 struct hwrm_cfa_meter_profile_cfg_input {
43708 	/* The HWRM command request type. */
43709 	uint16_t	req_type;
43710 	/*
43711 	 * The completion ring to send the completion event on. This should
43712 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
43713 	 */
43714 	uint16_t	cmpl_ring;
43715 	/*
43716 	 * The sequence ID is used by the driver for tracking multiple
43717 	 * commands. This ID is treated as opaque data by the firmware and
43718 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
43719 	 */
43720 	uint16_t	seq_id;
43721 	/*
43722 	 * The target ID of the command:
43723 	 * * 0x0-0xFFF8 - The function ID
43724 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43725 	 * * 0xFFFD - Reserved for user-space HWRM interface
43726 	 * * 0xFFFF - HWRM
43727 	 */
43728 	uint16_t	target_id;
43729 	/*
43730 	 * A physical address pointer pointing to a host buffer that the
43731 	 * command's response data will be written. This can be either a host
43732 	 * physical address (HPA) or a guest physical address (GPA) and must
43733 	 * point to a physically contiguous block of memory.
43734 	 */
43735 	uint64_t	resp_addr;
43736 	uint8_t	flags;
43737 	/*
43738 	 * Enumeration denoting the RX, TX type of the resource.
43739 	 * This enumeration is used for resources that are similar for both
43740 	 * TX and RX paths of the chip.
43741 	 */
43742 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH     UINT32_C(0x1)
43743 	/* tx path */
43744 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)
43745 	/* rx path */
43746 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)
43747 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH_LAST \
43748 		HWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH_RX
43749 	/* The meter algorithm type. */
43750 	uint8_t	meter_type;
43751 	/* RFC 2697 (srTCM) */
43752 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_RFC2697 \
43753 		UINT32_C(0x0)
43754 	/* RFC 2698 (trTCM) */
43755 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_RFC2698 \
43756 		UINT32_C(0x1)
43757 	/* RFC 4115 (trTCM) */
43758 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_RFC4115 \
43759 		UINT32_C(0x2)
43760 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_LAST \
43761 		HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_RFC4115
43762 	/* This value identifies a meter profile in CFA. */
43763 	uint16_t	meter_profile_id;
43764 	/*
43765 	 * A value of 0xfff is considered invalid and implies the
43766 	 * profile is not configured.
43767 	 */
43768 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_PROFILE_ID_INVALID \
43769 		UINT32_C(0xffff)
43770 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_PROFILE_ID_LAST \
43771 		HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_PROFILE_ID_INVALID
43772 	/*
43773 	 * This field is reserved for the future use.
43774 	 * It shall be set to 0.
43775 	 */
43776 	uint32_t	reserved;
43777 	/* A meter rate specified in bytes-per-second. */
43778 	uint32_t	commit_rate;
43779 	/* The bandwidth value. */
43780 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_MASK \
43781 		UINT32_C(0xfffffff)
43782 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_SFT \
43783 		0
43784 	/* The granularity of the value (bits or bytes). */
43785 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE \
43786 		UINT32_C(0x10000000)
43787 	/* Value is in bits. */
43788 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE_BITS \
43789 		(UINT32_C(0x0) << 28)
43790 	/* Value is in bytes. */
43791 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE_BYTES \
43792 		(UINT32_C(0x1) << 28)
43793 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE_LAST \
43794 		HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE_BYTES
43795 	/* bw_value_unit is 3 b */
43796 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_MASK \
43797 		UINT32_C(0xe0000000)
43798 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_SFT \
43799 		29
43800 	/* Value is in Mb or MB (base 10). */
43801 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_MEGA \
43802 		(UINT32_C(0x0) << 29)
43803 	/* Value is in Kb or KB (base 10). */
43804 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_KILO \
43805 		(UINT32_C(0x2) << 29)
43806 	/* Value is in bits or bytes. */
43807 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_BASE \
43808 		(UINT32_C(0x4) << 29)
43809 	/* Value is in Gb or GB (base 10). */
43810 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_GIGA \
43811 		(UINT32_C(0x6) << 29)
43812 	/* Value is in 1/100th of a percentage of total bandwidth. */
43813 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_PERCENT1_100 \
43814 		(UINT32_C(0x1) << 29)
43815 	/* Raw value */
43816 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_RAW \
43817 		(UINT32_C(0x7) << 29)
43818 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_LAST \
43819 		HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_RAW
43820 	/* A meter burst size specified in bytes. */
43821 	uint32_t	commit_burst;
43822 	/* The bandwidth value. */
43823 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_MASK \
43824 		UINT32_C(0xfffffff)
43825 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_SFT \
43826 		0
43827 	/* The granularity of the value (bits or bytes). */
43828 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE \
43829 		UINT32_C(0x10000000)
43830 	/* Value is in bits. */
43831 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE_BITS \
43832 		(UINT32_C(0x0) << 28)
43833 	/* Value is in bytes. */
43834 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE_BYTES \
43835 		(UINT32_C(0x1) << 28)
43836 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE_LAST \
43837 		HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE_BYTES
43838 	/* bw_value_unit is 3 b */
43839 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_MASK \
43840 		UINT32_C(0xe0000000)
43841 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_SFT \
43842 		29
43843 	/* Value is in Mb or MB (base 10). */
43844 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_MEGA \
43845 		(UINT32_C(0x0) << 29)
43846 	/* Value is in Kb or KB (base 10). */
43847 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_KILO \
43848 		(UINT32_C(0x2) << 29)
43849 	/* Value is in bits or bytes. */
43850 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_BASE \
43851 		(UINT32_C(0x4) << 29)
43852 	/* Value is in Gb or GB (base 10). */
43853 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_GIGA \
43854 		(UINT32_C(0x6) << 29)
43855 	/* Value is in 1/100th of a percentage of total bandwidth. */
43856 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_PERCENT1_100 \
43857 		(UINT32_C(0x1) << 29)
43858 	/* Invalid value */
43859 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_INVALID \
43860 		(UINT32_C(0x7) << 29)
43861 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_LAST \
43862 		HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_INVALID
43863 	/* A meter rate specified in bytes-per-second. */
43864 	uint32_t	excess_peak_rate;
43865 	/* The bandwidth value. */
43866 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_MASK \
43867 		UINT32_C(0xfffffff)
43868 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_SFT \
43869 		0
43870 	/* The granularity of the value (bits or bytes). */
43871 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE \
43872 		UINT32_C(0x10000000)
43873 	/* Value is in bits. */
43874 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE_BITS \
43875 		(UINT32_C(0x0) << 28)
43876 	/* Value is in bytes. */
43877 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE_BYTES \
43878 		(UINT32_C(0x1) << 28)
43879 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE_LAST \
43880 		HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE_BYTES
43881 	/* bw_value_unit is 3 b */
43882 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_MASK \
43883 		UINT32_C(0xe0000000)
43884 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_SFT \
43885 		29
43886 	/* Value is in Mb or MB (base 10). */
43887 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_MEGA \
43888 		(UINT32_C(0x0) << 29)
43889 	/* Value is in Kb or KB (base 10). */
43890 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_KILO \
43891 		(UINT32_C(0x2) << 29)
43892 	/* Value is in bits or bytes. */
43893 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_BASE \
43894 		(UINT32_C(0x4) << 29)
43895 	/* Value is in Gb or GB (base 10). */
43896 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_GIGA \
43897 		(UINT32_C(0x6) << 29)
43898 	/* Value is in 1/100th of a percentage of total bandwidth. */
43899 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_PERCENT1_100 \
43900 		(UINT32_C(0x1) << 29)
43901 	/* Raw unit */
43902 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_RAW \
43903 		(UINT32_C(0x7) << 29)
43904 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_LAST \
43905 		HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_RAW
43906 	/* A meter burst size specified in bytes. */
43907 	uint32_t	excess_peak_burst;
43908 	/* The bandwidth value. */
43909 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_MASK \
43910 		UINT32_C(0xfffffff)
43911 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_SFT \
43912 		0
43913 	/* The granularity of the value (bits or bytes). */
43914 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE \
43915 		UINT32_C(0x10000000)
43916 	/* Value is in bits. */
43917 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE_BITS \
43918 		(UINT32_C(0x0) << 28)
43919 	/* Value is in bytes. */
43920 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE_BYTES \
43921 		(UINT32_C(0x1) << 28)
43922 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE_LAST \
43923 		HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE_BYTES
43924 	/* bw_value_unit is 3 b */
43925 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_MASK \
43926 		UINT32_C(0xe0000000)
43927 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_SFT \
43928 		29
43929 	/* Value is in Mb or MB (base 10). */
43930 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_MEGA \
43931 		(UINT32_C(0x0) << 29)
43932 	/* Value is in Kb or KB (base 10). */
43933 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_KILO \
43934 		(UINT32_C(0x2) << 29)
43935 	/* Value is in bits or bytes. */
43936 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_BASE \
43937 		(UINT32_C(0x4) << 29)
43938 	/* Value is in Gb or GB (base 10). */
43939 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_GIGA \
43940 		(UINT32_C(0x6) << 29)
43941 	/* Value is in 1/100th of a percentage of total bandwidth. */
43942 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_PERCENT1_100 \
43943 		(UINT32_C(0x1) << 29)
43944 	/* Invalid unit */
43945 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_INVALID \
43946 		(UINT32_C(0x7) << 29)
43947 	#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_LAST \
43948 		HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_INVALID
43949 } __rte_packed;
43950 
43951 /* hwrm_cfa_meter_profile_cfg_output (size:128b/16B) */
43952 struct hwrm_cfa_meter_profile_cfg_output {
43953 	/* The specific error status for the command. */
43954 	uint16_t	error_code;
43955 	/* The HWRM command request type. */
43956 	uint16_t	req_type;
43957 	/* The sequence ID from the original command. */
43958 	uint16_t	seq_id;
43959 	/* The length of the response data in number of bytes. */
43960 	uint16_t	resp_len;
43961 	uint8_t	unused_0[7];
43962 	/*
43963 	 * This field is used in Output records to indicate that the output
43964 	 * is completely written to RAM. This field should be read as '1'
43965 	 * to indicate that the output has been completely written.
43966 	 * When writing a command completion or response to an internal
43967 	 * processor, the order of writes has to be such that this field is
43968 	 * written last.
43969 	 */
43970 	uint8_t	valid;
43971 } __rte_packed;
43972 
43973 /*********************************
43974  * hwrm_cfa_meter_instance_alloc *
43975  *********************************/
43976 
43977 
43978 /* hwrm_cfa_meter_instance_alloc_input (size:192b/24B) */
43979 struct hwrm_cfa_meter_instance_alloc_input {
43980 	/* The HWRM command request type. */
43981 	uint16_t	req_type;
43982 	/*
43983 	 * The completion ring to send the completion event on. This should
43984 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
43985 	 */
43986 	uint16_t	cmpl_ring;
43987 	/*
43988 	 * The sequence ID is used by the driver for tracking multiple
43989 	 * commands. This ID is treated as opaque data by the firmware and
43990 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
43991 	 */
43992 	uint16_t	seq_id;
43993 	/*
43994 	 * The target ID of the command:
43995 	 * * 0x0-0xFFF8 - The function ID
43996 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43997 	 * * 0xFFFD - Reserved for user-space HWRM interface
43998 	 * * 0xFFFF - HWRM
43999 	 */
44000 	uint16_t	target_id;
44001 	/*
44002 	 * A physical address pointer pointing to a host buffer that the
44003 	 * command's response data will be written. This can be either a host
44004 	 * physical address (HPA) or a guest physical address (GPA) and must
44005 	 * point to a physically contiguous block of memory.
44006 	 */
44007 	uint64_t	resp_addr;
44008 	uint8_t	flags;
44009 	/*
44010 	 * Enumeration denoting the RX, TX type of the resource.
44011 	 * This enumeration is used for resources that are similar for both
44012 	 * TX and RX paths of the chip.
44013 	 */
44014 	#define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH \
44015 		UINT32_C(0x1)
44016 	/* tx path */
44017 	#define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH_TX \
44018 		UINT32_C(0x0)
44019 	/* rx path */
44020 	#define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH_RX \
44021 		UINT32_C(0x1)
44022 	#define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH_LAST \
44023 		HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH_RX
44024 	uint8_t	unused_0;
44025 	/* This value identifies a meter profile in CFA. */
44026 	uint16_t	meter_profile_id;
44027 	/*
44028 	 * A value of 0xffff is considered invalid and implies the
44029 	 * profile is not configured.
44030 	 */
44031 	#define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_METER_PROFILE_ID_INVALID \
44032 		UINT32_C(0xffff)
44033 	#define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_METER_PROFILE_ID_LAST \
44034 		HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_METER_PROFILE_ID_INVALID
44035 	uint8_t	unused_1[4];
44036 } __rte_packed;
44037 
44038 /* hwrm_cfa_meter_instance_alloc_output (size:128b/16B) */
44039 struct hwrm_cfa_meter_instance_alloc_output {
44040 	/* The specific error status for the command. */
44041 	uint16_t	error_code;
44042 	/* The HWRM command request type. */
44043 	uint16_t	req_type;
44044 	/* The sequence ID from the original command. */
44045 	uint16_t	seq_id;
44046 	/* The length of the response data in number of bytes. */
44047 	uint16_t	resp_len;
44048 	/* This value identifies a meter instance in CFA. */
44049 	uint16_t	meter_instance_id;
44050 	/*
44051 	 * A value of 0xffff is considered invalid and implies the
44052 	 * instance is not configured.
44053 	 */
44054 	#define HWRM_CFA_METER_INSTANCE_ALLOC_OUTPUT_METER_INSTANCE_ID_INVALID \
44055 		UINT32_C(0xffff)
44056 	#define HWRM_CFA_METER_INSTANCE_ALLOC_OUTPUT_METER_INSTANCE_ID_LAST \
44057 		HWRM_CFA_METER_INSTANCE_ALLOC_OUTPUT_METER_INSTANCE_ID_INVALID
44058 	uint8_t	unused_0[5];
44059 	/*
44060 	 * This field is used in Output records to indicate that the output
44061 	 * is completely written to RAM. This field should be read as '1'
44062 	 * to indicate that the output has been completely written.
44063 	 * When writing a command completion or response to an internal
44064 	 * processor, the order of writes has to be such that this field is
44065 	 * written last.
44066 	 */
44067 	uint8_t	valid;
44068 } __rte_packed;
44069 
44070 /*******************************
44071  * hwrm_cfa_meter_instance_cfg *
44072  *******************************/
44073 
44074 
44075 /* hwrm_cfa_meter_instance_cfg_input (size:192b/24B) */
44076 struct hwrm_cfa_meter_instance_cfg_input {
44077 	/* The HWRM command request type. */
44078 	uint16_t	req_type;
44079 	/*
44080 	 * The completion ring to send the completion event on. This should
44081 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
44082 	 */
44083 	uint16_t	cmpl_ring;
44084 	/*
44085 	 * The sequence ID is used by the driver for tracking multiple
44086 	 * commands. This ID is treated as opaque data by the firmware and
44087 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
44088 	 */
44089 	uint16_t	seq_id;
44090 	/*
44091 	 * The target ID of the command:
44092 	 * * 0x0-0xFFF8 - The function ID
44093 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44094 	 * * 0xFFFD - Reserved for user-space HWRM interface
44095 	 * * 0xFFFF - HWRM
44096 	 */
44097 	uint16_t	target_id;
44098 	/*
44099 	 * A physical address pointer pointing to a host buffer that the
44100 	 * command's response data will be written. This can be either a host
44101 	 * physical address (HPA) or a guest physical address (GPA) and must
44102 	 * point to a physically contiguous block of memory.
44103 	 */
44104 	uint64_t	resp_addr;
44105 	uint8_t	flags;
44106 	/*
44107 	 * Enumeration denoting the RX, TX type of the resource.
44108 	 * This enumeration is used for resources that are similar for both
44109 	 * TX and RX paths of the chip.
44110 	 */
44111 	#define HWRM_CFA_METER_INSTANCE_CFG_INPUT_FLAGS_PATH     UINT32_C(0x1)
44112 	/* tx path */
44113 	#define HWRM_CFA_METER_INSTANCE_CFG_INPUT_FLAGS_PATH_TX \
44114 		UINT32_C(0x0)
44115 	/* rx path */
44116 	#define HWRM_CFA_METER_INSTANCE_CFG_INPUT_FLAGS_PATH_RX \
44117 		UINT32_C(0x1)
44118 	#define HWRM_CFA_METER_INSTANCE_CFG_INPUT_FLAGS_PATH_LAST \
44119 		HWRM_CFA_METER_INSTANCE_CFG_INPUT_FLAGS_PATH_RX
44120 	uint8_t	unused_0;
44121 	/*
44122 	 * This value identifies a new meter profile to be associated with
44123 	 * the meter instance specified in this command.
44124 	 */
44125 	uint16_t	meter_profile_id;
44126 	/*
44127 	 * A value of 0xffff is considered invalid and implies the
44128 	 * profile is not configured.
44129 	 */
44130 	#define HWRM_CFA_METER_INSTANCE_CFG_INPUT_METER_PROFILE_ID_INVALID \
44131 		UINT32_C(0xffff)
44132 	#define HWRM_CFA_METER_INSTANCE_CFG_INPUT_METER_PROFILE_ID_LAST \
44133 		HWRM_CFA_METER_INSTANCE_CFG_INPUT_METER_PROFILE_ID_INVALID
44134 	/*
44135 	 * This value identifies the ID of a meter instance that needs to be
44136 	 * updated with a new meter profile specified in this command.
44137 	 */
44138 	uint16_t	meter_instance_id;
44139 	uint8_t	unused_1[2];
44140 } __rte_packed;
44141 
44142 /* hwrm_cfa_meter_instance_cfg_output (size:128b/16B) */
44143 struct hwrm_cfa_meter_instance_cfg_output {
44144 	/* The specific error status for the command. */
44145 	uint16_t	error_code;
44146 	/* The HWRM command request type. */
44147 	uint16_t	req_type;
44148 	/* The sequence ID from the original command. */
44149 	uint16_t	seq_id;
44150 	/* The length of the response data in number of bytes. */
44151 	uint16_t	resp_len;
44152 	uint8_t	unused_0[7];
44153 	/*
44154 	 * This field is used in Output records to indicate that the output
44155 	 * is completely written to RAM. This field should be read as '1'
44156 	 * to indicate that the output has been completely written.
44157 	 * When writing a command completion or response to an internal
44158 	 * processor, the order of writes has to be such that this field is
44159 	 * written last.
44160 	 */
44161 	uint8_t	valid;
44162 } __rte_packed;
44163 
44164 /********************************
44165  * hwrm_cfa_meter_instance_free *
44166  ********************************/
44167 
44168 
44169 /* hwrm_cfa_meter_instance_free_input (size:192b/24B) */
44170 struct hwrm_cfa_meter_instance_free_input {
44171 	/* The HWRM command request type. */
44172 	uint16_t	req_type;
44173 	/*
44174 	 * The completion ring to send the completion event on. This should
44175 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
44176 	 */
44177 	uint16_t	cmpl_ring;
44178 	/*
44179 	 * The sequence ID is used by the driver for tracking multiple
44180 	 * commands. This ID is treated as opaque data by the firmware and
44181 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
44182 	 */
44183 	uint16_t	seq_id;
44184 	/*
44185 	 * The target ID of the command:
44186 	 * * 0x0-0xFFF8 - The function ID
44187 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44188 	 * * 0xFFFD - Reserved for user-space HWRM interface
44189 	 * * 0xFFFF - HWRM
44190 	 */
44191 	uint16_t	target_id;
44192 	/*
44193 	 * A physical address pointer pointing to a host buffer that the
44194 	 * command's response data will be written. This can be either a host
44195 	 * physical address (HPA) or a guest physical address (GPA) and must
44196 	 * point to a physically contiguous block of memory.
44197 	 */
44198 	uint64_t	resp_addr;
44199 	uint8_t	flags;
44200 	/*
44201 	 * Enumeration denoting the RX, TX type of the resource.
44202 	 * This enumeration is used for resources that are similar for both
44203 	 * TX and RX paths of the chip.
44204 	 */
44205 	#define HWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH     UINT32_C(0x1)
44206 	/* tx path */
44207 	#define HWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH_TX \
44208 		UINT32_C(0x0)
44209 	/* rx path */
44210 	#define HWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH_RX \
44211 		UINT32_C(0x1)
44212 	#define HWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH_LAST \
44213 		HWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH_RX
44214 	uint8_t	unused_0;
44215 	/* This value identifies a meter instance in CFA. */
44216 	uint16_t	meter_instance_id;
44217 	/*
44218 	 * A value of 0xfff is considered invalid and implies the
44219 	 * instance is not configured.
44220 	 */
44221 	#define HWRM_CFA_METER_INSTANCE_FREE_INPUT_METER_INSTANCE_ID_INVALID \
44222 		UINT32_C(0xffff)
44223 	#define HWRM_CFA_METER_INSTANCE_FREE_INPUT_METER_INSTANCE_ID_LAST \
44224 		HWRM_CFA_METER_INSTANCE_FREE_INPUT_METER_INSTANCE_ID_INVALID
44225 	uint8_t	unused_1[4];
44226 } __rte_packed;
44227 
44228 /* hwrm_cfa_meter_instance_free_output (size:128b/16B) */
44229 struct hwrm_cfa_meter_instance_free_output {
44230 	/* The specific error status for the command. */
44231 	uint16_t	error_code;
44232 	/* The HWRM command request type. */
44233 	uint16_t	req_type;
44234 	/* The sequence ID from the original command. */
44235 	uint16_t	seq_id;
44236 	/* The length of the response data in number of bytes. */
44237 	uint16_t	resp_len;
44238 	uint8_t	unused_0[7];
44239 	/*
44240 	 * This field is used in Output records to indicate that the output
44241 	 * is completely written to RAM. This field should be read as '1'
44242 	 * to indicate that the output has been completely written.
44243 	 * When writing a command completion or response to an internal
44244 	 * processor, the order of writes has to be such that this field is
44245 	 * written last.
44246 	 */
44247 	uint8_t	valid;
44248 } __rte_packed;
44249 
44250 /*******************************
44251  * hwrm_cfa_decap_filter_alloc *
44252  *******************************/
44253 
44254 
44255 /* hwrm_cfa_decap_filter_alloc_input (size:832b/104B) */
44256 struct hwrm_cfa_decap_filter_alloc_input {
44257 	/* The HWRM command request type. */
44258 	uint16_t	req_type;
44259 	/*
44260 	 * The completion ring to send the completion event on. This should
44261 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
44262 	 */
44263 	uint16_t	cmpl_ring;
44264 	/*
44265 	 * The sequence ID is used by the driver for tracking multiple
44266 	 * commands. This ID is treated as opaque data by the firmware and
44267 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
44268 	 */
44269 	uint16_t	seq_id;
44270 	/*
44271 	 * The target ID of the command:
44272 	 * * 0x0-0xFFF8 - The function ID
44273 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44274 	 * * 0xFFFD - Reserved for user-space HWRM interface
44275 	 * * 0xFFFF - HWRM
44276 	 */
44277 	uint16_t	target_id;
44278 	/*
44279 	 * A physical address pointer pointing to a host buffer that the
44280 	 * command's response data will be written. This can be either a host
44281 	 * physical address (HPA) or a guest physical address (GPA) and must
44282 	 * point to a physically contiguous block of memory.
44283 	 */
44284 	uint64_t	resp_addr;
44285 	uint32_t	flags;
44286 	/* ovs_tunnel is 1 b */
44287 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_FLAGS_OVS_TUNNEL \
44288 		UINT32_C(0x1)
44289 	uint32_t	enables;
44290 	/*
44291 	 * This bit must be '1' for the tunnel_type field to be
44292 	 * configured.
44293 	 */
44294 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
44295 		UINT32_C(0x1)
44296 	/*
44297 	 * This bit must be '1' for the tunnel_id field to be
44298 	 * configured.
44299 	 */
44300 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_ID \
44301 		UINT32_C(0x2)
44302 	/*
44303 	 * This bit must be '1' for the src_macaddr field to be
44304 	 * configured.
44305 	 */
44306 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_SRC_MACADDR \
44307 		UINT32_C(0x4)
44308 	/*
44309 	 * This bit must be '1' for the dst_macaddr field to be
44310 	 * configured.
44311 	 */
44312 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_MACADDR \
44313 		UINT32_C(0x8)
44314 	/*
44315 	 * This bit must be '1' for the ovlan_vid field to be
44316 	 * configured.
44317 	 */
44318 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_OVLAN_VID \
44319 		UINT32_C(0x10)
44320 	/*
44321 	 * This bit must be '1' for the ivlan_vid field to be
44322 	 * configured.
44323 	 */
44324 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_IVLAN_VID \
44325 		UINT32_C(0x20)
44326 	/*
44327 	 * This bit must be '1' for the t_ovlan_vid field to be
44328 	 * configured.
44329 	 */
44330 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_T_OVLAN_VID \
44331 		UINT32_C(0x40)
44332 	/*
44333 	 * This bit must be '1' for the t_ivlan_vid field to be
44334 	 * configured.
44335 	 */
44336 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_T_IVLAN_VID \
44337 		UINT32_C(0x80)
44338 	/*
44339 	 * This bit must be '1' for the ethertype field to be
44340 	 * configured.
44341 	 */
44342 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_ETHERTYPE \
44343 		UINT32_C(0x100)
44344 	/*
44345 	 * This bit must be '1' for the src_ipaddr field to be
44346 	 * configured.
44347 	 */
44348 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR \
44349 		UINT32_C(0x200)
44350 	/*
44351 	 * This bit must be '1' for the dst_ipaddr field to be
44352 	 * configured.
44353 	 */
44354 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR \
44355 		UINT32_C(0x400)
44356 	/*
44357 	 * This bit must be '1' for the ipaddr_type field to be
44358 	 * configured.
44359 	 */
44360 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_IPADDR_TYPE \
44361 		UINT32_C(0x800)
44362 	/*
44363 	 * This bit must be '1' for the ip_protocol field to be
44364 	 * configured.
44365 	 */
44366 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_IP_PROTOCOL \
44367 		UINT32_C(0x1000)
44368 	/*
44369 	 * This bit must be '1' for the src_port field to be
44370 	 * configured.
44371 	 */
44372 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT \
44373 		UINT32_C(0x2000)
44374 	/*
44375 	 * This bit must be '1' for the dst_port field to be
44376 	 * configured.
44377 	 */
44378 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_PORT \
44379 		UINT32_C(0x4000)
44380 	/*
44381 	 * This bit must be '1' for the dst_id field to be
44382 	 * configured.
44383 	 */
44384 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_ID \
44385 		UINT32_C(0x8000)
44386 	/*
44387 	 * This bit must be '1' for the mirror_vnic_id field to be
44388 	 * configured.
44389 	 */
44390 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
44391 		UINT32_C(0x10000)
44392 	/*
44393 	 * Tunnel identifier.
44394 	 * Virtual Network Identifier (VNI). Only valid with
44395 	 * tunnel_types VXLAN, NVGRE, and Geneve.
44396 	 * Only lower 24-bits of VNI field are used
44397 	 * in setting up the filter.
44398 	 */
44399 	uint32_t	tunnel_id;
44400 	/* Tunnel Type. */
44401 	uint8_t	tunnel_type;
44402 	/* Non-tunnel */
44403 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
44404 		UINT32_C(0x0)
44405 	/* Virtual eXtensible Local Area Network (VXLAN) */
44406 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
44407 		UINT32_C(0x1)
44408 	/* Network Virtualization Generic Routing Encapsulation (NVGRE) */
44409 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
44410 		UINT32_C(0x2)
44411 	/* Generic Routing Encapsulation (GRE) inside Ethernet payload */
44412 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
44413 		UINT32_C(0x3)
44414 	/* IP in IP */
44415 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
44416 		UINT32_C(0x4)
44417 	/* Generic Network Virtualization Encapsulation (Geneve) */
44418 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
44419 		UINT32_C(0x5)
44420 	/* Multi-Protocol Label Switching (MPLS) */
44421 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
44422 		UINT32_C(0x6)
44423 	/* Stateless Transport Tunnel (STT) */
44424 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \
44425 		UINT32_C(0x7)
44426 	/* Generic Routing Encapsulation (GRE) inside IP datagram payload */
44427 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
44428 		UINT32_C(0x8)
44429 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
44430 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
44431 		UINT32_C(0x9)
44432 	/*
44433 	 * Enhance Generic Routing Encapsulation (GRE version 1) inside IP
44434 	 * datagram payload
44435 	 */
44436 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
44437 		UINT32_C(0xa)
44438 	/* Use fixed layer 2 ether type of 0xFFFF */
44439 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
44440 		UINT32_C(0xb)
44441 	/*
44442 	 * IPV6 over virtual eXtensible Local Area Network with GPE header
44443 	 * (IPV6oVXLANGPE)
44444 	 */
44445 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
44446 		UINT32_C(0xc)
44447 	/* Any tunneled traffic */
44448 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
44449 		UINT32_C(0xff)
44450 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \
44451 		HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
44452 	uint8_t	unused_0;
44453 	uint16_t	unused_1;
44454 	/*
44455 	 * This value indicates the source MAC address in
44456 	 * the Ethernet header.
44457 	 */
44458 	uint8_t	src_macaddr[6];
44459 	uint8_t	unused_2[2];
44460 	/*
44461 	 * This value indicates the destination MAC address in
44462 	 * the Ethernet header.
44463 	 */
44464 	uint8_t	dst_macaddr[6];
44465 	/*
44466 	 * This value indicates the VLAN ID of the outer VLAN tag
44467 	 * in the Ethernet header.
44468 	 */
44469 	uint16_t	ovlan_vid;
44470 	/*
44471 	 * This value indicates the VLAN ID of the inner VLAN tag
44472 	 * in the Ethernet header.
44473 	 */
44474 	uint16_t	ivlan_vid;
44475 	/*
44476 	 * This value indicates the VLAN ID of the outer VLAN tag
44477 	 * in the tunnel Ethernet header.
44478 	 */
44479 	uint16_t	t_ovlan_vid;
44480 	/*
44481 	 * This value indicates the VLAN ID of the inner VLAN tag
44482 	 * in the tunnel Ethernet header.
44483 	 */
44484 	uint16_t	t_ivlan_vid;
44485 	/* This value indicates the ethertype in the Ethernet header. */
44486 	uint16_t	ethertype;
44487 	/*
44488 	 * This value indicates the type of IP address.
44489 	 * 4 - IPv4
44490 	 * 6 - IPv6
44491 	 * All others are invalid.
44492 	 */
44493 	uint8_t	ip_addr_type;
44494 	/* invalid */
44495 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN \
44496 		UINT32_C(0x0)
44497 	/* IPv4 */
44498 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV4 \
44499 		UINT32_C(0x4)
44500 	/* IPv6 */
44501 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6 \
44502 		UINT32_C(0x6)
44503 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_LAST \
44504 		HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6
44505 	/*
44506 	 * The value of protocol filed in IP header.
44507 	 * Applies to UDP and TCP traffic.
44508 	 * 6 - TCP
44509 	 * 17 - UDP
44510 	 */
44511 	uint8_t	ip_protocol;
44512 	/* invalid */
44513 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN \
44514 		UINT32_C(0x0)
44515 	/* TCP */
44516 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_TCP \
44517 		UINT32_C(0x6)
44518 	/* UDP */
44519 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP \
44520 		UINT32_C(0x11)
44521 	#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_LAST \
44522 		HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP
44523 	uint16_t	unused_3;
44524 	uint32_t	unused_4;
44525 	/*
44526 	 * The value of source IP address to be used in filtering.
44527 	 * For IPv4, first four bytes represent the IP address.
44528 	 */
44529 	uint32_t	src_ipaddr[4];
44530 	/*
44531 	 * The value of destination IP address to be used in filtering.
44532 	 * For IPv4, first four bytes represent the IP address.
44533 	 */
44534 	uint32_t	dst_ipaddr[4];
44535 	/*
44536 	 * The value of source port to be used in filtering.
44537 	 * Applies to UDP and TCP traffic.
44538 	 */
44539 	uint16_t	src_port;
44540 	/*
44541 	 * The value of destination port to be used in filtering.
44542 	 * Applies to UDP and TCP traffic.
44543 	 */
44544 	uint16_t	dst_port;
44545 	/*
44546 	 * If set, this value shall represent the
44547 	 * Logical VNIC ID of the destination VNIC for the RX
44548 	 * path.
44549 	 */
44550 	uint16_t	dst_id;
44551 	/*
44552 	 * If set, this value shall represent the L2 context that matches the
44553 	 * L2 information of the decap filter.
44554 	 */
44555 	uint16_t	l2_ctxt_ref_id;
44556 } __rte_packed;
44557 
44558 /* hwrm_cfa_decap_filter_alloc_output (size:128b/16B) */
44559 struct hwrm_cfa_decap_filter_alloc_output {
44560 	/* The specific error status for the command. */
44561 	uint16_t	error_code;
44562 	/* The HWRM command request type. */
44563 	uint16_t	req_type;
44564 	/* The sequence ID from the original command. */
44565 	uint16_t	seq_id;
44566 	/* The length of the response data in number of bytes. */
44567 	uint16_t	resp_len;
44568 	/* This value is an opaque id into CFA data structures. */
44569 	uint32_t	decap_filter_id;
44570 	uint8_t	unused_0[3];
44571 	/*
44572 	 * This field is used in Output records to indicate that the output
44573 	 * is completely written to RAM. This field should be read as '1'
44574 	 * to indicate that the output has been completely written.
44575 	 * When writing a command completion or response to an internal
44576 	 * processor, the order of writes has to be such that this field is
44577 	 * written last.
44578 	 */
44579 	uint8_t	valid;
44580 } __rte_packed;
44581 
44582 /******************************
44583  * hwrm_cfa_decap_filter_free *
44584  ******************************/
44585 
44586 
44587 /* hwrm_cfa_decap_filter_free_input (size:192b/24B) */
44588 struct hwrm_cfa_decap_filter_free_input {
44589 	/* The HWRM command request type. */
44590 	uint16_t	req_type;
44591 	/*
44592 	 * The completion ring to send the completion event on. This should
44593 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
44594 	 */
44595 	uint16_t	cmpl_ring;
44596 	/*
44597 	 * The sequence ID is used by the driver for tracking multiple
44598 	 * commands. This ID is treated as opaque data by the firmware and
44599 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
44600 	 */
44601 	uint16_t	seq_id;
44602 	/*
44603 	 * The target ID of the command:
44604 	 * * 0x0-0xFFF8 - The function ID
44605 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44606 	 * * 0xFFFD - Reserved for user-space HWRM interface
44607 	 * * 0xFFFF - HWRM
44608 	 */
44609 	uint16_t	target_id;
44610 	/*
44611 	 * A physical address pointer pointing to a host buffer that the
44612 	 * command's response data will be written. This can be either a host
44613 	 * physical address (HPA) or a guest physical address (GPA) and must
44614 	 * point to a physically contiguous block of memory.
44615 	 */
44616 	uint64_t	resp_addr;
44617 	/* This value is an opaque id into CFA data structures. */
44618 	uint32_t	decap_filter_id;
44619 	uint8_t	unused_0[4];
44620 } __rte_packed;
44621 
44622 /* hwrm_cfa_decap_filter_free_output (size:128b/16B) */
44623 struct hwrm_cfa_decap_filter_free_output {
44624 	/* The specific error status for the command. */
44625 	uint16_t	error_code;
44626 	/* The HWRM command request type. */
44627 	uint16_t	req_type;
44628 	/* The sequence ID from the original command. */
44629 	uint16_t	seq_id;
44630 	/* The length of the response data in number of bytes. */
44631 	uint16_t	resp_len;
44632 	uint8_t	unused_0[7];
44633 	/*
44634 	 * This field is used in Output records to indicate that the output
44635 	 * is completely written to RAM. This field should be read as '1'
44636 	 * to indicate that the output has been completely written.
44637 	 * When writing a command completion or response to an internal
44638 	 * processor, the order of writes has to be such that this field is
44639 	 * written last.
44640 	 */
44641 	uint8_t	valid;
44642 } __rte_packed;
44643 
44644 /***********************
44645  * hwrm_cfa_flow_alloc *
44646  ***********************/
44647 
44648 
44649 /* hwrm_cfa_flow_alloc_input (size:1024b/128B) */
44650 struct hwrm_cfa_flow_alloc_input {
44651 	/* The HWRM command request type. */
44652 	uint16_t	req_type;
44653 	/*
44654 	 * The completion ring to send the completion event on. This should
44655 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
44656 	 */
44657 	uint16_t	cmpl_ring;
44658 	/*
44659 	 * The sequence ID is used by the driver for tracking multiple
44660 	 * commands. This ID is treated as opaque data by the firmware and
44661 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
44662 	 */
44663 	uint16_t	seq_id;
44664 	/*
44665 	 * The target ID of the command:
44666 	 * * 0x0-0xFFF8 - The function ID
44667 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44668 	 * * 0xFFFD - Reserved for user-space HWRM interface
44669 	 * * 0xFFFF - HWRM
44670 	 */
44671 	uint16_t	target_id;
44672 	/*
44673 	 * A physical address pointer pointing to a host buffer that the
44674 	 * command's response data will be written. This can be either a host
44675 	 * physical address (HPA) or a guest physical address (GPA) and must
44676 	 * point to a physically contiguous block of memory.
44677 	 */
44678 	uint64_t	resp_addr;
44679 	uint16_t	flags;
44680 	/* tunnel is 1 b */
44681 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_TUNNEL \
44682 		UINT32_C(0x1)
44683 	/* num_vlan is 2 b */
44684 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_MASK \
44685 		UINT32_C(0x6)
44686 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_SFT           1
44687 	/* no tags */
44688 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_NONE \
44689 		(UINT32_C(0x0) << 1)
44690 	/* 1 tag */
44691 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_ONE \
44692 		(UINT32_C(0x1) << 1)
44693 	/* 2 tags */
44694 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_TWO \
44695 		(UINT32_C(0x2) << 1)
44696 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_LAST \
44697 		HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_TWO
44698 	/* Enumeration denoting the Flow Type. */
44699 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_MASK \
44700 		UINT32_C(0x38)
44701 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_SFT           3
44702 	/* L2 flow */
44703 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_L2 \
44704 		(UINT32_C(0x0) << 3)
44705 	/* IPV4 flow */
44706 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_IPV4 \
44707 		(UINT32_C(0x1) << 3)
44708 	/* IPV6 flow */
44709 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_IPV6 \
44710 		(UINT32_C(0x2) << 3)
44711 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_LAST \
44712 		HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_IPV6
44713 	/*
44714 	 * when set to 1, indicates TX flow offload for function specified
44715 	 * in src_fid and the dst_fid should be set to invalid value. To
44716 	 * indicate a VM to VM flow, both of the path_tx and path_rx flags
44717 	 * need to be set. For virtio vSwitch offload case, the src_fid and
44718 	 * dst_fid is set to the same fid value. For the SRIOV vSwitch
44719 	 * offload case, the src_fid and dst_fid must be set to the same VF
44720 	 * FID belong to the children VFs of the same PF to indicate VM to
44721 	 * VM flow.
44722 	 */
44723 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_PATH_TX \
44724 		UINT32_C(0x40)
44725 	/*
44726 	 * when set to 1, indicates RX flow offload for function specified
44727 	 * in dst_fid and the src_fid should be set to invalid value.
44728 	 */
44729 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_PATH_RX \
44730 		UINT32_C(0x80)
44731 	/*
44732 	 * Set to 1 to indicate matching of VXLAN VNI from the custom vxlan
44733 	 * header is required and the VXLAN VNI value is stored in the first
44734 	 * 24 bits of the dmac field. This flag is only valid when the flow
44735 	 * direction is RX.
44736 	 */
44737 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_MATCH_VXLAN_IP_VNI \
44738 		UINT32_C(0x100)
44739 	/*
44740 	 * Set to 1 to indicate vhost_id is specified in the outer_vlan_tci
44741 	 * field.
44742 	 */
44743 	#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_VHOST_ID_USE_VLAN \
44744 		UINT32_C(0x200)
44745 	/*
44746 	 * Tx Flow: vf fid.
44747 	 * Rx Flow: pf fid.
44748 	 */
44749 	uint16_t	src_fid;
44750 	/* Tunnel handle valid when tunnel flag is set. */
44751 	uint32_t	tunnel_handle;
44752 	uint16_t	action_flags;
44753 	/*
44754 	 * Setting of this flag indicates drop action. If this flag is not
44755 	 * set, then it should be considered accept action.
44756 	 */
44757 	#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_FWD \
44758 		UINT32_C(0x1)
44759 	/* recycle is 1 b */
44760 	#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_RECYCLE \
44761 		UINT32_C(0x2)
44762 	/*
44763 	 * Setting of this flag indicates drop action. If this flag is not
44764 	 * set, then it should be considered accept action.
44765 	 */
44766 	#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_DROP \
44767 		UINT32_C(0x4)
44768 	/* meter is 1 b */
44769 	#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_METER \
44770 		UINT32_C(0x8)
44771 	/* tunnel is 1 b */
44772 	#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_TUNNEL \
44773 		UINT32_C(0x10)
44774 	/* nat_src is 1 b */
44775 	#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NAT_SRC \
44776 		UINT32_C(0x20)
44777 	/* nat_dest is 1 b */
44778 	#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NAT_DEST \
44779 		UINT32_C(0x40)
44780 	/* nat_ipv4_address is 1 b */
44781 	#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NAT_IPV4_ADDRESS \
44782 		UINT32_C(0x80)
44783 	/* l2_header_rewrite is 1 b */
44784 	#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_L2_HEADER_REWRITE \
44785 		UINT32_C(0x100)
44786 	/* ttl_decrement is 1 b */
44787 	#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_TTL_DECREMENT \
44788 		UINT32_C(0x200)
44789 	/*
44790 	 * If set to 1 and flow direction is TX, it indicates decap of L2
44791 	 * header and encap of tunnel header. If set to 1 and flow direction
44792 	 * is RX, it indicates decap of tunnel header and encap L2 header.
44793 	 * The type of tunnel is specified in the tunnel_type field.
44794 	 */
44795 	#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_TUNNEL_IP \
44796 		UINT32_C(0x400)
44797 	/* If set to 1, flow aging is enabled for this flow. */
44798 	#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_FLOW_AGING_ENABLED \
44799 		UINT32_C(0x800)
44800 	/*
44801 	 * If set to 1 an attempt will be made to try to offload this flow
44802 	 * to the most optimal flow table resource. If set to 0, the flow
44803 	 * will be placed to the default flow table resource.
44804 	 */
44805 	#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_PRI_HINT \
44806 		UINT32_C(0x1000)
44807 	/*
44808 	 * If set to 1 there will be no attempt to allocate an on-chip try
44809 	 * to offload this flow. If set to 0, which will keep compatibility
44810 	 * with the older drivers, will cause the FW to attempt to allocate
44811 	 * an on-chip flow counter for the newly created flow. This will
44812 	 * keep the existing behavior with EM flows which always had an
44813 	 * associated flow counter.
44814 	 */
44815 	#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NO_FLOW_COUNTER_ALLOC \
44816 		UINT32_C(0x2000)
44817 	/*
44818 	 * Tx Flow: pf or vf fid.
44819 	 * Rx Flow: vf fid.
44820 	 */
44821 	uint16_t	dst_fid;
44822 	/* VLAN tpid, valid when push_vlan flag is set. */
44823 	uint16_t	l2_rewrite_vlan_tpid;
44824 	/* VLAN tci, valid when push_vlan flag is set. */
44825 	uint16_t	l2_rewrite_vlan_tci;
44826 	/* Meter id, valid when meter flag is set. */
44827 	uint16_t	act_meter_id;
44828 	/* Flow with the same l2 context tcam key. */
44829 	uint16_t	ref_flow_handle;
44830 	/* This value sets the match value for the ethertype. */
44831 	uint16_t	ethertype;
44832 	/* valid when num tags is 1 or 2. */
44833 	uint16_t	outer_vlan_tci;
44834 	/* This value sets the match value for the Destination MAC address. */
44835 	uint16_t	dmac[3];
44836 	/* valid when num tags is 2. */
44837 	uint16_t	inner_vlan_tci;
44838 	/* This value sets the match value for the Source MAC address. */
44839 	uint16_t	smac[3];
44840 	/* The bit length of destination IP address mask. */
44841 	uint8_t	ip_dst_mask_len;
44842 	/* The bit length of source IP address mask. */
44843 	uint8_t	ip_src_mask_len;
44844 	/* The value of destination IPv4/IPv6 address. */
44845 	uint32_t	ip_dst[4];
44846 	/* The source IPv4/IPv6 address. */
44847 	uint32_t	ip_src[4];
44848 	/*
44849 	 * The value of source port.
44850 	 * Applies to UDP and TCP traffic.
44851 	 */
44852 	uint16_t	l4_src_port;
44853 	/*
44854 	 * The value of source port mask.
44855 	 * Applies to UDP and TCP traffic.
44856 	 */
44857 	uint16_t	l4_src_port_mask;
44858 	/*
44859 	 * The value of destination port.
44860 	 * Applies to UDP and TCP traffic.
44861 	 */
44862 	uint16_t	l4_dst_port;
44863 	/*
44864 	 * The value of destination port mask.
44865 	 * Applies to UDP and TCP traffic.
44866 	 */
44867 	uint16_t	l4_dst_port_mask;
44868 	/*
44869 	 * NAT IPv4/6 address based on address type flag.
44870 	 * 0 values are ignored.
44871 	 */
44872 	uint32_t	nat_ip_address[4];
44873 	/* L2 header re-write Destination MAC address. */
44874 	uint16_t	l2_rewrite_dmac[3];
44875 	/*
44876 	 * The NAT source/destination port based on direction flag.
44877 	 * Applies to UDP and TCP traffic.
44878 	 * 0 values are ignored.
44879 	 */
44880 	uint16_t	nat_port;
44881 	/* L2 header re-write Source MAC address. */
44882 	uint16_t	l2_rewrite_smac[3];
44883 	/* The value of ip protocol. */
44884 	uint8_t	ip_proto;
44885 	/* Tunnel Type. */
44886 	uint8_t	tunnel_type;
44887 	/* Non-tunnel */
44888 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
44889 		UINT32_C(0x0)
44890 	/* Virtual eXtensible Local Area Network (VXLAN) */
44891 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
44892 		UINT32_C(0x1)
44893 	/* Network Virtualization Generic Routing Encapsulation (NVGRE) */
44894 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
44895 		UINT32_C(0x2)
44896 	/* Generic Routing Encapsulation (GRE) inside Ethernet payload */
44897 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
44898 		UINT32_C(0x3)
44899 	/* IP in IP */
44900 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
44901 		UINT32_C(0x4)
44902 	/* Generic Network Virtualization Encapsulation (Geneve) */
44903 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
44904 		UINT32_C(0x5)
44905 	/* Multi-Protocol Label Switching (MPLS) */
44906 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
44907 		UINT32_C(0x6)
44908 	/* Stateless Transport Tunnel (STT) */
44909 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_STT \
44910 		UINT32_C(0x7)
44911 	/* Generic Routing Encapsulation (GRE) inside IP datagram payload */
44912 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
44913 		UINT32_C(0x8)
44914 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
44915 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
44916 		UINT32_C(0x9)
44917 	/*
44918 	 * Enhance Generic Routing Encapsulation (GRE version 1) inside IP
44919 	 * datagram payload
44920 	 */
44921 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
44922 		UINT32_C(0xa)
44923 	/* Use fixed layer 2 ether type of 0xFFFF */
44924 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
44925 		UINT32_C(0xb)
44926 	/*
44927 	 * IPV6 over virtual eXtensible Local Area Network with GPE header
44928 	 * (IPV6oVXLANGPE)
44929 	 */
44930 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
44931 		UINT32_C(0xc)
44932 	/* Any tunneled traffic */
44933 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
44934 		UINT32_C(0xff)
44935 	#define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_LAST \
44936 		HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
44937 } __rte_packed;
44938 
44939 /* hwrm_cfa_flow_alloc_output (size:256b/32B) */
44940 struct hwrm_cfa_flow_alloc_output {
44941 	/* The specific error status for the command. */
44942 	uint16_t	error_code;
44943 	/* The HWRM command request type. */
44944 	uint16_t	req_type;
44945 	/* The sequence ID from the original command. */
44946 	uint16_t	seq_id;
44947 	/* The length of the response data in number of bytes. */
44948 	uint16_t	resp_len;
44949 	/* Flow record index. */
44950 	uint16_t	flow_handle;
44951 	uint8_t	unused_0[2];
44952 	/*
44953 	 * The flow id value in bit 0-29 is the actual ID of the flow
44954 	 * associated with this filter and it shall be used to match
44955 	 * and associate the flow identifier returned in completion
44956 	 * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
44957 	 * shall indicate no valid flow id.
44958 	 */
44959 	uint32_t	flow_id;
44960 	/* Indicate the flow id value. */
44961 	#define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
44962 		UINT32_C(0x3fffffff)
44963 	#define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
44964 	/* Indicate type of the flow. */
44965 	#define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE \
44966 		UINT32_C(0x40000000)
44967 	/*
44968 	 * If this bit set to 0, then it indicates that the flow is
44969 	 * internal flow.
44970 	 */
44971 	#define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
44972 		(UINT32_C(0x0) << 30)
44973 	/*
44974 	 * If this bit is set to 1, then it indicates that the flow is
44975 	 * external flow.
44976 	 */
44977 	#define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
44978 		(UINT32_C(0x1) << 30)
44979 	#define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
44980 		HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
44981 	/* Indicate the flow direction. */
44982 	#define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR \
44983 		UINT32_C(0x80000000)
44984 	/* If this bit set to 0, then it indicates rx flow. */
44985 	#define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
44986 		(UINT32_C(0x0) << 31)
44987 	/* If this bit is set to 1, then it indicates that tx flow. */
44988 	#define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
44989 		(UINT32_C(0x1) << 31)
44990 	#define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
44991 		HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_TX
44992 	/* This value identifies a set of CFA data structures used for a flow. */
44993 	uint64_t	ext_flow_handle;
44994 	uint32_t	flow_counter_id;
44995 	uint8_t	unused_1[3];
44996 	/*
44997 	 * This field is used in Output records to indicate that the output
44998 	 * is completely written to RAM. This field should be read as '1'
44999 	 * to indicate that the output has been completely written.
45000 	 * When writing a command completion or response to an internal
45001 	 * processor, the order of writes has to be such that this field is
45002 	 * written last.
45003 	 */
45004 	uint8_t	valid;
45005 } __rte_packed;
45006 
45007 /* hwrm_cfa_flow_alloc_cmd_err (size:64b/8B) */
45008 struct hwrm_cfa_flow_alloc_cmd_err {
45009 	/*
45010 	 * command specific error codes that goes to
45011 	 * the cmd_err field in Common HWRM Error Response.
45012 	 */
45013 	uint8_t	code;
45014 	/* Unknown error */
45015 	#define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_UNKNOWN         UINT32_C(0x0)
45016 	/* No more L2 Context TCAM */
45017 	#define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_L2_CONTEXT_TCAM UINT32_C(0x1)
45018 	/* No more action records */
45019 	#define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_ACTION_RECORD   UINT32_C(0x2)
45020 	/* No more flow counters */
45021 	#define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_FLOW_COUNTER    UINT32_C(0x3)
45022 	/* No more wild-card TCAM */
45023 	#define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_WILD_CARD_TCAM  UINT32_C(0x4)
45024 	/* Hash collision in exact match tables */
45025 	#define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_HASH_COLLISION  UINT32_C(0x5)
45026 	/* Key is already installed */
45027 	#define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_KEY_EXISTS      UINT32_C(0x6)
45028 	/* Flow Context DB is out of resource */
45029 	#define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_FLOW_CTXT_DB    UINT32_C(0x7)
45030 	#define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_LAST \
45031 		HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_FLOW_CTXT_DB
45032 	uint8_t	unused_0[7];
45033 } __rte_packed;
45034 
45035 /**********************
45036  * hwrm_cfa_flow_free *
45037  **********************/
45038 
45039 
45040 /* hwrm_cfa_flow_free_input (size:256b/32B) */
45041 struct hwrm_cfa_flow_free_input {
45042 	/* The HWRM command request type. */
45043 	uint16_t	req_type;
45044 	/*
45045 	 * The completion ring to send the completion event on. This should
45046 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
45047 	 */
45048 	uint16_t	cmpl_ring;
45049 	/*
45050 	 * The sequence ID is used by the driver for tracking multiple
45051 	 * commands. This ID is treated as opaque data by the firmware and
45052 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
45053 	 */
45054 	uint16_t	seq_id;
45055 	/*
45056 	 * The target ID of the command:
45057 	 * * 0x0-0xFFF8 - The function ID
45058 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45059 	 * * 0xFFFD - Reserved for user-space HWRM interface
45060 	 * * 0xFFFF - HWRM
45061 	 */
45062 	uint16_t	target_id;
45063 	/*
45064 	 * A physical address pointer pointing to a host buffer that the
45065 	 * command's response data will be written. This can be either a host
45066 	 * physical address (HPA) or a guest physical address (GPA) and must
45067 	 * point to a physically contiguous block of memory.
45068 	 */
45069 	uint64_t	resp_addr;
45070 	/* Flow record index. */
45071 	uint16_t	flow_handle;
45072 	uint16_t	unused_0;
45073 	/* Flow counter id to be freed. */
45074 	uint32_t	flow_counter_id;
45075 	/* This value identifies a set of CFA data structures used for a flow. */
45076 	uint64_t	ext_flow_handle;
45077 } __rte_packed;
45078 
45079 /* hwrm_cfa_flow_free_output (size:256b/32B) */
45080 struct hwrm_cfa_flow_free_output {
45081 	/* The specific error status for the command. */
45082 	uint16_t	error_code;
45083 	/* The HWRM command request type. */
45084 	uint16_t	req_type;
45085 	/* The sequence ID from the original command. */
45086 	uint16_t	seq_id;
45087 	/* The length of the response data in number of bytes. */
45088 	uint16_t	resp_len;
45089 	/* packet is 64 b */
45090 	uint64_t	packet;
45091 	/* byte is 64 b */
45092 	uint64_t	byte;
45093 	uint8_t	unused_0[7];
45094 	/*
45095 	 * This field is used in Output records to indicate that the output
45096 	 * is completely written to RAM. This field should be read as '1'
45097 	 * to indicate that the output has been completely written.
45098 	 * When writing a command completion or response to an internal
45099 	 * processor, the order of writes has to be such that this field is
45100 	 * written last.
45101 	 */
45102 	uint8_t	valid;
45103 } __rte_packed;
45104 
45105 /* hwrm_cfa_flow_action_data (size:960b/120B) */
45106 struct hwrm_cfa_flow_action_data {
45107 	uint16_t	action_flags;
45108 	/* Setting of this flag indicates accept action. */
45109 	#define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_FWD \
45110 		UINT32_C(0x1)
45111 	/* Setting of this flag indicates recycle action. */
45112 	#define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_RECYCLE \
45113 		UINT32_C(0x2)
45114 	/* Setting of this flag indicates drop action. */
45115 	#define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_DROP \
45116 		UINT32_C(0x4)
45117 	/* Setting of this flag indicates meter action. */
45118 	#define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_METER \
45119 		UINT32_C(0x8)
45120 	/* Setting of this flag indicates tunnel action. */
45121 	#define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_TUNNEL \
45122 		UINT32_C(0x10)
45123 	/*
45124 	 * If set to 1 and flow direction is TX, it indicates decap of L2
45125 	 * header and encap of tunnel header. If set to 1 and flow direction
45126 	 * is RX, it indicates decap of tunnel header and encap L2 header.
45127 	 */
45128 	#define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_TUNNEL_IP \
45129 		UINT32_C(0x20)
45130 	/* Setting of this flag indicates ttl decrement action. */
45131 	#define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_TTL_DECREMENT \
45132 		UINT32_C(0x40)
45133 	/* If set to 1, flow aging is enabled for this flow. */
45134 	#define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_FLOW_AGING_ENABLED \
45135 		UINT32_C(0x80)
45136 	/* Setting of this flag indicates encap action. */
45137 	#define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_ENCAP \
45138 		UINT32_C(0x100)
45139 	/* Setting of this flag indicates decap action. */
45140 	#define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_DECAP \
45141 		UINT32_C(0x200)
45142 	/* Meter id. */
45143 	uint16_t	act_meter_id;
45144 	/* VNIC id. */
45145 	uint16_t	vnic_id;
45146 	/* vport number. */
45147 	uint16_t	vport_id;
45148 	/* The NAT source/destination. */
45149 	uint16_t	nat_port;
45150 	uint16_t	unused_0[3];
45151 	/* NAT IPv4/IPv6 address. */
45152 	uint32_t	nat_ip_address[4];
45153 	/* Encapsulation Type. */
45154 	uint8_t	encap_type;
45155 	/* Virtual eXtensible Local Area Network (VXLAN) */
45156 	#define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_VXLAN        UINT32_C(0x1)
45157 	/* Network Virtualization Generic Routing Encapsulation (NVGRE) */
45158 	#define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_NVGRE        UINT32_C(0x2)
45159 	/* Generic Routing Encapsulation (GRE) after inside Ethernet payload */
45160 	#define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_L2GRE        UINT32_C(0x3)
45161 	/* IP in IP */
45162 	#define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_IPIP         UINT32_C(0x4)
45163 	/* Generic Network Virtualization Encapsulation (Geneve) */
45164 	#define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_GENEVE       UINT32_C(0x5)
45165 	/* Multi-Protocol Label Switching (MPLS) */
45166 	#define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_MPLS         UINT32_C(0x6)
45167 	/* VLAN */
45168 	#define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_VLAN         UINT32_C(0x7)
45169 	/* Generic Routing Encapsulation (GRE) inside IP datagram payload */
45170 	#define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_IPGRE        UINT32_C(0x8)
45171 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
45172 	#define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_VXLAN_V4     UINT32_C(0x9)
45173 	/*
45174 	 * Enhance Generic Routing Encapsulation (GRE version 1) inside IP
45175 	 * datagram payload
45176 	 */
45177 	#define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_IPGRE_V1     UINT32_C(0xa)
45178 	/* Use fixed layer 2 ether type of 0xFFFF */
45179 	#define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_L2_ETYPE     UINT32_C(0xb)
45180 	/*
45181 	 * IPV6 over virtual eXtensible Local Area Network with GPE header
45182 	 * (IPV6oVXLANGPE)
45183 	 */
45184 	#define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_VXLAN_GPE_V6 UINT32_C(0xc)
45185 	#define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_LAST \
45186 		HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_VXLAN_GPE_V6
45187 	uint8_t	unused[7];
45188 	/* This value is encap data for the associated encap type. */
45189 	uint32_t	encap_data[20];
45190 } __rte_packed;
45191 
45192 /* hwrm_cfa_flow_tunnel_hdr_data (size:64b/8B) */
45193 struct hwrm_cfa_flow_tunnel_hdr_data {
45194 	/* Tunnel Type. */
45195 	uint8_t	tunnel_type;
45196 	/* Non-tunnel */
45197 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_NONTUNNEL \
45198 		UINT32_C(0x0)
45199 	/* Virtual eXtensible Local Area Network (VXLAN) */
45200 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_VXLAN \
45201 		UINT32_C(0x1)
45202 	/* Network Virtualization Generic Routing Encapsulation (NVGRE) */
45203 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_NVGRE \
45204 		UINT32_C(0x2)
45205 	/* Generic Routing Encapsulation (GRE) inside Ethernet payload */
45206 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_L2GRE \
45207 		UINT32_C(0x3)
45208 	/* IP in IP */
45209 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_IPIP \
45210 		UINT32_C(0x4)
45211 	/* Generic Network Virtualization Encapsulation (Geneve) */
45212 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_GENEVE \
45213 		UINT32_C(0x5)
45214 	/* Multi-Protocol Label Switching (MPLS) */
45215 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_MPLS \
45216 		UINT32_C(0x6)
45217 	/* Stateless Transport Tunnel (STT) */
45218 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_STT \
45219 		UINT32_C(0x7)
45220 	/* Generic Routing Encapsulation (GRE) inside IP datagram payload */
45221 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_IPGRE \
45222 		UINT32_C(0x8)
45223 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
45224 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_VXLAN_V4 \
45225 		UINT32_C(0x9)
45226 	/*
45227 	 * Enhance Generic Routing Encapsulation (GRE version 1) inside IP
45228 	 * datagram payload
45229 	 */
45230 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_IPGRE_V1 \
45231 		UINT32_C(0xa)
45232 	/* Use fixed layer 2 ether type of 0xFFFF */
45233 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_L2_ETYPE \
45234 		UINT32_C(0xb)
45235 	/*
45236 	 * IPV6 over virtual eXtensible Local Area Network with GPE header
45237 	 * (IPV6oVXLANGPE)
45238 	 */
45239 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_VXLAN_GPE_V6 \
45240 		UINT32_C(0xc)
45241 	/* Any tunneled traffic */
45242 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_ANYTUNNEL \
45243 		UINT32_C(0xff)
45244 	#define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_LAST \
45245 		HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_ANYTUNNEL
45246 	uint8_t	unused[3];
45247 	/*
45248 	 * Tunnel identifier.
45249 	 * Virtual Network Identifier (VNI).
45250 	 */
45251 	uint32_t	tunnel_id;
45252 } __rte_packed;
45253 
45254 /* hwrm_cfa_flow_l4_key_data (size:64b/8B) */
45255 struct hwrm_cfa_flow_l4_key_data {
45256 	/* The value of source port. */
45257 	uint16_t	l4_src_port;
45258 	/* The value of destination port. */
45259 	uint16_t	l4_dst_port;
45260 	uint32_t	unused;
45261 } __rte_packed;
45262 
45263 /* hwrm_cfa_flow_l3_key_data (size:512b/64B) */
45264 struct hwrm_cfa_flow_l3_key_data {
45265 	/* The value of ip protocol. */
45266 	uint8_t	ip_protocol;
45267 	uint8_t	unused_0[7];
45268 	/* The value of destination IPv4/IPv6 address. */
45269 	uint32_t	ip_dst[4];
45270 	/* The source IPv4/IPv6 address. */
45271 	uint32_t	ip_src[4];
45272 	/* NAT IPv4/IPv6 address. */
45273 	uint32_t	nat_ip_address[4];
45274 	uint32_t	unused[2];
45275 } __rte_packed;
45276 
45277 /* hwrm_cfa_flow_l2_key_data (size:448b/56B) */
45278 struct hwrm_cfa_flow_l2_key_data {
45279 	/* Destination MAC address. */
45280 	uint16_t	dmac[3];
45281 	uint16_t	unused_0;
45282 	/* Source MAC address. */
45283 	uint16_t	smac[3];
45284 	uint16_t	unused_1;
45285 	/* L2 header re-write Destination MAC address. */
45286 	uint16_t	l2_rewrite_dmac[3];
45287 	uint16_t	unused_2;
45288 	/* L2 header re-write Source MAC address. */
45289 	uint16_t	l2_rewrite_smac[3];
45290 	/* Ethertype. */
45291 	uint16_t	ethertype;
45292 	/* Number of VLAN tags. */
45293 	uint16_t	num_vlan_tags;
45294 	/* VLAN tpid. */
45295 	uint16_t	l2_rewrite_vlan_tpid;
45296 	/* VLAN tci. */
45297 	uint16_t	l2_rewrite_vlan_tci;
45298 	uint8_t	unused_3[2];
45299 	/* Outer VLAN TPID. */
45300 	uint16_t	ovlan_tpid;
45301 	/* Outer VLAN TCI. */
45302 	uint16_t	ovlan_tci;
45303 	/* Inner VLAN TPID. */
45304 	uint16_t	ivlan_tpid;
45305 	/* Inner VLAN TCI. */
45306 	uint16_t	ivlan_tci;
45307 	uint8_t	unused[8];
45308 } __rte_packed;
45309 
45310 /* hwrm_cfa_flow_key_data (size:4160b/520B) */
45311 struct hwrm_cfa_flow_key_data {
45312 	/* Flow associated tunnel L2 header key info. */
45313 	uint32_t	t_l2_key_data[14];
45314 	/* Flow associated tunnel L2 header mask info. */
45315 	uint32_t	t_l2_key_mask[14];
45316 	/* Flow associated tunnel L3 header key info. */
45317 	uint32_t	t_l3_key_data[16];
45318 	/* Flow associated tunnel L3 header mask info. */
45319 	uint32_t	t_l3_key_mask[16];
45320 	/* Flow associated tunnel L4 header key info. */
45321 	uint32_t	t_l4_key_data[2];
45322 	/* Flow associated tunnel L4 header mask info. */
45323 	uint32_t	t_l4_key_mask[2];
45324 	/* Flow associated tunnel header info. */
45325 	uint32_t	tunnel_hdr[2];
45326 	/* Flow associated L2 header key info. */
45327 	uint32_t	l2_key_data[14];
45328 	/* Flow associated L2 header mask info. */
45329 	uint32_t	l2_key_mask[14];
45330 	/* Flow associated L3 header key info. */
45331 	uint32_t	l3_key_data[16];
45332 	/* Flow associated L3 header mask info. */
45333 	uint32_t	l3_key_mask[16];
45334 	/* Flow associated L4 header key info. */
45335 	uint32_t	l4_key_data[2];
45336 	/* Flow associated L4 header mask info. */
45337 	uint32_t	l4_key_mask[2];
45338 } __rte_packed;
45339 
45340 /**********************
45341  * hwrm_cfa_flow_info *
45342  **********************/
45343 
45344 
45345 /* hwrm_cfa_flow_info_input (size:256b/32B) */
45346 struct hwrm_cfa_flow_info_input {
45347 	/* The HWRM command request type. */
45348 	uint16_t	req_type;
45349 	/*
45350 	 * The completion ring to send the completion event on. This should
45351 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
45352 	 */
45353 	uint16_t	cmpl_ring;
45354 	/*
45355 	 * The sequence ID is used by the driver for tracking multiple
45356 	 * commands. This ID is treated as opaque data by the firmware and
45357 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
45358 	 */
45359 	uint16_t	seq_id;
45360 	/*
45361 	 * The target ID of the command:
45362 	 * * 0x0-0xFFF8 - The function ID
45363 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45364 	 * * 0xFFFD - Reserved for user-space HWRM interface
45365 	 * * 0xFFFF - HWRM
45366 	 */
45367 	uint16_t	target_id;
45368 	/*
45369 	 * A physical address pointer pointing to a host buffer that the
45370 	 * command's response data will be written. This can be either a host
45371 	 * physical address (HPA) or a guest physical address (GPA) and must
45372 	 * point to a physically contiguous block of memory.
45373 	 */
45374 	uint64_t	resp_addr;
45375 	/* Flow record index. */
45376 	uint16_t	flow_handle;
45377 	/* Max flow handle */
45378 	#define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_MAX_MASK \
45379 		UINT32_C(0xfff)
45380 	#define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_MAX_SFT        0
45381 	/* CNP flow handle */
45382 	#define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_CNP_CNT \
45383 		UINT32_C(0x1000)
45384 	/* RoCEv1 flow handle */
45385 	#define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_ROCEV1_CNT \
45386 		UINT32_C(0x2000)
45387 	/* RoCEv2 flow handle */
45388 	#define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_ROCEV2_CNT \
45389 		UINT32_C(0x4000)
45390 	/* Direction rx = 1 */
45391 	#define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_DIR_RX \
45392 		UINT32_C(0x8000)
45393 	uint8_t	unused_0[6];
45394 	/* This value identifies a set of CFA data structures used for a flow. */
45395 	uint64_t	ext_flow_handle;
45396 } __rte_packed;
45397 
45398 /* hwrm_cfa_flow_info_output (size:5632b/704B) */
45399 struct hwrm_cfa_flow_info_output {
45400 	/* The specific error status for the command. */
45401 	uint16_t	error_code;
45402 	/* The HWRM command request type. */
45403 	uint16_t	req_type;
45404 	/* The sequence ID from the original command. */
45405 	uint16_t	seq_id;
45406 	/* The length of the response data in number of bytes. */
45407 	uint16_t	resp_len;
45408 	uint8_t	flags;
45409 	/* When set to 1, indicates the configuration is the TX flow. */
45410 	#define HWRM_CFA_FLOW_INFO_OUTPUT_FLAGS_PATH_TX     UINT32_C(0x1)
45411 	/* When set to 1, indicates the configuration is the RX flow. */
45412 	#define HWRM_CFA_FLOW_INFO_OUTPUT_FLAGS_PATH_RX     UINT32_C(0x2)
45413 	/* profile is 8 b */
45414 	uint8_t	profile;
45415 	/* src_fid is 16 b */
45416 	uint16_t	src_fid;
45417 	/* dst_fid is 16 b */
45418 	uint16_t	dst_fid;
45419 	/* l2_ctxt_id is 16 b */
45420 	uint16_t	l2_ctxt_id;
45421 	/* em_info is 64 b */
45422 	uint64_t	em_info;
45423 	/* tcam_info is 64 b */
45424 	uint64_t	tcam_info;
45425 	/* vfp_tcam_info is 64 b */
45426 	uint64_t	vfp_tcam_info;
45427 	/* ar_id is 16 b */
45428 	uint16_t	ar_id;
45429 	/* flow_handle is 16 b */
45430 	uint16_t	flow_handle;
45431 	/* tunnel_handle is 32 b */
45432 	uint32_t	tunnel_handle;
45433 	/* The flow aging timer for the flow, the unit is 100 milliseconds */
45434 	uint16_t	flow_timer;
45435 	uint8_t	unused_0[6];
45436 	/* Flow associated L2, L3 and L4 headers info. */
45437 	uint32_t	flow_key_data[130];
45438 	/* Flow associated action record info. */
45439 	uint32_t	flow_action_info[30];
45440 	uint8_t	unused_1[7];
45441 	/*
45442 	 * This field is used in Output records to indicate that the output
45443 	 * is completely written to RAM. This field should be read as '1'
45444 	 * to indicate that the output has been completely written.
45445 	 * When writing a command completion or response to an internal
45446 	 * processor, the order of writes has to be such that this field is
45447 	 * written last.
45448 	 */
45449 	uint8_t	valid;
45450 } __rte_packed;
45451 
45452 /***********************
45453  * hwrm_cfa_flow_flush *
45454  ***********************/
45455 
45456 
45457 /* hwrm_cfa_flow_flush_input (size:256b/32B) */
45458 struct hwrm_cfa_flow_flush_input {
45459 	/* The HWRM command request type. */
45460 	uint16_t	req_type;
45461 	/*
45462 	 * The completion ring to send the completion event on. This should
45463 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
45464 	 */
45465 	uint16_t	cmpl_ring;
45466 	/*
45467 	 * The sequence ID is used by the driver for tracking multiple
45468 	 * commands. This ID is treated as opaque data by the firmware and
45469 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
45470 	 */
45471 	uint16_t	seq_id;
45472 	/*
45473 	 * The target ID of the command:
45474 	 * * 0x0-0xFFF8 - The function ID
45475 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45476 	 * * 0xFFFD - Reserved for user-space HWRM interface
45477 	 * * 0xFFFF - HWRM
45478 	 */
45479 	uint16_t	target_id;
45480 	/*
45481 	 * A physical address pointer pointing to a host buffer that the
45482 	 * command's response data will be written. This can be either a host
45483 	 * physical address (HPA) or a guest physical address (GPA) and must
45484 	 * point to a physically contiguous block of memory.
45485 	 */
45486 	uint64_t	resp_addr;
45487 	/* flags is 32 b */
45488 	uint32_t	flags;
45489 	/*
45490 	 * Set to 1 to indicate the page size, page layers, and
45491 	 * flow_handle_table_dma_addr fields are valid. The flow flush
45492 	 * operation should only flush the flows from the flow table
45493 	 * specified. This flag is set to 0 by older driver. For older
45494 	 * firmware, setting this flag has no effect.
45495 	 */
45496 	#define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_TABLE_VALID \
45497 		UINT32_C(0x1)
45498 	/*
45499 	 * Set to 1 to indicate flow flush operation to cleanup all the
45500 	 * flows, meters, CFA context memory tables etc. This flag is set to
45501 	 * 0 by older driver. For older firmware, setting this flag has no
45502 	 * effect.
45503 	 */
45504 	#define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_RESET_ALL \
45505 		UINT32_C(0x2)
45506 	/*
45507 	 * Set to 1 to indicate flow flush operation to cleanup all the
45508 	 * flows by the caller. This flag is set to 0 by older driver. For
45509 	 * older firmware, setting this flag has no effect.
45510 	 */
45511 	#define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_RESET_PORT \
45512 		UINT32_C(0x4)
45513 	/*
45514 	 * Set to 1 to indicate the flow counter IDs are included in the
45515 	 * flow table.
45516 	 */
45517 	#define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_INCL_FC \
45518 		UINT32_C(0x8000000)
45519 	/*
45520 	 * This specifies the size of flow handle entries provided by the
45521 	 * driver in the flow table specified below. Only two flow handle
45522 	 * size enums are defined.
45523 	 */
45524 	#define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_ENTRY_SIZE_MASK \
45525 		UINT32_C(0xc0000000)
45526 	#define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_ENTRY_SIZE_SFT \
45527 		30
45528 	/* The flow handle is 16bit */
45529 	#define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_ENTRY_SIZE_FLOW_HND_16BIT \
45530 		(UINT32_C(0x0) << 30)
45531 	/* The flow handle is 64bit */
45532 	#define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_ENTRY_SIZE_FLOW_HND_64BIT \
45533 		(UINT32_C(0x1) << 30)
45534 	#define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_ENTRY_SIZE_LAST \
45535 		HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_ENTRY_SIZE_FLOW_HND_64BIT
45536 	/* Specify page size of the flow table memory. */
45537 	uint8_t	page_size;
45538 	/* The page size is 4K */
45539 	#define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_4K   UINT32_C(0x0)
45540 	/* The page size is 8K */
45541 	#define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_8K   UINT32_C(0x1)
45542 	/* The page size is 64K */
45543 	#define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_64K  UINT32_C(0x4)
45544 	/* The page size is 256K */
45545 	#define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_256K UINT32_C(0x6)
45546 	/* The page size is 1M */
45547 	#define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_1M   UINT32_C(0x8)
45548 	/* The page size is 2M */
45549 	#define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_2M   UINT32_C(0x9)
45550 	/* The page size is 4M */
45551 	#define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_4M   UINT32_C(0xa)
45552 	/* The page size is 1G */
45553 	#define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_1G   UINT32_C(0x12)
45554 	#define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_LAST \
45555 		HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_1G
45556 	/* FLow table memory indirect levels. */
45557 	uint8_t	page_level;
45558 	/* PBL pointer is physical start address. */
45559 	#define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_LEVEL_LVL_0 UINT32_C(0x0)
45560 	/* PBL pointer points to PTE table. */
45561 	#define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_LEVEL_LVL_1 UINT32_C(0x1)
45562 	/*
45563 	 * PBL pointer points to PDE table with each entry pointing to PTE
45564 	 * tables.
45565 	 */
45566 	#define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_LEVEL_LVL_2 UINT32_C(0x2)
45567 	#define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_LEVEL_LAST \
45568 		HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_LEVEL_LVL_2
45569 	/* number of flows in the flow table */
45570 	uint16_t	num_flows;
45571 	/* Pointer to the PBL, or PDL depending on number of levels */
45572 	uint64_t	page_dir;
45573 } __rte_packed;
45574 
45575 /* hwrm_cfa_flow_flush_output (size:128b/16B) */
45576 struct hwrm_cfa_flow_flush_output {
45577 	/* The specific error status for the command. */
45578 	uint16_t	error_code;
45579 	/* The HWRM command request type. */
45580 	uint16_t	req_type;
45581 	/* The sequence ID from the original command. */
45582 	uint16_t	seq_id;
45583 	/* The length of the response data in number of bytes. */
45584 	uint16_t	resp_len;
45585 	uint8_t	unused_0[7];
45586 	/*
45587 	 * This field is used in Output records to indicate that the output
45588 	 * is completely written to RAM. This field should be read as '1'
45589 	 * to indicate that the output has been completely written.
45590 	 * When writing a command completion or response to an internal
45591 	 * processor, the order of writes has to be such that this field is
45592 	 * written last.
45593 	 */
45594 	uint8_t	valid;
45595 } __rte_packed;
45596 
45597 /***********************
45598  * hwrm_cfa_flow_stats *
45599  ***********************/
45600 
45601 
45602 /* hwrm_cfa_flow_stats_input (size:640b/80B) */
45603 struct hwrm_cfa_flow_stats_input {
45604 	/* The HWRM command request type. */
45605 	uint16_t	req_type;
45606 	/*
45607 	 * The completion ring to send the completion event on. This should
45608 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
45609 	 */
45610 	uint16_t	cmpl_ring;
45611 	/*
45612 	 * The sequence ID is used by the driver for tracking multiple
45613 	 * commands. This ID is treated as opaque data by the firmware and
45614 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
45615 	 */
45616 	uint16_t	seq_id;
45617 	/*
45618 	 * The target ID of the command:
45619 	 * * 0x0-0xFFF8 - The function ID
45620 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45621 	 * * 0xFFFD - Reserved for user-space HWRM interface
45622 	 * * 0xFFFF - HWRM
45623 	 */
45624 	uint16_t	target_id;
45625 	/*
45626 	 * A physical address pointer pointing to a host buffer that the
45627 	 * command's response data will be written. This can be either a host
45628 	 * physical address (HPA) or a guest physical address (GPA) and must
45629 	 * point to a physically contiguous block of memory.
45630 	 */
45631 	uint64_t	resp_addr;
45632 	/* Flow handle. */
45633 	uint16_t	num_flows;
45634 	/* Flow handle. */
45635 	uint16_t	flow_handle_0;
45636 	/* Flow handle. */
45637 	uint16_t	flow_handle_1;
45638 	/* Flow handle. */
45639 	uint16_t	flow_handle_2;
45640 	/* Flow handle. */
45641 	uint16_t	flow_handle_3;
45642 	/* Flow handle. */
45643 	uint16_t	flow_handle_4;
45644 	/* Flow handle. */
45645 	uint16_t	flow_handle_5;
45646 	/* Flow handle. */
45647 	uint16_t	flow_handle_6;
45648 	/* Flow handle. */
45649 	uint16_t	flow_handle_7;
45650 	/* Flow handle. */
45651 	uint16_t	flow_handle_8;
45652 	/* Flow handle. */
45653 	uint16_t	flow_handle_9;
45654 	uint8_t	unused_0[2];
45655 	/* Flow ID of a flow. */
45656 	uint32_t	flow_id_0;
45657 	/* Flow ID of a flow. */
45658 	uint32_t	flow_id_1;
45659 	/* Flow ID of a flow. */
45660 	uint32_t	flow_id_2;
45661 	/* Flow ID of a flow. */
45662 	uint32_t	flow_id_3;
45663 	/* Flow ID of a flow. */
45664 	uint32_t	flow_id_4;
45665 	/* Flow ID of a flow. */
45666 	uint32_t	flow_id_5;
45667 	/* Flow ID of a flow. */
45668 	uint32_t	flow_id_6;
45669 	/* Flow ID of a flow. */
45670 	uint32_t	flow_id_7;
45671 	/* Flow ID of a flow. */
45672 	uint32_t	flow_id_8;
45673 	/* Flow ID of a flow. */
45674 	uint32_t	flow_id_9;
45675 } __rte_packed;
45676 
45677 /* hwrm_cfa_flow_stats_output (size:1408b/176B) */
45678 struct hwrm_cfa_flow_stats_output {
45679 	/* The specific error status for the command. */
45680 	uint16_t	error_code;
45681 	/* The HWRM command request type. */
45682 	uint16_t	req_type;
45683 	/* The sequence ID from the original command. */
45684 	uint16_t	seq_id;
45685 	/* The length of the response data in number of bytes. */
45686 	uint16_t	resp_len;
45687 	/* packet_0 is 64 b */
45688 	uint64_t	packet_0;
45689 	/* packet_1 is 64 b */
45690 	uint64_t	packet_1;
45691 	/* packet_2 is 64 b */
45692 	uint64_t	packet_2;
45693 	/* packet_3 is 64 b */
45694 	uint64_t	packet_3;
45695 	/* packet_4 is 64 b */
45696 	uint64_t	packet_4;
45697 	/* packet_5 is 64 b */
45698 	uint64_t	packet_5;
45699 	/* packet_6 is 64 b */
45700 	uint64_t	packet_6;
45701 	/* packet_7 is 64 b */
45702 	uint64_t	packet_7;
45703 	/* packet_8 is 64 b */
45704 	uint64_t	packet_8;
45705 	/* packet_9 is 64 b */
45706 	uint64_t	packet_9;
45707 	/* byte_0 is 64 b */
45708 	uint64_t	byte_0;
45709 	/* byte_1 is 64 b */
45710 	uint64_t	byte_1;
45711 	/* byte_2 is 64 b */
45712 	uint64_t	byte_2;
45713 	/* byte_3 is 64 b */
45714 	uint64_t	byte_3;
45715 	/* byte_4 is 64 b */
45716 	uint64_t	byte_4;
45717 	/* byte_5 is 64 b */
45718 	uint64_t	byte_5;
45719 	/* byte_6 is 64 b */
45720 	uint64_t	byte_6;
45721 	/* byte_7 is 64 b */
45722 	uint64_t	byte_7;
45723 	/* byte_8 is 64 b */
45724 	uint64_t	byte_8;
45725 	/* byte_9 is 64 b */
45726 	uint64_t	byte_9;
45727 	uint8_t	unused_0[7];
45728 	/*
45729 	 * This field is used in Output records to indicate that the output
45730 	 * is completely written to RAM. This field should be read as '1'
45731 	 * to indicate that the output has been completely written.
45732 	 * When writing a command completion or response to an internal
45733 	 * processor, the order of writes has to be such that this field is
45734 	 * written last.
45735 	 */
45736 	uint8_t	valid;
45737 } __rte_packed;
45738 
45739 /***********************************
45740  * hwrm_cfa_flow_aging_timer_reset *
45741  ***********************************/
45742 
45743 
45744 /* hwrm_cfa_flow_aging_timer_reset_input (size:256b/32B) */
45745 struct hwrm_cfa_flow_aging_timer_reset_input {
45746 	/* The HWRM command request type. */
45747 	uint16_t	req_type;
45748 	/*
45749 	 * The completion ring to send the completion event on. This should
45750 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
45751 	 */
45752 	uint16_t	cmpl_ring;
45753 	/*
45754 	 * The sequence ID is used by the driver for tracking multiple
45755 	 * commands. This ID is treated as opaque data by the firmware and
45756 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
45757 	 */
45758 	uint16_t	seq_id;
45759 	/*
45760 	 * The target ID of the command:
45761 	 * * 0x0-0xFFF8 - The function ID
45762 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45763 	 * * 0xFFFD - Reserved for user-space HWRM interface
45764 	 * * 0xFFFF - HWRM
45765 	 */
45766 	uint16_t	target_id;
45767 	/*
45768 	 * A physical address pointer pointing to a host buffer that the
45769 	 * command's response data will be written. This can be either a host
45770 	 * physical address (HPA) or a guest physical address (GPA) and must
45771 	 * point to a physically contiguous block of memory.
45772 	 */
45773 	uint64_t	resp_addr;
45774 	/* Flow record index. */
45775 	uint16_t	flow_handle;
45776 	uint8_t	unused_0[2];
45777 	/*
45778 	 * New flow timer value for the flow specified in the ext_flow_handle.
45779 	 * The flow timer unit is 100ms.
45780 	 */
45781 	uint32_t	flow_timer;
45782 	/* This value identifies a set of CFA data structures used for a flow. */
45783 	uint64_t	ext_flow_handle;
45784 } __rte_packed;
45785 
45786 /* hwrm_cfa_flow_aging_timer_reset_output (size:128b/16B) */
45787 struct hwrm_cfa_flow_aging_timer_reset_output {
45788 	/* The specific error status for the command. */
45789 	uint16_t	error_code;
45790 	/* The HWRM command request type. */
45791 	uint16_t	req_type;
45792 	/* The sequence ID from the original command. */
45793 	uint16_t	seq_id;
45794 	/* The length of the response data in number of bytes. */
45795 	uint16_t	resp_len;
45796 	uint8_t	unused_0[7];
45797 	/*
45798 	 * This field is used in Output records to indicate that the output
45799 	 * is completely written to RAM. This field should be read as '1'
45800 	 * to indicate that the output has been completely written.
45801 	 * When writing a command completion or response to an internal
45802 	 * processor, the order of writes has to be such that this field is
45803 	 * written last.
45804 	 */
45805 	uint8_t	valid;
45806 } __rte_packed;
45807 
45808 /***************************
45809  * hwrm_cfa_flow_aging_cfg *
45810  ***************************/
45811 
45812 
45813 /* hwrm_cfa_flow_aging_cfg_input (size:384b/48B) */
45814 struct hwrm_cfa_flow_aging_cfg_input {
45815 	/* The HWRM command request type. */
45816 	uint16_t	req_type;
45817 	/*
45818 	 * The completion ring to send the completion event on. This should
45819 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
45820 	 */
45821 	uint16_t	cmpl_ring;
45822 	/*
45823 	 * The sequence ID is used by the driver for tracking multiple
45824 	 * commands. This ID is treated as opaque data by the firmware and
45825 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
45826 	 */
45827 	uint16_t	seq_id;
45828 	/*
45829 	 * The target ID of the command:
45830 	 * * 0x0-0xFFF8 - The function ID
45831 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45832 	 * * 0xFFFD - Reserved for user-space HWRM interface
45833 	 * * 0xFFFF - HWRM
45834 	 */
45835 	uint16_t	target_id;
45836 	/*
45837 	 * A physical address pointer pointing to a host buffer that the
45838 	 * command's response data will be written. This can be either a host
45839 	 * physical address (HPA) or a guest physical address (GPA) and must
45840 	 * point to a physically contiguous block of memory.
45841 	 */
45842 	uint64_t	resp_addr;
45843 	/* The bit field to enable per flow aging configuration. */
45844 	uint16_t	enables;
45845 	/*
45846 	 * This bit must be '1' for the tcp flow timer field to be
45847 	 * configured
45848 	 */
45849 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_TCP_FLOW_TIMER \
45850 		UINT32_C(0x1)
45851 	/*
45852 	 * This bit must be '1' for the tcp finish timer field to be
45853 	 * configured
45854 	 */
45855 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_TCP_FIN_TIMER \
45856 		UINT32_C(0x2)
45857 	/*
45858 	 * This bit must be '1' for the udp flow timer field to be
45859 	 * configured
45860 	 */
45861 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_UDP_FLOW_TIMER \
45862 		UINT32_C(0x4)
45863 	/*
45864 	 * This bit must be '1' for the eem dma interval field to be
45865 	 * configured
45866 	 */
45867 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_DMA_INTERVAL \
45868 		UINT32_C(0x8)
45869 	/*
45870 	 * This bit must be '1' for the eem notice interval field to be
45871 	 * configured
45872 	 */
45873 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_NOTICE_INTERVAL \
45874 		UINT32_C(0x10)
45875 	/*
45876 	 * This bit must be '1' for the eem context memory maximum entries
45877 	 * field to be configured
45878 	 */
45879 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_CTX_MAX_ENTRIES \
45880 		UINT32_C(0x20)
45881 	/*
45882 	 * This bit must be '1' for the eem context memory ID field to be
45883 	 * configured
45884 	 */
45885 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_CTX_ID \
45886 		UINT32_C(0x40)
45887 	/*
45888 	 * This bit must be '1' for the eem context memory type field to be
45889 	 * configured
45890 	 */
45891 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_CTX_MEM_TYPE \
45892 		UINT32_C(0x80)
45893 	uint8_t	flags;
45894 	/* Enumeration denoting the RX, TX type of the resource. */
45895 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH       UINT32_C(0x1)
45896 	/* tx path */
45897 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH_TX      UINT32_C(0x0)
45898 	/* rx path */
45899 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH_RX      UINT32_C(0x1)
45900 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH_LAST \
45901 		HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH_RX
45902 	/*
45903 	 * Enumeration denoting the enable, disable eem flow aging
45904 	 * configuration.
45905 	 */
45906 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM        UINT32_C(0x2)
45907 	/* tx path */
45908 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM_DISABLE \
45909 		(UINT32_C(0x0) << 1)
45910 	/* rx path */
45911 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM_ENABLE \
45912 		(UINT32_C(0x1) << 1)
45913 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM_LAST \
45914 		HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM_ENABLE
45915 	uint8_t	unused_0;
45916 	/*
45917 	 * The flow aging timer for all TCP flows, the unit is 100
45918 	 * milliseconds.
45919 	 */
45920 	uint32_t	tcp_flow_timer;
45921 	/*
45922 	 * The TCP finished timer for all TCP flows, the unit is 100
45923 	 * milliseconds.
45924 	 */
45925 	uint32_t	tcp_fin_timer;
45926 	/*
45927 	 * The flow aging timer for all UDP flows, the unit is 100
45928 	 * milliseconds.
45929 	 */
45930 	uint32_t	udp_flow_timer;
45931 	/*
45932 	 * The interval to dma eem ejection data to host memory, the unit is
45933 	 * milliseconds.
45934 	 */
45935 	uint16_t	eem_dma_interval;
45936 	/*
45937 	 * The interval to notify driver to read the eem ejection data, the
45938 	 * unit is milliseconds.
45939 	 */
45940 	uint16_t	eem_notice_interval;
45941 	/* The maximum entries number in the eem context memory. */
45942 	uint32_t	eem_ctx_max_entries;
45943 	/* The context memory ID for eem flow aging. */
45944 	uint16_t	eem_ctx_id;
45945 	uint16_t	eem_ctx_mem_type;
45946 	/*
45947 	 * The content of context memory is eem ejection data, the size of
45948 	 * each entry is 4 bytes.
45949 	 */
45950 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_EEM_CTX_MEM_TYPE_EJECTION_DATA \
45951 		UINT32_C(0x0)
45952 	#define HWRM_CFA_FLOW_AGING_CFG_INPUT_EEM_CTX_MEM_TYPE_LAST \
45953 		HWRM_CFA_FLOW_AGING_CFG_INPUT_EEM_CTX_MEM_TYPE_EJECTION_DATA
45954 	uint8_t	unused_1[4];
45955 } __rte_packed;
45956 
45957 /* hwrm_cfa_flow_aging_cfg_output (size:128b/16B) */
45958 struct hwrm_cfa_flow_aging_cfg_output {
45959 	/* The specific error status for the command. */
45960 	uint16_t	error_code;
45961 	/* The HWRM command request type. */
45962 	uint16_t	req_type;
45963 	/* The sequence ID from the original command. */
45964 	uint16_t	seq_id;
45965 	/* The length of the response data in number of bytes. */
45966 	uint16_t	resp_len;
45967 	uint8_t	unused_0[7];
45968 	/*
45969 	 * This field is used in Output records to indicate that the output
45970 	 * is completely written to RAM. This field should be read as '1'
45971 	 * to indicate that the output has been completely written.
45972 	 * When writing a command completion or response to an internal
45973 	 * processor, the order of writes has to be such that this field is
45974 	 * written last.
45975 	 */
45976 	uint8_t	valid;
45977 } __rte_packed;
45978 
45979 /****************************
45980  * hwrm_cfa_flow_aging_qcfg *
45981  ****************************/
45982 
45983 
45984 /* hwrm_cfa_flow_aging_qcfg_input (size:192b/24B) */
45985 struct hwrm_cfa_flow_aging_qcfg_input {
45986 	/* The HWRM command request type. */
45987 	uint16_t	req_type;
45988 	/*
45989 	 * The completion ring to send the completion event on. This should
45990 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
45991 	 */
45992 	uint16_t	cmpl_ring;
45993 	/*
45994 	 * The sequence ID is used by the driver for tracking multiple
45995 	 * commands. This ID is treated as opaque data by the firmware and
45996 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
45997 	 */
45998 	uint16_t	seq_id;
45999 	/*
46000 	 * The target ID of the command:
46001 	 * * 0x0-0xFFF8 - The function ID
46002 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
46003 	 * * 0xFFFD - Reserved for user-space HWRM interface
46004 	 * * 0xFFFF - HWRM
46005 	 */
46006 	uint16_t	target_id;
46007 	/*
46008 	 * A physical address pointer pointing to a host buffer that the
46009 	 * command's response data will be written. This can be either a host
46010 	 * physical address (HPA) or a guest physical address (GPA) and must
46011 	 * point to a physically contiguous block of memory.
46012 	 */
46013 	uint64_t	resp_addr;
46014 	/*
46015 	 * The direction for the flow aging configuration, 1 is rx path, 2 is
46016 	 * tx path.
46017 	 */
46018 	uint8_t	flags;
46019 	/* Enumeration denoting the RX, TX type of the resource. */
46020 	#define HWRM_CFA_FLOW_AGING_QCFG_INPUT_FLAGS_PATH     UINT32_C(0x1)
46021 	/* tx path */
46022 	#define HWRM_CFA_FLOW_AGING_QCFG_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)
46023 	/* rx path */
46024 	#define HWRM_CFA_FLOW_AGING_QCFG_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)
46025 	#define HWRM_CFA_FLOW_AGING_QCFG_INPUT_FLAGS_PATH_LAST \
46026 		HWRM_CFA_FLOW_AGING_QCFG_INPUT_FLAGS_PATH_RX
46027 	uint8_t	unused_0[7];
46028 } __rte_packed;
46029 
46030 /* hwrm_cfa_flow_aging_qcfg_output (size:320b/40B) */
46031 struct hwrm_cfa_flow_aging_qcfg_output {
46032 	/* The specific error status for the command. */
46033 	uint16_t	error_code;
46034 	/* The HWRM command request type. */
46035 	uint16_t	req_type;
46036 	/* The sequence ID from the original command. */
46037 	uint16_t	seq_id;
46038 	/* The length of the response data in number of bytes. */
46039 	uint16_t	resp_len;
46040 	/*
46041 	 * The current flow aging timer for all TCP flows, the unit is 100
46042 	 * millisecond.
46043 	 */
46044 	uint32_t	tcp_flow_timer;
46045 	/*
46046 	 * The current TCP finished timer for all TCP flows, the unit is 100
46047 	 * millisecond.
46048 	 */
46049 	uint32_t	tcp_fin_timer;
46050 	/*
46051 	 * The current flow aging timer for all UDP flows, the unit is 100
46052 	 * millisecond.
46053 	 */
46054 	uint32_t	udp_flow_timer;
46055 	/*
46056 	 * The interval to dma eem ejection data to host memory, the unit is
46057 	 * milliseconds.
46058 	 */
46059 	uint16_t	eem_dma_interval;
46060 	/*
46061 	 * The interval to notify driver to read the eem ejection data, the
46062 	 * unit is milliseconds.
46063 	 */
46064 	uint16_t	eem_notice_interval;
46065 	/* The maximum entries number in the eem context memory. */
46066 	uint32_t	eem_ctx_max_entries;
46067 	/* The context memory ID for eem flow aging. */
46068 	uint16_t	eem_ctx_id;
46069 	/* The context memory type for eem flow aging. */
46070 	uint16_t	eem_ctx_mem_type;
46071 	uint8_t	unused_0[7];
46072 	/*
46073 	 * This field is used in Output records to indicate that the output
46074 	 * is completely written to RAM. This field should be read as '1'
46075 	 * to indicate that the output has been completely written.
46076 	 * When writing a command completion or response to an internal
46077 	 * processor, the order of writes has to be such that this field is
46078 	 * written last.
46079 	 */
46080 	uint8_t	valid;
46081 } __rte_packed;
46082 
46083 /*****************************
46084  * hwrm_cfa_flow_aging_qcaps *
46085  *****************************/
46086 
46087 
46088 /* hwrm_cfa_flow_aging_qcaps_input (size:192b/24B) */
46089 struct hwrm_cfa_flow_aging_qcaps_input {
46090 	/* The HWRM command request type. */
46091 	uint16_t	req_type;
46092 	/*
46093 	 * The completion ring to send the completion event on. This should
46094 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
46095 	 */
46096 	uint16_t	cmpl_ring;
46097 	/*
46098 	 * The sequence ID is used by the driver for tracking multiple
46099 	 * commands. This ID is treated as opaque data by the firmware and
46100 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
46101 	 */
46102 	uint16_t	seq_id;
46103 	/*
46104 	 * The target ID of the command:
46105 	 * * 0x0-0xFFF8 - The function ID
46106 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
46107 	 * * 0xFFFD - Reserved for user-space HWRM interface
46108 	 * * 0xFFFF - HWRM
46109 	 */
46110 	uint16_t	target_id;
46111 	/*
46112 	 * A physical address pointer pointing to a host buffer that the
46113 	 * command's response data will be written. This can be either a host
46114 	 * physical address (HPA) or a guest physical address (GPA) and must
46115 	 * point to a physically contiguous block of memory.
46116 	 */
46117 	uint64_t	resp_addr;
46118 	/*
46119 	 * The direction for the flow aging configuration, 1 is rx path, 2 is
46120 	 * tx path.
46121 	 */
46122 	uint8_t	flags;
46123 	/* Enumeration denoting the RX, TX type of the resource. */
46124 	#define HWRM_CFA_FLOW_AGING_QCAPS_INPUT_FLAGS_PATH     UINT32_C(0x1)
46125 	/* tx path */
46126 	#define HWRM_CFA_FLOW_AGING_QCAPS_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)
46127 	/* rx path */
46128 	#define HWRM_CFA_FLOW_AGING_QCAPS_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)
46129 	#define HWRM_CFA_FLOW_AGING_QCAPS_INPUT_FLAGS_PATH_LAST \
46130 		HWRM_CFA_FLOW_AGING_QCAPS_INPUT_FLAGS_PATH_RX
46131 	uint8_t	unused_0[7];
46132 } __rte_packed;
46133 
46134 /* hwrm_cfa_flow_aging_qcaps_output (size:256b/32B) */
46135 struct hwrm_cfa_flow_aging_qcaps_output {
46136 	/* The specific error status for the command. */
46137 	uint16_t	error_code;
46138 	/* The HWRM command request type. */
46139 	uint16_t	req_type;
46140 	/* The sequence ID from the original command. */
46141 	uint16_t	seq_id;
46142 	/* The length of the response data in number of bytes. */
46143 	uint16_t	resp_len;
46144 	/*
46145 	 * The maximum flow aging timer for all TCP flows, the unit is 100
46146 	 * millisecond.
46147 	 */
46148 	uint32_t	max_tcp_flow_timer;
46149 	/*
46150 	 * The maximum TCP finished timer for all TCP flows, the unit is 100
46151 	 * millisecond.
46152 	 */
46153 	uint32_t	max_tcp_fin_timer;
46154 	/*
46155 	 * The maximum flow aging timer for all UDP flows, the unit is 100
46156 	 * millisecond.
46157 	 */
46158 	uint32_t	max_udp_flow_timer;
46159 	/* The maximum aging flows that HW can support. */
46160 	uint32_t	max_aging_flows;
46161 	uint8_t	unused_0[7];
46162 	/*
46163 	 * This field is used in Output records to indicate that the output
46164 	 * is completely written to RAM. This field should be read as '1'
46165 	 * to indicate that the output has been completely written.
46166 	 * When writing a command completion or response to an internal
46167 	 * processor, the order of writes has to be such that this field is
46168 	 * written last.
46169 	 */
46170 	uint8_t	valid;
46171 } __rte_packed;
46172 
46173 /**********************************
46174  * hwrm_cfa_tcp_flag_process_qcfg *
46175  **********************************/
46176 
46177 
46178 /* hwrm_cfa_tcp_flag_process_qcfg_input (size:128b/16B) */
46179 struct hwrm_cfa_tcp_flag_process_qcfg_input {
46180 	/* The HWRM command request type. */
46181 	uint16_t	req_type;
46182 	/*
46183 	 * The completion ring to send the completion event on. This should
46184 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
46185 	 */
46186 	uint16_t	cmpl_ring;
46187 	/*
46188 	 * The sequence ID is used by the driver for tracking multiple
46189 	 * commands. This ID is treated as opaque data by the firmware and
46190 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
46191 	 */
46192 	uint16_t	seq_id;
46193 	/*
46194 	 * The target ID of the command:
46195 	 * * 0x0-0xFFF8 - The function ID
46196 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
46197 	 * * 0xFFFD - Reserved for user-space HWRM interface
46198 	 * * 0xFFFF - HWRM
46199 	 */
46200 	uint16_t	target_id;
46201 	/*
46202 	 * A physical address pointer pointing to a host buffer that the
46203 	 * command's response data will be written. This can be either a host
46204 	 * physical address (HPA) or a guest physical address (GPA) and must
46205 	 * point to a physically contiguous block of memory.
46206 	 */
46207 	uint64_t	resp_addr;
46208 } __rte_packed;
46209 
46210 /* hwrm_cfa_tcp_flag_process_qcfg_output (size:192b/24B) */
46211 struct hwrm_cfa_tcp_flag_process_qcfg_output {
46212 	/* The specific error status for the command. */
46213 	uint16_t	error_code;
46214 	/* The HWRM command request type. */
46215 	uint16_t	req_type;
46216 	/* The sequence ID from the original command. */
46217 	uint16_t	seq_id;
46218 	/* The length of the response data in number of bytes. */
46219 	uint16_t	resp_len;
46220 	/* The port 0 RX mirror action record ID. */
46221 	uint16_t	rx_ar_id_port0;
46222 	/* The port 1 RX mirror action record ID. */
46223 	uint16_t	rx_ar_id_port1;
46224 	/*
46225 	 * The port 0 RX action record ID for TX TCP flag packets from
46226 	 * loopback path.
46227 	 */
46228 	uint16_t	tx_ar_id_port0;
46229 	/*
46230 	 * The port 1 RX action record ID for TX TCP flag packets from
46231 	 * loopback path.
46232 	 */
46233 	uint16_t	tx_ar_id_port1;
46234 	uint8_t	unused_0[7];
46235 	/*
46236 	 * This field is used in Output records to indicate that the output
46237 	 * is completely written to RAM. This field should be read as '1'
46238 	 * to indicate that the output has been completely written.
46239 	 * When writing a command completion or response to an internal
46240 	 * processor, the order of writes has to be such that this field is
46241 	 * written last.
46242 	 */
46243 	uint8_t	valid;
46244 } __rte_packed;
46245 
46246 /**************************
46247  * hwrm_cfa_vf_pair_alloc *
46248  **************************/
46249 
46250 
46251 /* hwrm_cfa_vf_pair_alloc_input (size:448b/56B) */
46252 struct hwrm_cfa_vf_pair_alloc_input {
46253 	/* The HWRM command request type. */
46254 	uint16_t	req_type;
46255 	/*
46256 	 * The completion ring to send the completion event on. This should
46257 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
46258 	 */
46259 	uint16_t	cmpl_ring;
46260 	/*
46261 	 * The sequence ID is used by the driver for tracking multiple
46262 	 * commands. This ID is treated as opaque data by the firmware and
46263 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
46264 	 */
46265 	uint16_t	seq_id;
46266 	/*
46267 	 * The target ID of the command:
46268 	 * * 0x0-0xFFF8 - The function ID
46269 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
46270 	 * * 0xFFFD - Reserved for user-space HWRM interface
46271 	 * * 0xFFFF - HWRM
46272 	 */
46273 	uint16_t	target_id;
46274 	/*
46275 	 * A physical address pointer pointing to a host buffer that the
46276 	 * command's response data will be written. This can be either a host
46277 	 * physical address (HPA) or a guest physical address (GPA) and must
46278 	 * point to a physically contiguous block of memory.
46279 	 */
46280 	uint64_t	resp_addr;
46281 	/* Logical VF number (range: 0 -> MAX_VFS -1). */
46282 	uint16_t	vf_a_id;
46283 	/* Logical VF number (range: 0 -> MAX_VFS -1). */
46284 	uint16_t	vf_b_id;
46285 	uint8_t	unused_0[4];
46286 	/* VF Pair name (32 byte string). */
46287 	char	pair_name[32];
46288 } __rte_packed;
46289 
46290 /* hwrm_cfa_vf_pair_alloc_output (size:128b/16B) */
46291 struct hwrm_cfa_vf_pair_alloc_output {
46292 	/* The specific error status for the command. */
46293 	uint16_t	error_code;
46294 	/* The HWRM command request type. */
46295 	uint16_t	req_type;
46296 	/* The sequence ID from the original command. */
46297 	uint16_t	seq_id;
46298 	/* The length of the response data in number of bytes. */
46299 	uint16_t	resp_len;
46300 	uint8_t	unused_0[7];
46301 	/*
46302 	 * This field is used in Output records to indicate that the output
46303 	 * is completely written to RAM. This field should be read as '1'
46304 	 * to indicate that the output has been completely written.
46305 	 * When writing a command completion or response to an internal
46306 	 * processor, the order of writes has to be such that this field is
46307 	 * written last.
46308 	 */
46309 	uint8_t	valid;
46310 } __rte_packed;
46311 
46312 /*************************
46313  * hwrm_cfa_vf_pair_free *
46314  *************************/
46315 
46316 
46317 /* hwrm_cfa_vf_pair_free_input (size:384b/48B) */
46318 struct hwrm_cfa_vf_pair_free_input {
46319 	/* The HWRM command request type. */
46320 	uint16_t	req_type;
46321 	/*
46322 	 * The completion ring to send the completion event on. This should
46323 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
46324 	 */
46325 	uint16_t	cmpl_ring;
46326 	/*
46327 	 * The sequence ID is used by the driver for tracking multiple
46328 	 * commands. This ID is treated as opaque data by the firmware and
46329 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
46330 	 */
46331 	uint16_t	seq_id;
46332 	/*
46333 	 * The target ID of the command:
46334 	 * * 0x0-0xFFF8 - The function ID
46335 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
46336 	 * * 0xFFFD - Reserved for user-space HWRM interface
46337 	 * * 0xFFFF - HWRM
46338 	 */
46339 	uint16_t	target_id;
46340 	/*
46341 	 * A physical address pointer pointing to a host buffer that the
46342 	 * command's response data will be written. This can be either a host
46343 	 * physical address (HPA) or a guest physical address (GPA) and must
46344 	 * point to a physically contiguous block of memory.
46345 	 */
46346 	uint64_t	resp_addr;
46347 	/* VF Pair name (32 byte string). */
46348 	char	pair_name[32];
46349 } __rte_packed;
46350 
46351 /* hwrm_cfa_vf_pair_free_output (size:128b/16B) */
46352 struct hwrm_cfa_vf_pair_free_output {
46353 	/* The specific error status for the command. */
46354 	uint16_t	error_code;
46355 	/* The HWRM command request type. */
46356 	uint16_t	req_type;
46357 	/* The sequence ID from the original command. */
46358 	uint16_t	seq_id;
46359 	/* The length of the response data in number of bytes. */
46360 	uint16_t	resp_len;
46361 	uint8_t	unused_0[7];
46362 	/*
46363 	 * This field is used in Output records to indicate that the output
46364 	 * is completely written to RAM. This field should be read as '1'
46365 	 * to indicate that the output has been completely written.
46366 	 * When writing a command completion or response to an internal
46367 	 * processor, the order of writes has to be such that this field is
46368 	 * written last.
46369 	 */
46370 	uint8_t	valid;
46371 } __rte_packed;
46372 
46373 /*************************
46374  * hwrm_cfa_vf_pair_info *
46375  *************************/
46376 
46377 
46378 /* hwrm_cfa_vf_pair_info_input (size:448b/56B) */
46379 struct hwrm_cfa_vf_pair_info_input {
46380 	/* The HWRM command request type. */
46381 	uint16_t	req_type;
46382 	/*
46383 	 * The completion ring to send the completion event on. This should
46384 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
46385 	 */
46386 	uint16_t	cmpl_ring;
46387 	/*
46388 	 * The sequence ID is used by the driver for tracking multiple
46389 	 * commands. This ID is treated as opaque data by the firmware and
46390 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
46391 	 */
46392 	uint16_t	seq_id;
46393 	/*
46394 	 * The target ID of the command:
46395 	 * * 0x0-0xFFF8 - The function ID
46396 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
46397 	 * * 0xFFFD - Reserved for user-space HWRM interface
46398 	 * * 0xFFFF - HWRM
46399 	 */
46400 	uint16_t	target_id;
46401 	/*
46402 	 * A physical address pointer pointing to a host buffer that the
46403 	 * command's response data will be written. This can be either a host
46404 	 * physical address (HPA) or a guest physical address (GPA) and must
46405 	 * point to a physically contiguous block of memory.
46406 	 */
46407 	uint64_t	resp_addr;
46408 	uint32_t	flags;
46409 	/* If this flag is set, lookup by name else lookup by index. */
46410 	#define HWRM_CFA_VF_PAIR_INFO_INPUT_FLAGS_LOOKUP_TYPE     UINT32_C(0x1)
46411 	/* vf pair table index. */
46412 	uint16_t	vf_pair_index;
46413 	uint8_t	unused_0[2];
46414 	/* VF Pair name (32 byte string). */
46415 	char	vf_pair_name[32];
46416 } __rte_packed;
46417 
46418 /* hwrm_cfa_vf_pair_info_output (size:512b/64B) */
46419 struct hwrm_cfa_vf_pair_info_output {
46420 	/* The specific error status for the command. */
46421 	uint16_t	error_code;
46422 	/* The HWRM command request type. */
46423 	uint16_t	req_type;
46424 	/* The sequence ID from the original command. */
46425 	uint16_t	seq_id;
46426 	/* The length of the response data in number of bytes. */
46427 	uint16_t	resp_len;
46428 	/* vf pair table index. */
46429 	uint16_t	next_vf_pair_index;
46430 	/* vf pair member a's vf_fid. */
46431 	uint16_t	vf_a_fid;
46432 	/* vf pair member a's Linux logical VF number. */
46433 	uint16_t	vf_a_index;
46434 	/* vf pair member b's vf_fid. */
46435 	uint16_t	vf_b_fid;
46436 	/* vf pair member a's Linux logical VF number. */
46437 	uint16_t	vf_b_index;
46438 	/* vf pair state. */
46439 	uint8_t	pair_state;
46440 	/* Pair has been allocated */
46441 	#define HWRM_CFA_VF_PAIR_INFO_OUTPUT_PAIR_STATE_ALLOCATED UINT32_C(0x1)
46442 	/* Both pair members are active */
46443 	#define HWRM_CFA_VF_PAIR_INFO_OUTPUT_PAIR_STATE_ACTIVE    UINT32_C(0x2)
46444 	#define HWRM_CFA_VF_PAIR_INFO_OUTPUT_PAIR_STATE_LAST \
46445 		HWRM_CFA_VF_PAIR_INFO_OUTPUT_PAIR_STATE_ACTIVE
46446 	uint8_t	unused_0[5];
46447 	/* VF Pair name (32 byte string). */
46448 	char	pair_name[32];
46449 	uint8_t	unused_1[7];
46450 	/*
46451 	 * This field is used in Output records to indicate that the output
46452 	 * is completely written to RAM. This field should be read as '1'
46453 	 * to indicate that the output has been completely written.
46454 	 * When writing a command completion or response to an internal
46455 	 * processor, the order of writes has to be such that this field is
46456 	 * written last.
46457 	 */
46458 	uint8_t	valid;
46459 } __rte_packed;
46460 
46461 /***********************
46462  * hwrm_cfa_pair_alloc *
46463  ***********************/
46464 
46465 
46466 /* hwrm_cfa_pair_alloc_input (size:576b/72B) */
46467 struct hwrm_cfa_pair_alloc_input {
46468 	/* The HWRM command request type. */
46469 	uint16_t	req_type;
46470 	/*
46471 	 * The completion ring to send the completion event on. This should
46472 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
46473 	 */
46474 	uint16_t	cmpl_ring;
46475 	/*
46476 	 * The sequence ID is used by the driver for tracking multiple
46477 	 * commands. This ID is treated as opaque data by the firmware and
46478 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
46479 	 */
46480 	uint16_t	seq_id;
46481 	/*
46482 	 * The target ID of the command:
46483 	 * * 0x0-0xFFF8 - The function ID
46484 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
46485 	 * * 0xFFFD - Reserved for user-space HWRM interface
46486 	 * * 0xFFFF - HWRM
46487 	 */
46488 	uint16_t	target_id;
46489 	/*
46490 	 * A physical address pointer pointing to a host buffer that the
46491 	 * command's response data will be written. This can be either a host
46492 	 * physical address (HPA) or a guest physical address (GPA) and must
46493 	 * point to a physically contiguous block of memory.
46494 	 */
46495 	uint64_t	resp_addr;
46496 	/*
46497 	 * Pair mode (0-vf2fn, 1-rep2fn, 2-rep2rep, 3-proxy, 4-pfpair,
46498 	 *            5-rep2fn_mod, 6-rep2fn_modall, 7-rep2fn_truflow).
46499 	 */
46500 	uint16_t	pair_mode;
46501 	/* Pair between VF on local host with PF or VF on specified host. */
46502 	#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_VF2FN \
46503 		UINT32_C(0x0)
46504 	/* Pair between REP on local host with PF or VF on specified host. */
46505 	#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2FN \
46506 		UINT32_C(0x1)
46507 	/* Pair between REP on local host with REP on specified host. */
46508 	#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2REP \
46509 		UINT32_C(0x2)
46510 	/* Pair for the proxy interface. */
46511 	#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_PROXY \
46512 		UINT32_C(0x3)
46513 	/* Pair for the PF interface. */
46514 	#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_PFPAIR \
46515 		UINT32_C(0x4)
46516 	/* Modify existing rep2fn pair and move pair to new PF. */
46517 	#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2FN_MOD \
46518 		UINT32_C(0x5)
46519 	/*
46520 	 * Modify existing rep2fn pairs paired with same PF and move pairs
46521 	 * to new PF.
46522 	 */
46523 	#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2FN_MODALL \
46524 		UINT32_C(0x6)
46525 	/*
46526 	 * Truflow pair between REP on local host with PF or VF on specified
46527 	 * host.
46528 	 */
46529 	#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2FN_TRUFLOW \
46530 		UINT32_C(0x7)
46531 	#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_LAST \
46532 		HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2FN_TRUFLOW
46533 	/* Logical VF number (range: 0 -> MAX_VFS -1). */
46534 	uint16_t	vf_a_id;
46535 	/* Logical Host (0xff-local host). */
46536 	uint8_t	host_b_id;
46537 	/* Logical PF (0xff-PF for command channel). */
46538 	uint8_t	pf_b_id;
46539 	/* Logical VF number (range: 0 -> MAX_VFS -1). */
46540 	uint16_t	vf_b_id;
46541 	/* Loopback port (0xff-internal loopback), valid for mode-3. */
46542 	uint8_t	port_id;
46543 	/* Priority used for encap of loopback packets valid for mode-3. */
46544 	uint8_t	pri;
46545 	/* New PF for rep2fn modify, valid for mode 5. */
46546 	uint16_t	new_pf_fid;
46547 	uint32_t	enables;
46548 	/*
46549 	 * This bit must be '1' for the q_ab field to be
46550 	 * configured.
46551 	 */
46552 	#define HWRM_CFA_PAIR_ALLOC_INPUT_ENABLES_Q_AB_VALID      UINT32_C(0x1)
46553 	/*
46554 	 * This bit must be '1' for the q_ba field to be
46555 	 * configured.
46556 	 */
46557 	#define HWRM_CFA_PAIR_ALLOC_INPUT_ENABLES_Q_BA_VALID      UINT32_C(0x2)
46558 	/*
46559 	 * This bit must be '1' for the fc_ab field to be
46560 	 * configured.
46561 	 */
46562 	#define HWRM_CFA_PAIR_ALLOC_INPUT_ENABLES_FC_AB_VALID     UINT32_C(0x4)
46563 	/*
46564 	 * This bit must be '1' for the fc_ba field to be
46565 	 * configured.
46566 	 */
46567 	#define HWRM_CFA_PAIR_ALLOC_INPUT_ENABLES_FC_BA_VALID     UINT32_C(0x8)
46568 	/* VF Pair name (32 byte string). */
46569 	char	pair_name[32];
46570 	/*
46571 	 * The q_ab value specifies the logical index of the TX/RX CoS
46572 	 * queue to be assigned for traffic in the A to B direction of
46573 	 * the interface pair. The default value is 0.
46574 	 */
46575 	uint8_t	q_ab;
46576 	/*
46577 	 * The q_ba value specifies the logical index of the TX/RX CoS
46578 	 * queue to be assigned for traffic in the B to A direction of
46579 	 * the interface pair. The default value is 1.
46580 	 */
46581 	uint8_t	q_ba;
46582 	/*
46583 	 * Specifies whether RX ring flow control is disabled (0) or enabled
46584 	 * (1) in the A to B direction. The default value is 0, meaning that
46585 	 * packets will be dropped when the B-side RX rings are full.
46586 	 */
46587 	uint8_t	fc_ab;
46588 	/*
46589 	 * Specifies whether RX ring flow control is disabled (0) or enabled
46590 	 * (1) in the B to A direction. The default value is 1, meaning that
46591 	 * the RX CoS queue will be flow controlled when the A-side RX rings
46592 	 * are full.
46593 	 */
46594 	uint8_t	fc_ba;
46595 	uint8_t	unused_1[4];
46596 } __rte_packed;
46597 
46598 /* hwrm_cfa_pair_alloc_output (size:192b/24B) */
46599 struct hwrm_cfa_pair_alloc_output {
46600 	/* The specific error status for the command. */
46601 	uint16_t	error_code;
46602 	/* The HWRM command request type. */
46603 	uint16_t	req_type;
46604 	/* The sequence ID from the original command. */
46605 	uint16_t	seq_id;
46606 	/* The length of the response data in number of bytes. */
46607 	uint16_t	resp_len;
46608 	/* Only valid for modes 1 and 2. */
46609 	uint16_t	rx_cfa_code_a;
46610 	/* Only valid for modes 1 and 2. */
46611 	uint16_t	tx_cfa_action_a;
46612 	/* Only valid for mode 2. */
46613 	uint16_t	rx_cfa_code_b;
46614 	/* Only valid for mode 2. */
46615 	uint16_t	tx_cfa_action_b;
46616 	uint8_t	unused_0[7];
46617 	/*
46618 	 * This field is used in Output records to indicate that the output
46619 	 * is completely written to RAM. This field should be read as '1'
46620 	 * to indicate that the output has been completely written.
46621 	 * When writing a command completion or response to an internal
46622 	 * processor, the order of writes has to be such that this field is
46623 	 * written last.
46624 	 */
46625 	uint8_t	valid;
46626 } __rte_packed;
46627 
46628 /**********************
46629  * hwrm_cfa_pair_free *
46630  **********************/
46631 
46632 
46633 /* hwrm_cfa_pair_free_input (size:448b/56B) */
46634 struct hwrm_cfa_pair_free_input {
46635 	/* The HWRM command request type. */
46636 	uint16_t	req_type;
46637 	/*
46638 	 * The completion ring to send the completion event on. This should
46639 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
46640 	 */
46641 	uint16_t	cmpl_ring;
46642 	/*
46643 	 * The sequence ID is used by the driver for tracking multiple
46644 	 * commands. This ID is treated as opaque data by the firmware and
46645 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
46646 	 */
46647 	uint16_t	seq_id;
46648 	/*
46649 	 * The target ID of the command:
46650 	 * * 0x0-0xFFF8 - The function ID
46651 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
46652 	 * * 0xFFFD - Reserved for user-space HWRM interface
46653 	 * * 0xFFFF - HWRM
46654 	 */
46655 	uint16_t	target_id;
46656 	/*
46657 	 * A physical address pointer pointing to a host buffer that the
46658 	 * command's response data will be written. This can be either a host
46659 	 * physical address (HPA) or a guest physical address (GPA) and must
46660 	 * point to a physically contiguous block of memory.
46661 	 */
46662 	uint64_t	resp_addr;
46663 	/* VF Pair name (32 byte string). */
46664 	char	pair_name[32];
46665 	/* Logical PF (0xff-PF for command channel). */
46666 	uint8_t	pf_b_id;
46667 	uint8_t	unused_0[3];
46668 	/* Logical VF number (range: 0 -> MAX_VFS -1). */
46669 	uint16_t	vf_id;
46670 	/*
46671 	 * Pair mode (0-vf2fn, 1-rep2fn, 2-rep2rep, 3-proxy, 4-pfpair,
46672 	 *            5-rep2fn_mod, 6-rep2fn_modall, 7-rep2fn_truflow).
46673 	 */
46674 	uint16_t	pair_mode;
46675 	/* Pair between VF on local host with PF or VF on specified host. */
46676 	#define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_VF2FN          UINT32_C(0x0)
46677 	/* Pair between REP on local host with PF or VF on specified host. */
46678 	#define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_REP2FN         UINT32_C(0x1)
46679 	/* Pair between REP on local host with REP on specified host. */
46680 	#define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_REP2REP        UINT32_C(0x2)
46681 	/* Pair for the proxy interface. */
46682 	#define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_PROXY          UINT32_C(0x3)
46683 	/* Pair for the PF interface. */
46684 	#define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_PFPAIR         UINT32_C(0x4)
46685 	/* Modify existing rep2fn pair and move pair to new PF. */
46686 	#define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_REP2FN_MOD     UINT32_C(0x5)
46687 	/*
46688 	 * Modify existing rep2fn pairs paired with same PF and move pairs
46689 	 * to new PF.
46690 	 */
46691 	#define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_REP2FN_MODALL  UINT32_C(0x6)
46692 	/*
46693 	 * Truflow pair between REP on local host with PF or VF on
46694 	 * specified host.
46695 	 */
46696 	#define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_REP2FN_TRUFLOW UINT32_C(0x7)
46697 	#define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_LAST \
46698 		HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_REP2FN_TRUFLOW
46699 } __rte_packed;
46700 
46701 /* hwrm_cfa_pair_free_output (size:128b/16B) */
46702 struct hwrm_cfa_pair_free_output {
46703 	/* The specific error status for the command. */
46704 	uint16_t	error_code;
46705 	/* The HWRM command request type. */
46706 	uint16_t	req_type;
46707 	/* The sequence ID from the original command. */
46708 	uint16_t	seq_id;
46709 	/* The length of the response data in number of bytes. */
46710 	uint16_t	resp_len;
46711 	uint8_t	unused_0[7];
46712 	/*
46713 	 * This field is used in Output records to indicate that the output
46714 	 * is completely written to RAM. This field should be read as '1'
46715 	 * to indicate that the output has been completely written.
46716 	 * When writing a command completion or response to an internal
46717 	 * processor, the order of writes has to be such that this field is
46718 	 * written last.
46719 	 */
46720 	uint8_t	valid;
46721 } __rte_packed;
46722 
46723 /**********************
46724  * hwrm_cfa_pair_info *
46725  **********************/
46726 
46727 
46728 /* hwrm_cfa_pair_info_input (size:448b/56B) */
46729 struct hwrm_cfa_pair_info_input {
46730 	/* The HWRM command request type. */
46731 	uint16_t	req_type;
46732 	/*
46733 	 * The completion ring to send the completion event on. This should
46734 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
46735 	 */
46736 	uint16_t	cmpl_ring;
46737 	/*
46738 	 * The sequence ID is used by the driver for tracking multiple
46739 	 * commands. This ID is treated as opaque data by the firmware and
46740 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
46741 	 */
46742 	uint16_t	seq_id;
46743 	/*
46744 	 * The target ID of the command:
46745 	 * * 0x0-0xFFF8 - The function ID
46746 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
46747 	 * * 0xFFFD - Reserved for user-space HWRM interface
46748 	 * * 0xFFFF - HWRM
46749 	 */
46750 	uint16_t	target_id;
46751 	/*
46752 	 * A physical address pointer pointing to a host buffer that the
46753 	 * command's response data will be written. This can be either a host
46754 	 * physical address (HPA) or a guest physical address (GPA) and must
46755 	 * point to a physically contiguous block of memory.
46756 	 */
46757 	uint64_t	resp_addr;
46758 	uint32_t	flags;
46759 	/* If this flag is set, lookup by name else lookup by index. */
46760 	#define HWRM_CFA_PAIR_INFO_INPUT_FLAGS_LOOKUP_TYPE      UINT32_C(0x1)
46761 	/* If this flag is set, lookup by PF id and VF id. */
46762 	#define HWRM_CFA_PAIR_INFO_INPUT_FLAGS_LOOKUP_REPRE     UINT32_C(0x2)
46763 	/* Pair table index. */
46764 	uint16_t	pair_index;
46765 	/* Pair pf index. */
46766 	uint8_t	pair_pfid;
46767 	/* Pair vf index. */
46768 	uint8_t	pair_vfid;
46769 	/* Pair name (32 byte string). */
46770 	char	pair_name[32];
46771 } __rte_packed;
46772 
46773 /* hwrm_cfa_pair_info_output (size:576b/72B) */
46774 struct hwrm_cfa_pair_info_output {
46775 	/* The specific error status for the command. */
46776 	uint16_t	error_code;
46777 	/* The HWRM command request type. */
46778 	uint16_t	req_type;
46779 	/* The sequence ID from the original command. */
46780 	uint16_t	seq_id;
46781 	/* The length of the response data in number of bytes. */
46782 	uint16_t	resp_len;
46783 	/* Pair table index. */
46784 	uint16_t	next_pair_index;
46785 	/* Pair member a's fid. */
46786 	uint16_t	a_fid;
46787 	/* Logical host number. */
46788 	uint8_t	host_a_index;
46789 	/* Logical PF number. */
46790 	uint8_t	pf_a_index;
46791 	/* Pair member a's Linux logical VF number. */
46792 	uint16_t	vf_a_index;
46793 	/* Rx CFA code. */
46794 	uint16_t	rx_cfa_code_a;
46795 	/* Tx CFA action. */
46796 	uint16_t	tx_cfa_action_a;
46797 	/* Pair member b's fid. */
46798 	uint16_t	b_fid;
46799 	/* Logical host number. */
46800 	uint8_t	host_b_index;
46801 	/* Logical PF number. */
46802 	uint8_t	pf_b_index;
46803 	/* Pair member a's Linux logical VF number. */
46804 	uint16_t	vf_b_index;
46805 	/* Rx CFA code. */
46806 	uint16_t	rx_cfa_code_b;
46807 	/* Tx CFA action. */
46808 	uint16_t	tx_cfa_action_b;
46809 	/* Pair mode (0-vf2fn, 1-rep2fn, 2-rep2rep, 3-proxy, 4-pfpair). */
46810 	uint8_t	pair_mode;
46811 	/* Pair between VF on local host with PF or VF on specified host. */
46812 	#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_VF2FN   UINT32_C(0x0)
46813 	/* Pair between REP on local host with PF or VF on specified host. */
46814 	#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_REP2FN  UINT32_C(0x1)
46815 	/* Pair between REP on local host with REP on specified host. */
46816 	#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_REP2REP UINT32_C(0x2)
46817 	/* Pair for the proxy interface. */
46818 	#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_PROXY   UINT32_C(0x3)
46819 	/* Pair for the PF interface. */
46820 	#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_PFPAIR  UINT32_C(0x4)
46821 	#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_LAST \
46822 		HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_PFPAIR
46823 	/* Pair state. */
46824 	uint8_t	pair_state;
46825 	/* Pair has been allocated */
46826 	#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_ALLOCATED UINT32_C(0x1)
46827 	/* Both pair members are active */
46828 	#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_ACTIVE    UINT32_C(0x2)
46829 	#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_LAST \
46830 		HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_ACTIVE
46831 	/* Pair name (32 byte string). */
46832 	char	pair_name[32];
46833 	uint8_t	unused_0[7];
46834 	/*
46835 	 * This field is used in Output records to indicate that the output
46836 	 * is completely written to RAM. This field should be read as '1'
46837 	 * to indicate that the output has been completely written.
46838 	 * When writing a command completion or response to an internal
46839 	 * processor, the order of writes has to be such that this field is
46840 	 * written last.
46841 	 */
46842 	uint8_t	valid;
46843 } __rte_packed;
46844 
46845 /**********************
46846  * hwrm_cfa_vfr_alloc *
46847  **********************/
46848 
46849 
46850 /* hwrm_cfa_vfr_alloc_input (size:448b/56B) */
46851 struct hwrm_cfa_vfr_alloc_input {
46852 	/* The HWRM command request type. */
46853 	uint16_t	req_type;
46854 	/*
46855 	 * The completion ring to send the completion event on. This should
46856 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
46857 	 */
46858 	uint16_t	cmpl_ring;
46859 	/*
46860 	 * The sequence ID is used by the driver for tracking multiple
46861 	 * commands. This ID is treated as opaque data by the firmware and
46862 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
46863 	 */
46864 	uint16_t	seq_id;
46865 	/*
46866 	 * The target ID of the command:
46867 	 * * 0x0-0xFFF8 - The function ID
46868 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
46869 	 * * 0xFFFD - Reserved for user-space HWRM interface
46870 	 * * 0xFFFF - HWRM
46871 	 */
46872 	uint16_t	target_id;
46873 	/*
46874 	 * A physical address pointer pointing to a host buffer that the
46875 	 * command's response data will be written. This can be either a host
46876 	 * physical address (HPA) or a guest physical address (GPA) and must
46877 	 * point to a physically contiguous block of memory.
46878 	 */
46879 	uint64_t	resp_addr;
46880 	/* Logical VF number (range: 0 -> MAX_VFS -1). */
46881 	uint16_t	vf_id;
46882 	/*
46883 	 * This field is reserved for the future use.
46884 	 * It shall be set to 0.
46885 	 */
46886 	uint16_t	reserved;
46887 	uint8_t	unused_0[4];
46888 	/* VF Representor name (32 byte string). */
46889 	char	vfr_name[32];
46890 } __rte_packed;
46891 
46892 /* hwrm_cfa_vfr_alloc_output (size:128b/16B) */
46893 struct hwrm_cfa_vfr_alloc_output {
46894 	/* The specific error status for the command. */
46895 	uint16_t	error_code;
46896 	/* The HWRM command request type. */
46897 	uint16_t	req_type;
46898 	/* The sequence ID from the original command. */
46899 	uint16_t	seq_id;
46900 	/* The length of the response data in number of bytes. */
46901 	uint16_t	resp_len;
46902 	/* Rx CFA code. */
46903 	uint16_t	rx_cfa_code;
46904 	/* Tx CFA action. */
46905 	uint16_t	tx_cfa_action;
46906 	uint8_t	unused_0[3];
46907 	/*
46908 	 * This field is used in Output records to indicate that the output
46909 	 * is completely written to RAM. This field should be read as '1'
46910 	 * to indicate that the output has been completely written.
46911 	 * When writing a command completion or response to an internal
46912 	 * processor, the order of writes has to be such that this field is
46913 	 * written last.
46914 	 */
46915 	uint8_t	valid;
46916 } __rte_packed;
46917 
46918 /*********************
46919  * hwrm_cfa_vfr_free *
46920  *********************/
46921 
46922 
46923 /* hwrm_cfa_vfr_free_input (size:448b/56B) */
46924 struct hwrm_cfa_vfr_free_input {
46925 	/* The HWRM command request type. */
46926 	uint16_t	req_type;
46927 	/*
46928 	 * The completion ring to send the completion event on. This should
46929 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
46930 	 */
46931 	uint16_t	cmpl_ring;
46932 	/*
46933 	 * The sequence ID is used by the driver for tracking multiple
46934 	 * commands. This ID is treated as opaque data by the firmware and
46935 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
46936 	 */
46937 	uint16_t	seq_id;
46938 	/*
46939 	 * The target ID of the command:
46940 	 * * 0x0-0xFFF8 - The function ID
46941 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
46942 	 * * 0xFFFD - Reserved for user-space HWRM interface
46943 	 * * 0xFFFF - HWRM
46944 	 */
46945 	uint16_t	target_id;
46946 	/*
46947 	 * A physical address pointer pointing to a host buffer that the
46948 	 * command's response data will be written. This can be either a host
46949 	 * physical address (HPA) or a guest physical address (GPA) and must
46950 	 * point to a physically contiguous block of memory.
46951 	 */
46952 	uint64_t	resp_addr;
46953 	/* VF Representor name (32 byte string). */
46954 	char	vfr_name[32];
46955 	/* Logical VF number (range: 0 -> MAX_VFS -1). */
46956 	uint16_t	vf_id;
46957 	/*
46958 	 * This field is reserved for the future use.
46959 	 * It shall be set to 0.
46960 	 */
46961 	uint16_t	reserved;
46962 	uint8_t	unused_0[4];
46963 } __rte_packed;
46964 
46965 /* hwrm_cfa_vfr_free_output (size:128b/16B) */
46966 struct hwrm_cfa_vfr_free_output {
46967 	/* The specific error status for the command. */
46968 	uint16_t	error_code;
46969 	/* The HWRM command request type. */
46970 	uint16_t	req_type;
46971 	/* The sequence ID from the original command. */
46972 	uint16_t	seq_id;
46973 	/* The length of the response data in number of bytes. */
46974 	uint16_t	resp_len;
46975 	uint8_t	unused_0[7];
46976 	/*
46977 	 * This field is used in Output records to indicate that the output
46978 	 * is completely written to RAM. This field should be read as '1'
46979 	 * to indicate that the output has been completely written.
46980 	 * When writing a command completion or response to an internal
46981 	 * processor, the order of writes has to be such that this field is
46982 	 * written last.
46983 	 */
46984 	uint8_t	valid;
46985 } __rte_packed;
46986 
46987 /***************************************
46988  * hwrm_cfa_redirect_query_tunnel_type *
46989  ***************************************/
46990 
46991 
46992 /* hwrm_cfa_redirect_query_tunnel_type_input (size:192b/24B) */
46993 struct hwrm_cfa_redirect_query_tunnel_type_input {
46994 	/* The HWRM command request type. */
46995 	uint16_t	req_type;
46996 	/*
46997 	 * The completion ring to send the completion event on. This should
46998 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
46999 	 */
47000 	uint16_t	cmpl_ring;
47001 	/*
47002 	 * The sequence ID is used by the driver for tracking multiple
47003 	 * commands. This ID is treated as opaque data by the firmware and
47004 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
47005 	 */
47006 	uint16_t	seq_id;
47007 	/*
47008 	 * The target ID of the command:
47009 	 * * 0x0-0xFFF8 - The function ID
47010 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
47011 	 * * 0xFFFD - Reserved for user-space HWRM interface
47012 	 * * 0xFFFF - HWRM
47013 	 */
47014 	uint16_t	target_id;
47015 	/*
47016 	 * A physical address pointer pointing to a host buffer that the
47017 	 * command's response data will be written. This can be either a host
47018 	 * physical address (HPA) or a guest physical address (GPA) and must
47019 	 * point to a physically contiguous block of memory.
47020 	 */
47021 	uint64_t	resp_addr;
47022 	/* The source function id. */
47023 	uint16_t	src_fid;
47024 	uint8_t	unused_0[6];
47025 } __rte_packed;
47026 
47027 /* hwrm_cfa_redirect_query_tunnel_type_output (size:128b/16B) */
47028 struct hwrm_cfa_redirect_query_tunnel_type_output {
47029 	/* The specific error status for the command. */
47030 	uint16_t	error_code;
47031 	/* The HWRM command request type. */
47032 	uint16_t	req_type;
47033 	/* The sequence ID from the original command. */
47034 	uint16_t	seq_id;
47035 	/* The length of the response data in number of bytes. */
47036 	uint16_t	resp_len;
47037 	/* Tunnel Mask. */
47038 	uint32_t	tunnel_mask;
47039 	/* Non-tunnel */
47040 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_NONTUNNEL \
47041 		UINT32_C(0x1)
47042 	/* Virtual eXtensible Local Area Network (VXLAN) */
47043 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_VXLAN \
47044 		UINT32_C(0x2)
47045 	/* Network Virtualization Generic Routing Encapsulation (NVGRE) */
47046 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_NVGRE \
47047 		UINT32_C(0x4)
47048 	/* Generic Routing Encapsulation (GRE) inside Ethernet payload */
47049 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_L2GRE \
47050 		UINT32_C(0x8)
47051 	/* IP in IP */
47052 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_IPIP \
47053 		UINT32_C(0x10)
47054 	/* Generic Network Virtualization Encapsulation (Geneve) */
47055 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_GENEVE \
47056 		UINT32_C(0x20)
47057 	/* Multi-Protocol Label Switching (MPLS) */
47058 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_MPLS \
47059 		UINT32_C(0x40)
47060 	/* Stateless Transport Tunnel (STT) */
47061 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_STT \
47062 		UINT32_C(0x80)
47063 	/* Generic Routing Encapsulation (GRE) inside IP datagram payload */
47064 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_IPGRE \
47065 		UINT32_C(0x100)
47066 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
47067 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_VXLAN_V4 \
47068 		UINT32_C(0x200)
47069 	/*
47070 	 * Enhance Generic Routing Encapsulation (GRE version 1) inside IP
47071 	 * datagram payload
47072 	 */
47073 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_IPGRE_V1 \
47074 		UINT32_C(0x400)
47075 	/* Any tunneled traffic */
47076 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_ANYTUNNEL \
47077 		UINT32_C(0x800)
47078 	/* Use fixed layer 2 ether type of 0xFFFF */
47079 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_L2_ETYPE \
47080 		UINT32_C(0x1000)
47081 	/*
47082 	 * IPV6 over virtual eXtensible Local Area Network with GPE header
47083 	 * (IPV6oVXLANGPE)
47084 	 */
47085 	#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_VXLAN_GPE_V6 \
47086 		UINT32_C(0x2000)
47087 	uint8_t	unused_0[3];
47088 	/*
47089 	 * This field is used in Output records to indicate that the output
47090 	 * is completely written to RAM. This field should be read as '1'
47091 	 * to indicate that the output has been completely written.
47092 	 * When writing a command completion or response to an internal
47093 	 * processor, the order of writes has to be such that this field is
47094 	 * written last.
47095 	 */
47096 	uint8_t	valid;
47097 } __rte_packed;
47098 
47099 /*************************
47100  * hwrm_cfa_ctx_mem_rgtr *
47101  *************************/
47102 
47103 
47104 /* hwrm_cfa_ctx_mem_rgtr_input (size:256b/32B) */
47105 struct hwrm_cfa_ctx_mem_rgtr_input {
47106 	/* The HWRM command request type. */
47107 	uint16_t	req_type;
47108 	/*
47109 	 * The completion ring to send the completion event on. This should
47110 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
47111 	 */
47112 	uint16_t	cmpl_ring;
47113 	/*
47114 	 * The sequence ID is used by the driver for tracking multiple
47115 	 * commands. This ID is treated as opaque data by the firmware and
47116 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
47117 	 */
47118 	uint16_t	seq_id;
47119 	/*
47120 	 * The target ID of the command:
47121 	 * * 0x0-0xFFF8 - The function ID
47122 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
47123 	 * * 0xFFFD - Reserved for user-space HWRM interface
47124 	 * * 0xFFFF - HWRM
47125 	 */
47126 	uint16_t	target_id;
47127 	/*
47128 	 * A physical address pointer pointing to a host buffer that the
47129 	 * command's response data will be written. This can be either a host
47130 	 * physical address (HPA) or a guest physical address (GPA) and must
47131 	 * point to a physically contiguous block of memory.
47132 	 */
47133 	uint64_t	resp_addr;
47134 	uint16_t	flags;
47135 	/* Counter PBL indirect levels. */
47136 	uint8_t	page_level;
47137 	/* PBL pointer is physical start address. */
47138 	#define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_0 UINT32_C(0x0)
47139 	/* PBL pointer points to PTE table. */
47140 	#define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_1 UINT32_C(0x1)
47141 	/*
47142 	 * PBL pointer points to PDE table with each entry pointing to PTE
47143 	 * tables.
47144 	 */
47145 	#define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_2 UINT32_C(0x2)
47146 	#define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_LEVEL_LAST \
47147 		HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_2
47148 	/* Page size. */
47149 	uint8_t	page_size;
47150 	/* 4KB page size. */
47151 	#define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_4K   UINT32_C(0x0)
47152 	/* 8KB page size. */
47153 	#define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_8K   UINT32_C(0x1)
47154 	/* 64KB page size. */
47155 	#define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_64K  UINT32_C(0x4)
47156 	/* 256KB page size. */
47157 	#define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_256K UINT32_C(0x6)
47158 	/* 1MB page size. */
47159 	#define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_1M   UINT32_C(0x8)
47160 	/* 2MB page size. */
47161 	#define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_2M   UINT32_C(0x9)
47162 	/* 4MB page size. */
47163 	#define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_4M   UINT32_C(0xa)
47164 	/* 1GB page size. */
47165 	#define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_1G   UINT32_C(0x12)
47166 	#define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_LAST \
47167 		HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_1G
47168 	uint32_t	unused_0;
47169 	/* Pointer to the PBL, or PDL depending on number of levels */
47170 	uint64_t	page_dir;
47171 } __rte_packed;
47172 
47173 /* hwrm_cfa_ctx_mem_rgtr_output (size:128b/16B) */
47174 struct hwrm_cfa_ctx_mem_rgtr_output {
47175 	/* The specific error status for the command. */
47176 	uint16_t	error_code;
47177 	/* The HWRM command request type. */
47178 	uint16_t	req_type;
47179 	/* The sequence ID from the original command. */
47180 	uint16_t	seq_id;
47181 	/* The length of the response data in number of bytes. */
47182 	uint16_t	resp_len;
47183 	/*
47184 	 * Id/Handle to the recently register context memory. This handle is
47185 	 * passed to the CFA feature.
47186 	 */
47187 	uint16_t	ctx_id;
47188 	uint8_t	unused_0[5];
47189 	/*
47190 	 * This field is used in Output records to indicate that the output
47191 	 * is completely written to RAM. This field should be read as '1'
47192 	 * to indicate that the output has been completely written.
47193 	 * When writing a command completion or response to an internal
47194 	 * processor, the order of writes has to be such that this field is
47195 	 * written last.
47196 	 */
47197 	uint8_t	valid;
47198 } __rte_packed;
47199 
47200 /***************************
47201  * hwrm_cfa_ctx_mem_unrgtr *
47202  ***************************/
47203 
47204 
47205 /* hwrm_cfa_ctx_mem_unrgtr_input (size:192b/24B) */
47206 struct hwrm_cfa_ctx_mem_unrgtr_input {
47207 	/* The HWRM command request type. */
47208 	uint16_t	req_type;
47209 	/*
47210 	 * The completion ring to send the completion event on. This should
47211 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
47212 	 */
47213 	uint16_t	cmpl_ring;
47214 	/*
47215 	 * The sequence ID is used by the driver for tracking multiple
47216 	 * commands. This ID is treated as opaque data by the firmware and
47217 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
47218 	 */
47219 	uint16_t	seq_id;
47220 	/*
47221 	 * The target ID of the command:
47222 	 * * 0x0-0xFFF8 - The function ID
47223 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
47224 	 * * 0xFFFD - Reserved for user-space HWRM interface
47225 	 * * 0xFFFF - HWRM
47226 	 */
47227 	uint16_t	target_id;
47228 	/*
47229 	 * A physical address pointer pointing to a host buffer that the
47230 	 * command's response data will be written. This can be either a host
47231 	 * physical address (HPA) or a guest physical address (GPA) and must
47232 	 * point to a physically contiguous block of memory.
47233 	 */
47234 	uint64_t	resp_addr;
47235 	/*
47236 	 * Id/Handle to the recently register context memory. This handle is
47237 	 * passed to the CFA feature.
47238 	 */
47239 	uint16_t	ctx_id;
47240 	uint8_t	unused_0[6];
47241 } __rte_packed;
47242 
47243 /* hwrm_cfa_ctx_mem_unrgtr_output (size:128b/16B) */
47244 struct hwrm_cfa_ctx_mem_unrgtr_output {
47245 	/* The specific error status for the command. */
47246 	uint16_t	error_code;
47247 	/* The HWRM command request type. */
47248 	uint16_t	req_type;
47249 	/* The sequence ID from the original command. */
47250 	uint16_t	seq_id;
47251 	/* The length of the response data in number of bytes. */
47252 	uint16_t	resp_len;
47253 	uint8_t	unused_0[7];
47254 	/*
47255 	 * This field is used in Output records to indicate that the output
47256 	 * is completely written to RAM. This field should be read as '1'
47257 	 * to indicate that the output has been completely written.
47258 	 * When writing a command completion or response to an internal
47259 	 * processor, the order of writes has to be such that this field is
47260 	 * written last.
47261 	 */
47262 	uint8_t	valid;
47263 } __rte_packed;
47264 
47265 /*************************
47266  * hwrm_cfa_ctx_mem_qctx *
47267  *************************/
47268 
47269 
47270 /* hwrm_cfa_ctx_mem_qctx_input (size:192b/24B) */
47271 struct hwrm_cfa_ctx_mem_qctx_input {
47272 	/* The HWRM command request type. */
47273 	uint16_t	req_type;
47274 	/*
47275 	 * The completion ring to send the completion event on. This should
47276 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
47277 	 */
47278 	uint16_t	cmpl_ring;
47279 	/*
47280 	 * The sequence ID is used by the driver for tracking multiple
47281 	 * commands. This ID is treated as opaque data by the firmware and
47282 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
47283 	 */
47284 	uint16_t	seq_id;
47285 	/*
47286 	 * The target ID of the command:
47287 	 * * 0x0-0xFFF8 - The function ID
47288 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
47289 	 * * 0xFFFD - Reserved for user-space HWRM interface
47290 	 * * 0xFFFF - HWRM
47291 	 */
47292 	uint16_t	target_id;
47293 	/*
47294 	 * A physical address pointer pointing to a host buffer that the
47295 	 * command's response data will be written. This can be either a host
47296 	 * physical address (HPA) or a guest physical address (GPA) and must
47297 	 * point to a physically contiguous block of memory.
47298 	 */
47299 	uint64_t	resp_addr;
47300 	/*
47301 	 * Id/Handle to the recently register context memory. This handle is
47302 	 * passed to the CFA feature.
47303 	 */
47304 	uint16_t	ctx_id;
47305 	uint8_t	unused_0[6];
47306 } __rte_packed;
47307 
47308 /* hwrm_cfa_ctx_mem_qctx_output (size:256b/32B) */
47309 struct hwrm_cfa_ctx_mem_qctx_output {
47310 	/* The specific error status for the command. */
47311 	uint16_t	error_code;
47312 	/* The HWRM command request type. */
47313 	uint16_t	req_type;
47314 	/* The sequence ID from the original command. */
47315 	uint16_t	seq_id;
47316 	/* The length of the response data in number of bytes. */
47317 	uint16_t	resp_len;
47318 	uint16_t	flags;
47319 	/* Counter PBL indirect levels. */
47320 	uint8_t	page_level;
47321 	/* PBL pointer is physical start address. */
47322 	#define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_LEVEL_LVL_0 UINT32_C(0x0)
47323 	/* PBL pointer points to PTE table. */
47324 	#define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_LEVEL_LVL_1 UINT32_C(0x1)
47325 	/*
47326 	 * PBL pointer points to PDE table with each entry pointing to PTE
47327 	 * tables.
47328 	 */
47329 	#define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_LEVEL_LVL_2 UINT32_C(0x2)
47330 	#define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_LEVEL_LAST \
47331 		HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_LEVEL_LVL_2
47332 	/* Page size. */
47333 	uint8_t	page_size;
47334 	/* 4KB page size. */
47335 	#define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_4K   UINT32_C(0x0)
47336 	/* 8KB page size. */
47337 	#define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_8K   UINT32_C(0x1)
47338 	/* 64KB page size. */
47339 	#define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_64K  UINT32_C(0x4)
47340 	/* 256KB page size. */
47341 	#define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_256K UINT32_C(0x6)
47342 	/* 1MB page size. */
47343 	#define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_1M   UINT32_C(0x8)
47344 	/* 2MB page size. */
47345 	#define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_2M   UINT32_C(0x9)
47346 	/* 4MB page size. */
47347 	#define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_4M   UINT32_C(0xa)
47348 	/* 1GB page size. */
47349 	#define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_1G   UINT32_C(0x12)
47350 	#define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_LAST \
47351 		HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_1G
47352 	uint8_t	unused_0[4];
47353 	/* Pointer to the PBL, or PDL depending on number of levels */
47354 	uint64_t	page_dir;
47355 	uint8_t	unused_1[7];
47356 	/*
47357 	 * This field is used in Output records to indicate that the output
47358 	 * is completely written to RAM. This field should be read as '1'
47359 	 * to indicate that the output has been completely written.
47360 	 * When writing a command completion or response to an internal
47361 	 * processor, the order of writes has to be such that this field is
47362 	 * written last.
47363 	 */
47364 	uint8_t	valid;
47365 } __rte_packed;
47366 
47367 /**************************
47368  * hwrm_cfa_ctx_mem_qcaps *
47369  **************************/
47370 
47371 
47372 /* hwrm_cfa_ctx_mem_qcaps_input (size:128b/16B) */
47373 struct hwrm_cfa_ctx_mem_qcaps_input {
47374 	/* The HWRM command request type. */
47375 	uint16_t	req_type;
47376 	/*
47377 	 * The completion ring to send the completion event on. This should
47378 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
47379 	 */
47380 	uint16_t	cmpl_ring;
47381 	/*
47382 	 * The sequence ID is used by the driver for tracking multiple
47383 	 * commands. This ID is treated as opaque data by the firmware and
47384 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
47385 	 */
47386 	uint16_t	seq_id;
47387 	/*
47388 	 * The target ID of the command:
47389 	 * * 0x0-0xFFF8 - The function ID
47390 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
47391 	 * * 0xFFFD - Reserved for user-space HWRM interface
47392 	 * * 0xFFFF - HWRM
47393 	 */
47394 	uint16_t	target_id;
47395 	/*
47396 	 * A physical address pointer pointing to a host buffer that the
47397 	 * command's response data will be written. This can be either a host
47398 	 * physical address (HPA) or a guest physical address (GPA) and must
47399 	 * point to a physically contiguous block of memory.
47400 	 */
47401 	uint64_t	resp_addr;
47402 } __rte_packed;
47403 
47404 /* hwrm_cfa_ctx_mem_qcaps_output (size:128b/16B) */
47405 struct hwrm_cfa_ctx_mem_qcaps_output {
47406 	/* The specific error status for the command. */
47407 	uint16_t	error_code;
47408 	/* The HWRM command request type. */
47409 	uint16_t	req_type;
47410 	/* The sequence ID from the original command. */
47411 	uint16_t	seq_id;
47412 	/* The length of the response data in number of bytes. */
47413 	uint16_t	resp_len;
47414 	/*
47415 	 * Indicates the maximum number of context memory which can be
47416 	 * registered.
47417 	 */
47418 	uint16_t	max_entries;
47419 	uint8_t	unused_0[5];
47420 	/*
47421 	 * This field is used in Output records to indicate that the output
47422 	 * is completely written to RAM. This field should be read as '1'
47423 	 * to indicate that the output has been completely written.
47424 	 * When writing a command completion or response to an internal
47425 	 * processor, the order of writes has to be such that this field is
47426 	 * written last.
47427 	 */
47428 	uint8_t	valid;
47429 } __rte_packed;
47430 
47431 /**************************
47432  * hwrm_cfa_counter_qcaps *
47433  **************************/
47434 
47435 
47436 /* hwrm_cfa_counter_qcaps_input (size:128b/16B) */
47437 struct hwrm_cfa_counter_qcaps_input {
47438 	/* The HWRM command request type. */
47439 	uint16_t	req_type;
47440 	/*
47441 	 * The completion ring to send the completion event on. This should
47442 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
47443 	 */
47444 	uint16_t	cmpl_ring;
47445 	/*
47446 	 * The sequence ID is used by the driver for tracking multiple
47447 	 * commands. This ID is treated as opaque data by the firmware and
47448 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
47449 	 */
47450 	uint16_t	seq_id;
47451 	/*
47452 	 * The target ID of the command:
47453 	 * * 0x0-0xFFF8 - The function ID
47454 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
47455 	 * * 0xFFFD - Reserved for user-space HWRM interface
47456 	 * * 0xFFFF - HWRM
47457 	 */
47458 	uint16_t	target_id;
47459 	/*
47460 	 * A physical address pointer pointing to a host buffer that the
47461 	 * command's response data will be written. This can be either a host
47462 	 * physical address (HPA) or a guest physical address (GPA) and must
47463 	 * point to a physically contiguous block of memory.
47464 	 */
47465 	uint64_t	resp_addr;
47466 } __rte_packed;
47467 
47468 /* hwrm_cfa_counter_qcaps_output (size:576b/72B) */
47469 struct hwrm_cfa_counter_qcaps_output {
47470 	/* The specific error status for the command. */
47471 	uint16_t	error_code;
47472 	/* The HWRM command request type. */
47473 	uint16_t	req_type;
47474 	/* The sequence ID from the original command. */
47475 	uint16_t	seq_id;
47476 	/* The length of the response data in number of bytes. */
47477 	uint16_t	resp_len;
47478 	uint32_t	flags;
47479 	/* Enumeration denoting the supported CFA counter format. */
47480 	#define HWRM_CFA_COUNTER_QCAPS_OUTPUT_FLAGS_COUNTER_FORMAT \
47481 		UINT32_C(0x1)
47482 	/* CFA counter types are not supported. */
47483 	#define HWRM_CFA_COUNTER_QCAPS_OUTPUT_FLAGS_COUNTER_FORMAT_NONE \
47484 		UINT32_C(0x0)
47485 	/* 64-bit packet counters followed by 64-bit byte counters format. */
47486 	#define HWRM_CFA_COUNTER_QCAPS_OUTPUT_FLAGS_COUNTER_FORMAT_64_BIT \
47487 		UINT32_C(0x1)
47488 	#define HWRM_CFA_COUNTER_QCAPS_OUTPUT_FLAGS_COUNTER_FORMAT_LAST \
47489 		HWRM_CFA_COUNTER_QCAPS_OUTPUT_FLAGS_COUNTER_FORMAT_64_BIT
47490 	uint32_t	unused_0;
47491 	/*
47492 	 * Minimum guaranteed number of flow counters supported for this
47493 	 * function, in RX direction.
47494 	 */
47495 	uint32_t	min_rx_fc;
47496 	/*
47497 	 * Maximum non-guaranteed number of flow counters supported for this
47498 	 * function, in RX direction.
47499 	 */
47500 	uint32_t	max_rx_fc;
47501 	/*
47502 	 * Minimum guaranteed number of flow counters supported for this
47503 	 * function, in TX direction.
47504 	 */
47505 	uint32_t	min_tx_fc;
47506 	/*
47507 	 * Maximum non-guaranteed number of flow counters supported for this
47508 	 * function, in TX direction.
47509 	 */
47510 	uint32_t	max_tx_fc;
47511 	/*
47512 	 * Minimum guaranteed number of extension flow counters supported for
47513 	 * this function, in RX direction.
47514 	 */
47515 	uint32_t	min_rx_efc;
47516 	/*
47517 	 * Maximum non-guaranteed number of extension flow counters supported
47518 	 * for this function, in RX direction.
47519 	 */
47520 	uint32_t	max_rx_efc;
47521 	/*
47522 	 * Minimum guaranteed number of extension flow counters supported for
47523 	 * this function, in TX direction.
47524 	 */
47525 	uint32_t	min_tx_efc;
47526 	/*
47527 	 * Maximum non-guaranteed number of extension flow counters supported
47528 	 * for this function, in TX direction.
47529 	 */
47530 	uint32_t	max_tx_efc;
47531 	/*
47532 	 * Minimum guaranteed number of meter drop counters supported for
47533 	 * this function, in RX direction.
47534 	 */
47535 	uint32_t	min_rx_mdc;
47536 	/*
47537 	 * Maximum non-guaranteed number of meter drop counters supported for
47538 	 * this function, in RX direction.
47539 	 */
47540 	uint32_t	max_rx_mdc;
47541 	/*
47542 	 * Minimum guaranteed number of meter drop counters supported for this
47543 	 * function, in TX direction.
47544 	 */
47545 	uint32_t	min_tx_mdc;
47546 	/*
47547 	 * Maximum non-guaranteed number of meter drop counters supported for
47548 	 * this function, in TX direction.
47549 	 */
47550 	uint32_t	max_tx_mdc;
47551 	/*
47552 	 * Maximum guaranteed number of flow counters which can be used during
47553 	 * flow alloc.
47554 	 */
47555 	uint32_t	max_flow_alloc_fc;
47556 	uint8_t	unused_1[3];
47557 	/*
47558 	 * This field is used in Output records to indicate that the output
47559 	 * is completely written to RAM. This field should be read as '1'
47560 	 * to indicate that the output has been completely written.
47561 	 * When writing a command completion or response to an internal
47562 	 * processor, the order of writes has to be such that this field is
47563 	 * written last.
47564 	 */
47565 	uint8_t	valid;
47566 } __rte_packed;
47567 
47568 /************************
47569  * hwrm_cfa_counter_cfg *
47570  ************************/
47571 
47572 
47573 /* hwrm_cfa_counter_cfg_input (size:256b/32B) */
47574 struct hwrm_cfa_counter_cfg_input {
47575 	/* The HWRM command request type. */
47576 	uint16_t	req_type;
47577 	/*
47578 	 * The completion ring to send the completion event on. This should
47579 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
47580 	 */
47581 	uint16_t	cmpl_ring;
47582 	/*
47583 	 * The sequence ID is used by the driver for tracking multiple
47584 	 * commands. This ID is treated as opaque data by the firmware and
47585 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
47586 	 */
47587 	uint16_t	seq_id;
47588 	/*
47589 	 * The target ID of the command:
47590 	 * * 0x0-0xFFF8 - The function ID
47591 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
47592 	 * * 0xFFFD - Reserved for user-space HWRM interface
47593 	 * * 0xFFFF - HWRM
47594 	 */
47595 	uint16_t	target_id;
47596 	/*
47597 	 * A physical address pointer pointing to a host buffer that the
47598 	 * command's response data will be written. This can be either a host
47599 	 * physical address (HPA) or a guest physical address (GPA) and must
47600 	 * point to a physically contiguous block of memory.
47601 	 */
47602 	uint64_t	resp_addr;
47603 	uint16_t	flags;
47604 	/* Enumeration denoting the configuration mode. */
47605 	#define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_CFG_MODE \
47606 		UINT32_C(0x1)
47607 	/* Disable the configuration mode. */
47608 	#define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_CFG_MODE_DISABLE \
47609 		UINT32_C(0x0)
47610 	/* Enable the configuration mode. */
47611 	#define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_CFG_MODE_ENABLE \
47612 		UINT32_C(0x1)
47613 	#define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_CFG_MODE_LAST \
47614 		HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_CFG_MODE_ENABLE
47615 	/* Enumeration denoting the RX, TX type of the resource. */
47616 	#define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_PATH \
47617 		UINT32_C(0x2)
47618 	/* Tx path. */
47619 	#define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_PATH_TX \
47620 		(UINT32_C(0x0) << 1)
47621 	/* Rx path. */
47622 	#define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_PATH_RX \
47623 		(UINT32_C(0x1) << 1)
47624 	#define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_PATH_LAST \
47625 		HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_PATH_RX
47626 	/* Enumeration denoting the data transfer mode. */
47627 	#define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_DATA_TRANSFER_MODE_MASK \
47628 		UINT32_C(0xc)
47629 	#define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_DATA_TRANSFER_MODE_SFT       2
47630 	/* Push mode. */
47631 	#define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_DATA_TRANSFER_MODE_PUSH \
47632 		(UINT32_C(0x0) << 2)
47633 	/* Pull mode. */
47634 	#define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_DATA_TRANSFER_MODE_PULL \
47635 		(UINT32_C(0x1) << 2)
47636 	/* Pull on async update. */
47637 	#define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_DATA_TRANSFER_MODE_PULL_ASYNC \
47638 		(UINT32_C(0x2) << 2)
47639 	#define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_DATA_TRANSFER_MODE_LAST \
47640 		HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_DATA_TRANSFER_MODE_PULL_ASYNC
47641 	uint16_t	counter_type;
47642 	/* Flow counters. */
47643 	#define HWRM_CFA_COUNTER_CFG_INPUT_COUNTER_TYPE_FC  UINT32_C(0x0)
47644 	/* Extended flow counters. */
47645 	#define HWRM_CFA_COUNTER_CFG_INPUT_COUNTER_TYPE_EFC UINT32_C(0x1)
47646 	/* Meter drop counters. */
47647 	#define HWRM_CFA_COUNTER_CFG_INPUT_COUNTER_TYPE_MDC UINT32_C(0x2)
47648 	#define HWRM_CFA_COUNTER_CFG_INPUT_COUNTER_TYPE_LAST \
47649 		HWRM_CFA_COUNTER_CFG_INPUT_COUNTER_TYPE_MDC
47650 	/* Ctx memory handle to be used for the counter. */
47651 	uint16_t	ctx_id;
47652 	/* Counter update cadence hint (only in Push mode). */
47653 	uint16_t	update_tmr_ms;
47654 	/* Total number of entries. */
47655 	uint32_t	num_entries;
47656 	uint32_t	unused_0;
47657 } __rte_packed;
47658 
47659 /* hwrm_cfa_counter_cfg_output (size:128b/16B) */
47660 struct hwrm_cfa_counter_cfg_output {
47661 	/* The specific error status for the command. */
47662 	uint16_t	error_code;
47663 	/* The HWRM command request type. */
47664 	uint16_t	req_type;
47665 	/* The sequence ID from the original command. */
47666 	uint16_t	seq_id;
47667 	/* The length of the response data in number of bytes. */
47668 	uint16_t	resp_len;
47669 	uint8_t	unused_0[7];
47670 	/*
47671 	 * This field is used in Output records to indicate that the output
47672 	 * is completely written to RAM. This field should be read as '1'
47673 	 * to indicate that the output has been completely written.
47674 	 * When writing a command completion or response to an internal
47675 	 * processor, the order of writes has to be such that this field is
47676 	 * written last.
47677 	 */
47678 	uint8_t	valid;
47679 } __rte_packed;
47680 
47681 /***************************
47682  * hwrm_cfa_counter_qstats *
47683  ***************************/
47684 
47685 
47686 /* hwrm_cfa_counter_qstats_input (size:320b/40B) */
47687 struct hwrm_cfa_counter_qstats_input {
47688 	/* The HWRM command request type. */
47689 	uint16_t	req_type;
47690 	/*
47691 	 * The completion ring to send the completion event on. This should
47692 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
47693 	 */
47694 	uint16_t	cmpl_ring;
47695 	/*
47696 	 * The sequence ID is used by the driver for tracking multiple
47697 	 * commands. This ID is treated as opaque data by the firmware and
47698 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
47699 	 */
47700 	uint16_t	seq_id;
47701 	/*
47702 	 * The target ID of the command:
47703 	 * * 0x0-0xFFF8 - The function ID
47704 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
47705 	 * * 0xFFFD - Reserved for user-space HWRM interface
47706 	 * * 0xFFFF - HWRM
47707 	 */
47708 	uint16_t	target_id;
47709 	/*
47710 	 * A physical address pointer pointing to a host buffer that the
47711 	 * command's response data will be written. This can be either a host
47712 	 * physical address (HPA) or a guest physical address (GPA) and must
47713 	 * point to a physically contiguous block of memory.
47714 	 */
47715 	uint64_t	resp_addr;
47716 	uint16_t	flags;
47717 	/* Enumeration denoting the RX, TX type of the resource. */
47718 	#define HWRM_CFA_COUNTER_QSTATS_INPUT_FLAGS_PATH     UINT32_C(0x1)
47719 	/* Tx path. */
47720 	#define HWRM_CFA_COUNTER_QSTATS_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)
47721 	/* Rx path. */
47722 	#define HWRM_CFA_COUNTER_QSTATS_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)
47723 	#define HWRM_CFA_COUNTER_QSTATS_INPUT_FLAGS_PATH_LAST \
47724 		HWRM_CFA_COUNTER_QSTATS_INPUT_FLAGS_PATH_RX
47725 	uint16_t	counter_type;
47726 	uint16_t	input_flow_ctx_id;
47727 	uint16_t	num_entries;
47728 	uint16_t	delta_time_ms;
47729 	uint16_t	meter_instance_id;
47730 	uint16_t	mdc_ctx_id;
47731 	uint8_t	unused_0[2];
47732 	uint64_t	expected_count;
47733 } __rte_packed;
47734 
47735 /* hwrm_cfa_counter_qstats_output (size:128b/16B) */
47736 struct hwrm_cfa_counter_qstats_output {
47737 	/* The specific error status for the command. */
47738 	uint16_t	error_code;
47739 	/* The HWRM command request type. */
47740 	uint16_t	req_type;
47741 	/* The sequence ID from the original command. */
47742 	uint16_t	seq_id;
47743 	/* The length of the response data in number of bytes. */
47744 	uint16_t	resp_len;
47745 	uint8_t	unused_0[7];
47746 	/*
47747 	 * This field is used in Output records to indicate that the output
47748 	 * is completely written to RAM. This field should be read as '1'
47749 	 * to indicate that the output has been completely written.
47750 	 * When writing a command completion or response to an internal
47751 	 * processor, the order of writes has to be such that this field is
47752 	 * written last.
47753 	 */
47754 	uint8_t	valid;
47755 } __rte_packed;
47756 
47757 /**********************
47758  * hwrm_cfa_eem_qcaps *
47759  **********************/
47760 
47761 
47762 /* hwrm_cfa_eem_qcaps_input (size:192b/24B) */
47763 struct hwrm_cfa_eem_qcaps_input {
47764 	/* The HWRM command request type. */
47765 	uint16_t	req_type;
47766 	/*
47767 	 * The completion ring to send the completion event on. This should
47768 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
47769 	 */
47770 	uint16_t	cmpl_ring;
47771 	/*
47772 	 * The sequence ID is used by the driver for tracking multiple
47773 	 * commands. This ID is treated as opaque data by the firmware and
47774 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
47775 	 */
47776 	uint16_t	seq_id;
47777 	/*
47778 	 * The target ID of the command:
47779 	 * * 0x0-0xFFF8 - The function ID
47780 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
47781 	 * * 0xFFFD - Reserved for user-space HWRM interface
47782 	 * * 0xFFFF - HWRM
47783 	 */
47784 	uint16_t	target_id;
47785 	/*
47786 	 * A physical address pointer pointing to a host buffer that the
47787 	 * command's response data will be written. This can be either a host
47788 	 * physical address (HPA) or a guest physical address (GPA) and must
47789 	 * point to a physically contiguous block of memory.
47790 	 */
47791 	uint64_t	resp_addr;
47792 	uint32_t	flags;
47793 	/*
47794 	 * When set to 1, indicates the configuration will apply to TX flows
47795 	 * which are to be offloaded.
47796 	 * Note if this bit is set then the path_rx bit can't be set.
47797 	 */
47798 	#define HWRM_CFA_EEM_QCAPS_INPUT_FLAGS_PATH_TX \
47799 		UINT32_C(0x1)
47800 	/*
47801 	 * When set to 1, indicates the configuration will apply to RX flows
47802 	 * which are to be offloaded.
47803 	 * Note if this bit is set then the path_tx bit can't be set.
47804 	 */
47805 	#define HWRM_CFA_EEM_QCAPS_INPUT_FLAGS_PATH_RX \
47806 		UINT32_C(0x2)
47807 	/* When set to 1, all offloaded flows will be sent to EEM. */
47808 	#define HWRM_CFA_EEM_QCAPS_INPUT_FLAGS_PREFERRED_OFFLOAD \
47809 		UINT32_C(0x4)
47810 	uint32_t	unused_0;
47811 } __rte_packed;
47812 
47813 /* hwrm_cfa_eem_qcaps_output (size:320b/40B) */
47814 struct hwrm_cfa_eem_qcaps_output {
47815 	/* The specific error status for the command. */
47816 	uint16_t	error_code;
47817 	/* The HWRM command request type. */
47818 	uint16_t	req_type;
47819 	/* The sequence ID from the original command. */
47820 	uint16_t	seq_id;
47821 	/* The length of the response data in number of bytes. */
47822 	uint16_t	resp_len;
47823 	uint32_t	flags;
47824 	/*
47825 	 * When set to 1, indicates the configuration will apply to TX flows
47826 	 * which are to be offloaded.
47827 	 * Note if this bit is set then the path_rx bit can't be set.
47828 	 */
47829 	#define HWRM_CFA_EEM_QCAPS_OUTPUT_FLAGS_PATH_TX \
47830 		UINT32_C(0x1)
47831 	/*
47832 	 * When set to 1, indicates the configuration will apply to RX flows
47833 	 * which are to be offloaded.
47834 	 * Note if this bit is set then the path_tx bit can't be set.
47835 	 */
47836 	#define HWRM_CFA_EEM_QCAPS_OUTPUT_FLAGS_PATH_RX \
47837 		UINT32_C(0x2)
47838 	/*
47839 	 * When set to 1, indicates the FW supports the Centralized
47840 	 * Memory Model. The concept designates one entity for the
47841 	 * memory allocation while all others ‘subscribe’ to it.
47842 	 */
47843 	#define HWRM_CFA_EEM_QCAPS_OUTPUT_FLAGS_CENTRALIZED_MEMORY_MODEL_SUPPORTED \
47844 		UINT32_C(0x4)
47845 	/*
47846 	 * When set to 1, indicates the FW supports the Detached
47847 	 * Centralized Memory Model. The memory is allocated and managed
47848 	 * as a separate entity. All PFs and VFs will be granted direct
47849 	 * or semi-direct access to the allocated memory while none of
47850 	 * which can interfere with the management of the memory.
47851 	 */
47852 	#define HWRM_CFA_EEM_QCAPS_OUTPUT_FLAGS_DETACHED_CENTRALIZED_MEMORY_MODEL_SUPPORTED \
47853 		UINT32_C(0x8)
47854 	uint32_t	unused_0;
47855 	uint32_t	supported;
47856 	/*
47857 	 * If set to 1, then EEM KEY0 table is supported using crc32 hash.
47858 	 * If set to 0, EEM KEY0 table is not supported.
47859 	 */
47860 	#define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_KEY0_TABLE \
47861 		UINT32_C(0x1)
47862 	/*
47863 	 * If set to 1, then EEM KEY1 table is supported using lookup3 hash.
47864 	 * If set to 0, EEM KEY1 table is not supported.
47865 	 */
47866 	#define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_KEY1_TABLE \
47867 		UINT32_C(0x2)
47868 	/*
47869 	 * If set to 1, then EEM External Record table is supported.
47870 	 * If set to 0, EEM External Record table is not supported.
47871 	 * (This table includes action record, EFC pointers, encap pointers)
47872 	 */
47873 	#define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_EXTERNAL_RECORD_TABLE \
47874 		UINT32_C(0x4)
47875 	/*
47876 	 * If set to 1, then EEM External Flow Counters table is supported.
47877 	 * If set to 0, EEM External Flow Counters table is not supported.
47878 	 */
47879 	#define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_EXTERNAL_FLOW_COUNTERS_TABLE \
47880 		UINT32_C(0x8)
47881 	/*
47882 	 * If set to 1, then FID table used for implicit flow flush is
47883 	 * supported.
47884 	 * If set to 0, then FID table used for implicit flow flush is
47885 	 * not supported.
47886 	 */
47887 	#define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_FID_TABLE \
47888 		UINT32_C(0x10)
47889 	/*
47890 	 * The maximum number of entries supported by EEM. When configuring
47891 	 * the host memory, the number of numbers of entries that can
47892 	 * supported are:
47893 	 *     32k, 64k 128k, 256k, 512k, 1M, 2M, 4M, 8M, 32M, 64M, 128M
47894 	 *     entries.
47895 	 * Any value that are not these values, the FW will round down to the
47896 	 * closest support number of entries.
47897 	 */
47898 	uint32_t	max_entries_supported;
47899 	/* The entry size in bytes of each entry in the EEM KEY0/KEY1 tables. */
47900 	uint16_t	key_entry_size;
47901 	/* The entry size in bytes of each entry in the EEM RECORD tables. */
47902 	uint16_t	record_entry_size;
47903 	/* The entry size in bytes of each entry in the EEM EFC tables. */
47904 	uint16_t	efc_entry_size;
47905 	/* The FID size in bytes of each entry in the EEM FID tables. */
47906 	uint16_t	fid_entry_size;
47907 	uint8_t	unused_1[7];
47908 	/*
47909 	 * This field is used in Output records to indicate that the output
47910 	 * is completely written to RAM. This field should be read as '1'
47911 	 * to indicate that the output has been completely written.
47912 	 * When writing a command completion or response to an internal
47913 	 * processor, the order of writes has to be such that this field is
47914 	 * written last.
47915 	 */
47916 	uint8_t	valid;
47917 } __rte_packed;
47918 
47919 /********************
47920  * hwrm_cfa_eem_cfg *
47921  ********************/
47922 
47923 
47924 /* hwrm_cfa_eem_cfg_input (size:384b/48B) */
47925 struct hwrm_cfa_eem_cfg_input {
47926 	/* The HWRM command request type. */
47927 	uint16_t	req_type;
47928 	/*
47929 	 * The completion ring to send the completion event on. This should
47930 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
47931 	 */
47932 	uint16_t	cmpl_ring;
47933 	/*
47934 	 * The sequence ID is used by the driver for tracking multiple
47935 	 * commands. This ID is treated as opaque data by the firmware and
47936 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
47937 	 */
47938 	uint16_t	seq_id;
47939 	/*
47940 	 * The target ID of the command:
47941 	 * * 0x0-0xFFF8 - The function ID
47942 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
47943 	 * * 0xFFFD - Reserved for user-space HWRM interface
47944 	 * * 0xFFFF - HWRM
47945 	 */
47946 	uint16_t	target_id;
47947 	/*
47948 	 * A physical address pointer pointing to a host buffer that the
47949 	 * command's response data will be written. This can be either a host
47950 	 * physical address (HPA) or a guest physical address (GPA) and must
47951 	 * point to a physically contiguous block of memory.
47952 	 */
47953 	uint64_t	resp_addr;
47954 	uint32_t	flags;
47955 	/*
47956 	 * When set to 1, indicates the configuration will apply to TX flows
47957 	 * which are to be offloaded.
47958 	 * Note if this bit is set then the path_rx bit can't be set.
47959 	 */
47960 	#define HWRM_CFA_EEM_CFG_INPUT_FLAGS_PATH_TX \
47961 		UINT32_C(0x1)
47962 	/*
47963 	 * When set to 1, indicates the configuration will apply to RX flows
47964 	 * which are to be offloaded.
47965 	 * Note if this bit is set then the path_tx bit can't be set.
47966 	 */
47967 	#define HWRM_CFA_EEM_CFG_INPUT_FLAGS_PATH_RX \
47968 		UINT32_C(0x2)
47969 	/* When set to 1, all offloaded flows will be sent to EEM. */
47970 	#define HWRM_CFA_EEM_CFG_INPUT_FLAGS_PREFERRED_OFFLOAD \
47971 		UINT32_C(0x4)
47972 	/* When set to 1, secondary, 0 means primary. */
47973 	#define HWRM_CFA_EEM_CFG_INPUT_FLAGS_SECONDARY_PF \
47974 		UINT32_C(0x8)
47975 	/*
47976 	 * Group_id which used by Firmware to identify memory pools belonging
47977 	 * to certain group.
47978 	 */
47979 	uint16_t	group_id;
47980 	uint16_t	unused_0;
47981 	/*
47982 	 * Configured EEM with the given number of entries. All the EEM tables
47983 	 * KEY0, KEY1, RECORD, EFC all have the same number of entries and all
47984 	 * tables will be configured using this value. Current minimum value
47985 	 * is 32k. Current maximum value is 128M.
47986 	 */
47987 	uint32_t	num_entries;
47988 	uint32_t	unused_1;
47989 	/* Configured EEM with the given context if for KEY0 table. */
47990 	uint16_t	key0_ctx_id;
47991 	/* Configured EEM with the given context if for KEY1 table. */
47992 	uint16_t	key1_ctx_id;
47993 	/* Configured EEM with the given context if for RECORD table. */
47994 	uint16_t	record_ctx_id;
47995 	/* Configured EEM with the given context if for EFC table. */
47996 	uint16_t	efc_ctx_id;
47997 	/* Configured EEM with the given context if for EFC table. */
47998 	uint16_t	fid_ctx_id;
47999 	uint16_t	unused_2;
48000 	uint32_t	unused_3;
48001 } __rte_packed;
48002 
48003 /* hwrm_cfa_eem_cfg_output (size:128b/16B) */
48004 struct hwrm_cfa_eem_cfg_output {
48005 	/* The specific error status for the command. */
48006 	uint16_t	error_code;
48007 	/* The HWRM command request type. */
48008 	uint16_t	req_type;
48009 	/* The sequence ID from the original command. */
48010 	uint16_t	seq_id;
48011 	/* The length of the response data in number of bytes. */
48012 	uint16_t	resp_len;
48013 	uint8_t	unused_0[7];
48014 	/*
48015 	 * This field is used in Output records to indicate that the output
48016 	 * is completely written to RAM. This field should be read as '1'
48017 	 * to indicate that the output has been completely written.
48018 	 * When writing a command completion or response to an internal
48019 	 * processor, the order of writes has to be such that this field is
48020 	 * written last.
48021 	 */
48022 	uint8_t	valid;
48023 } __rte_packed;
48024 
48025 /*********************
48026  * hwrm_cfa_eem_qcfg *
48027  *********************/
48028 
48029 
48030 /* hwrm_cfa_eem_qcfg_input (size:192b/24B) */
48031 struct hwrm_cfa_eem_qcfg_input {
48032 	/* The HWRM command request type. */
48033 	uint16_t	req_type;
48034 	/*
48035 	 * The completion ring to send the completion event on. This should
48036 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
48037 	 */
48038 	uint16_t	cmpl_ring;
48039 	/*
48040 	 * The sequence ID is used by the driver for tracking multiple
48041 	 * commands. This ID is treated as opaque data by the firmware and
48042 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
48043 	 */
48044 	uint16_t	seq_id;
48045 	/*
48046 	 * The target ID of the command:
48047 	 * * 0x0-0xFFF8 - The function ID
48048 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
48049 	 * * 0xFFFD - Reserved for user-space HWRM interface
48050 	 * * 0xFFFF - HWRM
48051 	 */
48052 	uint16_t	target_id;
48053 	/*
48054 	 * A physical address pointer pointing to a host buffer that the
48055 	 * command's response data will be written. This can be either a host
48056 	 * physical address (HPA) or a guest physical address (GPA) and must
48057 	 * point to a physically contiguous block of memory.
48058 	 */
48059 	uint64_t	resp_addr;
48060 	uint32_t	flags;
48061 	/* When set to 1, indicates the configuration is the TX flow. */
48062 	#define HWRM_CFA_EEM_QCFG_INPUT_FLAGS_PATH_TX     UINT32_C(0x1)
48063 	/* When set to 1, indicates the configuration is the RX flow. */
48064 	#define HWRM_CFA_EEM_QCFG_INPUT_FLAGS_PATH_RX     UINT32_C(0x2)
48065 	uint32_t	unused_0;
48066 } __rte_packed;
48067 
48068 /* hwrm_cfa_eem_qcfg_output (size:256b/32B) */
48069 struct hwrm_cfa_eem_qcfg_output {
48070 	/* The specific error status for the command. */
48071 	uint16_t	error_code;
48072 	/* The HWRM command request type. */
48073 	uint16_t	req_type;
48074 	/* The sequence ID from the original command. */
48075 	uint16_t	seq_id;
48076 	/* The length of the response data in number of bytes. */
48077 	uint16_t	resp_len;
48078 	uint32_t	flags;
48079 	/* When set to 1, indicates the configuration is the TX flow. */
48080 	#define HWRM_CFA_EEM_QCFG_OUTPUT_FLAGS_PATH_TX \
48081 		UINT32_C(0x1)
48082 	/* When set to 1, indicates the configuration is the RX flow. */
48083 	#define HWRM_CFA_EEM_QCFG_OUTPUT_FLAGS_PATH_RX \
48084 		UINT32_C(0x2)
48085 	/* When set to 1, all offloaded flows will be sent to EEM. */
48086 	#define HWRM_CFA_EEM_QCFG_OUTPUT_FLAGS_PREFERRED_OFFLOAD \
48087 		UINT32_C(0x4)
48088 	/* The number of entries the FW has configured for EEM. */
48089 	uint32_t	num_entries;
48090 	/* Configured EEM with the given context if for KEY0 table. */
48091 	uint16_t	key0_ctx_id;
48092 	/* Configured EEM with the given context if for KEY1 table. */
48093 	uint16_t	key1_ctx_id;
48094 	/* Configured EEM with the given context if for RECORD table. */
48095 	uint16_t	record_ctx_id;
48096 	/* Configured EEM with the given context if for EFC table. */
48097 	uint16_t	efc_ctx_id;
48098 	/* Configured EEM with the given context if for EFC table. */
48099 	uint16_t	fid_ctx_id;
48100 	uint8_t	unused_2[5];
48101 	/*
48102 	 * This field is used in Output records to indicate that the output
48103 	 * is completely written to RAM. This field should be read as '1'
48104 	 * to indicate that the output has been completely written.
48105 	 * When writing a command completion or response to an internal
48106 	 * processor, the order of writes has to be such that this field is
48107 	 * written last.
48108 	 */
48109 	uint8_t	valid;
48110 } __rte_packed;
48111 
48112 /*******************
48113  * hwrm_cfa_eem_op *
48114  *******************/
48115 
48116 
48117 /* hwrm_cfa_eem_op_input (size:192b/24B) */
48118 struct hwrm_cfa_eem_op_input {
48119 	/* The HWRM command request type. */
48120 	uint16_t	req_type;
48121 	/*
48122 	 * The completion ring to send the completion event on. This should
48123 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
48124 	 */
48125 	uint16_t	cmpl_ring;
48126 	/*
48127 	 * The sequence ID is used by the driver for tracking multiple
48128 	 * commands. This ID is treated as opaque data by the firmware and
48129 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
48130 	 */
48131 	uint16_t	seq_id;
48132 	/*
48133 	 * The target ID of the command:
48134 	 * * 0x0-0xFFF8 - The function ID
48135 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
48136 	 * * 0xFFFD - Reserved for user-space HWRM interface
48137 	 * * 0xFFFF - HWRM
48138 	 */
48139 	uint16_t	target_id;
48140 	/*
48141 	 * A physical address pointer pointing to a host buffer that the
48142 	 * command's response data will be written. This can be either a host
48143 	 * physical address (HPA) or a guest physical address (GPA) and must
48144 	 * point to a physically contiguous block of memory.
48145 	 */
48146 	uint64_t	resp_addr;
48147 	uint32_t	flags;
48148 	/*
48149 	 * When set to 1, indicates the host memory which is passed will be
48150 	 * used for the TX flow offload function specified in fid.
48151 	 * Note if this bit is set then the path_rx bit can't be set.
48152 	 */
48153 	#define HWRM_CFA_EEM_OP_INPUT_FLAGS_PATH_TX     UINT32_C(0x1)
48154 	/*
48155 	 * When set to 1, indicates the host memory which is passed will be
48156 	 * used for the RX flow offload function specified in fid.
48157 	 * Note if this bit is set then the path_tx bit can't be set.
48158 	 */
48159 	#define HWRM_CFA_EEM_OP_INPUT_FLAGS_PATH_RX     UINT32_C(0x2)
48160 	uint16_t	unused_0;
48161 	/* The number of EEM key table entries to be configured. */
48162 	uint16_t	op;
48163 	/* This value is reserved and should not be used. */
48164 	#define HWRM_CFA_EEM_OP_INPUT_OP_RESERVED    UINT32_C(0x0)
48165 	/*
48166 	 * To properly stop EEM and ensure there are no DMA's, the caller
48167 	 * must disable EEM for the given PF, using this call. This will
48168 	 * safely disable EEM and ensure that all DMA'ed to the
48169 	 * keys/records/efc have been completed.
48170 	 */
48171 	#define HWRM_CFA_EEM_OP_INPUT_OP_EEM_DISABLE UINT32_C(0x1)
48172 	/*
48173 	 * Once the EEM host memory has been configured, EEM options have
48174 	 * been configured. Then the caller should enable EEM for the given
48175 	 * PF. Note once this call has been made, then the EEM mechanism
48176 	 * will be active and DMA's will occur as packets are processed.
48177 	 */
48178 	#define HWRM_CFA_EEM_OP_INPUT_OP_EEM_ENABLE  UINT32_C(0x2)
48179 	/*
48180 	 * Clear EEM settings for the given PF so that the register values
48181 	 * are reset back to there initial state.
48182 	 */
48183 	#define HWRM_CFA_EEM_OP_INPUT_OP_EEM_CLEANUP UINT32_C(0x3)
48184 	#define HWRM_CFA_EEM_OP_INPUT_OP_LAST \
48185 		HWRM_CFA_EEM_OP_INPUT_OP_EEM_CLEANUP
48186 } __rte_packed;
48187 
48188 /* hwrm_cfa_eem_op_output (size:128b/16B) */
48189 struct hwrm_cfa_eem_op_output {
48190 	/* The specific error status for the command. */
48191 	uint16_t	error_code;
48192 	/* The HWRM command request type. */
48193 	uint16_t	req_type;
48194 	/* The sequence ID from the original command. */
48195 	uint16_t	seq_id;
48196 	/* The length of the response data in number of bytes. */
48197 	uint16_t	resp_len;
48198 	uint8_t	unused_0[7];
48199 	/*
48200 	 * This field is used in Output records to indicate that the output
48201 	 * is completely written to RAM. This field should be read as '1'
48202 	 * to indicate that the output has been completely written.
48203 	 * When writing a command completion or response to an internal
48204 	 * processor, the order of writes has to be such that this field is
48205 	 * written last.
48206 	 */
48207 	uint8_t	valid;
48208 } __rte_packed;
48209 
48210 /********************************
48211  * hwrm_cfa_adv_flow_mgnt_qcaps *
48212  ********************************/
48213 
48214 
48215 /* hwrm_cfa_adv_flow_mgnt_qcaps_input (size:256b/32B) */
48216 struct hwrm_cfa_adv_flow_mgnt_qcaps_input {
48217 	/* The HWRM command request type. */
48218 	uint16_t	req_type;
48219 	/*
48220 	 * The completion ring to send the completion event on. This should
48221 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
48222 	 */
48223 	uint16_t	cmpl_ring;
48224 	/*
48225 	 * The sequence ID is used by the driver for tracking multiple
48226 	 * commands. This ID is treated as opaque data by the firmware and
48227 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
48228 	 */
48229 	uint16_t	seq_id;
48230 	/*
48231 	 * The target ID of the command:
48232 	 * * 0x0-0xFFF8 - The function ID
48233 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
48234 	 * * 0xFFFD - Reserved for user-space HWRM interface
48235 	 * * 0xFFFF - HWRM
48236 	 */
48237 	uint16_t	target_id;
48238 	/*
48239 	 * A physical address pointer pointing to a host buffer that the
48240 	 * command's response data will be written. This can be either a host
48241 	 * physical address (HPA) or a guest physical address (GPA) and must
48242 	 * point to a physically contiguous block of memory.
48243 	 */
48244 	uint64_t	resp_addr;
48245 	uint32_t	unused_0[4];
48246 } __rte_packed;
48247 
48248 /* hwrm_cfa_adv_flow_mgnt_qcaps_output (size:128b/16B) */
48249 struct hwrm_cfa_adv_flow_mgnt_qcaps_output {
48250 	/* The specific error status for the command. */
48251 	uint16_t	error_code;
48252 	/* The HWRM command request type. */
48253 	uint16_t	req_type;
48254 	/* The sequence ID from the original command. */
48255 	uint16_t	seq_id;
48256 	/* The length of the response data in number of bytes. */
48257 	uint16_t	resp_len;
48258 	uint32_t	flags;
48259 	/*
48260 	 * Value of 1 to indicate firmware support 16-bit flow handle.
48261 	 * Value of 0 to indicate firmware not support 16-bit flow handle.
48262 	 */
48263 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_HND_16BIT_SUPPORTED \
48264 		UINT32_C(0x1)
48265 	/*
48266 	 * Value of 1 to indicate firmware support 64-bit flow handle.
48267 	 * Value of 0 to indicate firmware not support 64-bit flow handle.
48268 	 */
48269 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_HND_64BIT_SUPPORTED \
48270 		UINT32_C(0x2)
48271 	/*
48272 	 * Value of 1 to indicate firmware support flow batch delete
48273 	 * operation through HWRM_CFA_FLOW_FLUSH command.
48274 	 * Value of 0 to indicate that the firmware does not support flow
48275 	 * batch delete operation.
48276 	 */
48277 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_BATCH_DELETE_SUPPORTED \
48278 		UINT32_C(0x4)
48279 	/*
48280 	 * Value of 1 to indicate that the firmware support flow reset all
48281 	 * operation through HWRM_CFA_FLOW_FLUSH command.
48282 	 * Value of 0 indicates firmware does not support flow reset all
48283 	 * operation.
48284 	 */
48285 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_RESET_ALL_SUPPORTED \
48286 		UINT32_C(0x8)
48287 	/*
48288 	 * Value of 1 to indicate that firmware supports use of FID as
48289 	 * dest_id in HWRM_CFA_NTUPLE_ALLOC/CFG commands.
48290 	 * Value of 0 indicates firmware does not support use of FID as
48291 	 * dest_id.
48292 	 */
48293 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_NTUPLE_FLOW_DEST_FUNC_SUPPORTED \
48294 		UINT32_C(0x10)
48295 	/*
48296 	 * Value of 1 to indicate that firmware supports TX EEM flows.
48297 	 * Value of 0 indicates firmware does not support TX EEM flows.
48298 	 */
48299 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_TX_EEM_FLOW_SUPPORTED \
48300 		UINT32_C(0x20)
48301 	/*
48302 	 * Value of 1 to indicate that firmware supports RX EEM flows.
48303 	 * Value of 0 indicates firmware does not support RX EEM flows.
48304 	 */
48305 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_RX_EEM_FLOW_SUPPORTED \
48306 		UINT32_C(0x40)
48307 	/*
48308 	 * Value of 1 to indicate that firmware supports the dynamic
48309 	 * allocation of an on-chip flow counter which can be used for EEM
48310 	 * flows. Value of 0 indicates firmware does not support the dynamic
48311 	 * allocation of an on-chip flow counter.
48312 	 */
48313 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_COUNTER_ALLOC_SUPPORTED \
48314 		UINT32_C(0x80)
48315 	/*
48316 	 * Value of 1 to indicate that firmware supports setting of
48317 	 * rfs_ring_tbl_idx in HWRM_CFA_NTUPLE_ALLOC command.
48318 	 * Value of 0 indicates firmware does not support rfs_ring_tbl_idx.
48319 	 */
48320 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_RFS_RING_TBL_IDX_SUPPORTED \
48321 		UINT32_C(0x100)
48322 	/*
48323 	 * Value of 1 to indicate that firmware supports untagged matching
48324 	 * criteria on HWRM_CFA_L2_FILTER_ALLOC command. Value of 0
48325 	 * indicates firmware does not support untagged matching.
48326 	 */
48327 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_UNTAGGED_VLAN_SUPPORTED \
48328 		UINT32_C(0x200)
48329 	/*
48330 	 * Value of 1 to indicate that firmware supports XDP filter. Value
48331 	 * of 0 indicates firmware does not support XDP filter.
48332 	 */
48333 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_XDP_SUPPORTED \
48334 		UINT32_C(0x400)
48335 	/*
48336 	 * Value of 1 to indicate that the firmware support L2 header source
48337 	 * fields matching criteria on HWRM_CFA_L2_FILTER_ALLOC command.
48338 	 * Value of 0 indicates firmware does not support L2 header source
48339 	 * fields matching.
48340 	 */
48341 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_L2_HEADER_SOURCE_FIELDS_SUPPORTED \
48342 		UINT32_C(0x800)
48343 	/*
48344 	 * If set to 1, firmware is capable of supporting ARP ethertype as
48345 	 * matching criteria for HWRM_CFA_NTUPLE_FILTER_ALLOC command on the
48346 	 * RX direction. By default, this flag should be 0 for older version
48347 	 * of firmware.
48348 	 */
48349 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_NTUPLE_FLOW_RX_ARP_SUPPORTED \
48350 		UINT32_C(0x1000)
48351 	/*
48352 	 * Value of 1 to indicate that firmware supports setting of
48353 	 * rfs_ring_tbl_idx in dst_id field of the HWRM_CFA_NTUPLE_ALLOC
48354 	 * command. Value of 0 indicates firmware does not support
48355 	 * rfs_ring_tbl_idx in dst_id field.
48356 	 */
48357 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_RFS_RING_TBL_IDX_V2_SUPPORTED \
48358 		UINT32_C(0x2000)
48359 	/*
48360 	 * If set to 1, firmware is capable of supporting IPv4/IPv6 as
48361 	 * ethertype in HWRM_CFA_NTUPLE_FILTER_ALLOC command on the RX
48362 	 * direction. By default, this flag should be 0 for older version
48363 	 * of firmware.
48364 	 */
48365 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_NTUPLE_FLOW_RX_ETHERTYPE_IP_SUPPORTED \
48366 		UINT32_C(0x4000)
48367 	/*
48368 	 * When this bit is '1', it indicates that core firmware is
48369 	 * capable of TruFlow. Driver can restrict sending HWRM CFA_FLOW_XXX
48370 	 * and CFA_ENCAP_XXX, CFA_DECAP_XXX commands.
48371 	 */
48372 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_TRUFLOW_CAPABLE \
48373 		UINT32_C(0x8000)
48374 	/*
48375 	 * If set to 1, firmware is capable of supporting L2/ROCE as
48376 	 * traffic type in flags field of HWRM_CFA_L2_FILTER_ALLOC command.
48377 	 * By default, this flag should be 0 for older version of firmware.
48378 	 */
48379 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_L2_FILTER_TRAFFIC_TYPE_L2_ROCE_SUPPORTED \
48380 		UINT32_C(0x10000)
48381 	/*
48382 	 * If set to 1, firmware is capable of HW LAG. This bit is only
48383 	 * advertised if the calling function is a PAXC function.
48384 	 */
48385 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_LAG_SUPPORTED \
48386 		UINT32_C(0x20000)
48387 	/*
48388 	 * If set to 1, firmware is capable installing ntuple rules without
48389 	 * additional classification on the L2 Context.
48390 	 */
48391 	#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_NTUPLE_FLOW_NO_L2CTX_SUPPORTED \
48392 		UINT32_C(0x40000)
48393 	uint8_t	unused_0[3];
48394 	/*
48395 	 * This field is used in Output records to indicate that the output
48396 	 * is completely written to RAM. This field should be read as '1'
48397 	 * to indicate that the output has been completely written.
48398 	 * When writing a command completion or response to an internal
48399 	 * processor, the order of writes has to be such that this field is
48400 	 * written last.
48401 	 */
48402 	uint8_t	valid;
48403 } __rte_packed;
48404 
48405 /******************
48406  * hwrm_cfa_tflib *
48407  ******************/
48408 
48409 
48410 /* hwrm_cfa_tflib_input (size:1024b/128B) */
48411 struct hwrm_cfa_tflib_input {
48412 	/* The HWRM command request type. */
48413 	uint16_t	req_type;
48414 	/*
48415 	 * The completion ring to send the completion event on. This should
48416 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
48417 	 */
48418 	uint16_t	cmpl_ring;
48419 	/*
48420 	 * The sequence ID is used by the driver for tracking multiple
48421 	 * commands. This ID is treated as opaque data by the firmware and
48422 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
48423 	 */
48424 	uint16_t	seq_id;
48425 	/*
48426 	 * The target ID of the command:
48427 	 * * 0x0-0xFFF8 - The function ID
48428 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
48429 	 * * 0xFFFD - Reserved for user-space HWRM interface
48430 	 * * 0xFFFF - HWRM
48431 	 */
48432 	uint16_t	target_id;
48433 	/*
48434 	 * A physical address pointer pointing to a host buffer that the
48435 	 * command's response data will be written. This can be either a host
48436 	 * physical address (HPA) or a guest physical address (GPA) and must
48437 	 * point to a physically contiguous block of memory.
48438 	 */
48439 	uint64_t	resp_addr;
48440 	/* TFLIB message type. */
48441 	uint16_t	tf_type;
48442 	/* TFLIB message subtype. */
48443 	uint16_t	tf_subtype;
48444 	/* unused. */
48445 	uint8_t	unused0[4];
48446 	/* TFLIB request data. */
48447 	uint32_t	tf_req[26];
48448 } __rte_packed;
48449 
48450 /* hwrm_cfa_tflib_output (size:5632b/704B) */
48451 struct hwrm_cfa_tflib_output {
48452 	/* The specific error status for the command. */
48453 	uint16_t	error_code;
48454 	/* The HWRM command request type. */
48455 	uint16_t	req_type;
48456 	/* The sequence ID from the original command. */
48457 	uint16_t	seq_id;
48458 	/* The length of the response data in number of bytes. */
48459 	uint16_t	resp_len;
48460 	/* TFLIB message type. */
48461 	uint16_t	tf_type;
48462 	/* TFLIB message subtype. */
48463 	uint16_t	tf_subtype;
48464 	/* TFLIB response code */
48465 	uint32_t	tf_resp_code;
48466 	/* TFLIB response data. */
48467 	uint32_t	tf_resp[170];
48468 	/* unused. */
48469 	uint8_t	unused1[7];
48470 	/*
48471 	 * This field is used in Output records to indicate that the output
48472 	 * is completely written to RAM. This field should be read as '1'
48473 	 * to indicate that the output has been completely written.
48474 	 * When writing a command completion or response to an internal
48475 	 * processor, the order of writes has to be such that this field is
48476 	 * written last.
48477 	 */
48478 	uint8_t	valid;
48479 } __rte_packed;
48480 
48481 /**********************************
48482  * hwrm_cfa_lag_group_member_rgtr *
48483  **********************************/
48484 
48485 
48486 /* hwrm_cfa_lag_group_member_rgtr_input (size:192b/24B) */
48487 struct hwrm_cfa_lag_group_member_rgtr_input {
48488 	/* The HWRM command request type. */
48489 	uint16_t	req_type;
48490 	/*
48491 	 * The completion ring to send the completion event on. This should
48492 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
48493 	 */
48494 	uint16_t	cmpl_ring;
48495 	/*
48496 	 * The sequence ID is used by the driver for tracking multiple
48497 	 * commands. This ID is treated as opaque data by the firmware and
48498 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
48499 	 */
48500 	uint16_t	seq_id;
48501 	/*
48502 	 * The target ID of the command:
48503 	 * * 0x0-0xFFF8 - The function ID
48504 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
48505 	 * * 0xFFFD - Reserved for user-space HWRM interface
48506 	 * * 0xFFFF - HWRM
48507 	 */
48508 	uint16_t	target_id;
48509 	/*
48510 	 * A physical address pointer pointing to a host buffer that the
48511 	 * command's response data will be written. This can be either a host
48512 	 * physical address (HPA) or a guest physical address (GPA) and must
48513 	 * point to a physically contiguous block of memory.
48514 	 */
48515 	uint64_t	resp_addr;
48516 	uint8_t	mode;
48517 	/*
48518 	 * Transmit only on the active port. Automatically failover
48519 	 * to backup port.
48520 	 */
48521 	#define HWRM_CFA_LAG_GROUP_MEMBER_RGTR_INPUT_MODE_ACTIVE_BACKUP \
48522 		UINT32_C(0x1)
48523 	/*
48524 	 * Transmit based on packet header ntuple hash. Packet with only
48525 	 * layer 2 headers will hash using the destination MAC, source MAC
48526 	 * and Ethertype fields.  Packets with layer 3 (IP) headers will
48527 	 * hash using the destination MAC, source MAC, IP protocol/next
48528 	 * header, source IP address and destination IP address. Packets
48529 	 * with layer 4 (TCP/UDP) headers will hash using the destination
48530 	 * MAC, source MAC, IP protocol/next header, source IP address,
48531 	 * destination IP address, source port and destination port fields.
48532 	 */
48533 	#define HWRM_CFA_LAG_GROUP_MEMBER_RGTR_INPUT_MODE_BALANCE_XOR \
48534 		UINT32_C(0x2)
48535 	/* Transmit packets on all specified ports. */
48536 	#define HWRM_CFA_LAG_GROUP_MEMBER_RGTR_INPUT_MODE_BROADCAST \
48537 		UINT32_C(0x3)
48538 	#define HWRM_CFA_LAG_GROUP_MEMBER_RGTR_INPUT_MODE_LAST \
48539 		HWRM_CFA_LAG_GROUP_MEMBER_RGTR_INPUT_MODE_BROADCAST
48540 	/*
48541 	 * Supports up to 5 ports. bit0 = port 0, bit1 = port 1,
48542 	 * bit2 = port 2, bit3 = port 4, bit4 = loopback port
48543 	 */
48544 	uint8_t	port_bitmap;
48545 	/* Specify the active port when active-backup mode is specified */
48546 	uint8_t	active_port;
48547 	uint8_t	unused_0[5];
48548 } __rte_packed;
48549 
48550 /* hwrm_cfa_lag_group_member_rgtr_output (size:128b/16B) */
48551 struct hwrm_cfa_lag_group_member_rgtr_output {
48552 	/* The specific error status for the command. */
48553 	uint16_t	error_code;
48554 	/* The HWRM command request type. */
48555 	uint16_t	req_type;
48556 	/* The sequence ID from the original command. */
48557 	uint16_t	seq_id;
48558 	/* The length of the response data in number of bytes. */
48559 	uint16_t	resp_len;
48560 	/* lag group ID configured for the function */
48561 	uint16_t	lag_id;
48562 	uint8_t	unused_0[5];
48563 	/*
48564 	 * This field is used in Output records to indicate that the output
48565 	 * is completely written to RAM. This field should be read as '1'
48566 	 * to indicate that the output has been completely written.
48567 	 * When writing a command completion or response to an internal
48568 	 * processor, the order of writes has to be such that this field is
48569 	 * written last.
48570 	 */
48571 	uint8_t	valid;
48572 } __rte_packed;
48573 
48574 /************************************
48575  * hwrm_cfa_lag_group_member_unrgtr *
48576  ************************************/
48577 
48578 
48579 /* hwrm_cfa_lag_group_member_unrgtr_input (size:192b/24B) */
48580 struct hwrm_cfa_lag_group_member_unrgtr_input {
48581 	/* The HWRM command request type. */
48582 	uint16_t	req_type;
48583 	/*
48584 	 * The completion ring to send the completion event on. This should
48585 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
48586 	 */
48587 	uint16_t	cmpl_ring;
48588 	/*
48589 	 * The sequence ID is used by the driver for tracking multiple
48590 	 * commands. This ID is treated as opaque data by the firmware and
48591 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
48592 	 */
48593 	uint16_t	seq_id;
48594 	/*
48595 	 * The target ID of the command:
48596 	 * * 0x0-0xFFF8 - The function ID
48597 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
48598 	 * * 0xFFFD - Reserved for user-space HWRM interface
48599 	 * * 0xFFFF - HWRM
48600 	 */
48601 	uint16_t	target_id;
48602 	/*
48603 	 * A physical address pointer pointing to a host buffer that the
48604 	 * command's response data will be written. This can be either a host
48605 	 * physical address (HPA) or a guest physical address (GPA) and must
48606 	 * point to a physically contiguous block of memory.
48607 	 */
48608 	uint64_t	resp_addr;
48609 	/* lag group ID configured for the function */
48610 	uint16_t	lag_id;
48611 	uint8_t	unused_0[6];
48612 } __rte_packed;
48613 
48614 /* hwrm_cfa_lag_group_member_unrgtr_output (size:128b/16B) */
48615 struct hwrm_cfa_lag_group_member_unrgtr_output {
48616 	/* The specific error status for the command. */
48617 	uint16_t	error_code;
48618 	/* The HWRM command request type. */
48619 	uint16_t	req_type;
48620 	/* The sequence ID from the original command. */
48621 	uint16_t	seq_id;
48622 	/* The length of the response data in number of bytes. */
48623 	uint16_t	resp_len;
48624 	uint8_t	unused_0[7];
48625 	/*
48626 	 * This field is used in Output records to indicate that the output
48627 	 * is completely written to RAM. This field should be read as '1'
48628 	 * to indicate that the output has been completely written.
48629 	 * When writing a command completion or response to an internal
48630 	 * processor, the order of writes has to be such that this field is
48631 	 * written last.
48632 	 */
48633 	uint8_t	valid;
48634 } __rte_packed;
48635 
48636 /*****************************
48637  * hwrm_cfa_tls_filter_alloc *
48638  *****************************/
48639 
48640 
48641 /* hwrm_cfa_tls_filter_alloc_input (size:704b/88B) */
48642 struct hwrm_cfa_tls_filter_alloc_input {
48643 	/* The HWRM command request type. */
48644 	uint16_t	req_type;
48645 	/*
48646 	 * The completion ring to send the completion event on. This should
48647 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
48648 	 */
48649 	uint16_t	cmpl_ring;
48650 	/*
48651 	 * The sequence ID is used by the driver for tracking multiple
48652 	 * commands. This ID is treated as opaque data by the firmware and
48653 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
48654 	 */
48655 	uint16_t	seq_id;
48656 	/*
48657 	 * The target ID of the command:
48658 	 * * 0x0-0xFFF8 - The function ID
48659 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
48660 	 * * 0xFFFD - Reserved for user-space HWRM interface
48661 	 * * 0xFFFF - HWRM
48662 	 */
48663 	uint16_t	target_id;
48664 	/*
48665 	 * A physical address pointer pointing to a host buffer that the
48666 	 * command's response data will be written. This can be either a host
48667 	 * physical address (HPA) or a guest physical address (GPA) and must
48668 	 * point to a physically contiguous block of memory.
48669 	 */
48670 	uint64_t	resp_addr;
48671 	uint32_t	unused_0;
48672 	uint32_t	enables;
48673 	/*
48674 	 * This bit must be '1' for the l2_filter_id field to be
48675 	 * configured.
48676 	 */
48677 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_ENABLES_L2_FILTER_ID \
48678 		UINT32_C(0x1)
48679 	/*
48680 	 * This bit must be '1' for the ethertype field to be
48681 	 * configured.
48682 	 */
48683 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_ENABLES_ETHERTYPE \
48684 		UINT32_C(0x2)
48685 	/*
48686 	 * This bit must be '1' for the ipaddr_type field to be
48687 	 * configured.
48688 	 */
48689 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_ENABLES_IPADDR_TYPE \
48690 		UINT32_C(0x4)
48691 	/*
48692 	 * This bit must be '1' for the src_ipaddr field to be
48693 	 * configured.
48694 	 */
48695 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR \
48696 		UINT32_C(0x8)
48697 	/*
48698 	 * This bit must be '1' for the dst_ipaddr field to be
48699 	 * configured.
48700 	 */
48701 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR \
48702 		UINT32_C(0x10)
48703 	/*
48704 	 * This bit must be '1' for the ip_protocol field to be
48705 	 * configured.
48706 	 */
48707 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_ENABLES_IP_PROTOCOL \
48708 		UINT32_C(0x20)
48709 	/*
48710 	 * This bit must be '1' for the src_port field to be
48711 	 * configured.
48712 	 */
48713 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT \
48714 		UINT32_C(0x40)
48715 	/*
48716 	 * This bit must be '1' for the dst_port field to be
48717 	 * configured.
48718 	 */
48719 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_ENABLES_DST_PORT \
48720 		UINT32_C(0x80)
48721 	/*
48722 	 * This bit must be '1' for the kid field to be
48723 	 * configured.
48724 	 */
48725 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_ENABLES_KID \
48726 		UINT32_C(0x100)
48727 	/*
48728 	 * This bit must be '1' for the dst_id field to be
48729 	 * configured.
48730 	 */
48731 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_ENABLES_DST_ID \
48732 		UINT32_C(0x200)
48733 	/*
48734 	 * This bit must be '1' for the mirror_vnic_id field to be
48735 	 * configured.
48736 	 */
48737 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
48738 		UINT32_C(0x400)
48739 	/*
48740 	 * This value identifies a set of CFA data structures used for an L2
48741 	 * context.
48742 	 */
48743 	uint64_t	l2_filter_id;
48744 	uint8_t	unused_1[6];
48745 	/* This value indicates the ethertype in the Ethernet header. */
48746 	uint16_t	ethertype;
48747 	/*
48748 	 * This value indicates the type of IP address.
48749 	 * 4 - IPv4
48750 	 * 6 - IPv6
48751 	 * All others are invalid.
48752 	 */
48753 	uint8_t	ip_addr_type;
48754 	/* invalid */
48755 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN \
48756 		UINT32_C(0x0)
48757 	/* IPv4 */
48758 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV4 \
48759 		UINT32_C(0x4)
48760 	/* IPv6 */
48761 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6 \
48762 		UINT32_C(0x6)
48763 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_LAST \
48764 		HWRM_CFA_TLS_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6
48765 	/*
48766 	 * The value of protocol filed in IP header.
48767 	 * Applies to UDP and TCP traffic.
48768 	 * 6 - TCP
48769 	 * 17 - UDP
48770 	 */
48771 	uint8_t	ip_protocol;
48772 	/* invalid */
48773 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN \
48774 		UINT32_C(0x0)
48775 	/* TCP */
48776 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_IP_PROTOCOL_TCP \
48777 		UINT32_C(0x6)
48778 	/* UDP */
48779 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP \
48780 		UINT32_C(0x11)
48781 	#define HWRM_CFA_TLS_FILTER_ALLOC_INPUT_IP_PROTOCOL_LAST \
48782 		HWRM_CFA_TLS_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP
48783 	/*
48784 	 * If set, this value shall represent the
48785 	 * Logical VNIC ID of the destination VNIC for the RX
48786 	 * path and network port id of the destination port for
48787 	 * the TX path.
48788 	 */
48789 	uint16_t	dst_id;
48790 	/*
48791 	 * Logical VNIC ID of the VNIC where traffic is
48792 	 * mirrored.
48793 	 */
48794 	uint16_t	mirror_vnic_id;
48795 	uint8_t	unused_2[2];
48796 	/*
48797 	 * The value of source IP address to be used in filtering.
48798 	 * For IPv4, first four bytes represent the IP address.
48799 	 */
48800 	uint32_t	src_ipaddr[4];
48801 	/*
48802 	 * The value of destination IP address to be used in filtering.
48803 	 * For IPv4, first four bytes represent the IP address.
48804 	 */
48805 	uint32_t	dst_ipaddr[4];
48806 	/*
48807 	 * The value of source port to be used in filtering.
48808 	 * Applies to UDP and TCP traffic.
48809 	 */
48810 	uint16_t	src_port;
48811 	/*
48812 	 * The value of destination port to be used in filtering.
48813 	 * Applies to UDP and TCP traffic.
48814 	 */
48815 	uint16_t	dst_port;
48816 	/*
48817 	 * The Key Context Identifier (KID) for use with KTLS.
48818 	 * KID is limited to 20-bits.
48819 	 */
48820 	uint32_t	kid;
48821 } __rte_packed;
48822 
48823 /* hwrm_cfa_tls_filter_alloc_output (size:192b/24B) */
48824 struct hwrm_cfa_tls_filter_alloc_output {
48825 	/* The specific error status for the command. */
48826 	uint16_t	error_code;
48827 	/* The HWRM command request type. */
48828 	uint16_t	req_type;
48829 	/* The sequence ID from the original command. */
48830 	uint16_t	seq_id;
48831 	/* The length of the response data in number of bytes. */
48832 	uint16_t	resp_len;
48833 	/* This value is an opaque id into CFA data structures. */
48834 	uint64_t	tls_filter_id;
48835 	/*
48836 	 * The flow id value in bit 0-29 is the actual ID of the flow
48837 	 * associated with this filter and it shall be used to match
48838 	 * and associate the flow identifier returned in completion
48839 	 * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
48840 	 * shall indicate no valid flow id.
48841 	 */
48842 	uint32_t	flow_id;
48843 	/* Indicate the flow id value. */
48844 	#define HWRM_CFA_TLS_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
48845 		UINT32_C(0x3fffffff)
48846 	#define HWRM_CFA_TLS_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
48847 	/* Indicate type of the flow. */
48848 	#define HWRM_CFA_TLS_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE \
48849 		UINT32_C(0x40000000)
48850 	/*
48851 	 * If this bit set to 0, then it indicates that the flow is
48852 	 * internal flow.
48853 	 */
48854 	#define HWRM_CFA_TLS_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
48855 		(UINT32_C(0x0) << 30)
48856 	/*
48857 	 * If this bit is set to 1, then it indicates that the flow is
48858 	 * external flow.
48859 	 */
48860 	#define HWRM_CFA_TLS_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
48861 		(UINT32_C(0x1) << 30)
48862 	#define HWRM_CFA_TLS_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
48863 		HWRM_CFA_TLS_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
48864 	/* Indicate the flow direction. */
48865 	#define HWRM_CFA_TLS_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR \
48866 		UINT32_C(0x80000000)
48867 	/* If this bit set to 0, then it indicates rx flow. */
48868 	#define HWRM_CFA_TLS_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
48869 		(UINT32_C(0x0) << 31)
48870 	/* If this bit is set to 1, then it indicates that tx flow. */
48871 	#define HWRM_CFA_TLS_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
48872 		(UINT32_C(0x1) << 31)
48873 	#define HWRM_CFA_TLS_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
48874 		HWRM_CFA_TLS_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX
48875 	uint8_t	unused_0[3];
48876 	/*
48877 	 * This field is used in Output records to indicate that the output
48878 	 * is completely written to RAM. This field should be read as '1'
48879 	 * to indicate that the output has been completely written.
48880 	 * When writing a command completion or response to an internal
48881 	 * processor, the order of writes has to be such that this field is
48882 	 * written last.
48883 	 */
48884 	uint8_t	valid;
48885 } __rte_packed;
48886 
48887 /****************************
48888  * hwrm_cfa_tls_filter_free *
48889  ****************************/
48890 
48891 
48892 /* hwrm_cfa_tls_filter_free_input (size:192b/24B) */
48893 struct hwrm_cfa_tls_filter_free_input {
48894 	/* The HWRM command request type. */
48895 	uint16_t	req_type;
48896 	/*
48897 	 * The completion ring to send the completion event on. This should
48898 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
48899 	 */
48900 	uint16_t	cmpl_ring;
48901 	/*
48902 	 * The sequence ID is used by the driver for tracking multiple
48903 	 * commands. This ID is treated as opaque data by the firmware and
48904 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
48905 	 */
48906 	uint16_t	seq_id;
48907 	/*
48908 	 * The target ID of the command:
48909 	 * * 0x0-0xFFF8 - The function ID
48910 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
48911 	 * * 0xFFFD - Reserved for user-space HWRM interface
48912 	 * * 0xFFFF - HWRM
48913 	 */
48914 	uint16_t	target_id;
48915 	/*
48916 	 * A physical address pointer pointing to a host buffer that the
48917 	 * command's response data will be written. This can be either a host
48918 	 * physical address (HPA) or a guest physical address (GPA) and must
48919 	 * point to a physically contiguous block of memory.
48920 	 */
48921 	uint64_t	resp_addr;
48922 	/* This value is an opaque id into CFA data structures. */
48923 	uint64_t	tls_filter_id;
48924 } __rte_packed;
48925 
48926 /* hwrm_cfa_tls_filter_free_output (size:128b/16B) */
48927 struct hwrm_cfa_tls_filter_free_output {
48928 	/* The specific error status for the command. */
48929 	uint16_t	error_code;
48930 	/* The HWRM command request type. */
48931 	uint16_t	req_type;
48932 	/* The sequence ID from the original command. */
48933 	uint16_t	seq_id;
48934 	/* The length of the response data in number of bytes. */
48935 	uint16_t	resp_len;
48936 	uint8_t	unused_0[7];
48937 	/*
48938 	 * This field is used in Output records to indicate that the output
48939 	 * is completely written to RAM. This field should be read as '1'
48940 	 * to indicate that the output has been completely written.
48941 	 * When writing a command completion or response to an internal
48942 	 * processor, the order of writes has to be such that this field is
48943 	 * written last.
48944 	 */
48945 	uint8_t	valid;
48946 } __rte_packed;
48947 
48948 /***********
48949  * hwrm_tf *
48950  ***********/
48951 
48952 
48953 /* hwrm_tf_input (size:1024b/128B) */
48954 struct hwrm_tf_input {
48955 	/* The HWRM command request type. */
48956 	uint16_t	req_type;
48957 	/*
48958 	 * The completion ring to send the completion event on. This should
48959 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
48960 	 */
48961 	uint16_t	cmpl_ring;
48962 	/*
48963 	 * The sequence ID is used by the driver for tracking multiple
48964 	 * commands. This ID is treated as opaque data by the firmware and
48965 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
48966 	 */
48967 	uint16_t	seq_id;
48968 	/*
48969 	 * The target ID of the command:
48970 	 * * 0x0-0xFFF8 - The function ID
48971 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
48972 	 * * 0xFFFD - Reserved for user-space HWRM interface
48973 	 * * 0xFFFF - HWRM
48974 	 */
48975 	uint16_t	target_id;
48976 	/*
48977 	 * A physical address pointer pointing to a host buffer that the
48978 	 * command's response data will be written. This can be either a host
48979 	 * physical address (HPA) or a guest physical address (GPA) and must
48980 	 * point to a physically contiguous block of memory.
48981 	 */
48982 	uint64_t	resp_addr;
48983 	/* TF message type. */
48984 	uint16_t	type;
48985 	/* TF message subtype. */
48986 	uint16_t	subtype;
48987 	/* unused. */
48988 	uint8_t	unused0[4];
48989 	/* TF request data. */
48990 	uint32_t	req[26];
48991 } __rte_packed;
48992 
48993 /* hwrm_tf_output (size:5632b/704B) */
48994 struct hwrm_tf_output {
48995 	/* The specific error status for the command. */
48996 	uint16_t	error_code;
48997 	/* The HWRM command request type. */
48998 	uint16_t	req_type;
48999 	/* The sequence ID from the original command. */
49000 	uint16_t	seq_id;
49001 	/* The length of the response data in number of bytes. */
49002 	uint16_t	resp_len;
49003 	/* TF message type. */
49004 	uint16_t	type;
49005 	/* TF message subtype. */
49006 	uint16_t	subtype;
49007 	/* TF response code */
49008 	uint32_t	resp_code;
49009 	/* TF response data. */
49010 	uint32_t	resp[170];
49011 	/* unused. */
49012 	uint8_t	unused1[7];
49013 	/*
49014 	 * This field is used in Output records to indicate that the
49015 	 * output is completely written to RAM. This field should be
49016 	 * read as '1' to indicate that the output has been
49017 	 * completely written.  When writing a command completion or
49018 	 * response to an internal processor, the order of writes has
49019 	 * to be such that this field is written last.
49020 	 */
49021 	uint8_t	valid;
49022 } __rte_packed;
49023 
49024 /***********************
49025  * hwrm_tf_version_get *
49026  ***********************/
49027 
49028 
49029 /* hwrm_tf_version_get_input (size:128b/16B) */
49030 struct hwrm_tf_version_get_input {
49031 	/* The HWRM command request type. */
49032 	uint16_t	req_type;
49033 	/*
49034 	 * The completion ring to send the completion event on. This should
49035 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
49036 	 */
49037 	uint16_t	cmpl_ring;
49038 	/*
49039 	 * The sequence ID is used by the driver for tracking multiple
49040 	 * commands. This ID is treated as opaque data by the firmware and
49041 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
49042 	 */
49043 	uint16_t	seq_id;
49044 	/*
49045 	 * The target ID of the command:
49046 	 * * 0x0-0xFFF8 - The function ID
49047 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
49048 	 * * 0xFFFD - Reserved for user-space HWRM interface
49049 	 * * 0xFFFF - HWRM
49050 	 */
49051 	uint16_t	target_id;
49052 	/*
49053 	 * A physical address pointer pointing to a host buffer that the
49054 	 * command's response data will be written. This can be either a host
49055 	 * physical address (HPA) or a guest physical address (GPA) and must
49056 	 * point to a physically contiguous block of memory.
49057 	 */
49058 	uint64_t	resp_addr;
49059 } __rte_packed;
49060 
49061 /* hwrm_tf_version_get_output (size:256b/32B) */
49062 struct hwrm_tf_version_get_output {
49063 	/* The specific error status for the command. */
49064 	uint16_t	error_code;
49065 	/* The HWRM command request type. */
49066 	uint16_t	req_type;
49067 	/* The sequence ID from the original command. */
49068 	uint16_t	seq_id;
49069 	/* The length of the response data in number of bytes. */
49070 	uint16_t	resp_len;
49071 	/* Version Major number. */
49072 	uint8_t	major;
49073 	/* Version Minor number. */
49074 	uint8_t	minor;
49075 	/* Version Update number. */
49076 	uint8_t	update;
49077 	/* unused. */
49078 	uint8_t	unused0[5];
49079 	/*
49080 	 * This field is used to indicate device's capabilities and
49081 	 * configurations.
49082 	 */
49083 	uint64_t	dev_caps_cfg;
49084 	/* unused. */
49085 	uint8_t	unused1[7];
49086 	/*
49087 	 * This field is used in Output records to indicate that the output
49088 	 * is completely written to RAM. This field should be read as '1'
49089 	 * to indicate that the output has been completely written.
49090 	 * When writing a command completion or response to an internal
49091 	 * processor, the order of writes has to be such that this field is
49092 	 * written last.
49093 	 */
49094 	uint8_t	valid;
49095 } __rte_packed;
49096 
49097 /************************
49098  * hwrm_tf_session_open *
49099  ************************/
49100 
49101 
49102 /* hwrm_tf_session_open_input (size:640b/80B) */
49103 struct hwrm_tf_session_open_input {
49104 	/* The HWRM command request type. */
49105 	uint16_t	req_type;
49106 	/*
49107 	 * The completion ring to send the completion event on. This should
49108 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
49109 	 */
49110 	uint16_t	cmpl_ring;
49111 	/*
49112 	 * The sequence ID is used by the driver for tracking multiple
49113 	 * commands. This ID is treated as opaque data by the firmware and
49114 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
49115 	 */
49116 	uint16_t	seq_id;
49117 	/*
49118 	 * The target ID of the command:
49119 	 * * 0x0-0xFFF8 - The function ID
49120 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
49121 	 * * 0xFFFD - Reserved for user-space HWRM interface
49122 	 * * 0xFFFF - HWRM
49123 	 */
49124 	uint16_t	target_id;
49125 	/*
49126 	 * A physical address pointer pointing to a host buffer that the
49127 	 * command's response data will be written. This can be either a host
49128 	 * physical address (HPA) or a guest physical address (GPA) and must
49129 	 * point to a physically contiguous block of memory.
49130 	 */
49131 	uint64_t	resp_addr;
49132 	/* Name of the session. */
49133 	uint8_t	session_name[64];
49134 } __rte_packed;
49135 
49136 /* hwrm_tf_session_open_output (size:192b/24B) */
49137 struct hwrm_tf_session_open_output {
49138 	/* The specific error status for the command. */
49139 	uint16_t	error_code;
49140 	/* The HWRM command request type. */
49141 	uint16_t	req_type;
49142 	/* The sequence ID from the original command. */
49143 	uint16_t	seq_id;
49144 	/* The length of the response data in number of bytes. */
49145 	uint16_t	resp_len;
49146 	/*
49147 	 * Unique session identifier for the session created by the
49148 	 * firmware.
49149 	 */
49150 	uint32_t	fw_session_id;
49151 	/*
49152 	 * Unique session client identifier for the first client on
49153 	 * the newly created session.
49154 	 */
49155 	uint32_t	fw_session_client_id;
49156 	/* This field is used to return the status of fw session to host. */
49157 	uint32_t	flags;
49158 	/*
49159 	 * Indicates if the shared session has been created. Shared session
49160 	 * should be the first session created ever. Its fw_rm_client_id
49161 	 * should be 1. The AFM session's fw_rm_client_id is 0.
49162 	 */
49163 	#define HWRM_TF_SESSION_OPEN_OUTPUT_FLAGS_SHARED_SESSION \
49164 		UINT32_C(0x1)
49165 	/*
49166 	 * If this bit set to 0, then it indicates the shared session
49167 	 * has been created by another session.
49168 	 */
49169 	#define HWRM_TF_SESSION_OPEN_OUTPUT_FLAGS_SHARED_SESSION_NOT_CREATOR \
49170 		UINT32_C(0x0)
49171 	/*
49172 	 * If this bit is set to 1, then it indicates the shared session
49173 	 * is created by this session.
49174 	 */
49175 	#define HWRM_TF_SESSION_OPEN_OUTPUT_FLAGS_SHARED_SESSION_CREATOR \
49176 		UINT32_C(0x1)
49177 	#define HWRM_TF_SESSION_OPEN_OUTPUT_FLAGS_SHARED_SESSION_LAST \
49178 		HWRM_TF_SESSION_OPEN_OUTPUT_FLAGS_SHARED_SESSION_CREATOR
49179 	/* unused. */
49180 	uint8_t	unused1[3];
49181 	/*
49182 	 * This field is used in Output records to indicate that the output
49183 	 * is completely written to RAM. This field should be read as '1'
49184 	 * to indicate that the output has been completely written.
49185 	 * When writing a command completion or response to an internal
49186 	 * processor, the order of writes has to be such that this field is
49187 	 * written last.
49188 	 */
49189 	uint8_t	valid;
49190 } __rte_packed;
49191 
49192 /**************************
49193  * hwrm_tf_session_attach *
49194  **************************/
49195 
49196 
49197 /* hwrm_tf_session_attach_input (size:704b/88B) */
49198 struct hwrm_tf_session_attach_input {
49199 	/* The HWRM command request type. */
49200 	uint16_t	req_type;
49201 	/*
49202 	 * The completion ring to send the completion event on. This should
49203 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
49204 	 */
49205 	uint16_t	cmpl_ring;
49206 	/*
49207 	 * The sequence ID is used by the driver for tracking multiple
49208 	 * commands. This ID is treated as opaque data by the firmware and
49209 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
49210 	 */
49211 	uint16_t	seq_id;
49212 	/*
49213 	 * The target ID of the command:
49214 	 * * 0x0-0xFFF8 - The function ID
49215 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
49216 	 * * 0xFFFD - Reserved for user-space HWRM interface
49217 	 * * 0xFFFF - HWRM
49218 	 */
49219 	uint16_t	target_id;
49220 	/*
49221 	 * A physical address pointer pointing to a host buffer that the
49222 	 * command's response data will be written. This can be either a host
49223 	 * physical address (HPA) or a guest physical address (GPA) and must
49224 	 * point to a physically contiguous block of memory.
49225 	 */
49226 	uint64_t	resp_addr;
49227 	/*
49228 	 * Unique session identifier for the session that the attach
49229 	 * request want to attach to. This value originates from the
49230 	 * shared session memory that the attach request opened by
49231 	 * way of the 'attach name' that was passed in to the core
49232 	 * attach API.
49233 	 * The fw_session_id of the attach session includes PCIe bus
49234 	 * info to distinguish the PF and session info to identify
49235 	 * the associated TruFlow session.
49236 	 */
49237 	uint32_t	attach_fw_session_id;
49238 	/* unused. */
49239 	uint32_t	unused0;
49240 	/* Name of the session it self. */
49241 	uint8_t	session_name[64];
49242 } __rte_packed;
49243 
49244 /* hwrm_tf_session_attach_output (size:128b/16B) */
49245 struct hwrm_tf_session_attach_output {
49246 	/* The specific error status for the command. */
49247 	uint16_t	error_code;
49248 	/* The HWRM command request type. */
49249 	uint16_t	req_type;
49250 	/* The sequence ID from the original command. */
49251 	uint16_t	seq_id;
49252 	/* The length of the response data in number of bytes. */
49253 	uint16_t	resp_len;
49254 	/*
49255 	 * Unique session identifier for the session created by the
49256 	 * firmware. It includes PCIe bus info to distinguish the PF
49257 	 * and session info to identify the associated TruFlow
49258 	 * session. This fw_session_id is unique to the attach
49259 	 * request.
49260 	 */
49261 	uint32_t	fw_session_id;
49262 	/* unused. */
49263 	uint8_t	unused0[3];
49264 	/*
49265 	 * This field is used in Output records to indicate that the output
49266 	 * is completely written to RAM. This field should be read as '1'
49267 	 * to indicate that the output has been completely written.
49268 	 * When writing a command completion or response to an internal
49269 	 * processor, the order of writes has to be such that this field is
49270 	 * written last.
49271 	 */
49272 	uint8_t	valid;
49273 } __rte_packed;
49274 
49275 /****************************
49276  * hwrm_tf_session_register *
49277  ****************************/
49278 
49279 
49280 /* hwrm_tf_session_register_input (size:704b/88B) */
49281 struct hwrm_tf_session_register_input {
49282 	/* The HWRM command request type. */
49283 	uint16_t	req_type;
49284 	/*
49285 	 * The completion ring to send the completion event on. This should
49286 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
49287 	 */
49288 	uint16_t	cmpl_ring;
49289 	/*
49290 	 * The sequence ID is used by the driver for tracking multiple
49291 	 * commands. This ID is treated as opaque data by the firmware and
49292 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
49293 	 */
49294 	uint16_t	seq_id;
49295 	/*
49296 	 * The target ID of the command:
49297 	 * * 0x0-0xFFF8 - The function ID
49298 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
49299 	 * * 0xFFFD - Reserved for user-space HWRM interface
49300 	 * * 0xFFFF - HWRM
49301 	 */
49302 	uint16_t	target_id;
49303 	/*
49304 	 * A physical address pointer pointing to a host buffer that the
49305 	 * command's response data will be written. This can be either a host
49306 	 * physical address (HPA) or a guest physical address (GPA) and must
49307 	 * point to a physically contiguous block of memory.
49308 	 */
49309 	uint64_t	resp_addr;
49310 	/*
49311 	 * Unique session identifier for the session that the
49312 	 * register request want to create a new client on. This
49313 	 * value originates from the first open request.
49314 	 * The fw_session_id of the attach session includes PCIe bus
49315 	 * info to distinguish the PF and session info to identify
49316 	 * the associated TruFlow session.
49317 	 */
49318 	uint32_t	fw_session_id;
49319 	/* unused. */
49320 	uint32_t	unused0;
49321 	/* Name of the session client. */
49322 	uint8_t	session_client_name[64];
49323 } __rte_packed;
49324 
49325 /* hwrm_tf_session_register_output (size:128b/16B) */
49326 struct hwrm_tf_session_register_output {
49327 	/* The specific error status for the command. */
49328 	uint16_t	error_code;
49329 	/* The HWRM command request type. */
49330 	uint16_t	req_type;
49331 	/* The sequence ID from the original command. */
49332 	uint16_t	seq_id;
49333 	/* The length of the response data in number of bytes. */
49334 	uint16_t	resp_len;
49335 	/*
49336 	 * Unique session client identifier for the session created
49337 	 * by the firmware. It includes the session the client it
49338 	 * attached to and session client info.
49339 	 */
49340 	uint32_t	fw_session_client_id;
49341 	/* unused. */
49342 	uint8_t	unused0[3];
49343 	/*
49344 	 * This field is used in Output records to indicate that the output
49345 	 * is completely written to RAM. This field should be read as '1'
49346 	 * to indicate that the output has been completely written.
49347 	 * When writing a command completion or response to an internal
49348 	 * processor, the order of writes has to be such that this field is
49349 	 * written last.
49350 	 */
49351 	uint8_t	valid;
49352 } __rte_packed;
49353 
49354 /******************************
49355  * hwrm_tf_session_unregister *
49356  ******************************/
49357 
49358 
49359 /* hwrm_tf_session_unregister_input (size:192b/24B) */
49360 struct hwrm_tf_session_unregister_input {
49361 	/* The HWRM command request type. */
49362 	uint16_t	req_type;
49363 	/*
49364 	 * The completion ring to send the completion event on. This should
49365 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
49366 	 */
49367 	uint16_t	cmpl_ring;
49368 	/*
49369 	 * The sequence ID is used by the driver for tracking multiple
49370 	 * commands. This ID is treated as opaque data by the firmware and
49371 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
49372 	 */
49373 	uint16_t	seq_id;
49374 	/*
49375 	 * The target ID of the command:
49376 	 * * 0x0-0xFFF8 - The function ID
49377 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
49378 	 * * 0xFFFD - Reserved for user-space HWRM interface
49379 	 * * 0xFFFF - HWRM
49380 	 */
49381 	uint16_t	target_id;
49382 	/*
49383 	 * A physical address pointer pointing to a host buffer that the
49384 	 * command's response data will be written. This can be either a host
49385 	 * physical address (HPA) or a guest physical address (GPA) and must
49386 	 * point to a physically contiguous block of memory.
49387 	 */
49388 	uint64_t	resp_addr;
49389 	/*
49390 	 * Unique session identifier for the session that the
49391 	 * unregister request want to close a session client on.
49392 	 */
49393 	uint32_t	fw_session_id;
49394 	/*
49395 	 * Unique session client identifier for the session that the
49396 	 * unregister request want to close.
49397 	 */
49398 	uint32_t	fw_session_client_id;
49399 } __rte_packed;
49400 
49401 /* hwrm_tf_session_unregister_output (size:128b/16B) */
49402 struct hwrm_tf_session_unregister_output {
49403 	/* The specific error status for the command. */
49404 	uint16_t	error_code;
49405 	/* The HWRM command request type. */
49406 	uint16_t	req_type;
49407 	/* The sequence ID from the original command. */
49408 	uint16_t	seq_id;
49409 	/* The length of the response data in number of bytes. */
49410 	uint16_t	resp_len;
49411 	/* unused. */
49412 	uint8_t	unused0[7];
49413 	/*
49414 	 * This field is used in Output records to indicate that the output
49415 	 * is completely written to RAM. This field should be read as '1'
49416 	 * to indicate that the output has been completely written.
49417 	 * When writing a command completion or response to an internal
49418 	 * processor, the order of writes has to be such that this field is
49419 	 * written last.
49420 	 */
49421 	uint8_t	valid;
49422 } __rte_packed;
49423 
49424 /*************************
49425  * hwrm_tf_session_close *
49426  *************************/
49427 
49428 
49429 /* hwrm_tf_session_close_input (size:192b/24B) */
49430 struct hwrm_tf_session_close_input {
49431 	/* The HWRM command request type. */
49432 	uint16_t	req_type;
49433 	/*
49434 	 * The completion ring to send the completion event on. This should
49435 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
49436 	 */
49437 	uint16_t	cmpl_ring;
49438 	/*
49439 	 * The sequence ID is used by the driver for tracking multiple
49440 	 * commands. This ID is treated as opaque data by the firmware and
49441 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
49442 	 */
49443 	uint16_t	seq_id;
49444 	/*
49445 	 * The target ID of the command:
49446 	 * * 0x0-0xFFF8 - The function ID
49447 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
49448 	 * * 0xFFFD - Reserved for user-space HWRM interface
49449 	 * * 0xFFFF - HWRM
49450 	 */
49451 	uint16_t	target_id;
49452 	/*
49453 	 * A physical address pointer pointing to a host buffer that the
49454 	 * command's response data will be written. This can be either a host
49455 	 * physical address (HPA) or a guest physical address (GPA) and must
49456 	 * point to a physically contiguous block of memory.
49457 	 */
49458 	uint64_t	resp_addr;
49459 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
49460 	uint32_t	fw_session_id;
49461 	/* unused. */
49462 	uint8_t	unused0[4];
49463 } __rte_packed;
49464 
49465 /* hwrm_tf_session_close_output (size:128b/16B) */
49466 struct hwrm_tf_session_close_output {
49467 	/* The specific error status for the command. */
49468 	uint16_t	error_code;
49469 	/* The HWRM command request type. */
49470 	uint16_t	req_type;
49471 	/* The sequence ID from the original command. */
49472 	uint16_t	seq_id;
49473 	/* The length of the response data in number of bytes. */
49474 	uint16_t	resp_len;
49475 	/* unused. */
49476 	uint8_t	unused0[7];
49477 	/*
49478 	 * This field is used in Output records to indicate that the output
49479 	 * is completely written to RAM. This field should be read as '1'
49480 	 * to indicate that the output has been completely written.
49481 	 * When writing a command completion or response to an internal
49482 	 * processor, the order of writes has to be such that this field
49483 	 * is written last.
49484 	 */
49485 	uint8_t	valid;
49486 } __rte_packed;
49487 
49488 /************************
49489  * hwrm_tf_session_qcfg *
49490  ************************/
49491 
49492 
49493 /* hwrm_tf_session_qcfg_input (size:192b/24B) */
49494 struct hwrm_tf_session_qcfg_input {
49495 	/* The HWRM command request type. */
49496 	uint16_t	req_type;
49497 	/*
49498 	 * The completion ring to send the completion event on. This should
49499 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
49500 	 */
49501 	uint16_t	cmpl_ring;
49502 	/*
49503 	 * The sequence ID is used by the driver for tracking multiple
49504 	 * commands. This ID is treated as opaque data by the firmware and
49505 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
49506 	 */
49507 	uint16_t	seq_id;
49508 	/*
49509 	 * The target ID of the command:
49510 	 * * 0x0-0xFFF8 - The function ID
49511 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
49512 	 * * 0xFFFD - Reserved for user-space HWRM interface
49513 	 * * 0xFFFF - HWRM
49514 	 */
49515 	uint16_t	target_id;
49516 	/*
49517 	 * A physical address pointer pointing to a host buffer that the
49518 	 * command's response data will be written. This can be either a host
49519 	 * physical address (HPA) or a guest physical address (GPA) and must
49520 	 * point to a physically contiguous block of memory.
49521 	 */
49522 	uint64_t	resp_addr;
49523 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
49524 	uint32_t	fw_session_id;
49525 	/* unused. */
49526 	uint8_t	unused0[4];
49527 } __rte_packed;
49528 
49529 /* hwrm_tf_session_qcfg_output (size:128b/16B) */
49530 struct hwrm_tf_session_qcfg_output {
49531 	/* The specific error status for the command. */
49532 	uint16_t	error_code;
49533 	/* The HWRM command request type. */
49534 	uint16_t	req_type;
49535 	/* The sequence ID from the original command. */
49536 	uint16_t	seq_id;
49537 	/* The length of the response data in number of bytes. */
49538 	uint16_t	resp_len;
49539 	/* RX action control settings flags. */
49540 	uint8_t	rx_act_flags;
49541 	/*
49542 	 * A value of 1 in this field indicates that Global Flow ID
49543 	 * reporting into cfa_code and cfa_metadata is enabled.
49544 	 */
49545 	#define HWRM_TF_SESSION_QCFG_OUTPUT_RX_ACT_FLAGS_ABCR_GFID_EN \
49546 		UINT32_C(0x1)
49547 	/*
49548 	 * A value of 1 in this field indicates that both inner and outer
49549 	 * are stripped and inner tag is passed.
49550 	 * Enabled.
49551 	 */
49552 	#define HWRM_TF_SESSION_QCFG_OUTPUT_RX_ACT_FLAGS_ABCR_VTAG_DLT_BOTH \
49553 		UINT32_C(0x2)
49554 	/*
49555 	 * A value of 1 in this field indicates that the re-use of
49556 	 * existing tunnel L2 header SMAC is enabled for
49557 	 * Non-tunnel L2, L2-L3 and IP-IP tunnel.
49558 	 */
49559 	#define HWRM_TF_SESSION_QCFG_OUTPUT_RX_ACT_FLAGS_TECT_SMAC_OVR_RUTNSL2 \
49560 		UINT32_C(0x4)
49561 	/* TX Action control settings flags. */
49562 	uint8_t	tx_act_flags;
49563 	/* Disabled. */
49564 	#define HWRM_TF_SESSION_QCFG_OUTPUT_TX_ACT_FLAGS_ABCR_VEB_EN \
49565 		UINT32_C(0x1)
49566 	/*
49567 	 * When set to 1 any GRE tunnels will include the
49568 	 * optional Key field.
49569 	 */
49570 	#define HWRM_TF_SESSION_QCFG_OUTPUT_TX_ACT_FLAGS_TECT_GRE_SET_K \
49571 		UINT32_C(0x2)
49572 	/*
49573 	 * When set to 1, for GRE tunnels, the IPV6 Traffic Class (TC)
49574 	 * field of the outer header is inherited from the inner header
49575 	 * (if present) or the fixed value as taken from the encap
49576 	 * record.
49577 	 */
49578 	#define HWRM_TF_SESSION_QCFG_OUTPUT_TX_ACT_FLAGS_TECT_IPV6_TC_IH \
49579 		UINT32_C(0x4)
49580 	/*
49581 	 * When set to 1, for GRE tunnels, the IPV4 Type Of Service (TOS)
49582 	 * field of the outer header is inherited from the inner header
49583 	 * (if present) or the fixed value as taken from the encap record.
49584 	 */
49585 	#define HWRM_TF_SESSION_QCFG_OUTPUT_TX_ACT_FLAGS_TECT_IPV4_TOS_IH \
49586 		UINT32_C(0x8)
49587 	/* unused. */
49588 	uint8_t	unused0[5];
49589 	/*
49590 	 * This field is used in Output records to indicate that the output
49591 	 * is completely written to RAM. This field should be read as '1'
49592 	 * to indicate that the output has been completely written.
49593 	 * When writing a command completion or response to an internal
49594 	 * processor, the order of writes has to be such that this field
49595 	 * is written last.
49596 	 */
49597 	uint8_t	valid;
49598 } __rte_packed;
49599 
49600 /******************************
49601  * hwrm_tf_session_resc_qcaps *
49602  ******************************/
49603 
49604 
49605 /* hwrm_tf_session_resc_qcaps_input (size:256b/32B) */
49606 struct hwrm_tf_session_resc_qcaps_input {
49607 	/* The HWRM command request type. */
49608 	uint16_t	req_type;
49609 	/*
49610 	 * The completion ring to send the completion event on. This should
49611 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
49612 	 */
49613 	uint16_t	cmpl_ring;
49614 	/*
49615 	 * The sequence ID is used by the driver for tracking multiple
49616 	 * commands. This ID is treated as opaque data by the firmware and
49617 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
49618 	 */
49619 	uint16_t	seq_id;
49620 	/*
49621 	 * The target ID of the command:
49622 	 * * 0x0-0xFFF8 - The function ID
49623 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
49624 	 * * 0xFFFD - Reserved for user-space HWRM interface
49625 	 * * 0xFFFF - HWRM
49626 	 */
49627 	uint16_t	target_id;
49628 	/*
49629 	 * A physical address pointer pointing to a host buffer that the
49630 	 * command's response data will be written. This can be either a host
49631 	 * physical address (HPA) or a guest physical address (GPA) and must
49632 	 * point to a physically contiguous block of memory.
49633 	 */
49634 	uint64_t	resp_addr;
49635 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
49636 	uint32_t	fw_session_id;
49637 	/* Control flags. */
49638 	uint16_t	flags;
49639 	/* Indicates the flow direction. */
49640 	#define HWRM_TF_SESSION_RESC_QCAPS_INPUT_FLAGS_DIR     UINT32_C(0x1)
49641 	/* If this bit set to 0, then it indicates rx flow. */
49642 	#define HWRM_TF_SESSION_RESC_QCAPS_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
49643 	/* If this bit is set to 1, then it indicates tx flow. */
49644 	#define HWRM_TF_SESSION_RESC_QCAPS_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
49645 	#define HWRM_TF_SESSION_RESC_QCAPS_INPUT_FLAGS_DIR_LAST \
49646 		HWRM_TF_SESSION_RESC_QCAPS_INPUT_FLAGS_DIR_TX
49647 	/*
49648 	 * Defines the size of the provided qcaps_addr array
49649 	 * buffer. The size should be set to the Resource Manager
49650 	 * provided max number of qcaps entries which is device
49651 	 * specific. Resource Manager gets the max size from HCAPI
49652 	 * RM.
49653 	 */
49654 	uint16_t	qcaps_size;
49655 	/*
49656 	 * This is the DMA address for the qcaps output data array
49657 	 * buffer. Array is of tf_rm_resc_req_entry type and is
49658 	 * device specific.
49659 	 */
49660 	uint64_t	qcaps_addr;
49661 } __rte_packed;
49662 
49663 /* hwrm_tf_session_resc_qcaps_output (size:192b/24B) */
49664 struct hwrm_tf_session_resc_qcaps_output {
49665 	/* The specific error status for the command. */
49666 	uint16_t	error_code;
49667 	/* The HWRM command request type. */
49668 	uint16_t	req_type;
49669 	/* The sequence ID from the original command. */
49670 	uint16_t	seq_id;
49671 	/* The length of the response data in number of bytes. */
49672 	uint16_t	resp_len;
49673 	/* Control flags. */
49674 	uint32_t	flags;
49675 	/* Session reservation strategy. */
49676 	#define HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_MASK \
49677 		UINT32_C(0x3)
49678 	#define HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_SFT \
49679 		0
49680 	/* Static partitioning. */
49681 	#define HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_STATIC \
49682 		UINT32_C(0x0)
49683 	/* Strategy 1. */
49684 	#define HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_1 \
49685 		UINT32_C(0x1)
49686 	/* Strategy 2. */
49687 	#define HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_2 \
49688 		UINT32_C(0x2)
49689 	/* Strategy 3. */
49690 	#define HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_3 \
49691 		UINT32_C(0x3)
49692 	#define HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_LAST \
49693 		HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_3
49694 	/*
49695 	 * Size of the returned qcaps_addr data array buffer. The
49696 	 * value cannot exceed the size defined by the input msg,
49697 	 * qcaps_size.
49698 	 */
49699 	uint16_t	size;
49700 	/*
49701 	 * SRAM profile number that sets the partition of SRAM memory
49702 	 * between TF and AFM within the 4 internal memory banks (Thor).
49703 	 */
49704 	uint8_t	sram_profile;
49705 	/* unused. */
49706 	uint8_t	unused0;
49707 	/* unused. */
49708 	uint8_t	unused1[7];
49709 	/*
49710 	 * This field is used in Output records to indicate that the output
49711 	 * is completely written to RAM. This field should be read as '1'
49712 	 * to indicate that the output has been completely written.
49713 	 * When writing a command completion or response to an internal
49714 	 * processor, the order of writes has to be such that this field is
49715 	 * written last.
49716 	 */
49717 	uint8_t	valid;
49718 } __rte_packed;
49719 
49720 /******************************
49721  * hwrm_tf_session_resc_alloc *
49722  ******************************/
49723 
49724 
49725 /* hwrm_tf_session_resc_alloc_input (size:320b/40B) */
49726 struct hwrm_tf_session_resc_alloc_input {
49727 	/* The HWRM command request type. */
49728 	uint16_t	req_type;
49729 	/*
49730 	 * The completion ring to send the completion event on. This should
49731 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
49732 	 */
49733 	uint16_t	cmpl_ring;
49734 	/*
49735 	 * The sequence ID is used by the driver for tracking multiple
49736 	 * commands. This ID is treated as opaque data by the firmware and
49737 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
49738 	 */
49739 	uint16_t	seq_id;
49740 	/*
49741 	 * The target ID of the command:
49742 	 * * 0x0-0xFFF8 - The function ID
49743 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
49744 	 * * 0xFFFD - Reserved for user-space HWRM interface
49745 	 * * 0xFFFF - HWRM
49746 	 */
49747 	uint16_t	target_id;
49748 	/*
49749 	 * A physical address pointer pointing to a host buffer that the
49750 	 * command's response data will be written. This can be either a host
49751 	 * physical address (HPA) or a guest physical address (GPA) and must
49752 	 * point to a physically contiguous block of memory.
49753 	 */
49754 	uint64_t	resp_addr;
49755 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
49756 	uint32_t	fw_session_id;
49757 	/* Control flags. */
49758 	uint16_t	flags;
49759 	/* Indicates the flow direction. */
49760 	#define HWRM_TF_SESSION_RESC_ALLOC_INPUT_FLAGS_DIR     UINT32_C(0x1)
49761 	/* If this bit set to 0, then it indicates rx flow. */
49762 	#define HWRM_TF_SESSION_RESC_ALLOC_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
49763 	/* If this bit is set to 1, then it indicates tx flow. */
49764 	#define HWRM_TF_SESSION_RESC_ALLOC_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
49765 	#define HWRM_TF_SESSION_RESC_ALLOC_INPUT_FLAGS_DIR_LAST \
49766 		HWRM_TF_SESSION_RESC_ALLOC_INPUT_FLAGS_DIR_TX
49767 	/*
49768 	 * Defines the array size of the provided req_addr and
49769 	 * resv_addr array buffers. Should be set to the number of
49770 	 * request entries.
49771 	 */
49772 	uint16_t	req_size;
49773 	/*
49774 	 * This is the DMA address for the request input data array
49775 	 * buffer. Array is of tf_rm_resc_req_entry type. Size of the
49776 	 * array buffer is provided by the 'req_size' field in this
49777 	 * message.
49778 	 */
49779 	uint64_t	req_addr;
49780 	/*
49781 	 * This is the DMA address for the resc output data array
49782 	 * buffer. Array is of tf_rm_resc_entry type. Size of the array
49783 	 * buffer is provided by the 'req_size' field in this
49784 	 * message.
49785 	 */
49786 	uint64_t	resc_addr;
49787 } __rte_packed;
49788 
49789 /* hwrm_tf_session_resc_alloc_output (size:128b/16B) */
49790 struct hwrm_tf_session_resc_alloc_output {
49791 	/* The specific error status for the command. */
49792 	uint16_t	error_code;
49793 	/* The HWRM command request type. */
49794 	uint16_t	req_type;
49795 	/* The sequence ID from the original command. */
49796 	uint16_t	seq_id;
49797 	/* The length of the response data in number of bytes. */
49798 	uint16_t	resp_len;
49799 	/*
49800 	 * Size of the returned tf_rm_resc_entry data array. The value
49801 	 * cannot exceed the req_size defined by the input msg. The data
49802 	 * array is returned using the resv_addr specified DMA
49803 	 * address also provided by the input msg.
49804 	 */
49805 	uint16_t	size;
49806 	/* unused. */
49807 	uint8_t	unused0[5];
49808 	/*
49809 	 * This field is used in Output records to indicate that the output
49810 	 * is completely written to RAM. This field should be read as '1'
49811 	 * to indicate that the output has been completely written.
49812 	 * When writing a command completion or response to an internal
49813 	 * processor, the order of writes has to be such that this field is
49814 	 * written last.
49815 	 */
49816 	uint8_t	valid;
49817 } __rte_packed;
49818 
49819 /*****************************
49820  * hwrm_tf_session_resc_free *
49821  *****************************/
49822 
49823 
49824 /* hwrm_tf_session_resc_free_input (size:256b/32B) */
49825 struct hwrm_tf_session_resc_free_input {
49826 	/* The HWRM command request type. */
49827 	uint16_t	req_type;
49828 	/*
49829 	 * The completion ring to send the completion event on. This should
49830 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
49831 	 */
49832 	uint16_t	cmpl_ring;
49833 	/*
49834 	 * The sequence ID is used by the driver for tracking multiple
49835 	 * commands. This ID is treated as opaque data by the firmware and
49836 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
49837 	 */
49838 	uint16_t	seq_id;
49839 	/*
49840 	 * The target ID of the command:
49841 	 * * 0x0-0xFFF8 - The function ID
49842 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
49843 	 * * 0xFFFD - Reserved for user-space HWRM interface
49844 	 * * 0xFFFF - HWRM
49845 	 */
49846 	uint16_t	target_id;
49847 	/*
49848 	 * A physical address pointer pointing to a host buffer that the
49849 	 * command's response data will be written. This can be either a host
49850 	 * physical address (HPA) or a guest physical address (GPA) and must
49851 	 * point to a physically contiguous block of memory.
49852 	 */
49853 	uint64_t	resp_addr;
49854 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
49855 	uint32_t	fw_session_id;
49856 	/* Control flags. */
49857 	uint16_t	flags;
49858 	/* Indicates the flow direction. */
49859 	#define HWRM_TF_SESSION_RESC_FREE_INPUT_FLAGS_DIR     UINT32_C(0x1)
49860 	/* If this bit set to 0, then it indicates rx flow. */
49861 	#define HWRM_TF_SESSION_RESC_FREE_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
49862 	/* If this bit is set to 1, then it indicates tx flow. */
49863 	#define HWRM_TF_SESSION_RESC_FREE_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
49864 	#define HWRM_TF_SESSION_RESC_FREE_INPUT_FLAGS_DIR_LAST \
49865 		HWRM_TF_SESSION_RESC_FREE_INPUT_FLAGS_DIR_TX
49866 	/*
49867 	 * Defines the size, in bytes, of the provided free_addr
49868 	 * buffer.
49869 	 */
49870 	uint16_t	free_size;
49871 	/*
49872 	 * This is the DMA address for the free input data array
49873 	 * buffer.  Array is of tf_rm_resc_entry type. Size of the
49874 	 * buffer is provided by the 'free_size' field of this
49875 	 * message.
49876 	 */
49877 	uint64_t	free_addr;
49878 } __rte_packed;
49879 
49880 /* hwrm_tf_session_resc_free_output (size:128b/16B) */
49881 struct hwrm_tf_session_resc_free_output {
49882 	/* The specific error status for the command. */
49883 	uint16_t	error_code;
49884 	/* The HWRM command request type. */
49885 	uint16_t	req_type;
49886 	/* The sequence ID from the original command. */
49887 	uint16_t	seq_id;
49888 	/* The length of the response data in number of bytes. */
49889 	uint16_t	resp_len;
49890 	/* unused. */
49891 	uint8_t	unused0[7];
49892 	/*
49893 	 * This field is used in Output records to indicate that the output
49894 	 * is completely written to RAM. This field should be read as '1'
49895 	 * to indicate that the output has been completely written.
49896 	 * When writing a command completion or response to an internal
49897 	 * processor, the order of writes has to be such that this field is
49898 	 * written last.
49899 	 */
49900 	uint8_t	valid;
49901 } __rte_packed;
49902 
49903 /******************************
49904  * hwrm_tf_session_resc_flush *
49905  ******************************/
49906 
49907 
49908 /* hwrm_tf_session_resc_flush_input (size:256b/32B) */
49909 struct hwrm_tf_session_resc_flush_input {
49910 	/* The HWRM command request type. */
49911 	uint16_t	req_type;
49912 	/*
49913 	 * The completion ring to send the completion event on. This should
49914 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
49915 	 */
49916 	uint16_t	cmpl_ring;
49917 	/*
49918 	 * The sequence ID is used by the driver for tracking multiple
49919 	 * commands. This ID is treated as opaque data by the firmware and
49920 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
49921 	 */
49922 	uint16_t	seq_id;
49923 	/*
49924 	 * The target ID of the command:
49925 	 * * 0x0-0xFFF8 - The function ID
49926 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
49927 	 * * 0xFFFD - Reserved for user-space HWRM interface
49928 	 * * 0xFFFF - HWRM
49929 	 */
49930 	uint16_t	target_id;
49931 	/*
49932 	 * A physical address pointer pointing to a host buffer that the
49933 	 * command's response data will be written. This can be either a host
49934 	 * physical address (HPA) or a guest physical address (GPA) and must
49935 	 * point to a physically contiguous block of memory.
49936 	 */
49937 	uint64_t	resp_addr;
49938 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
49939 	uint32_t	fw_session_id;
49940 	/* Control flags. */
49941 	uint16_t	flags;
49942 	/* Indicates the flow direction. */
49943 	#define HWRM_TF_SESSION_RESC_FLUSH_INPUT_FLAGS_DIR     UINT32_C(0x1)
49944 	/* If this bit set to 0, then it indicates rx flow. */
49945 	#define HWRM_TF_SESSION_RESC_FLUSH_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
49946 	/* If this bit is set to 1, then it indicates tx flow. */
49947 	#define HWRM_TF_SESSION_RESC_FLUSH_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
49948 	#define HWRM_TF_SESSION_RESC_FLUSH_INPUT_FLAGS_DIR_LAST \
49949 		HWRM_TF_SESSION_RESC_FLUSH_INPUT_FLAGS_DIR_TX
49950 	/*
49951 	 * Defines the size, in bytes, of the provided flush_addr
49952 	 * buffer.
49953 	 */
49954 	uint16_t	flush_size;
49955 	/*
49956 	 * This is the DMA address for the flush input data array
49957 	 * buffer.  Array of tf_rm_resc_entry type. Size of the
49958 	 * buffer is provided by the 'flush_size' field in this
49959 	 * message.
49960 	 */
49961 	uint64_t	flush_addr;
49962 } __rte_packed;
49963 
49964 /* hwrm_tf_session_resc_flush_output (size:128b/16B) */
49965 struct hwrm_tf_session_resc_flush_output {
49966 	/* The specific error status for the command. */
49967 	uint16_t	error_code;
49968 	/* The HWRM command request type. */
49969 	uint16_t	req_type;
49970 	/* The sequence ID from the original command. */
49971 	uint16_t	seq_id;
49972 	/* The length of the response data in number of bytes. */
49973 	uint16_t	resp_len;
49974 	/* unused. */
49975 	uint8_t	unused0[7];
49976 	/*
49977 	 * This field is used in Output records to indicate that the output
49978 	 * is completely written to RAM. This field should be read as '1'
49979 	 * to indicate that the output has been completely written.
49980 	 * When writing a command completion or response to an internal
49981 	 * processor, the order of writes has to be such that this field is
49982 	 * written last.
49983 	 */
49984 	uint8_t	valid;
49985 } __rte_packed;
49986 
49987 /*****************************
49988  * hwrm_tf_session_resc_info *
49989  *****************************/
49990 
49991 
49992 /* hwrm_tf_session_resc_info_input (size:320b/40B) */
49993 struct hwrm_tf_session_resc_info_input {
49994 	/* The HWRM command request type. */
49995 	uint16_t	req_type;
49996 	/*
49997 	 * The completion ring to send the completion event on. This should
49998 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
49999 	 */
50000 	uint16_t	cmpl_ring;
50001 	/*
50002 	 * The sequence ID is used by the driver for tracking multiple
50003 	 * commands. This ID is treated as opaque data by the firmware and
50004 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
50005 	 */
50006 	uint16_t	seq_id;
50007 	/*
50008 	 * The target ID of the command:
50009 	 * * 0x0-0xFFF8 - The function ID
50010 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
50011 	 * * 0xFFFD - Reserved for user-space HWRM interface
50012 	 * * 0xFFFF - HWRM
50013 	 */
50014 	uint16_t	target_id;
50015 	/*
50016 	 * A physical address pointer pointing to a host buffer that the
50017 	 * command's response data will be written. This can be either a host
50018 	 * physical address (HPA) or a guest physical address (GPA) and must
50019 	 * point to a physically contiguous block of memory.
50020 	 */
50021 	uint64_t	resp_addr;
50022 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
50023 	uint32_t	fw_session_id;
50024 	/* Control flags. */
50025 	uint16_t	flags;
50026 	/* Indicates the flow direction. */
50027 	#define HWRM_TF_SESSION_RESC_INFO_INPUT_FLAGS_DIR     UINT32_C(0x1)
50028 	/* If this bit set to 0, then it indicates rx flow. */
50029 	#define HWRM_TF_SESSION_RESC_INFO_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
50030 	/* If this bit is set to 1, then it indicates tx flow. */
50031 	#define HWRM_TF_SESSION_RESC_INFO_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
50032 	#define HWRM_TF_SESSION_RESC_INFO_INPUT_FLAGS_DIR_LAST \
50033 		HWRM_TF_SESSION_RESC_INFO_INPUT_FLAGS_DIR_TX
50034 	/*
50035 	 * Defines the array size of the provided req_addr and
50036 	 * resv_addr array buffers. Should be set to the number of
50037 	 * request entries.
50038 	 */
50039 	uint16_t	req_size;
50040 	/*
50041 	 * This is the DMA address for the request input data array
50042 	 * buffer. Array is of tf_rm_resc_req_entry type. Size of the
50043 	 * array buffer is provided by the 'req_size' field in this
50044 	 * message.
50045 	 */
50046 	uint64_t	req_addr;
50047 	/*
50048 	 * This is the DMA address for the resc output data array
50049 	 * buffer. Array is of tf_rm_resc_entry type. Size of the array
50050 	 * buffer is provided by the 'req_size' field in this
50051 	 * message.
50052 	 */
50053 	uint64_t	resc_addr;
50054 } __rte_packed;
50055 
50056 /* hwrm_tf_session_resc_info_output (size:128b/16B) */
50057 struct hwrm_tf_session_resc_info_output {
50058 	/* The specific error status for the command. */
50059 	uint16_t	error_code;
50060 	/* The HWRM command request type. */
50061 	uint16_t	req_type;
50062 	/* The sequence ID from the original command. */
50063 	uint16_t	seq_id;
50064 	/* The length of the response data in number of bytes. */
50065 	uint16_t	resp_len;
50066 	/*
50067 	 * Size of the returned tf_rm_resc_entry data array. The value
50068 	 * cannot exceed the req_size defined by the input msg. The data
50069 	 * array is returned using the resv_addr specified DMA
50070 	 * address also provided by the input msg.
50071 	 */
50072 	uint16_t	size;
50073 	/* unused. */
50074 	uint8_t	unused0[5];
50075 	/*
50076 	 * This field is used in Output records to indicate that the output
50077 	 * is completely written to RAM. This field should be read as '1'
50078 	 * to indicate that the output has been completely written.
50079 	 * When writing a command completion or response to an internal
50080 	 * processor, the order of writes has to be such that this field is
50081 	 * written last.
50082 	 */
50083 	uint8_t	valid;
50084 } __rte_packed;
50085 
50086 /* TruFlow RM capability of a resource. */
50087 /* tf_rm_resc_req_entry (size:64b/8B) */
50088 struct tf_rm_resc_req_entry {
50089 	/* Type of the resource, defined globally in HCAPI RM. */
50090 	uint32_t	type;
50091 	/* Minimum value. */
50092 	uint16_t	min;
50093 	/* Maximum value. */
50094 	uint16_t	max;
50095 } __rte_packed;
50096 
50097 /* TruFlow RM reservation information. */
50098 /* tf_rm_resc_entry (size:64b/8B) */
50099 struct tf_rm_resc_entry {
50100 	/* Type of the resource, defined globally in HCAPI RM. */
50101 	uint32_t	type;
50102 	/* Start offset. */
50103 	uint16_t	start;
50104 	/* Number of resources. */
50105 	uint16_t	stride;
50106 } __rte_packed;
50107 
50108 /************************
50109  * hwrm_tf_tbl_type_get *
50110  ************************/
50111 
50112 
50113 /* hwrm_tf_tbl_type_get_input (size:256b/32B) */
50114 struct hwrm_tf_tbl_type_get_input {
50115 	/* The HWRM command request type. */
50116 	uint16_t	req_type;
50117 	/*
50118 	 * The completion ring to send the completion event on. This should
50119 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
50120 	 */
50121 	uint16_t	cmpl_ring;
50122 	/*
50123 	 * The sequence ID is used by the driver for tracking multiple
50124 	 * commands. This ID is treated as opaque data by the firmware and
50125 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
50126 	 */
50127 	uint16_t	seq_id;
50128 	/*
50129 	 * The target ID of the command:
50130 	 * * 0x0-0xFFF8 - The function ID
50131 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
50132 	 * * 0xFFFD - Reserved for user-space HWRM interface
50133 	 * * 0xFFFF - HWRM
50134 	 */
50135 	uint16_t	target_id;
50136 	/*
50137 	 * A physical address pointer pointing to a host buffer that the
50138 	 * command's response data will be written. This can be either a host
50139 	 * physical address (HPA) or a guest physical address (GPA) and must
50140 	 * point to a physically contiguous block of memory.
50141 	 */
50142 	uint64_t	resp_addr;
50143 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
50144 	uint32_t	fw_session_id;
50145 	/* Control flags. */
50146 	uint16_t	flags;
50147 	/* Indicates the flow direction. */
50148 	#define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR \
50149 		UINT32_C(0x1)
50150 	/* If this bit set to 0, then it indicates rx flow. */
50151 	#define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_RX \
50152 		UINT32_C(0x0)
50153 	/* If this bit is set to 1, then it indicates tx flow. */
50154 	#define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_TX \
50155 		UINT32_C(0x1)
50156 	#define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_LAST \
50157 		HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_TX
50158 	/*
50159 	 * When set use the special access register access to clear
50160 	 * the table entry on read.
50161 	 */
50162 	#define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_CLEAR_ON_READ \
50163 		UINT32_C(0x2)
50164 	/* unused. */
50165 	uint8_t	unused0[2];
50166 	/*
50167 	 * Type of the resource, defined globally in the
50168 	 * hwrm_tf_resc_type enum.
50169 	 */
50170 	uint32_t	type;
50171 	/* Index of the type to retrieve. */
50172 	uint32_t	index;
50173 } __rte_packed;
50174 
50175 /* hwrm_tf_tbl_type_get_output (size:1216b/152B) */
50176 struct hwrm_tf_tbl_type_get_output {
50177 	/* The specific error status for the command. */
50178 	uint16_t	error_code;
50179 	/* The HWRM command request type. */
50180 	uint16_t	req_type;
50181 	/* The sequence ID from the original command. */
50182 	uint16_t	seq_id;
50183 	/* The length of the response data in number of bytes. */
50184 	uint16_t	resp_len;
50185 	/* Response code. */
50186 	uint32_t	resp_code;
50187 	/* Response size. */
50188 	uint16_t	size;
50189 	/* unused */
50190 	uint16_t	unused0;
50191 	/* Response data. */
50192 	uint8_t	data[128];
50193 	/* unused */
50194 	uint8_t	unused1[7];
50195 	/*
50196 	 * This field is used in Output records to indicate that the output
50197 	 * is completely written to RAM. This field should be read as '1'
50198 	 * to indicate that the output has been completely written.
50199 	 * When writing a command completion or response to an internal
50200 	 * processor, the order of writes has to be such that this field
50201 	 * is written last.
50202 	 */
50203 	uint8_t	valid;
50204 } __rte_packed;
50205 
50206 /************************
50207  * hwrm_tf_tbl_type_set *
50208  ************************/
50209 
50210 
50211 /* hwrm_tf_tbl_type_set_input (size:1024b/128B) */
50212 struct hwrm_tf_tbl_type_set_input {
50213 	/* The HWRM command request type. */
50214 	uint16_t	req_type;
50215 	/*
50216 	 * The completion ring to send the completion event on. This should
50217 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
50218 	 */
50219 	uint16_t	cmpl_ring;
50220 	/*
50221 	 * The sequence ID is used by the driver for tracking multiple
50222 	 * commands. This ID is treated as opaque data by the firmware and
50223 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
50224 	 */
50225 	uint16_t	seq_id;
50226 	/*
50227 	 * The target ID of the command:
50228 	 * * 0x0-0xFFF8 - The function ID
50229 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
50230 	 * * 0xFFFD - Reserved for user-space HWRM interface
50231 	 * * 0xFFFF - HWRM
50232 	 */
50233 	uint16_t	target_id;
50234 	/*
50235 	 * A physical address pointer pointing to a host buffer that the
50236 	 * command's response data will be written. This can be either a host
50237 	 * physical address (HPA) or a guest physical address (GPA) and must
50238 	 * point to a physically contiguous block of memory.
50239 	 */
50240 	uint64_t	resp_addr;
50241 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
50242 	uint32_t	fw_session_id;
50243 	/* Control flags. */
50244 	uint16_t	flags;
50245 	/* Indicates the flow direction. */
50246 	#define HWRM_TF_TBL_TYPE_SET_INPUT_FLAGS_DIR     UINT32_C(0x1)
50247 	/* If this bit set to 0, then it indicates rx flow. */
50248 	#define HWRM_TF_TBL_TYPE_SET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
50249 	/* If this bit is set to 1, then it indicates tx flow. */
50250 	#define HWRM_TF_TBL_TYPE_SET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
50251 	#define HWRM_TF_TBL_TYPE_SET_INPUT_FLAGS_DIR_LAST \
50252 		HWRM_TF_TBL_TYPE_SET_INPUT_FLAGS_DIR_TX
50253 	/* unused. */
50254 	uint8_t	unused0[2];
50255 	/*
50256 	 * Type of the resource, defined globally in the
50257 	 * hwrm_tf_resc_type enum.
50258 	 */
50259 	uint32_t	type;
50260 	/* Index of the type to retrieve. */
50261 	uint32_t	index;
50262 	/* Size of the data to set. */
50263 	uint16_t	size;
50264 	/* unused */
50265 	uint8_t	unused1[6];
50266 	/* Data to be set. */
50267 	uint8_t	data[88];
50268 } __rte_packed;
50269 
50270 /* hwrm_tf_tbl_type_set_output (size:128b/16B) */
50271 struct hwrm_tf_tbl_type_set_output {
50272 	/* The specific error status for the command. */
50273 	uint16_t	error_code;
50274 	/* The HWRM command request type. */
50275 	uint16_t	req_type;
50276 	/* The sequence ID from the original command. */
50277 	uint16_t	seq_id;
50278 	/* The length of the response data in number of bytes. */
50279 	uint16_t	resp_len;
50280 	/* unused. */
50281 	uint8_t	unused0[7];
50282 	/*
50283 	 * This field is used in Output records to indicate that the output
50284 	 * is completely written to RAM. This field should be read as '1'
50285 	 * to indicate that the output has been completely written.
50286 	 * When writing a command completion or response to an internal
50287 	 * processor, the order of writes has to be such that this field
50288 	 * is written last.
50289 	 */
50290 	uint8_t	valid;
50291 } __rte_packed;
50292 
50293 /**************************
50294  * hwrm_tf_ctxt_mem_alloc *
50295  **************************/
50296 
50297 
50298 /* hwrm_tf_ctxt_mem_alloc_input (size:192b/24B) */
50299 struct hwrm_tf_ctxt_mem_alloc_input {
50300 	/* The HWRM command request type. */
50301 	uint16_t	req_type;
50302 	/*
50303 	 * The completion ring to send the completion event on. This should
50304 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
50305 	 */
50306 	uint16_t	cmpl_ring;
50307 	/*
50308 	 * The sequence ID is used by the driver for tracking multiple
50309 	 * commands. This ID is treated as opaque data by the firmware and
50310 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
50311 	 */
50312 	uint16_t	seq_id;
50313 	/*
50314 	 * The target ID of the command:
50315 	 * * 0x0-0xFFF8 - The function ID
50316 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
50317 	 * * 0xFFFD - Reserved for user-space HWRM interface
50318 	 * * 0xFFFF - HWRM
50319 	 */
50320 	uint16_t	target_id;
50321 	/*
50322 	 * A physical address pointer pointing to a host buffer that the
50323 	 * command's response data will be written. This can be either a host
50324 	 * physical address (HPA) or a guest physical address (GPA) and must
50325 	 * point to a physically contiguous block of memory.
50326 	 */
50327 	uint64_t	resp_addr;
50328 	/* Size in KB of memory to be allocated. */
50329 	uint32_t	mem_size;
50330 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
50331 	uint32_t	fw_session_id;
50332 } __rte_packed;
50333 
50334 /* hwrm_tf_ctxt_mem_alloc_output (size:192b/24B) */
50335 struct hwrm_tf_ctxt_mem_alloc_output {
50336 	/* The specific error status for the command. */
50337 	uint16_t	error_code;
50338 	/* The HWRM command request type. */
50339 	uint16_t	req_type;
50340 	/* The sequence ID from the original command. */
50341 	uint16_t	seq_id;
50342 	/* The length of the response data in number of bytes. */
50343 	uint16_t	resp_len;
50344 	/* Pointer to the PBL, or PDL depending on number of levels */
50345 	uint64_t	page_dir;
50346 	/* Size of memory allocated. */
50347 	uint32_t	mem_size;
50348 	/* Counter PBL indirect levels. */
50349 	uint8_t	page_level;
50350 	/* PBL pointer is physical start address. */
50351 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_LEVEL_LVL_0 UINT32_C(0x0)
50352 	/* PBL pointer points to PTE table. */
50353 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_LEVEL_LVL_1 UINT32_C(0x1)
50354 	/*
50355 	 * PBL pointer points to PDE table with each entry pointing
50356 	 * to PTE tables.
50357 	 */
50358 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_LEVEL_LVL_2 UINT32_C(0x2)
50359 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_LEVEL_LAST \
50360 		HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_LEVEL_LVL_2
50361 	/* Page size. */
50362 	uint8_t	page_size;
50363 	/* 4KB page size. */
50364 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_4K   UINT32_C(0x0)
50365 	/* 8KB page size. */
50366 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_8K   UINT32_C(0x1)
50367 	/* 64KB page size. */
50368 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_64K  UINT32_C(0x4)
50369 	/* 128KB page size. */
50370 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_128K UINT32_C(0x5)
50371 	/* 256KB page size. */
50372 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_256K UINT32_C(0x6)
50373 	/* 512KB page size. */
50374 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_512K UINT32_C(0x7)
50375 	/* 1MB page size. */
50376 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_1M   UINT32_C(0x8)
50377 	/* 2MB page size. */
50378 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_2M   UINT32_C(0x9)
50379 	/* 4MB page size. */
50380 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_4M   UINT32_C(0xa)
50381 	/* 8MB page size. */
50382 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_8M   UINT32_C(0xb)
50383 	/* 1GB page size. */
50384 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_1G   UINT32_C(0x12)
50385 	#define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_LAST \
50386 		HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_1G
50387 	/* unused. */
50388 	uint8_t	unused0;
50389 	/*
50390 	 * This field is used in Output records to indicate that the
50391 	 * output is completely written to RAM. This field should be
50392 	 * read as '1' to indicate that the output has been
50393 	 * completely written.  When writing a command completion or
50394 	 * response to an internal processor, the order of writes has
50395 	 * to be such that this field is written last.
50396 	 */
50397 	uint8_t	valid;
50398 } __rte_packed;
50399 
50400 /*************************
50401  * hwrm_tf_ctxt_mem_free *
50402  *************************/
50403 
50404 
50405 /* hwrm_tf_ctxt_mem_free_input (size:320b/40B) */
50406 struct hwrm_tf_ctxt_mem_free_input {
50407 	/* The HWRM command request type. */
50408 	uint16_t	req_type;
50409 	/*
50410 	 * The completion ring to send the completion event on. This should
50411 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
50412 	 */
50413 	uint16_t	cmpl_ring;
50414 	/*
50415 	 * The sequence ID is used by the driver for tracking multiple
50416 	 * commands. This ID is treated as opaque data by the firmware and
50417 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
50418 	 */
50419 	uint16_t	seq_id;
50420 	/*
50421 	 * The target ID of the command:
50422 	 * * 0x0-0xFFF8 - The function ID
50423 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
50424 	 * * 0xFFFD - Reserved for user-space HWRM interface
50425 	 * * 0xFFFF - HWRM
50426 	 */
50427 	uint16_t	target_id;
50428 	/*
50429 	 * A physical address pointer pointing to a host buffer that the
50430 	 * command's response data will be written. This can be either a host
50431 	 * physical address (HPA) or a guest physical address (GPA) and must
50432 	 * point to a physically contiguous block of memory.
50433 	 */
50434 	uint64_t	resp_addr;
50435 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
50436 	uint32_t	fw_session_id;
50437 	/* Counter PBL indirect levels. */
50438 	uint8_t	page_level;
50439 	/* PBL pointer is physical start address. */
50440 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_LEVEL_LVL_0 UINT32_C(0x0)
50441 	/* PBL pointer points to PTE table. */
50442 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_LEVEL_LVL_1 UINT32_C(0x1)
50443 	/*
50444 	 * PBL pointer points to PDE table with each entry pointing
50445 	 * to PTE tables.
50446 	 */
50447 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_LEVEL_LVL_2 UINT32_C(0x2)
50448 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_LEVEL_LAST \
50449 		HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_LEVEL_LVL_2
50450 	/* Page size. */
50451 	uint8_t	page_size;
50452 	/* 4KB page size. */
50453 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_4K   UINT32_C(0x0)
50454 	/* 8KB page size. */
50455 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_8K   UINT32_C(0x1)
50456 	/* 64KB page size. */
50457 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_64K  UINT32_C(0x4)
50458 	/* 128KB page size. */
50459 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_128K UINT32_C(0x5)
50460 	/* 256KB page size. */
50461 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_256K UINT32_C(0x6)
50462 	/* 512KB page size. */
50463 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_512K UINT32_C(0x7)
50464 	/* 1MB page size. */
50465 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_1M   UINT32_C(0x8)
50466 	/* 2MB page size. */
50467 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_2M   UINT32_C(0x9)
50468 	/* 4MB page size. */
50469 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_4M   UINT32_C(0xa)
50470 	/* 8MB page size. */
50471 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_8M   UINT32_C(0xb)
50472 	/* 1GB page size. */
50473 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_1G   UINT32_C(0x12)
50474 	#define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_LAST \
50475 		HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_1G
50476 	/* unused. */
50477 	uint8_t	unused0[2];
50478 	/* Pointer to the PBL, or PDL depending on number of levels */
50479 	uint64_t	page_dir;
50480 	/* Size of memory allocated. */
50481 	uint32_t	mem_size;
50482 	/* unused. */
50483 	uint8_t	unused1[4];
50484 } __rte_packed;
50485 
50486 /* hwrm_tf_ctxt_mem_free_output (size:128b/16B) */
50487 struct hwrm_tf_ctxt_mem_free_output {
50488 	/* The specific error status for the command. */
50489 	uint16_t	error_code;
50490 	/* The HWRM command request type. */
50491 	uint16_t	req_type;
50492 	/* The sequence ID from the original command. */
50493 	uint16_t	seq_id;
50494 	/* The length of the response data in number of bytes. */
50495 	uint16_t	resp_len;
50496 	/* unused. */
50497 	uint8_t	unused0[7];
50498 	/*
50499 	 * This field is used in Output records to indicate that the
50500 	 * output is completely written to RAM. This field should be
50501 	 * read as '1' to indicate that the output has been
50502 	 * completely written.  When writing a command completion or
50503 	 * response to an internal processor, the order of writes has
50504 	 * to be such that this field is written last.
50505 	 */
50506 	uint8_t	valid;
50507 } __rte_packed;
50508 
50509 /*************************
50510  * hwrm_tf_ctxt_mem_rgtr *
50511  *************************/
50512 
50513 
50514 /* hwrm_tf_ctxt_mem_rgtr_input (size:256b/32B) */
50515 struct hwrm_tf_ctxt_mem_rgtr_input {
50516 	/* The HWRM command request type. */
50517 	uint16_t	req_type;
50518 	/*
50519 	 * The completion ring to send the completion event on. This should
50520 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
50521 	 */
50522 	uint16_t	cmpl_ring;
50523 	/*
50524 	 * The sequence ID is used by the driver for tracking multiple
50525 	 * commands. This ID is treated as opaque data by the firmware and
50526 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
50527 	 */
50528 	uint16_t	seq_id;
50529 	/*
50530 	 * The target ID of the command:
50531 	 * * 0x0-0xFFF8 - The function ID
50532 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
50533 	 * * 0xFFFD - Reserved for user-space HWRM interface
50534 	 * * 0xFFFF - HWRM
50535 	 */
50536 	uint16_t	target_id;
50537 	/*
50538 	 * A physical address pointer pointing to a host buffer that the
50539 	 * command's response data will be written. This can be either a host
50540 	 * physical address (HPA) or a guest physical address (GPA) and must
50541 	 * point to a physically contiguous block of memory.
50542 	 */
50543 	uint64_t	resp_addr;
50544 	/* Control flags. */
50545 	uint16_t	flags;
50546 	/* Counter PBL indirect levels. */
50547 	uint8_t	page_level;
50548 	/* PBL pointer is physical start address. */
50549 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_0 UINT32_C(0x0)
50550 	/* PBL pointer points to PTE table. */
50551 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_1 UINT32_C(0x1)
50552 	/*
50553 	 * PBL pointer points to PDE table with each entry pointing
50554 	 * to PTE tables.
50555 	 */
50556 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_2 UINT32_C(0x2)
50557 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_LEVEL_LAST \
50558 		HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_2
50559 	/* Page size. */
50560 	uint8_t	page_size;
50561 	/* 4KB page size. */
50562 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_4K   UINT32_C(0x0)
50563 	/* 8KB page size. */
50564 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_8K   UINT32_C(0x1)
50565 	/* 64KB page size. */
50566 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_64K  UINT32_C(0x4)
50567 	/* 128KB page size. */
50568 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_128K UINT32_C(0x5)
50569 	/* 256KB page size. */
50570 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_256K UINT32_C(0x6)
50571 	/* 512KB page size. */
50572 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_512K UINT32_C(0x7)
50573 	/* 1MB page size. */
50574 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_1M   UINT32_C(0x8)
50575 	/* 2MB page size. */
50576 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_2M   UINT32_C(0x9)
50577 	/* 4MB page size. */
50578 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_4M   UINT32_C(0xa)
50579 	/* 8MB page size. */
50580 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_8M   UINT32_C(0xb)
50581 	/* 1GB page size. */
50582 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_1G   UINT32_C(0x12)
50583 	#define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_LAST \
50584 		HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_1G
50585 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
50586 	uint32_t	fw_session_id;
50587 	/* Pointer to the PBL, or PDL depending on number of levels */
50588 	uint64_t	page_dir;
50589 } __rte_packed;
50590 
50591 /* hwrm_tf_ctxt_mem_rgtr_output (size:128b/16B) */
50592 struct hwrm_tf_ctxt_mem_rgtr_output {
50593 	/* The specific error status for the command. */
50594 	uint16_t	error_code;
50595 	/* The HWRM command request type. */
50596 	uint16_t	req_type;
50597 	/* The sequence ID from the original command. */
50598 	uint16_t	seq_id;
50599 	/* The length of the response data in number of bytes. */
50600 	uint16_t	resp_len;
50601 	/*
50602 	 * Id/Handle to the recently register context memory. This
50603 	 * handle is passed to the TF session.
50604 	 */
50605 	uint16_t	ctx_id;
50606 	/* unused. */
50607 	uint8_t	unused0[5];
50608 	/*
50609 	 * This field is used in Output records to indicate that the
50610 	 * output is completely written to RAM. This field should be
50611 	 * read as '1' to indicate that the output has been
50612 	 * completely written.  When writing a command completion or
50613 	 * response to an internal processor, the order of writes has
50614 	 * to be such that this field is written last.
50615 	 */
50616 	uint8_t	valid;
50617 } __rte_packed;
50618 
50619 /***************************
50620  * hwrm_tf_ctxt_mem_unrgtr *
50621  ***************************/
50622 
50623 
50624 /* hwrm_tf_ctxt_mem_unrgtr_input (size:192b/24B) */
50625 struct hwrm_tf_ctxt_mem_unrgtr_input {
50626 	/* The HWRM command request type. */
50627 	uint16_t	req_type;
50628 	/*
50629 	 * The completion ring to send the completion event on. This should
50630 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
50631 	 */
50632 	uint16_t	cmpl_ring;
50633 	/*
50634 	 * The sequence ID is used by the driver for tracking multiple
50635 	 * commands. This ID is treated as opaque data by the firmware and
50636 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
50637 	 */
50638 	uint16_t	seq_id;
50639 	/*
50640 	 * The target ID of the command:
50641 	 * * 0x0-0xFFF8 - The function ID
50642 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
50643 	 * * 0xFFFD - Reserved for user-space HWRM interface
50644 	 * * 0xFFFF - HWRM
50645 	 */
50646 	uint16_t	target_id;
50647 	/*
50648 	 * A physical address pointer pointing to a host buffer that the
50649 	 * command's response data will be written. This can be either a host
50650 	 * physical address (HPA) or a guest physical address (GPA) and must
50651 	 * point to a physically contiguous block of memory.
50652 	 */
50653 	uint64_t	resp_addr;
50654 	/*
50655 	 * Id/Handle to the recently register context memory. This
50656 	 * handle is passed to the TF session.
50657 	 */
50658 	uint16_t	ctx_id;
50659 	/* unused. */
50660 	uint8_t	unused0[2];
50661 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
50662 	uint32_t	fw_session_id;
50663 } __rte_packed;
50664 
50665 /* hwrm_tf_ctxt_mem_unrgtr_output (size:128b/16B) */
50666 struct hwrm_tf_ctxt_mem_unrgtr_output {
50667 	/* The specific error status for the command. */
50668 	uint16_t	error_code;
50669 	/* The HWRM command request type. */
50670 	uint16_t	req_type;
50671 	/* The sequence ID from the original command. */
50672 	uint16_t	seq_id;
50673 	/* The length of the response data in number of bytes. */
50674 	uint16_t	resp_len;
50675 	/* unused. */
50676 	uint8_t	unused0[7];
50677 	/*
50678 	 * This field is used in Output records to indicate that the
50679 	 * output is completely written to RAM. This field should be
50680 	 * read as '1' to indicate that the output has been
50681 	 * completely written.  When writing a command completion or
50682 	 * response to an internal processor, the order of writes has
50683 	 * to be such that this field is written last.
50684 	 */
50685 	uint8_t	valid;
50686 } __rte_packed;
50687 
50688 /************************
50689  * hwrm_tf_ext_em_qcaps *
50690  ************************/
50691 
50692 
50693 /* hwrm_tf_ext_em_qcaps_input (size:192b/24B) */
50694 struct hwrm_tf_ext_em_qcaps_input {
50695 	/* The HWRM command request type. */
50696 	uint16_t	req_type;
50697 	/*
50698 	 * The completion ring to send the completion event on. This should
50699 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
50700 	 */
50701 	uint16_t	cmpl_ring;
50702 	/*
50703 	 * The sequence ID is used by the driver for tracking multiple
50704 	 * commands. This ID is treated as opaque data by the firmware and
50705 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
50706 	 */
50707 	uint16_t	seq_id;
50708 	/*
50709 	 * The target ID of the command:
50710 	 * * 0x0-0xFFF8 - The function ID
50711 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
50712 	 * * 0xFFFD - Reserved for user-space HWRM interface
50713 	 * * 0xFFFF - HWRM
50714 	 */
50715 	uint16_t	target_id;
50716 	/*
50717 	 * A physical address pointer pointing to a host buffer that the
50718 	 * command's response data will be written. This can be either a host
50719 	 * physical address (HPA) or a guest physical address (GPA) and must
50720 	 * point to a physically contiguous block of memory.
50721 	 */
50722 	uint64_t	resp_addr;
50723 	/* Control flags. */
50724 	uint32_t	flags;
50725 	/* Indicates the flow direction. */
50726 	#define HWRM_TF_EXT_EM_QCAPS_INPUT_FLAGS_DIR \
50727 		UINT32_C(0x1)
50728 	/* If this bit set to 0, then it indicates rx flow. */
50729 	#define HWRM_TF_EXT_EM_QCAPS_INPUT_FLAGS_DIR_RX \
50730 		UINT32_C(0x0)
50731 	/* If this bit is set to 1, then it indicates tx flow. */
50732 	#define HWRM_TF_EXT_EM_QCAPS_INPUT_FLAGS_DIR_TX \
50733 		UINT32_C(0x1)
50734 	#define HWRM_TF_EXT_EM_QCAPS_INPUT_FLAGS_DIR_LAST \
50735 		HWRM_TF_EXT_EM_QCAPS_INPUT_FLAGS_DIR_TX
50736 	/* When set to 1, all offloaded flows will be sent to EXT EM. */
50737 	#define HWRM_TF_EXT_EM_QCAPS_INPUT_FLAGS_PREFERRED_OFFLOAD \
50738 		UINT32_C(0x2)
50739 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
50740 	uint32_t	fw_session_id;
50741 } __rte_packed;
50742 
50743 /* hwrm_tf_ext_em_qcaps_output (size:384b/48B) */
50744 struct hwrm_tf_ext_em_qcaps_output {
50745 	/* The specific error status for the command. */
50746 	uint16_t	error_code;
50747 	/* The HWRM command request type. */
50748 	uint16_t	req_type;
50749 	/* The sequence ID from the original command. */
50750 	uint16_t	seq_id;
50751 	/* The length of the response data in number of bytes. */
50752 	uint16_t	resp_len;
50753 	uint32_t	flags;
50754 	/*
50755 	 * When set to 1, indicates the FW supports the Centralized
50756 	 * Memory Model. The concept designates one entity for the
50757 	 * memory allocation while all others ‘subscribe’ to it.
50758 	 */
50759 	#define HWRM_TF_EXT_EM_QCAPS_OUTPUT_FLAGS_CENTRALIZED_MEMORY_MODEL_SUPPORTED \
50760 		UINT32_C(0x1)
50761 	/*
50762 	 * When set to 1, indicates the FW supports the Detached
50763 	 * Centralized Memory Model. The memory is allocated and managed
50764 	 * as a separate entity. All PFs and VFs will be granted direct
50765 	 * or semi-direct access to the allocated memory while none of
50766 	 * which can interfere with the management of the memory.
50767 	 */
50768 	#define HWRM_TF_EXT_EM_QCAPS_OUTPUT_FLAGS_DETACHED_CENTRALIZED_MEMORY_MODEL_SUPPORTED \
50769 		UINT32_C(0x2)
50770 	/* When set to 1, indicates FW support for host based EEM memory. */
50771 	#define HWRM_TF_EXT_EM_QCAPS_OUTPUT_FLAGS_HOST_MEMORY_SUPPORTED \
50772 		UINT32_C(0x4)
50773 	/* When set to 1, indicates FW support for on-chip based EEM memory. */
50774 	#define HWRM_TF_EXT_EM_QCAPS_OUTPUT_FLAGS_FW_MEMORY_SUPPORTED \
50775 		UINT32_C(0x8)
50776 	/* unused. */
50777 	uint32_t	unused0;
50778 	/* Support flags. */
50779 	uint32_t	supported;
50780 	/*
50781 	 * If set to 1, then EXT EM KEY0 table is supported using
50782 	 * crc32 hash.
50783 	 * If set to 0, EXT EM KEY0 table is not supported.
50784 	 */
50785 	#define HWRM_TF_EXT_EM_QCAPS_OUTPUT_SUPPORTED_KEY0_TABLE \
50786 		UINT32_C(0x1)
50787 	/*
50788 	 * If set to 1, then EXT EM KEY1 table is supported using
50789 	 * lookup3 hash.
50790 	 * If set to 0, EXT EM KEY1 table is not supported.
50791 	 */
50792 	#define HWRM_TF_EXT_EM_QCAPS_OUTPUT_SUPPORTED_KEY1_TABLE \
50793 		UINT32_C(0x2)
50794 	/*
50795 	 * If set to 1, then EXT EM External Record table is supported.
50796 	 * If set to 0, EXT EM External Record table is not
50797 	 * supported.  (This table includes action record, EFC
50798 	 * pointers, encap pointers)
50799 	 */
50800 	#define HWRM_TF_EXT_EM_QCAPS_OUTPUT_SUPPORTED_EXTERNAL_RECORD_TABLE \
50801 		UINT32_C(0x4)
50802 	/*
50803 	 * If set to 1, then EXT EM External Flow Counters table is
50804 	 * supported.
50805 	 * If set to 0, EXT EM External Flow Counters table is not
50806 	 * supported.
50807 	 */
50808 	#define HWRM_TF_EXT_EM_QCAPS_OUTPUT_SUPPORTED_EXTERNAL_FLOW_COUNTERS_TABLE \
50809 		UINT32_C(0x8)
50810 	/*
50811 	 * If set to 1, then FID table used for implicit flow flush
50812 	 * is supported.
50813 	 * If set to 0, then FID table used for implicit flow flush
50814 	 * is not supported.
50815 	 */
50816 	#define HWRM_TF_EXT_EM_QCAPS_OUTPUT_SUPPORTED_FID_TABLE \
50817 		UINT32_C(0x10)
50818 	/*
50819 	 * If set to 1, then table scopes are supported.
50820 	 * If set to 0, then table scopes are not supported.
50821 	 */
50822 	#define HWRM_TF_EXT_EM_QCAPS_OUTPUT_SUPPORTED_TBL_SCOPES \
50823 		UINT32_C(0x20)
50824 	/*
50825 	 * The maximum number of entries supported by EXT EM. When
50826 	 * configuring the host memory the number of numbers of
50827 	 * entries that can supported are -
50828 	 *      32k, 64k 128k, 256k, 512k, 1M, 2M, 4M, 8M, 32M, 64M,
50829 	 *      128M entries.
50830 	 * Any value that are not these values, the FW will round
50831 	 * down to the closest support number of entries.
50832 	 */
50833 	uint32_t	max_entries_supported;
50834 	/*
50835 	 * The entry size in bytes of each entry in the EXT EM
50836 	 * KEY0/KEY1 tables.
50837 	 */
50838 	uint16_t	key_entry_size;
50839 	/*
50840 	 * The entry size in bytes of each entry in the EXT EM RECORD
50841 	 * tables.
50842 	 */
50843 	uint16_t	record_entry_size;
50844 	/* The entry size in bytes of each entry in the EXT EM EFC tables. */
50845 	uint16_t	efc_entry_size;
50846 	/* The FID size in bytes of each entry in the EXT EM FID tables. */
50847 	uint16_t	fid_entry_size;
50848 	/* Maximum number of ctxt mem allocations allowed. */
50849 	uint32_t	max_ctxt_mem_allocs;
50850 	/*
50851 	 * Maximum number of static buckets that can be assigned to lookup
50852 	 * table scopes.
50853 	 */
50854 	uint32_t	max_static_buckets;
50855 	/* unused. */
50856 	uint8_t	unused1[7];
50857 	/*
50858 	 * This field is used in Output records to indicate that the
50859 	 * output is completely written to RAM. This field should be
50860 	 * read as '1' to indicate that the output has been
50861 	 * completely written.  When writing a command completion or
50862 	 * response to an internal processor, the order of writes has
50863 	 * to be such that this field is written last.
50864 	 */
50865 	uint8_t	valid;
50866 } __rte_packed;
50867 
50868 /*********************
50869  * hwrm_tf_ext_em_op *
50870  *********************/
50871 
50872 
50873 /* hwrm_tf_ext_em_op_input (size:256b/32B) */
50874 struct hwrm_tf_ext_em_op_input {
50875 	/* The HWRM command request type. */
50876 	uint16_t	req_type;
50877 	/*
50878 	 * The completion ring to send the completion event on. This should
50879 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
50880 	 */
50881 	uint16_t	cmpl_ring;
50882 	/*
50883 	 * The sequence ID is used by the driver for tracking multiple
50884 	 * commands. This ID is treated as opaque data by the firmware and
50885 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
50886 	 */
50887 	uint16_t	seq_id;
50888 	/*
50889 	 * The target ID of the command:
50890 	 * * 0x0-0xFFF8 - The function ID
50891 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
50892 	 * * 0xFFFD - Reserved for user-space HWRM interface
50893 	 * * 0xFFFF - HWRM
50894 	 */
50895 	uint16_t	target_id;
50896 	/*
50897 	 * A physical address pointer pointing to a host buffer that the
50898 	 * command's response data will be written. This can be either a host
50899 	 * physical address (HPA) or a guest physical address (GPA) and must
50900 	 * point to a physically contiguous block of memory.
50901 	 */
50902 	uint64_t	resp_addr;
50903 	/* Control flags. */
50904 	uint16_t	flags;
50905 	/* Indicates the flow direction. */
50906 	#define HWRM_TF_EXT_EM_OP_INPUT_FLAGS_DIR     UINT32_C(0x1)
50907 	/* If this bit set to 0, then it indicates rx flow. */
50908 	#define HWRM_TF_EXT_EM_OP_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
50909 	/* If this bit is set to 1, then it indicates tx flow. */
50910 	#define HWRM_TF_EXT_EM_OP_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
50911 	#define HWRM_TF_EXT_EM_OP_INPUT_FLAGS_DIR_LAST \
50912 		HWRM_TF_EXT_EM_OP_INPUT_FLAGS_DIR_TX
50913 	/* unused. */
50914 	uint16_t	unused0;
50915 	/* The number of EXT EM key table entries to be configured. */
50916 	uint16_t	op;
50917 	/* This value is reserved and should not be used. */
50918 	#define HWRM_TF_EXT_EM_OP_INPUT_OP_RESERVED       UINT32_C(0x0)
50919 	/*
50920 	 * To properly stop EXT EM and ensure there are no DMA's,
50921 	 * the caller must disable EXT EM for the given PF, using
50922 	 * this call. This will safely disable EXT EM and ensure
50923 	 * that all DMA'ed to the keys/records/efc have been
50924 	 * completed.
50925 	 */
50926 	#define HWRM_TF_EXT_EM_OP_INPUT_OP_EXT_EM_DISABLE UINT32_C(0x1)
50927 	/*
50928 	 * Once the EXT EM host memory has been configured, EXT EM
50929 	 * options have been configured. Then the caller should
50930 	 * enable EXT EM for the given PF. Note once this call has
50931 	 * been made, then the EXT EM mechanism will be active and
50932 	 * DMA's will occur as packets are processed.
50933 	 */
50934 	#define HWRM_TF_EXT_EM_OP_INPUT_OP_EXT_EM_ENABLE  UINT32_C(0x2)
50935 	/*
50936 	 * Clear EXT EM settings for the given PF so that the
50937 	 * register values are reset back to their initial state.
50938 	 */
50939 	#define HWRM_TF_EXT_EM_OP_INPUT_OP_EXT_EM_CLEANUP UINT32_C(0x3)
50940 	#define HWRM_TF_EXT_EM_OP_INPUT_OP_LAST \
50941 		HWRM_TF_EXT_EM_OP_INPUT_OP_EXT_EM_CLEANUP
50942 	/* unused. */
50943 	uint16_t	unused1;
50944 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
50945 	uint32_t	fw_session_id;
50946 	/* unused. */
50947 	uint32_t	unused2;
50948 } __rte_packed;
50949 
50950 /* hwrm_tf_ext_em_op_output (size:128b/16B) */
50951 struct hwrm_tf_ext_em_op_output {
50952 	/* The specific error status for the command. */
50953 	uint16_t	error_code;
50954 	/* The HWRM command request type. */
50955 	uint16_t	req_type;
50956 	/* The sequence ID from the original command. */
50957 	uint16_t	seq_id;
50958 	/* The length of the response data in number of bytes. */
50959 	uint16_t	resp_len;
50960 	/* unused. */
50961 	uint8_t	unused0[7];
50962 	/*
50963 	 * This field is used in Output records to indicate that the
50964 	 * output is completely written to RAM. This field should be
50965 	 * read as '1' to indicate that the output has been
50966 	 * completely written.  When writing a command completion or
50967 	 * response to an internal processor, the order of writes has
50968 	 * to be such that this field is written last.
50969 	 */
50970 	uint8_t	valid;
50971 } __rte_packed;
50972 
50973 /**********************
50974  * hwrm_tf_ext_em_cfg *
50975  **********************/
50976 
50977 
50978 /* hwrm_tf_ext_em_cfg_input (size:512b/64B) */
50979 struct hwrm_tf_ext_em_cfg_input {
50980 	/* The HWRM command request type. */
50981 	uint16_t	req_type;
50982 	/*
50983 	 * The completion ring to send the completion event on. This should
50984 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
50985 	 */
50986 	uint16_t	cmpl_ring;
50987 	/*
50988 	 * The sequence ID is used by the driver for tracking multiple
50989 	 * commands. This ID is treated as opaque data by the firmware and
50990 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
50991 	 */
50992 	uint16_t	seq_id;
50993 	/*
50994 	 * The target ID of the command:
50995 	 * * 0x0-0xFFF8 - The function ID
50996 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
50997 	 * * 0xFFFD - Reserved for user-space HWRM interface
50998 	 * * 0xFFFF - HWRM
50999 	 */
51000 	uint16_t	target_id;
51001 	/*
51002 	 * A physical address pointer pointing to a host buffer that the
51003 	 * command's response data will be written. This can be either a host
51004 	 * physical address (HPA) or a guest physical address (GPA) and must
51005 	 * point to a physically contiguous block of memory.
51006 	 */
51007 	uint64_t	resp_addr;
51008 	/* Control flags. */
51009 	uint32_t	flags;
51010 	/* Indicates the flow direction. */
51011 	#define HWRM_TF_EXT_EM_CFG_INPUT_FLAGS_DIR \
51012 		UINT32_C(0x1)
51013 	/* If this bit set to 0, then it indicates rx flow. */
51014 	#define HWRM_TF_EXT_EM_CFG_INPUT_FLAGS_DIR_RX \
51015 		UINT32_C(0x0)
51016 	/* If this bit is set to 1, then it indicates tx flow. */
51017 	#define HWRM_TF_EXT_EM_CFG_INPUT_FLAGS_DIR_TX \
51018 		UINT32_C(0x1)
51019 	#define HWRM_TF_EXT_EM_CFG_INPUT_FLAGS_DIR_LAST \
51020 		HWRM_TF_EXT_EM_CFG_INPUT_FLAGS_DIR_TX
51021 	/* When set to 1, all offloaded flows will be sent to EXT EM. */
51022 	#define HWRM_TF_EXT_EM_CFG_INPUT_FLAGS_PREFERRED_OFFLOAD \
51023 		UINT32_C(0x2)
51024 	/* When set to 1, secondary, 0 means primary. */
51025 	#define HWRM_TF_EXT_EM_CFG_INPUT_FLAGS_SECONDARY_PF \
51026 		UINT32_C(0x4)
51027 	/*
51028 	 * Group_id which used by Firmware to identify memory pools belonging
51029 	 * to certain group.
51030 	 */
51031 	uint16_t	group_id;
51032 	/*
51033 	 * Dynamically reconfigure EEM pending cache every 1/10th of second.
51034 	 * If set to 0 it will disable the EEM HW flush of the pending cache.
51035 	 */
51036 	uint8_t	flush_interval;
51037 	/* unused. */
51038 	uint8_t	unused0;
51039 	/*
51040 	 * Configured EXT EM with the given number of entries. All
51041 	 * the EXT EM tables KEY0, KEY1, RECORD, EFC all have the
51042 	 * same number of entries and all tables will be configured
51043 	 * using this value. Current minimum value is 32k. Current
51044 	 * maximum value is 128M.
51045 	 */
51046 	uint32_t	num_entries;
51047 	uint32_t	enables;
51048 	/*
51049 	 * This bit must be '1' for the group_id field to be
51050 	 * configured.
51051 	 */
51052 	#define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_GROUP_ID \
51053 		UINT32_C(0x1)
51054 	/*
51055 	 * This bit must be '1' for the flush_interval field to be
51056 	 * configured.
51057 	 */
51058 	#define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_FLUSH_INTERVAL \
51059 		UINT32_C(0x2)
51060 	/*
51061 	 * This bit must be '1' for the num_entries field to be
51062 	 * configured.
51063 	 */
51064 	#define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_NUM_ENTRIES \
51065 		UINT32_C(0x4)
51066 	/*
51067 	 * This bit must be '1' for the key0_ctx_id field to be
51068 	 * configured.
51069 	 */
51070 	#define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_KEY0_CTX_ID \
51071 		UINT32_C(0x8)
51072 	/*
51073 	 * This bit must be '1' for the key1_ctx_id field to be
51074 	 * configured.
51075 	 */
51076 	#define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_KEY1_CTX_ID \
51077 		UINT32_C(0x10)
51078 	/*
51079 	 * This bit must be '1' for the record_ctx_id field to be
51080 	 * configured.
51081 	 */
51082 	#define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_RECORD_CTX_ID \
51083 		UINT32_C(0x20)
51084 	/*
51085 	 * This bit must be '1' for the efc_ctx_id field to be
51086 	 * configured.
51087 	 */
51088 	#define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_EFC_CTX_ID \
51089 		UINT32_C(0x40)
51090 	/*
51091 	 * This bit must be '1' for the fid_ctx_id field to be
51092 	 * configured.
51093 	 */
51094 	#define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_FID_CTX_ID \
51095 		UINT32_C(0x80)
51096 	/*
51097 	 * This bit must be '1' for the action_ctx_id field to be
51098 	 * configured.
51099 	 */
51100 	#define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_ACTION_CTX_ID \
51101 		UINT32_C(0x100)
51102 	/*
51103 	 * This bit must be '1' for the action_tbl_scope field to be
51104 	 * configured.
51105 	 */
51106 	#define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_ACTION_TBL_SCOPE \
51107 		UINT32_C(0x200)
51108 	/*
51109 	 * This bit must be '1' for the lkup_ctx_id field to be
51110 	 * configured.
51111 	 */
51112 	#define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_LKUP_CTX_ID \
51113 		UINT32_C(0x400)
51114 	/*
51115 	 * This bit must be '1' for the lkup_tbl_scope field to be
51116 	 * configured.
51117 	 */
51118 	#define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_LKUP_TBL_SCOPE \
51119 		UINT32_C(0x800)
51120 	/*
51121 	 * This bit must be '1' for the lkup_static_buckets field to be
51122 	 * configured.
51123 	 */
51124 	#define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_LKUP_STATIC_BUCKETS \
51125 		UINT32_C(0x1000)
51126 	/* Configured EXT EM with the given context if for KEY0 table. */
51127 	uint16_t	key0_ctx_id;
51128 	/* Configured EXT EM with the given context if for KEY1 table. */
51129 	uint16_t	key1_ctx_id;
51130 	/* Configured EXT EM with the given context if for RECORD table. */
51131 	uint16_t	record_ctx_id;
51132 	/* Configured EXT EM with the given context if for EFC table. */
51133 	uint16_t	efc_ctx_id;
51134 	/* Configured EXT EM with the given context if for EFC table. */
51135 	uint16_t	fid_ctx_id;
51136 	/* Context id of action table scope. */
51137 	uint16_t	action_ctx_id;
51138 	/* Table scope id used for action record entries. */
51139 	uint16_t	action_tbl_scope;
51140 	/* Context id of lookup table scope. */
51141 	uint16_t	lkup_ctx_id;
51142 	/* Table scope id used for EM lookup entries. */
51143 	uint16_t	lkup_tbl_scope;
51144 	/* unused. */
51145 	uint16_t	unused1;
51146 	/*
51147 	 * Number of 32B static buckets to be allocated at the beginning
51148 	 * of table scope.
51149 	 */
51150 	uint32_t	lkup_static_buckets;
51151 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
51152 	uint32_t	fw_session_id;
51153 	/* unused. */
51154 	uint32_t	unused2;
51155 } __rte_packed;
51156 
51157 /* hwrm_tf_ext_em_cfg_output (size:128b/16B) */
51158 struct hwrm_tf_ext_em_cfg_output {
51159 	/* The specific error status for the command. */
51160 	uint16_t	error_code;
51161 	/* The HWRM command request type. */
51162 	uint16_t	req_type;
51163 	/* The sequence ID from the original command. */
51164 	uint16_t	seq_id;
51165 	/* The length of the response data in number of bytes. */
51166 	uint16_t	resp_len;
51167 	/* unused. */
51168 	uint8_t	unused0[7];
51169 	/*
51170 	 * This field is used in Output records to indicate that the
51171 	 * output is completely written to RAM. This field should be
51172 	 * read as '1' to indicate that the output has been
51173 	 * completely written.  When writing a command completion or
51174 	 * response to an internal processor, the order of writes has
51175 	 * to be such that this field is written last.
51176 	 */
51177 	uint8_t	valid;
51178 } __rte_packed;
51179 
51180 /***********************
51181  * hwrm_tf_ext_em_qcfg *
51182  ***********************/
51183 
51184 
51185 /* hwrm_tf_ext_em_qcfg_input (size:192b/24B) */
51186 struct hwrm_tf_ext_em_qcfg_input {
51187 	/* The HWRM command request type. */
51188 	uint16_t	req_type;
51189 	/*
51190 	 * The completion ring to send the completion event on. This should
51191 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
51192 	 */
51193 	uint16_t	cmpl_ring;
51194 	/*
51195 	 * The sequence ID is used by the driver for tracking multiple
51196 	 * commands. This ID is treated as opaque data by the firmware and
51197 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
51198 	 */
51199 	uint16_t	seq_id;
51200 	/*
51201 	 * The target ID of the command:
51202 	 * * 0x0-0xFFF8 - The function ID
51203 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
51204 	 * * 0xFFFD - Reserved for user-space HWRM interface
51205 	 * * 0xFFFF - HWRM
51206 	 */
51207 	uint16_t	target_id;
51208 	/*
51209 	 * A physical address pointer pointing to a host buffer that the
51210 	 * command's response data will be written. This can be either a host
51211 	 * physical address (HPA) or a guest physical address (GPA) and must
51212 	 * point to a physically contiguous block of memory.
51213 	 */
51214 	uint64_t	resp_addr;
51215 	/* Control flags. */
51216 	uint32_t	flags;
51217 	/* Indicates the flow direction. */
51218 	#define HWRM_TF_EXT_EM_QCFG_INPUT_FLAGS_DIR     UINT32_C(0x1)
51219 	/* If this bit set to 0, then it indicates rx flow. */
51220 	#define HWRM_TF_EXT_EM_QCFG_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
51221 	/* If this bit is set to 1, then it indicates tx flow. */
51222 	#define HWRM_TF_EXT_EM_QCFG_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
51223 	#define HWRM_TF_EXT_EM_QCFG_INPUT_FLAGS_DIR_LAST \
51224 		HWRM_TF_EXT_EM_QCFG_INPUT_FLAGS_DIR_TX
51225 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
51226 	uint32_t	fw_session_id;
51227 } __rte_packed;
51228 
51229 /* hwrm_tf_ext_em_qcfg_output (size:448b/56B) */
51230 struct hwrm_tf_ext_em_qcfg_output {
51231 	/* The specific error status for the command. */
51232 	uint16_t	error_code;
51233 	/* The HWRM command request type. */
51234 	uint16_t	req_type;
51235 	/* The sequence ID from the original command. */
51236 	uint16_t	seq_id;
51237 	/* The length of the response data in number of bytes. */
51238 	uint16_t	resp_len;
51239 	/* Control flags. */
51240 	uint32_t	flags;
51241 	/* Indicates the flow direction. */
51242 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_FLAGS_DIR \
51243 		UINT32_C(0x1)
51244 	/* If this bit set to 0, then it indicates rx flow. */
51245 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_FLAGS_DIR_RX \
51246 		UINT32_C(0x0)
51247 	/* If this bit is set to 1, then it indicates tx flow. */
51248 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_FLAGS_DIR_TX \
51249 		UINT32_C(0x1)
51250 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_FLAGS_DIR_LAST \
51251 		HWRM_TF_EXT_EM_QCFG_OUTPUT_FLAGS_DIR_TX
51252 	/* When set to 1, all offloaded flows will be sent to EXT EM. */
51253 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_FLAGS_PREFERRED_OFFLOAD \
51254 		UINT32_C(0x2)
51255 	/* The number of entries the FW has configured for EXT EM. */
51256 	uint32_t	num_entries;
51257 	/* Configured EXT EM with the given context if for KEY0 table. */
51258 	uint16_t	key0_ctx_id;
51259 	/* Configured EXT EM with the given context if for KEY1 table. */
51260 	uint16_t	key1_ctx_id;
51261 	/* Configured EXT EM with the given context if for RECORD table. */
51262 	uint16_t	record_ctx_id;
51263 	/* Configured EXT EM with the given context if for EFC table. */
51264 	uint16_t	efc_ctx_id;
51265 	/* Configured EXT EM with the given context if for EFC table. */
51266 	uint16_t	fid_ctx_id;
51267 	/* unused. */
51268 	uint16_t	unused0;
51269 	uint32_t	supported;
51270 	/* This bit must be '1' for the group_id field is set. */
51271 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_GROUP_ID \
51272 		UINT32_C(0x1)
51273 	/* This bit must be '1' for the flush_interval field is set. */
51274 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_FLUSH_INTERVAL \
51275 		UINT32_C(0x2)
51276 	/* This bit must be '1' for the num_entries field is set. */
51277 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_NUM_ENTRIES \
51278 		UINT32_C(0x4)
51279 	/* This bit must be '1' for the key0_ctx_id field is set. */
51280 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_KEY0_CTX_ID \
51281 		UINT32_C(0x8)
51282 	/* This bit must be '1' for the key1_ctx_id field is set. */
51283 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_KEY1_CTX_ID \
51284 		UINT32_C(0x10)
51285 	/* This bit must be '1' for the record_ctx_id field is set. */
51286 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_RECORD_CTX_ID \
51287 		UINT32_C(0x20)
51288 	/* This bit must be '1' for the efc_ctx_id field is set. */
51289 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_EFC_CTX_ID \
51290 		UINT32_C(0x40)
51291 	/* This bit must be '1' for the fid_ctx_id field is set. */
51292 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_FID_CTX_ID \
51293 		UINT32_C(0x80)
51294 	/* This bit must be '1' for the action_ctx_id field is set. */
51295 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_ACTION_CTX_ID \
51296 		UINT32_C(0x100)
51297 	/* This bit must be '1' for the action_tbl_scope field is set. */
51298 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_ACTION_TBL_SCOPE \
51299 		UINT32_C(0x200)
51300 	/* This bit must be '1' for the lkup_ctx_id field is set. */
51301 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_LKUP_CTX_ID \
51302 		UINT32_C(0x400)
51303 	/* This bit must be '1' for the lkup_tbl_scope field is set. */
51304 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_LKUP_TBL_SCOPE \
51305 		UINT32_C(0x800)
51306 	/* This bit must be '1' for the lkup_static_buckets field is set. */
51307 	#define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_LKUP_STATIC_BUCKETS \
51308 		UINT32_C(0x1000)
51309 	/*
51310 	 * Group id is used by firmware to identify memory pools belonging
51311 	 * to certain group.
51312 	 */
51313 	uint16_t	group_id;
51314 	/* EEM pending cache flush interval in 1/10th of second. */
51315 	uint8_t	flush_interval;
51316 	/* unused. */
51317 	uint8_t	unused1;
51318 	/* Context id of action table scope. */
51319 	uint16_t	action_ctx_id;
51320 	/* Table scope id used for action record entries. */
51321 	uint16_t	action_tbl_scope;
51322 	/* Context id of lookup table scope. */
51323 	uint16_t	lkup_ctx_id;
51324 	/* Table scope id used for EM lookup entries. */
51325 	uint16_t	lkup_tbl_scope;
51326 	/*
51327 	 * Number of 32B static buckets to be allocated at the beginning
51328 	 * of table scope.
51329 	 */
51330 	uint32_t	lkup_static_buckets;
51331 	/* unused. */
51332 	uint8_t	unused2[7];
51333 	/*
51334 	 * This field is used in Output records to indicate that the
51335 	 * output is completely written to RAM. This field should be
51336 	 * read as '1' to indicate that the output has been
51337 	 * completely written.  When writing a command completion or
51338 	 * response to an internal processor, the order of writes has
51339 	 * to be such that this field is written last.
51340 	 */
51341 	uint8_t	valid;
51342 } __rte_packed;
51343 
51344 /*********************
51345  * hwrm_tf_em_insert *
51346  *********************/
51347 
51348 
51349 /* hwrm_tf_em_insert_input (size:832b/104B) */
51350 struct hwrm_tf_em_insert_input {
51351 	/* The HWRM command request type. */
51352 	uint16_t	req_type;
51353 	/*
51354 	 * The completion ring to send the completion event on. This should
51355 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
51356 	 */
51357 	uint16_t	cmpl_ring;
51358 	/*
51359 	 * The sequence ID is used by the driver for tracking multiple
51360 	 * commands. This ID is treated as opaque data by the firmware and
51361 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
51362 	 */
51363 	uint16_t	seq_id;
51364 	/*
51365 	 * The target ID of the command:
51366 	 * * 0x0-0xFFF8 - The function ID
51367 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
51368 	 * * 0xFFFD - Reserved for user-space HWRM interface
51369 	 * * 0xFFFF - HWRM
51370 	 */
51371 	uint16_t	target_id;
51372 	/*
51373 	 * A physical address pointer pointing to a host buffer that the
51374 	 * command's response data will be written. This can be either a host
51375 	 * physical address (HPA) or a guest physical address (GPA) and must
51376 	 * point to a physically contiguous block of memory.
51377 	 */
51378 	uint64_t	resp_addr;
51379 	/* Firmware Session Id. */
51380 	uint32_t	fw_session_id;
51381 	/* Control Flags. */
51382 	uint16_t	flags;
51383 	/* Indicates the flow direction. */
51384 	#define HWRM_TF_EM_INSERT_INPUT_FLAGS_DIR     UINT32_C(0x1)
51385 	/* If this bit set to 0, then it indicates rx flow. */
51386 	#define HWRM_TF_EM_INSERT_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
51387 	/* If this bit is set to 1, then it indicates tx flow. */
51388 	#define HWRM_TF_EM_INSERT_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
51389 	#define HWRM_TF_EM_INSERT_INPUT_FLAGS_DIR_LAST \
51390 		HWRM_TF_EM_INSERT_INPUT_FLAGS_DIR_TX
51391 	/* Reported match strength. */
51392 	uint16_t	strength;
51393 	/* Index to action. */
51394 	uint32_t	action_ptr;
51395 	/* Index of EM record. */
51396 	uint32_t	em_record_idx;
51397 	/* EM Key value. */
51398 	uint64_t	em_key[8];
51399 	/* Number of bits in em_key. */
51400 	uint16_t	em_key_bitlen;
51401 	/* unused. */
51402 	uint16_t	unused0[3];
51403 } __rte_packed;
51404 
51405 /* hwrm_tf_em_insert_output (size:128b/16B) */
51406 struct hwrm_tf_em_insert_output {
51407 	/* The specific error status for the command. */
51408 	uint16_t	error_code;
51409 	/* The HWRM command request type. */
51410 	uint16_t	req_type;
51411 	/* The sequence ID from the original command. */
51412 	uint16_t	seq_id;
51413 	/* The length of the response data in number of bytes. */
51414 	uint16_t	resp_len;
51415 	/* EM record pointer index. */
51416 	uint16_t	rptr_index;
51417 	/* EM record offset 0~3. */
51418 	uint8_t	rptr_entry;
51419 	/* Number of word entries consumed by the key. */
51420 	uint8_t	num_of_entries;
51421 	/* unused. */
51422 	uint32_t	unused0;
51423 } __rte_packed;
51424 
51425 /**************************
51426  * hwrm_tf_em_hash_insert *
51427  **************************/
51428 
51429 
51430 /* hwrm_tf_em_hash_insert_input (size:1024b/128B) */
51431 struct hwrm_tf_em_hash_insert_input {
51432 	/* The HWRM command request type. */
51433 	uint16_t	req_type;
51434 	/*
51435 	 * The completion ring to send the completion event on. This should
51436 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
51437 	 */
51438 	uint16_t	cmpl_ring;
51439 	/*
51440 	 * The sequence ID is used by the driver for tracking multiple
51441 	 * commands. This ID is treated as opaque data by the firmware and
51442 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
51443 	 */
51444 	uint16_t	seq_id;
51445 	/*
51446 	 * The target ID of the command:
51447 	 * * 0x0-0xFFF8 - The function ID
51448 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
51449 	 * * 0xFFFD - Reserved for user-space HWRM interface
51450 	 * * 0xFFFF - HWRM
51451 	 */
51452 	uint16_t	target_id;
51453 	/*
51454 	 * A physical address pointer pointing to a host buffer that the
51455 	 * command's response data will be written. This can be either a host
51456 	 * physical address (HPA) or a guest physical address (GPA) and must
51457 	 * point to a physically contiguous block of memory.
51458 	 */
51459 	uint64_t	resp_addr;
51460 	/* Firmware Session Id. */
51461 	uint32_t	fw_session_id;
51462 	/* Control Flags. */
51463 	uint16_t	flags;
51464 	/* Indicates the flow direction. */
51465 	#define HWRM_TF_EM_HASH_INSERT_INPUT_FLAGS_DIR     UINT32_C(0x1)
51466 	/* If this bit set to 0, then it indicates rx flow. */
51467 	#define HWRM_TF_EM_HASH_INSERT_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
51468 	/* If this bit is set to 1, then it indicates tx flow. */
51469 	#define HWRM_TF_EM_HASH_INSERT_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
51470 	#define HWRM_TF_EM_HASH_INSERT_INPUT_FLAGS_DIR_LAST \
51471 		HWRM_TF_EM_HASH_INSERT_INPUT_FLAGS_DIR_TX
51472 	/* Number of bits in the EM record. */
51473 	uint16_t	em_record_size_bits;
51474 	/* CRC32 hash of key. */
51475 	uint32_t	key0_hash;
51476 	/* Lookup3 hash of key. */
51477 	uint32_t	key1_hash;
51478 	/* Index of EM record. */
51479 	uint32_t	em_record_idx;
51480 	/* Unused. */
51481 	uint32_t	unused0;
51482 	/* EM record. */
51483 	uint64_t	em_record[11];
51484 } __rte_packed;
51485 
51486 /* hwrm_tf_em_hash_insert_output (size:128b/16B) */
51487 struct hwrm_tf_em_hash_insert_output {
51488 	/* The specific error status for the command. */
51489 	uint16_t	error_code;
51490 	/* The HWRM command request type. */
51491 	uint16_t	req_type;
51492 	/* The sequence ID from the original command. */
51493 	uint16_t	seq_id;
51494 	/* The length of the response data in number of bytes. */
51495 	uint16_t	resp_len;
51496 	/* EM record pointer index. */
51497 	uint16_t	rptr_index;
51498 	/* EM record offset 0~3. */
51499 	uint8_t	rptr_entry;
51500 	/* Number of word entries consumed by the key. */
51501 	uint8_t	num_of_entries;
51502 	/* unused. */
51503 	uint32_t	unused0;
51504 } __rte_packed;
51505 
51506 /*********************
51507  * hwrm_tf_em_delete *
51508  *********************/
51509 
51510 
51511 /* hwrm_tf_em_delete_input (size:832b/104B) */
51512 struct hwrm_tf_em_delete_input {
51513 	/* The HWRM command request type. */
51514 	uint16_t	req_type;
51515 	/*
51516 	 * The completion ring to send the completion event on. This should
51517 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
51518 	 */
51519 	uint16_t	cmpl_ring;
51520 	/*
51521 	 * The sequence ID is used by the driver for tracking multiple
51522 	 * commands. This ID is treated as opaque data by the firmware and
51523 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
51524 	 */
51525 	uint16_t	seq_id;
51526 	/*
51527 	 * The target ID of the command:
51528 	 * * 0x0-0xFFF8 - The function ID
51529 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
51530 	 * * 0xFFFD - Reserved for user-space HWRM interface
51531 	 * * 0xFFFF - HWRM
51532 	 */
51533 	uint16_t	target_id;
51534 	/*
51535 	 * A physical address pointer pointing to a host buffer that the
51536 	 * command's response data will be written. This can be either a host
51537 	 * physical address (HPA) or a guest physical address (GPA) and must
51538 	 * point to a physically contiguous block of memory.
51539 	 */
51540 	uint64_t	resp_addr;
51541 	/* Session Id. */
51542 	uint32_t	fw_session_id;
51543 	/* Control flags. */
51544 	uint16_t	flags;
51545 	/* Indicates the flow direction. */
51546 	#define HWRM_TF_EM_DELETE_INPUT_FLAGS_DIR     UINT32_C(0x1)
51547 	/* If this bit set to 0, then it indicates rx flow. */
51548 	#define HWRM_TF_EM_DELETE_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
51549 	/* If this bit is set to 1, then it indicates tx flow. */
51550 	#define HWRM_TF_EM_DELETE_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
51551 	#define HWRM_TF_EM_DELETE_INPUT_FLAGS_DIR_LAST \
51552 		HWRM_TF_EM_DELETE_INPUT_FLAGS_DIR_TX
51553 	/* Unused0 */
51554 	uint16_t	unused0;
51555 	/* EM internal flow handle. */
51556 	uint64_t	flow_handle;
51557 	/* EM Key value */
51558 	uint64_t	em_key[8];
51559 	/* Number of bits in em_key. */
51560 	uint16_t	em_key_bitlen;
51561 	/* unused. */
51562 	uint16_t	unused1[3];
51563 } __rte_packed;
51564 
51565 /* hwrm_tf_em_delete_output (size:128b/16B) */
51566 struct hwrm_tf_em_delete_output {
51567 	/* The specific error status for the command. */
51568 	uint16_t	error_code;
51569 	/* The HWRM command request type. */
51570 	uint16_t	req_type;
51571 	/* The sequence ID from the original command. */
51572 	uint16_t	seq_id;
51573 	/* The length of the response data in number of bytes. */
51574 	uint16_t	resp_len;
51575 	/* Original stack allocation index. */
51576 	uint16_t	em_index;
51577 	/* unused. */
51578 	uint16_t	unused0[3];
51579 } __rte_packed;
51580 
51581 /*******************
51582  * hwrm_tf_em_move *
51583  *******************/
51584 
51585 
51586 /* hwrm_tf_em_move_input (size:320b/40B) */
51587 struct hwrm_tf_em_move_input {
51588 	/* The HWRM command request type. */
51589 	uint16_t	req_type;
51590 	/*
51591 	 * The completion ring to send the completion event on. This should
51592 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
51593 	 */
51594 	uint16_t	cmpl_ring;
51595 	/*
51596 	 * The sequence ID is used by the driver for tracking multiple
51597 	 * commands. This ID is treated as opaque data by the firmware and
51598 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
51599 	 */
51600 	uint16_t	seq_id;
51601 	/*
51602 	 * The target ID of the command:
51603 	 * * 0x0-0xFFF8 - The function ID
51604 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
51605 	 * * 0xFFFD - Reserved for user-space HWRM interface
51606 	 * * 0xFFFF - HWRM
51607 	 */
51608 	uint16_t	target_id;
51609 	/*
51610 	 * A physical address pointer pointing to a host buffer that the
51611 	 * command's response data will be written. This can be either a host
51612 	 * physical address (HPA) or a guest physical address (GPA) and must
51613 	 * point to a physically contiguous block of memory.
51614 	 */
51615 	uint64_t	resp_addr;
51616 	/* Session Id. */
51617 	uint32_t	fw_session_id;
51618 	/* Control flags. */
51619 	uint16_t	flags;
51620 	/* Indicates the flow direction. */
51621 	#define HWRM_TF_EM_MOVE_INPUT_FLAGS_DIR     UINT32_C(0x1)
51622 	/* If this bit set to 0, then it indicates rx flow. */
51623 	#define HWRM_TF_EM_MOVE_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
51624 	/* If this bit is set to 1, then it indicates tx flow. */
51625 	#define HWRM_TF_EM_MOVE_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
51626 	#define HWRM_TF_EM_MOVE_INPUT_FLAGS_DIR_LAST \
51627 		HWRM_TF_EM_MOVE_INPUT_FLAGS_DIR_TX
51628 	/* Number of EM entry blocks */
51629 	uint16_t	num_blocks;
51630 	/* New index for entry */
51631 	uint32_t	new_index;
51632 	/* Unused */
51633 	uint32_t	unused0;
51634 	/* EM internal flow handle. */
51635 	uint64_t	flow_handle;
51636 } __rte_packed;
51637 
51638 /* hwrm_tf_em_move_output (size:128b/16B) */
51639 struct hwrm_tf_em_move_output {
51640 	/* The specific error status for the command. */
51641 	uint16_t	error_code;
51642 	/* The HWRM command request type. */
51643 	uint16_t	req_type;
51644 	/* The sequence ID from the original command. */
51645 	uint16_t	seq_id;
51646 	/* The length of the response data in number of bytes. */
51647 	uint16_t	resp_len;
51648 	/* Index of old entry. */
51649 	uint16_t	em_index;
51650 	/* unused. */
51651 	uint16_t	unused0[3];
51652 } __rte_packed;
51653 
51654 /********************
51655  * hwrm_tf_tcam_set *
51656  ********************/
51657 
51658 
51659 /* hwrm_tf_tcam_set_input (size:1024b/128B) */
51660 struct hwrm_tf_tcam_set_input {
51661 	/* The HWRM command request type. */
51662 	uint16_t	req_type;
51663 	/*
51664 	 * The completion ring to send the completion event on. This should
51665 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
51666 	 */
51667 	uint16_t	cmpl_ring;
51668 	/*
51669 	 * The sequence ID is used by the driver for tracking multiple
51670 	 * commands. This ID is treated as opaque data by the firmware and
51671 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
51672 	 */
51673 	uint16_t	seq_id;
51674 	/*
51675 	 * The target ID of the command:
51676 	 * * 0x0-0xFFF8 - The function ID
51677 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
51678 	 * * 0xFFFD - Reserved for user-space HWRM interface
51679 	 * * 0xFFFF - HWRM
51680 	 */
51681 	uint16_t	target_id;
51682 	/*
51683 	 * A physical address pointer pointing to a host buffer that the
51684 	 * command's response data will be written. This can be either a host
51685 	 * physical address (HPA) or a guest physical address (GPA) and must
51686 	 * point to a physically contiguous block of memory.
51687 	 */
51688 	uint64_t	resp_addr;
51689 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
51690 	uint32_t	fw_session_id;
51691 	/* Control flags. */
51692 	uint32_t	flags;
51693 	/* Indicates the flow direction. */
51694 	#define HWRM_TF_TCAM_SET_INPUT_FLAGS_DIR     UINT32_C(0x1)
51695 	/* If this bit set to 0, then it indicates rx flow. */
51696 	#define HWRM_TF_TCAM_SET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
51697 	/* If this bit is set to 1, then it indicates tx flow. */
51698 	#define HWRM_TF_TCAM_SET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
51699 	#define HWRM_TF_TCAM_SET_INPUT_FLAGS_DIR_LAST \
51700 		HWRM_TF_TCAM_SET_INPUT_FLAGS_DIR_TX
51701 	/*
51702 	 * Indicate device data is being sent via DMA, the device
51703 	 * data is packing does not change.
51704 	 */
51705 	#define HWRM_TF_TCAM_SET_INPUT_FLAGS_DMA     UINT32_C(0x2)
51706 	/*
51707 	 * TCAM type of the resource, defined globally in the
51708 	 * hwrm_tf_resc_type enum.
51709 	 */
51710 	uint32_t	type;
51711 	/* Index of TCAM entry. */
51712 	uint16_t	idx;
51713 	/* Number of bytes in the TCAM key. */
51714 	uint8_t	key_size;
51715 	/* Number of bytes in the TCAM result. */
51716 	uint8_t	result_size;
51717 	/*
51718 	 * Offset from which the mask bytes start in the device data
51719 	 * array, key offset is always 0.
51720 	 */
51721 	uint8_t	mask_offset;
51722 	/* Offset from which the result bytes start in the device data array. */
51723 	uint8_t	result_offset;
51724 	/* unused. */
51725 	uint8_t	unused0[6];
51726 	/*
51727 	 * TCAM key located at offset 0, mask located at mask_offset
51728 	 * and result at result_offset for the device.
51729 	 */
51730 	uint8_t	dev_data[88];
51731 } __rte_packed;
51732 
51733 /* hwrm_tf_tcam_set_output (size:128b/16B) */
51734 struct hwrm_tf_tcam_set_output {
51735 	/* The specific error status for the command. */
51736 	uint16_t	error_code;
51737 	/* The HWRM command request type. */
51738 	uint16_t	req_type;
51739 	/* The sequence ID from the original command. */
51740 	uint16_t	seq_id;
51741 	/* The length of the response data in number of bytes. */
51742 	uint16_t	resp_len;
51743 	/* unused. */
51744 	uint8_t	unused0[7];
51745 	/*
51746 	 * This field is used in Output records to indicate that the
51747 	 * output is completely written to RAM. This field should be
51748 	 * read as '1' to indicate that the output has been
51749 	 * completely written.  When writing a command completion or
51750 	 * response to an internal processor, the order of writes has
51751 	 * to be such that this field is written last.
51752 	 */
51753 	uint8_t	valid;
51754 } __rte_packed;
51755 
51756 /********************
51757  * hwrm_tf_tcam_get *
51758  ********************/
51759 
51760 
51761 /* hwrm_tf_tcam_get_input (size:256b/32B) */
51762 struct hwrm_tf_tcam_get_input {
51763 	/* The HWRM command request type. */
51764 	uint16_t	req_type;
51765 	/*
51766 	 * The completion ring to send the completion event on. This should
51767 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
51768 	 */
51769 	uint16_t	cmpl_ring;
51770 	/*
51771 	 * The sequence ID is used by the driver for tracking multiple
51772 	 * commands. This ID is treated as opaque data by the firmware and
51773 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
51774 	 */
51775 	uint16_t	seq_id;
51776 	/*
51777 	 * The target ID of the command:
51778 	 * * 0x0-0xFFF8 - The function ID
51779 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
51780 	 * * 0xFFFD - Reserved for user-space HWRM interface
51781 	 * * 0xFFFF - HWRM
51782 	 */
51783 	uint16_t	target_id;
51784 	/*
51785 	 * A physical address pointer pointing to a host buffer that the
51786 	 * command's response data will be written. This can be either a host
51787 	 * physical address (HPA) or a guest physical address (GPA) and must
51788 	 * point to a physically contiguous block of memory.
51789 	 */
51790 	uint64_t	resp_addr;
51791 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
51792 	uint32_t	fw_session_id;
51793 	/* Control flags. */
51794 	uint32_t	flags;
51795 	/* Indicates the flow direction. */
51796 	#define HWRM_TF_TCAM_GET_INPUT_FLAGS_DIR     UINT32_C(0x1)
51797 	/* If this bit set to 0, then it indicates rx flow. */
51798 	#define HWRM_TF_TCAM_GET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
51799 	/* If this bit is set to 1, then it indicates tx flow. */
51800 	#define HWRM_TF_TCAM_GET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
51801 	#define HWRM_TF_TCAM_GET_INPUT_FLAGS_DIR_LAST \
51802 		HWRM_TF_TCAM_GET_INPUT_FLAGS_DIR_TX
51803 	/*
51804 	 * TCAM type of the resource, defined globally in the
51805 	 * hwrm_tf_resc_type enum.
51806 	 */
51807 	uint32_t	type;
51808 	/* Index of a TCAM entry. */
51809 	uint16_t	idx;
51810 	/* unused. */
51811 	uint16_t	unused0;
51812 } __rte_packed;
51813 
51814 /* hwrm_tf_tcam_get_output (size:2368b/296B) */
51815 struct hwrm_tf_tcam_get_output {
51816 	/* The specific error status for the command. */
51817 	uint16_t	error_code;
51818 	/* The HWRM command request type. */
51819 	uint16_t	req_type;
51820 	/* The sequence ID from the original command. */
51821 	uint16_t	seq_id;
51822 	/* The length of the response data in number of bytes. */
51823 	uint16_t	resp_len;
51824 	/* Number of bytes in the TCAM key. */
51825 	uint8_t	key_size;
51826 	/* Number of bytes in the TCAM entry. */
51827 	uint8_t	result_size;
51828 	/* Offset from which the mask bytes start in the device data array. */
51829 	uint8_t	mask_offset;
51830 	/* Offset from which the result bytes start in the device data array. */
51831 	uint8_t	result_offset;
51832 	/* unused. */
51833 	uint8_t	unused0[4];
51834 	/*
51835 	 * TCAM key located at offset 0, mask located at mask_offset
51836 	 * and result at result_offset for the device.
51837 	 */
51838 	uint8_t	dev_data[272];
51839 	/* unused. */
51840 	uint8_t	unused1[7];
51841 	/*
51842 	 * This field is used in Output records to indicate that the
51843 	 * output is completely written to RAM. This field should be
51844 	 * read as '1' to indicate that the output has been
51845 	 * completely written.  When writing a command completion or
51846 	 * response to an internal processor, the order of writes has
51847 	 * to be such that this field is written last.
51848 	 */
51849 	uint8_t	valid;
51850 } __rte_packed;
51851 
51852 /*********************
51853  * hwrm_tf_tcam_move *
51854  *********************/
51855 
51856 
51857 /* hwrm_tf_tcam_move_input (size:1024b/128B) */
51858 struct hwrm_tf_tcam_move_input {
51859 	/* The HWRM command request type. */
51860 	uint16_t	req_type;
51861 	/*
51862 	 * The completion ring to send the completion event on. This should
51863 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
51864 	 */
51865 	uint16_t	cmpl_ring;
51866 	/*
51867 	 * The sequence ID is used by the driver for tracking multiple
51868 	 * commands. This ID is treated as opaque data by the firmware and
51869 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
51870 	 */
51871 	uint16_t	seq_id;
51872 	/*
51873 	 * The target ID of the command:
51874 	 * * 0x0-0xFFF8 - The function ID
51875 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
51876 	 * * 0xFFFD - Reserved for user-space HWRM interface
51877 	 * * 0xFFFF - HWRM
51878 	 */
51879 	uint16_t	target_id;
51880 	/*
51881 	 * A physical address pointer pointing to a host buffer that the
51882 	 * command's response data will be written. This can be either a host
51883 	 * physical address (HPA) or a guest physical address (GPA) and must
51884 	 * point to a physically contiguous block of memory.
51885 	 */
51886 	uint64_t	resp_addr;
51887 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
51888 	uint32_t	fw_session_id;
51889 	/* Control flags. */
51890 	uint32_t	flags;
51891 	/* Indicates the flow direction. */
51892 	#define HWRM_TF_TCAM_MOVE_INPUT_FLAGS_DIR     UINT32_C(0x1)
51893 	/* If this bit set to 0, then it indicates rx flow. */
51894 	#define HWRM_TF_TCAM_MOVE_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
51895 	/* If this bit is set to 1, then it indicates tx flow. */
51896 	#define HWRM_TF_TCAM_MOVE_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
51897 	#define HWRM_TF_TCAM_MOVE_INPUT_FLAGS_DIR_LAST \
51898 		HWRM_TF_TCAM_MOVE_INPUT_FLAGS_DIR_TX
51899 	/*
51900 	 * TCAM type of the resource, defined globally in the
51901 	 * hwrm_tf_resc_type enum.
51902 	 */
51903 	uint32_t	type;
51904 	/* Number of TCAM index pairs to be swapped for the device. */
51905 	uint16_t	count;
51906 	/* unused. */
51907 	uint16_t	unused0;
51908 	/* TCAM index pairs to be swapped for the device. */
51909 	uint16_t	idx_pairs[48];
51910 } __rte_packed;
51911 
51912 /* hwrm_tf_tcam_move_output (size:128b/16B) */
51913 struct hwrm_tf_tcam_move_output {
51914 	/* The specific error status for the command. */
51915 	uint16_t	error_code;
51916 	/* The HWRM command request type. */
51917 	uint16_t	req_type;
51918 	/* The sequence ID from the original command. */
51919 	uint16_t	seq_id;
51920 	/* The length of the response data in number of bytes. */
51921 	uint16_t	resp_len;
51922 	/* unused. */
51923 	uint8_t	unused0[7];
51924 	/*
51925 	 * This field is used in Output records to indicate that the
51926 	 * output is completely written to RAM. This field should be
51927 	 * read as '1' to indicate that the output has been
51928 	 * completely written.  When writing a command completion or
51929 	 * response to an internal processor, the order of writes has
51930 	 * to be such that this field is written last.
51931 	 */
51932 	uint8_t	valid;
51933 } __rte_packed;
51934 
51935 /*********************
51936  * hwrm_tf_tcam_free *
51937  *********************/
51938 
51939 
51940 /* hwrm_tf_tcam_free_input (size:1024b/128B) */
51941 struct hwrm_tf_tcam_free_input {
51942 	/* The HWRM command request type. */
51943 	uint16_t	req_type;
51944 	/*
51945 	 * The completion ring to send the completion event on. This should
51946 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
51947 	 */
51948 	uint16_t	cmpl_ring;
51949 	/*
51950 	 * The sequence ID is used by the driver for tracking multiple
51951 	 * commands. This ID is treated as opaque data by the firmware and
51952 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
51953 	 */
51954 	uint16_t	seq_id;
51955 	/*
51956 	 * The target ID of the command:
51957 	 * * 0x0-0xFFF8 - The function ID
51958 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
51959 	 * * 0xFFFD - Reserved for user-space HWRM interface
51960 	 * * 0xFFFF - HWRM
51961 	 */
51962 	uint16_t	target_id;
51963 	/*
51964 	 * A physical address pointer pointing to a host buffer that the
51965 	 * command's response data will be written. This can be either a host
51966 	 * physical address (HPA) or a guest physical address (GPA) and must
51967 	 * point to a physically contiguous block of memory.
51968 	 */
51969 	uint64_t	resp_addr;
51970 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
51971 	uint32_t	fw_session_id;
51972 	/* Control flags. */
51973 	uint32_t	flags;
51974 	/* Indicates the flow direction. */
51975 	#define HWRM_TF_TCAM_FREE_INPUT_FLAGS_DIR     UINT32_C(0x1)
51976 	/* If this bit set to 0, then it indicates rx flow. */
51977 	#define HWRM_TF_TCAM_FREE_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
51978 	/* If this bit is set to 1, then it indicates tx flow. */
51979 	#define HWRM_TF_TCAM_FREE_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
51980 	#define HWRM_TF_TCAM_FREE_INPUT_FLAGS_DIR_LAST \
51981 		HWRM_TF_TCAM_FREE_INPUT_FLAGS_DIR_TX
51982 	/*
51983 	 * TCAM type of the resource, defined globally in the
51984 	 * hwrm_tf_resc_type enum.
51985 	 */
51986 	uint32_t	type;
51987 	/* Number of TCAM index to be deleted for the device. */
51988 	uint16_t	count;
51989 	/* unused. */
51990 	uint16_t	unused0;
51991 	/* TCAM index list to be deleted for the device. */
51992 	uint16_t	idx_list[48];
51993 } __rte_packed;
51994 
51995 /* hwrm_tf_tcam_free_output (size:128b/16B) */
51996 struct hwrm_tf_tcam_free_output {
51997 	/* The specific error status for the command. */
51998 	uint16_t	error_code;
51999 	/* The HWRM command request type. */
52000 	uint16_t	req_type;
52001 	/* The sequence ID from the original command. */
52002 	uint16_t	seq_id;
52003 	/* The length of the response data in number of bytes. */
52004 	uint16_t	resp_len;
52005 	/* unused. */
52006 	uint8_t	unused0[7];
52007 	/*
52008 	 * This field is used in Output records to indicate that the
52009 	 * output is completely written to RAM. This field should be
52010 	 * read as '1' to indicate that the output has been
52011 	 * completely written.  When writing a command completion or
52012 	 * response to an internal processor, the order of writes has
52013 	 * to be such that this field is written last.
52014 	 */
52015 	uint8_t	valid;
52016 } __rte_packed;
52017 
52018 /**************************
52019  * hwrm_tf_global_cfg_set *
52020  **************************/
52021 
52022 
52023 /* hwrm_tf_global_cfg_set_input (size:448b/56B) */
52024 struct hwrm_tf_global_cfg_set_input {
52025 	/* The HWRM command request type. */
52026 	uint16_t	req_type;
52027 	/*
52028 	 * The completion ring to send the completion event on. This should
52029 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
52030 	 */
52031 	uint16_t	cmpl_ring;
52032 	/*
52033 	 * The sequence ID is used by the driver for tracking multiple
52034 	 * commands. This ID is treated as opaque data by the firmware and
52035 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
52036 	 */
52037 	uint16_t	seq_id;
52038 	/*
52039 	 * The target ID of the command:
52040 	 * * 0x0-0xFFF8 - The function ID
52041 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
52042 	 * * 0xFFFD - Reserved for user-space HWRM interface
52043 	 * * 0xFFFF - HWRM
52044 	 */
52045 	uint16_t	target_id;
52046 	/*
52047 	 * A physical address pointer pointing to a host buffer that the
52048 	 * command's response data will be written. This can be either a host
52049 	 * physical address (HPA) or a guest physical address (GPA) and must
52050 	 * point to a physically contiguous block of memory.
52051 	 */
52052 	uint64_t	resp_addr;
52053 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
52054 	uint32_t	fw_session_id;
52055 	/* Control flags. */
52056 	uint32_t	flags;
52057 	/* Indicates the flow direction. */
52058 	#define HWRM_TF_GLOBAL_CFG_SET_INPUT_FLAGS_DIR     UINT32_C(0x1)
52059 	/* If this bit set to 0, then it indicates rx flow. */
52060 	#define HWRM_TF_GLOBAL_CFG_SET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
52061 	/* If this bit is set to 1, then it indicates tx flow. */
52062 	#define HWRM_TF_GLOBAL_CFG_SET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
52063 	#define HWRM_TF_GLOBAL_CFG_SET_INPUT_FLAGS_DIR_LAST \
52064 		HWRM_TF_GLOBAL_CFG_SET_INPUT_FLAGS_DIR_TX
52065 	/* Global Cfg type */
52066 	uint32_t	type;
52067 	/* Offset of the type */
52068 	uint32_t	offset;
52069 	/* Size of the data to set in bytes */
52070 	uint16_t	size;
52071 	/* unused. */
52072 	uint8_t	unused0[6];
52073 	/* Data to set */
52074 	uint8_t	data[8];
52075 	/* Mask of data to set, 0 indicates no mask */
52076 	uint8_t	mask[8];
52077 } __rte_packed;
52078 
52079 /* hwrm_tf_global_cfg_set_output (size:128b/16B) */
52080 struct hwrm_tf_global_cfg_set_output {
52081 	/* The specific error status for the command. */
52082 	uint16_t	error_code;
52083 	/* The HWRM command request type. */
52084 	uint16_t	req_type;
52085 	/* The sequence ID from the original command. */
52086 	uint16_t	seq_id;
52087 	/* The length of the response data in number of bytes. */
52088 	uint16_t	resp_len;
52089 	/* unused. */
52090 	uint8_t	unused0[7];
52091 	/*
52092 	 * This field is used in Output records to indicate that the
52093 	 * output is completely written to RAM. This field should be
52094 	 * read as '1' to indicate that the output has been
52095 	 * completely written.  When writing a command completion or
52096 	 * response to an internal processor, the order of writes has
52097 	 * to be such that this field is written last.
52098 	 */
52099 	uint8_t	valid;
52100 } __rte_packed;
52101 
52102 /**************************
52103  * hwrm_tf_global_cfg_get *
52104  **************************/
52105 
52106 
52107 /* hwrm_tf_global_cfg_get_input (size:320b/40B) */
52108 struct hwrm_tf_global_cfg_get_input {
52109 	/* The HWRM command request type. */
52110 	uint16_t	req_type;
52111 	/*
52112 	 * The completion ring to send the completion event on. This should
52113 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
52114 	 */
52115 	uint16_t	cmpl_ring;
52116 	/*
52117 	 * The sequence ID is used by the driver for tracking multiple
52118 	 * commands. This ID is treated as opaque data by the firmware and
52119 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
52120 	 */
52121 	uint16_t	seq_id;
52122 	/*
52123 	 * The target ID of the command:
52124 	 * * 0x0-0xFFF8 - The function ID
52125 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
52126 	 * * 0xFFFD - Reserved for user-space HWRM interface
52127 	 * * 0xFFFF - HWRM
52128 	 */
52129 	uint16_t	target_id;
52130 	/*
52131 	 * A physical address pointer pointing to a host buffer that the
52132 	 * command's response data will be written. This can be either a host
52133 	 * physical address (HPA) or a guest physical address (GPA) and must
52134 	 * point to a physically contiguous block of memory.
52135 	 */
52136 	uint64_t	resp_addr;
52137 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
52138 	uint32_t	fw_session_id;
52139 	/* Control flags. */
52140 	uint32_t	flags;
52141 	/* Indicates the flow direction. */
52142 	#define HWRM_TF_GLOBAL_CFG_GET_INPUT_FLAGS_DIR     UINT32_C(0x1)
52143 	/* If this bit set to 0, then it indicates rx flow. */
52144 	#define HWRM_TF_GLOBAL_CFG_GET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
52145 	/* If this bit is set to 1, then it indicates tx flow. */
52146 	#define HWRM_TF_GLOBAL_CFG_GET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
52147 	#define HWRM_TF_GLOBAL_CFG_GET_INPUT_FLAGS_DIR_LAST \
52148 		HWRM_TF_GLOBAL_CFG_GET_INPUT_FLAGS_DIR_TX
52149 	/* Global Cfg type */
52150 	uint32_t	type;
52151 	/* Offset of the type */
52152 	uint32_t	offset;
52153 	/* Size of the data to set in bytes */
52154 	uint16_t	size;
52155 	/* unused. */
52156 	uint8_t	unused0[6];
52157 } __rte_packed;
52158 
52159 /* hwrm_tf_global_cfg_get_output (size:256b/32B) */
52160 struct hwrm_tf_global_cfg_get_output {
52161 	/* The specific error status for the command. */
52162 	uint16_t	error_code;
52163 	/* The HWRM command request type. */
52164 	uint16_t	req_type;
52165 	/* The sequence ID from the original command. */
52166 	uint16_t	seq_id;
52167 	/* The length of the response data in number of bytes. */
52168 	uint16_t	resp_len;
52169 	/* Size of the data read in bytes */
52170 	uint16_t	size;
52171 	/* unused. */
52172 	uint8_t	unused0[6];
52173 	/* Data to set */
52174 	uint8_t	data[16];
52175 } __rte_packed;
52176 
52177 /**********************
52178  * hwrm_tf_if_tbl_get *
52179  **********************/
52180 
52181 
52182 /* hwrm_tf_if_tbl_get_input (size:256b/32B) */
52183 struct hwrm_tf_if_tbl_get_input {
52184 	/* The HWRM command request type. */
52185 	uint16_t	req_type;
52186 	/*
52187 	 * The completion ring to send the completion event on. This should
52188 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
52189 	 */
52190 	uint16_t	cmpl_ring;
52191 	/*
52192 	 * The sequence ID is used by the driver for tracking multiple
52193 	 * commands. This ID is treated as opaque data by the firmware and
52194 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
52195 	 */
52196 	uint16_t	seq_id;
52197 	/*
52198 	 * The target ID of the command:
52199 	 * * 0x0-0xFFF8 - The function ID
52200 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
52201 	 * * 0xFFFD - Reserved for user-space HWRM interface
52202 	 * * 0xFFFF - HWRM
52203 	 */
52204 	uint16_t	target_id;
52205 	/*
52206 	 * A physical address pointer pointing to a host buffer that the
52207 	 * command's response data will be written. This can be either a host
52208 	 * physical address (HPA) or a guest physical address (GPA) and must
52209 	 * point to a physically contiguous block of memory.
52210 	 */
52211 	uint64_t	resp_addr;
52212 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
52213 	uint32_t	fw_session_id;
52214 	/* Control flags. */
52215 	uint16_t	flags;
52216 	/* Indicates the flow direction. */
52217 	#define HWRM_TF_IF_TBL_GET_INPUT_FLAGS_DIR     UINT32_C(0x1)
52218 	/* If this bit set to 0, then it indicates rx flow. */
52219 	#define HWRM_TF_IF_TBL_GET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
52220 	/* If this bit is set to 1, then it indicates tx flow. */
52221 	#define HWRM_TF_IF_TBL_GET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
52222 	#define HWRM_TF_IF_TBL_GET_INPUT_FLAGS_DIR_LAST \
52223 		HWRM_TF_IF_TBL_GET_INPUT_FLAGS_DIR_TX
52224 	/* Size of the data to set. */
52225 	uint16_t	size;
52226 	/*
52227 	 * Type of the resource, defined globally in the
52228 	 * hwrm_tf_resc_type enum.
52229 	 */
52230 	uint32_t	type;
52231 	/* Index of the type to retrieve. */
52232 	uint32_t	index;
52233 } __rte_packed;
52234 
52235 /* hwrm_tf_if_tbl_get_output (size:1216b/152B) */
52236 struct hwrm_tf_if_tbl_get_output {
52237 	/* The specific error status for the command. */
52238 	uint16_t	error_code;
52239 	/* The HWRM command request type. */
52240 	uint16_t	req_type;
52241 	/* The sequence ID from the original command. */
52242 	uint16_t	seq_id;
52243 	/* The length of the response data in number of bytes. */
52244 	uint16_t	resp_len;
52245 	/* Response code. */
52246 	uint32_t	resp_code;
52247 	/* Response size. */
52248 	uint16_t	size;
52249 	/* unused */
52250 	uint16_t	unused0;
52251 	/* Response data. */
52252 	uint8_t	data[128];
52253 	/* unused */
52254 	uint8_t	unused1[7];
52255 	/*
52256 	 * This field is used in Output records to indicate that the output
52257 	 * is completely written to RAM. This field should be read as '1'
52258 	 * to indicate that the output has been completely written.
52259 	 * When writing a command completion or response to an internal
52260 	 * processor, the order of writes has to be such that this field
52261 	 * is written last.
52262 	 */
52263 	uint8_t	valid;
52264 } __rte_packed;
52265 
52266 /***************************
52267  * hwrm_tf_if_tbl_type_set *
52268  ***************************/
52269 
52270 
52271 /* hwrm_tf_if_tbl_set_input (size:1024b/128B) */
52272 struct hwrm_tf_if_tbl_set_input {
52273 	/* The HWRM command request type. */
52274 	uint16_t	req_type;
52275 	/*
52276 	 * The completion ring to send the completion event on. This should
52277 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
52278 	 */
52279 	uint16_t	cmpl_ring;
52280 	/*
52281 	 * The sequence ID is used by the driver for tracking multiple
52282 	 * commands. This ID is treated as opaque data by the firmware and
52283 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
52284 	 */
52285 	uint16_t	seq_id;
52286 	/*
52287 	 * The target ID of the command:
52288 	 * * 0x0-0xFFF8 - The function ID
52289 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
52290 	 * * 0xFFFD - Reserved for user-space HWRM interface
52291 	 * * 0xFFFF - HWRM
52292 	 */
52293 	uint16_t	target_id;
52294 	/*
52295 	 * A physical address pointer pointing to a host buffer that the
52296 	 * command's response data will be written. This can be either a host
52297 	 * physical address (HPA) or a guest physical address (GPA) and must
52298 	 * point to a physically contiguous block of memory.
52299 	 */
52300 	uint64_t	resp_addr;
52301 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
52302 	uint32_t	fw_session_id;
52303 	/* Control flags. */
52304 	uint16_t	flags;
52305 	/* Indicates the flow direction. */
52306 	#define HWRM_TF_IF_TBL_SET_INPUT_FLAGS_DIR     UINT32_C(0x1)
52307 	/* If this bit set to 0, then it indicates rx flow. */
52308 	#define HWRM_TF_IF_TBL_SET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
52309 	/* If this bit is set to 1, then it indicates tx flow. */
52310 	#define HWRM_TF_IF_TBL_SET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
52311 	#define HWRM_TF_IF_TBL_SET_INPUT_FLAGS_DIR_LAST \
52312 		HWRM_TF_IF_TBL_SET_INPUT_FLAGS_DIR_TX
52313 	/* unused. */
52314 	uint8_t	unused0[2];
52315 	/*
52316 	 * Type of the resource, defined globally in the
52317 	 * hwrm_tf_resc_type enum.
52318 	 */
52319 	uint32_t	type;
52320 	/* Index of the type to set. */
52321 	uint32_t	index;
52322 	/* Size of the data to set. */
52323 	uint16_t	size;
52324 	/* unused */
52325 	uint8_t	unused1[6];
52326 	/* Data to be set. */
52327 	uint8_t	data[88];
52328 } __rte_packed;
52329 
52330 /* hwrm_tf_if_tbl_set_output (size:128b/16B) */
52331 struct hwrm_tf_if_tbl_set_output {
52332 	/* The specific error status for the command. */
52333 	uint16_t	error_code;
52334 	/* The HWRM command request type. */
52335 	uint16_t	req_type;
52336 	/* The sequence ID from the original command. */
52337 	uint16_t	seq_id;
52338 	/* The length of the response data in number of bytes. */
52339 	uint16_t	resp_len;
52340 	/* unused. */
52341 	uint8_t	unused0[7];
52342 	/*
52343 	 * This field is used in Output records to indicate that the output
52344 	 * is completely written to RAM. This field should be read as '1'
52345 	 * to indicate that the output has been completely written.
52346 	 * When writing a command completion or response to an internal
52347 	 * processor, the order of writes has to be such that this field
52348 	 * is written last.
52349 	 */
52350 	uint8_t	valid;
52351 } __rte_packed;
52352 
52353 /*****************************
52354  * hwrm_tf_tbl_type_bulk_get *
52355  *****************************/
52356 
52357 
52358 /* hwrm_tf_tbl_type_bulk_get_input (size:384b/48B) */
52359 struct hwrm_tf_tbl_type_bulk_get_input {
52360 	/* The HWRM command request type. */
52361 	uint16_t	req_type;
52362 	/*
52363 	 * The completion ring to send the completion event on. This should
52364 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
52365 	 */
52366 	uint16_t	cmpl_ring;
52367 	/*
52368 	 * The sequence ID is used by the driver for tracking multiple
52369 	 * commands. This ID is treated as opaque data by the firmware and
52370 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
52371 	 */
52372 	uint16_t	seq_id;
52373 	/*
52374 	 * The target ID of the command:
52375 	 * * 0x0-0xFFF8 - The function ID
52376 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
52377 	 * * 0xFFFD - Reserved for user-space HWRM interface
52378 	 * * 0xFFFF - HWRM
52379 	 */
52380 	uint16_t	target_id;
52381 	/*
52382 	 * A physical address pointer pointing to a host buffer that the
52383 	 * command's response data will be written. This can be either a host
52384 	 * physical address (HPA) or a guest physical address (GPA) and must
52385 	 * point to a physically contiguous block of memory.
52386 	 */
52387 	uint64_t	resp_addr;
52388 	/* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
52389 	uint32_t	fw_session_id;
52390 	/* Control flags. */
52391 	uint16_t	flags;
52392 	/* Indicates the flow direction. */
52393 	#define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR \
52394 		UINT32_C(0x1)
52395 	/* If this bit set to 0, then it indicates rx flow. */
52396 	#define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_RX \
52397 		UINT32_C(0x0)
52398 	/* If this bit is set to 1, then it indicates tx flow. */
52399 	#define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_TX \
52400 		UINT32_C(0x1)
52401 	#define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_LAST \
52402 		HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_TX
52403 	/*
52404 	 * When set use the special access register access to clear
52405 	 * the table entries on read.
52406 	 */
52407 	#define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_CLEAR_ON_READ \
52408 		UINT32_C(0x2)
52409 	/* unused. */
52410 	uint8_t	unused0[2];
52411 	/*
52412 	 * Type of the resource, defined globally in the
52413 	 * hwrm_tf_resc_type enum.
52414 	 */
52415 	uint32_t	type;
52416 	/* Starting index of the type to retrieve. */
52417 	uint32_t	start_index;
52418 	/* Number of entries to retrieve. */
52419 	uint32_t	num_entries;
52420 	/* Number of entries to retrieve. */
52421 	uint32_t	unused1;
52422 	/* Host memory where data will be stored. */
52423 	uint64_t	host_addr;
52424 } __rte_packed;
52425 
52426 /* hwrm_tf_tbl_type_bulk_get_output (size:128b/16B) */
52427 struct hwrm_tf_tbl_type_bulk_get_output {
52428 	/* The specific error status for the command. */
52429 	uint16_t	error_code;
52430 	/* The HWRM command request type. */
52431 	uint16_t	req_type;
52432 	/* The sequence ID from the original command. */
52433 	uint16_t	seq_id;
52434 	/* The length of the response data in number of bytes. */
52435 	uint16_t	resp_len;
52436 	/* Response code. */
52437 	uint32_t	resp_code;
52438 	/* Response size. */
52439 	uint16_t	size;
52440 	/* unused */
52441 	uint8_t	unused0;
52442 	/*
52443 	 * This field is used in Output records to indicate that the output
52444 	 * is completely written to RAM. This field should be read as '1'
52445 	 * to indicate that the output has been completely written.
52446 	 * When writing a command completion or response to an internal
52447 	 * processor, the order of writes has to be such that this field
52448 	 * is written last.
52449 	 */
52450 	uint8_t	valid;
52451 } __rte_packed;
52452 
52453 /******************************
52454  * hwrm_tunnel_dst_port_query *
52455  ******************************/
52456 
52457 
52458 /* hwrm_tunnel_dst_port_query_input (size:192b/24B) */
52459 struct hwrm_tunnel_dst_port_query_input {
52460 	/* The HWRM command request type. */
52461 	uint16_t	req_type;
52462 	/*
52463 	 * The completion ring to send the completion event on. This should
52464 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
52465 	 */
52466 	uint16_t	cmpl_ring;
52467 	/*
52468 	 * The sequence ID is used by the driver for tracking multiple
52469 	 * commands. This ID is treated as opaque data by the firmware and
52470 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
52471 	 */
52472 	uint16_t	seq_id;
52473 	/*
52474 	 * The target ID of the command:
52475 	 * * 0x0-0xFFF8 - The function ID
52476 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
52477 	 * * 0xFFFD - Reserved for user-space HWRM interface
52478 	 * * 0xFFFF - HWRM
52479 	 */
52480 	uint16_t	target_id;
52481 	/*
52482 	 * A physical address pointer pointing to a host buffer that the
52483 	 * command's response data will be written. This can be either a host
52484 	 * physical address (HPA) or a guest physical address (GPA) and must
52485 	 * point to a physically contiguous block of memory.
52486 	 */
52487 	uint64_t	resp_addr;
52488 	/* Tunnel Type. */
52489 	uint8_t	tunnel_type;
52490 	/* Virtual eXtensible Local Area Network (VXLAN) */
52491 	#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN \
52492 		UINT32_C(0x1)
52493 	/* Generic Network Virtualization Encapsulation (Geneve) */
52494 	#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_GENEVE \
52495 		UINT32_C(0x5)
52496 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
52497 	#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN_V4 \
52498 		UINT32_C(0x9)
52499 	/* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
52500 	#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_IPGRE_V1 \
52501 		UINT32_C(0xa)
52502 	/* Use fixed layer 2 ether type of 0xFFFF */
52503 	#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_L2_ETYPE \
52504 		UINT32_C(0xb)
52505 	/* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
52506 	#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
52507 		UINT32_C(0xc)
52508 	#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_LAST \
52509 		HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6
52510 	uint8_t	unused_0[7];
52511 } __rte_packed;
52512 
52513 /* hwrm_tunnel_dst_port_query_output (size:128b/16B) */
52514 struct hwrm_tunnel_dst_port_query_output {
52515 	/* The specific error status for the command. */
52516 	uint16_t	error_code;
52517 	/* The HWRM command request type. */
52518 	uint16_t	req_type;
52519 	/* The sequence ID from the original command. */
52520 	uint16_t	seq_id;
52521 	/* The length of the response data in number of bytes. */
52522 	uint16_t	resp_len;
52523 	/*
52524 	 * This field represents the identifier of L4 destination port
52525 	 * used for the given tunnel type. This field is valid for
52526 	 * specific tunnel types that use layer 4 (e.g. UDP)
52527 	 * transports for tunneling.
52528 	 */
52529 	uint16_t	tunnel_dst_port_id;
52530 	/*
52531 	 * This field represents the value of L4 destination port
52532 	 * identified by tunnel_dst_port_id. This field is valid for
52533 	 * specific tunnel types that use layer 4 (e.g. UDP)
52534 	 * transports for tunneling.
52535 	 * This field is in network byte order.
52536 	 *
52537 	 * A value of 0 means that the destination port is not
52538 	 * configured.
52539 	 */
52540 	uint16_t	tunnel_dst_port_val;
52541 	uint8_t	unused_0[3];
52542 	/*
52543 	 * This field is used in Output records to indicate that the output
52544 	 * is completely written to RAM.  This field should be read as '1'
52545 	 * to indicate that the output has been completely written.
52546 	 * When writing a command completion or response to an internal processor,
52547 	 * the order of writes has to be such that this field is written last.
52548 	 */
52549 	uint8_t	valid;
52550 } __rte_packed;
52551 
52552 /******************************
52553  * hwrm_tunnel_dst_port_alloc *
52554  ******************************/
52555 
52556 
52557 /* hwrm_tunnel_dst_port_alloc_input (size:192b/24B) */
52558 struct hwrm_tunnel_dst_port_alloc_input {
52559 	/* The HWRM command request type. */
52560 	uint16_t	req_type;
52561 	/*
52562 	 * The completion ring to send the completion event on. This should
52563 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
52564 	 */
52565 	uint16_t	cmpl_ring;
52566 	/*
52567 	 * The sequence ID is used by the driver for tracking multiple
52568 	 * commands. This ID is treated as opaque data by the firmware and
52569 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
52570 	 */
52571 	uint16_t	seq_id;
52572 	/*
52573 	 * The target ID of the command:
52574 	 * * 0x0-0xFFF8 - The function ID
52575 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
52576 	 * * 0xFFFD - Reserved for user-space HWRM interface
52577 	 * * 0xFFFF - HWRM
52578 	 */
52579 	uint16_t	target_id;
52580 	/*
52581 	 * A physical address pointer pointing to a host buffer that the
52582 	 * command's response data will be written. This can be either a host
52583 	 * physical address (HPA) or a guest physical address (GPA) and must
52584 	 * point to a physically contiguous block of memory.
52585 	 */
52586 	uint64_t	resp_addr;
52587 	/* Tunnel Type. */
52588 	uint8_t	tunnel_type;
52589 	/* Virtual eXtensible Local Area Network (VXLAN) */
52590 	#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
52591 		UINT32_C(0x1)
52592 	/* Generic Network Virtualization Encapsulation (Geneve) */
52593 	#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
52594 		UINT32_C(0x5)
52595 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
52596 	#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
52597 		UINT32_C(0x9)
52598 	/* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
52599 	#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
52600 		UINT32_C(0xa)
52601 	/* Use fixed layer 2 ether type of 0xFFFF */
52602 	#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
52603 		UINT32_C(0xb)
52604 	/* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
52605 	#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
52606 		UINT32_C(0xc)
52607 	#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_LAST \
52608 		HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6
52609 	uint8_t	unused_0;
52610 	/*
52611 	 * This field represents the value of L4 destination port used
52612 	 * for the given tunnel type. This field is valid for
52613 	 * specific tunnel types that use layer 4 (e.g. UDP)
52614 	 * transports for tunneling.
52615 	 *
52616 	 * This field is in network byte order.
52617 	 *
52618 	 * A value of 0 shall fail the command.
52619 	 */
52620 	uint16_t	tunnel_dst_port_val;
52621 	uint8_t	unused_1[4];
52622 } __rte_packed;
52623 
52624 /* hwrm_tunnel_dst_port_alloc_output (size:128b/16B) */
52625 struct hwrm_tunnel_dst_port_alloc_output {
52626 	/* The specific error status for the command. */
52627 	uint16_t	error_code;
52628 	/* The HWRM command request type. */
52629 	uint16_t	req_type;
52630 	/* The sequence ID from the original command. */
52631 	uint16_t	seq_id;
52632 	/* The length of the response data in number of bytes. */
52633 	uint16_t	resp_len;
52634 	/*
52635 	 * Identifier of a tunnel L4 destination port value. Only applies to tunnel
52636 	 * types that has l4 destination port parameters.
52637 	 */
52638 	uint16_t	tunnel_dst_port_id;
52639 	uint8_t	unused_0[5];
52640 	/*
52641 	 * This field is used in Output records to indicate that the output
52642 	 * is completely written to RAM.  This field should be read as '1'
52643 	 * to indicate that the output has been completely written.
52644 	 * When writing a command completion or response to an internal processor,
52645 	 * the order of writes has to be such that this field is written last.
52646 	 */
52647 	uint8_t	valid;
52648 } __rte_packed;
52649 
52650 /*****************************
52651  * hwrm_tunnel_dst_port_free *
52652  *****************************/
52653 
52654 
52655 /* hwrm_tunnel_dst_port_free_input (size:192b/24B) */
52656 struct hwrm_tunnel_dst_port_free_input {
52657 	/* The HWRM command request type. */
52658 	uint16_t	req_type;
52659 	/*
52660 	 * The completion ring to send the completion event on. This should
52661 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
52662 	 */
52663 	uint16_t	cmpl_ring;
52664 	/*
52665 	 * The sequence ID is used by the driver for tracking multiple
52666 	 * commands. This ID is treated as opaque data by the firmware and
52667 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
52668 	 */
52669 	uint16_t	seq_id;
52670 	/*
52671 	 * The target ID of the command:
52672 	 * * 0x0-0xFFF8 - The function ID
52673 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
52674 	 * * 0xFFFD - Reserved for user-space HWRM interface
52675 	 * * 0xFFFF - HWRM
52676 	 */
52677 	uint16_t	target_id;
52678 	/*
52679 	 * A physical address pointer pointing to a host buffer that the
52680 	 * command's response data will be written. This can be either a host
52681 	 * physical address (HPA) or a guest physical address (GPA) and must
52682 	 * point to a physically contiguous block of memory.
52683 	 */
52684 	uint64_t	resp_addr;
52685 	/* Tunnel Type. */
52686 	uint8_t	tunnel_type;
52687 	/* Virtual eXtensible Local Area Network (VXLAN) */
52688 	#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN \
52689 		UINT32_C(0x1)
52690 	/* Generic Network Virtualization Encapsulation (Geneve) */
52691 	#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_GENEVE \
52692 		UINT32_C(0x5)
52693 	/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
52694 	#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN_V4 \
52695 		UINT32_C(0x9)
52696 	/* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
52697 	#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_IPGRE_V1 \
52698 		UINT32_C(0xa)
52699 	/* Use fixed layer 2 ether type of 0xFFFF */
52700 	#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_L2_ETYPE \
52701 		UINT32_C(0xb)
52702 	/* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
52703 	#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
52704 		UINT32_C(0xc)
52705 	#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_LAST \
52706 		HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6
52707 	uint8_t	unused_0;
52708 	/*
52709 	 * Identifier of a tunnel L4 destination port value. Only applies to tunnel
52710 	 * types that has l4 destination port parameters.
52711 	 */
52712 	uint16_t	tunnel_dst_port_id;
52713 	uint8_t	unused_1[4];
52714 } __rte_packed;
52715 
52716 /* hwrm_tunnel_dst_port_free_output (size:128b/16B) */
52717 struct hwrm_tunnel_dst_port_free_output {
52718 	/* The specific error status for the command. */
52719 	uint16_t	error_code;
52720 	/* The HWRM command request type. */
52721 	uint16_t	req_type;
52722 	/* The sequence ID from the original command. */
52723 	uint16_t	seq_id;
52724 	/* The length of the response data in number of bytes. */
52725 	uint16_t	resp_len;
52726 	uint8_t	unused_1[7];
52727 	/*
52728 	 * This field is used in Output records to indicate that the output
52729 	 * is completely written to RAM.  This field should be read as '1'
52730 	 * to indicate that the output has been completely written.
52731 	 * When writing a command completion or response to an internal processor,
52732 	 * the order of writes has to be such that this field is written last.
52733 	 */
52734 	uint8_t	valid;
52735 } __rte_packed;
52736 
52737 /* Periodic statistics context DMA to host. */
52738 /* ctx_hw_stats (size:1280b/160B) */
52739 struct ctx_hw_stats {
52740 	/* Number of received unicast packets */
52741 	uint64_t	rx_ucast_pkts;
52742 	/* Number of received multicast packets */
52743 	uint64_t	rx_mcast_pkts;
52744 	/* Number of received broadcast packets */
52745 	uint64_t	rx_bcast_pkts;
52746 	/* Number of discarded packets on receive path */
52747 	uint64_t	rx_discard_pkts;
52748 	/* Number of packets on receive path with error */
52749 	uint64_t	rx_error_pkts;
52750 	/* Number of received bytes for unicast traffic */
52751 	uint64_t	rx_ucast_bytes;
52752 	/* Number of received bytes for multicast traffic */
52753 	uint64_t	rx_mcast_bytes;
52754 	/* Number of received bytes for broadcast traffic */
52755 	uint64_t	rx_bcast_bytes;
52756 	/* Number of transmitted unicast packets */
52757 	uint64_t	tx_ucast_pkts;
52758 	/* Number of transmitted multicast packets */
52759 	uint64_t	tx_mcast_pkts;
52760 	/* Number of transmitted broadcast packets */
52761 	uint64_t	tx_bcast_pkts;
52762 	/* Number of packets on transmit path with error */
52763 	uint64_t	tx_error_pkts;
52764 	/* Number of discarded packets on transmit path */
52765 	uint64_t	tx_discard_pkts;
52766 	/* Number of transmitted bytes for unicast traffic */
52767 	uint64_t	tx_ucast_bytes;
52768 	/* Number of transmitted bytes for multicast traffic */
52769 	uint64_t	tx_mcast_bytes;
52770 	/* Number of transmitted bytes for broadcast traffic */
52771 	uint64_t	tx_bcast_bytes;
52772 	/* Number of TPA packets */
52773 	uint64_t	tpa_pkts;
52774 	/* Number of TPA bytes */
52775 	uint64_t	tpa_bytes;
52776 	/* Number of TPA events */
52777 	uint64_t	tpa_events;
52778 	/* Number of TPA aborts */
52779 	uint64_t	tpa_aborts;
52780 } __rte_packed;
52781 
52782 /*
52783  * Extended periodic statistics context DMA to host. On cards that
52784  * support TPA v2, additional TPA related stats exist and can be retrieved
52785  * by DMA of ctx_hw_stats_ext, rather than legacy ctx_hw_stats structure.
52786  */
52787 /* ctx_hw_stats_ext (size:1408b/176B) */
52788 struct ctx_hw_stats_ext {
52789 	/* Number of received unicast packets */
52790 	uint64_t	rx_ucast_pkts;
52791 	/* Number of received multicast packets */
52792 	uint64_t	rx_mcast_pkts;
52793 	/* Number of received broadcast packets */
52794 	uint64_t	rx_bcast_pkts;
52795 	/* Number of discarded packets on receive path */
52796 	uint64_t	rx_discard_pkts;
52797 	/* Number of packets on receive path with error */
52798 	uint64_t	rx_error_pkts;
52799 	/* Number of received bytes for unicast traffic */
52800 	uint64_t	rx_ucast_bytes;
52801 	/* Number of received bytes for multicast traffic */
52802 	uint64_t	rx_mcast_bytes;
52803 	/* Number of received bytes for broadcast traffic */
52804 	uint64_t	rx_bcast_bytes;
52805 	/* Number of transmitted unicast packets */
52806 	uint64_t	tx_ucast_pkts;
52807 	/* Number of transmitted multicast packets */
52808 	uint64_t	tx_mcast_pkts;
52809 	/* Number of transmitted broadcast packets */
52810 	uint64_t	tx_bcast_pkts;
52811 	/* Number of packets on transmit path with error */
52812 	uint64_t	tx_error_pkts;
52813 	/* Number of discarded packets on transmit path */
52814 	uint64_t	tx_discard_pkts;
52815 	/* Number of transmitted bytes for unicast traffic */
52816 	uint64_t	tx_ucast_bytes;
52817 	/* Number of transmitted bytes for multicast traffic */
52818 	uint64_t	tx_mcast_bytes;
52819 	/* Number of transmitted bytes for broadcast traffic */
52820 	uint64_t	tx_bcast_bytes;
52821 	/* Number of TPA eligible packets */
52822 	uint64_t	rx_tpa_eligible_pkt;
52823 	/* Number of TPA eligible bytes */
52824 	uint64_t	rx_tpa_eligible_bytes;
52825 	/* Number of TPA packets */
52826 	uint64_t	rx_tpa_pkt;
52827 	/* Number of TPA bytes */
52828 	uint64_t	rx_tpa_bytes;
52829 	/* Number of TPA errors */
52830 	uint64_t	rx_tpa_errors;
52831 	/* Number of TPA events */
52832 	uint64_t	rx_tpa_events;
52833 } __rte_packed;
52834 
52835 /* Periodic Engine statistics context DMA to host. */
52836 /* ctx_eng_stats (size:512b/64B) */
52837 struct ctx_eng_stats {
52838 	/*
52839 	 * Count of data bytes into the Engine.
52840 	 * This includes any user supplied prefix,
52841 	 * but does not include any predefined
52842 	 * prefix data.
52843 	 */
52844 	uint64_t	eng_bytes_in;
52845 	/* Count of data bytes out of the Engine. */
52846 	uint64_t	eng_bytes_out;
52847 	/*
52848 	 * Count, in 4-byte (dword) units, of bytes
52849 	 * that are input as auxiliary data.
52850 	 * This includes the aux_cmd data.
52851 	 */
52852 	uint64_t	aux_bytes_in;
52853 	/*
52854 	 * Count, in 4-byte (dword) units, of bytes
52855 	 * that are output as auxiliary data.
52856 	 * This count is the buffer space for aux_data
52857 	 * output provided in the RQE, not the actual
52858 	 * aux_data written
52859 	 */
52860 	uint64_t	aux_bytes_out;
52861 	/* Count of number of commands executed. */
52862 	uint64_t	commands;
52863 	/*
52864 	 * Count of number of error commands.
52865 	 * These are the commands with a
52866 	 * non-zero status value.
52867 	 */
52868 	uint64_t	error_commands;
52869 	/*
52870 	 * Compression/Encryption Engine usage,
52871 	 * the unit is count of clock cycles
52872 	 */
52873 	uint64_t	cce_engine_usage;
52874 	/*
52875 	 * De-Compression/De-cryption Engine usage,
52876 	 * the unit is count of clock cycles
52877 	 */
52878 	uint64_t	cdd_engine_usage;
52879 } __rte_packed;
52880 
52881 /***********************
52882  * hwrm_stat_ctx_alloc *
52883  ***********************/
52884 
52885 
52886 /* hwrm_stat_ctx_alloc_input (size:256b/32B) */
52887 struct hwrm_stat_ctx_alloc_input {
52888 	/* The HWRM command request type. */
52889 	uint16_t	req_type;
52890 	/*
52891 	 * The completion ring to send the completion event on. This should
52892 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
52893 	 */
52894 	uint16_t	cmpl_ring;
52895 	/*
52896 	 * The sequence ID is used by the driver for tracking multiple
52897 	 * commands. This ID is treated as opaque data by the firmware and
52898 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
52899 	 */
52900 	uint16_t	seq_id;
52901 	/*
52902 	 * The target ID of the command:
52903 	 * * 0x0-0xFFF8 - The function ID
52904 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
52905 	 * * 0xFFFD - Reserved for user-space HWRM interface
52906 	 * * 0xFFFF - HWRM
52907 	 */
52908 	uint16_t	target_id;
52909 	/*
52910 	 * A physical address pointer pointing to a host buffer that the
52911 	 * command's response data will be written. This can be either a host
52912 	 * physical address (HPA) or a guest physical address (GPA) and must
52913 	 * point to a physically contiguous block of memory.
52914 	 */
52915 	uint64_t	resp_addr;
52916 	/*
52917 	 * This is the address for statistic block.
52918 	 * > For new versions of the chip, this address should be 128B
52919 	 * > aligned.
52920 	 */
52921 	uint64_t	stats_dma_addr;
52922 	/*
52923 	 * The statistic block update period in ms.
52924 	 * e.g. 250ms, 500ms, 750ms, 1000ms.
52925 	 * If update_period_ms is 0, then the stats update
52926 	 * shall be never done and the DMA address shall not be used.
52927 	 * In this case, the stat block can only be read by
52928 	 * hwrm_stat_ctx_query command.
52929 	 * On Ethernet/L2 based devices:
52930 	 *   if tpa v2 supported (hwrm_vnic_qcaps[max_aggs_supported]>0),
52931 	 *       ctx_hw_stats_ext is used for DMA,
52932 	 *   else
52933 	 *       ctx_hw_stats is used for DMA.
52934 	 */
52935 	uint32_t	update_period_ms;
52936 	/*
52937 	 * This field is used to specify statistics context specific
52938 	 * configuration flags.
52939 	 */
52940 	uint8_t	stat_ctx_flags;
52941 	/*
52942 	 * When this bit is set to '1', the statistics context shall be
52943 	 * allocated for RoCE traffic only. In this case, traffic other
52944 	 * than offloaded RoCE traffic shall not be included in this
52945 	 * statistic context.
52946 	 * When this bit is set to '0', the statistics context shall be
52947 	 * used for network traffic or engine traffic.
52948 	 */
52949 	#define HWRM_STAT_CTX_ALLOC_INPUT_STAT_CTX_FLAGS_ROCE     UINT32_C(0x1)
52950 	uint8_t	unused_0;
52951 	/*
52952 	 * This is the size of the structure (ctx_hw_stats or
52953 	 * ctx_hw_stats_ext) that the driver has allocated to be used
52954 	 * for the periodic DMA updates.
52955 	 */
52956 	uint16_t	stats_dma_length;
52957 } __rte_packed;
52958 
52959 /* hwrm_stat_ctx_alloc_output (size:128b/16B) */
52960 struct hwrm_stat_ctx_alloc_output {
52961 	/* The specific error status for the command. */
52962 	uint16_t	error_code;
52963 	/* The HWRM command request type. */
52964 	uint16_t	req_type;
52965 	/* The sequence ID from the original command. */
52966 	uint16_t	seq_id;
52967 	/* The length of the response data in number of bytes. */
52968 	uint16_t	resp_len;
52969 	/* This is the statistics context ID value. */
52970 	uint32_t	stat_ctx_id;
52971 	uint8_t	unused_0[3];
52972 	/*
52973 	 * This field is used in Output records to indicate that the output
52974 	 * is completely written to RAM.  This field should be read as '1'
52975 	 * to indicate that the output has been completely written.
52976 	 * When writing a command completion or response to an internal processor,
52977 	 * the order of writes has to be such that this field is written last.
52978 	 */
52979 	uint8_t	valid;
52980 } __rte_packed;
52981 
52982 /**********************
52983  * hwrm_stat_ctx_free *
52984  **********************/
52985 
52986 
52987 /* hwrm_stat_ctx_free_input (size:192b/24B) */
52988 struct hwrm_stat_ctx_free_input {
52989 	/* The HWRM command request type. */
52990 	uint16_t	req_type;
52991 	/*
52992 	 * The completion ring to send the completion event on. This should
52993 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
52994 	 */
52995 	uint16_t	cmpl_ring;
52996 	/*
52997 	 * The sequence ID is used by the driver for tracking multiple
52998 	 * commands. This ID is treated as opaque data by the firmware and
52999 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
53000 	 */
53001 	uint16_t	seq_id;
53002 	/*
53003 	 * The target ID of the command:
53004 	 * * 0x0-0xFFF8 - The function ID
53005 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
53006 	 * * 0xFFFD - Reserved for user-space HWRM interface
53007 	 * * 0xFFFF - HWRM
53008 	 */
53009 	uint16_t	target_id;
53010 	/*
53011 	 * A physical address pointer pointing to a host buffer that the
53012 	 * command's response data will be written. This can be either a host
53013 	 * physical address (HPA) or a guest physical address (GPA) and must
53014 	 * point to a physically contiguous block of memory.
53015 	 */
53016 	uint64_t	resp_addr;
53017 	/* ID of the statistics context that is being queried. */
53018 	uint32_t	stat_ctx_id;
53019 	uint8_t	unused_0[4];
53020 } __rte_packed;
53021 
53022 /* hwrm_stat_ctx_free_output (size:128b/16B) */
53023 struct hwrm_stat_ctx_free_output {
53024 	/* The specific error status for the command. */
53025 	uint16_t	error_code;
53026 	/* The HWRM command request type. */
53027 	uint16_t	req_type;
53028 	/* The sequence ID from the original command. */
53029 	uint16_t	seq_id;
53030 	/* The length of the response data in number of bytes. */
53031 	uint16_t	resp_len;
53032 	/* This is the statistics context ID value. */
53033 	uint32_t	stat_ctx_id;
53034 	uint8_t	unused_0[3];
53035 	/*
53036 	 * This field is used in Output records to indicate that the output
53037 	 * is completely written to RAM.  This field should be read as '1'
53038 	 * to indicate that the output has been completely written.
53039 	 * When writing a command completion or response to an internal processor,
53040 	 * the order of writes has to be such that this field is written last.
53041 	 */
53042 	uint8_t	valid;
53043 } __rte_packed;
53044 
53045 /***********************
53046  * hwrm_stat_ctx_query *
53047  ***********************/
53048 
53049 
53050 /* hwrm_stat_ctx_query_input (size:192b/24B) */
53051 struct hwrm_stat_ctx_query_input {
53052 	/* The HWRM command request type. */
53053 	uint16_t	req_type;
53054 	/*
53055 	 * The completion ring to send the completion event on. This should
53056 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
53057 	 */
53058 	uint16_t	cmpl_ring;
53059 	/*
53060 	 * The sequence ID is used by the driver for tracking multiple
53061 	 * commands. This ID is treated as opaque data by the firmware and
53062 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
53063 	 */
53064 	uint16_t	seq_id;
53065 	/*
53066 	 * The target ID of the command:
53067 	 * * 0x0-0xFFF8 - The function ID
53068 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
53069 	 * * 0xFFFD - Reserved for user-space HWRM interface
53070 	 * * 0xFFFF - HWRM
53071 	 */
53072 	uint16_t	target_id;
53073 	/*
53074 	 * A physical address pointer pointing to a host buffer that the
53075 	 * command's response data will be written. This can be either a host
53076 	 * physical address (HPA) or a guest physical address (GPA) and must
53077 	 * point to a physically contiguous block of memory.
53078 	 */
53079 	uint64_t	resp_addr;
53080 	/* ID of the statistics context that is being queried. */
53081 	uint32_t	stat_ctx_id;
53082 	uint8_t	flags;
53083 	/*
53084 	 * This bit is set to 1 when request is for a counter mask,
53085 	 * representing the width of each of the stats counters, rather
53086 	 * than counters themselves.
53087 	 */
53088 	#define HWRM_STAT_CTX_QUERY_INPUT_FLAGS_COUNTER_MASK     UINT32_C(0x1)
53089 	uint8_t	unused_0[3];
53090 } __rte_packed;
53091 
53092 /* hwrm_stat_ctx_query_output (size:1408b/176B) */
53093 struct hwrm_stat_ctx_query_output {
53094 	/* The specific error status for the command. */
53095 	uint16_t	error_code;
53096 	/* The HWRM command request type. */
53097 	uint16_t	req_type;
53098 	/* The sequence ID from the original command. */
53099 	uint16_t	seq_id;
53100 	/* The length of the response data in number of bytes. */
53101 	uint16_t	resp_len;
53102 	/* Number of transmitted unicast packets */
53103 	uint64_t	tx_ucast_pkts;
53104 	/* Number of transmitted multicast packets */
53105 	uint64_t	tx_mcast_pkts;
53106 	/* Number of transmitted broadcast packets */
53107 	uint64_t	tx_bcast_pkts;
53108 	/* Number of packets discarded in transmit path */
53109 	uint64_t	tx_discard_pkts;
53110 	/* Number of packets in transmit path with error */
53111 	uint64_t	tx_error_pkts;
53112 	/* Number of transmitted bytes for unicast traffic */
53113 	uint64_t	tx_ucast_bytes;
53114 	/* Number of transmitted bytes for multicast traffic */
53115 	uint64_t	tx_mcast_bytes;
53116 	/* Number of transmitted bytes for broadcast traffic */
53117 	uint64_t	tx_bcast_bytes;
53118 	/* Number of received unicast packets */
53119 	uint64_t	rx_ucast_pkts;
53120 	/* Number of received multicast packets */
53121 	uint64_t	rx_mcast_pkts;
53122 	/* Number of received broadcast packets */
53123 	uint64_t	rx_bcast_pkts;
53124 	/* Number of packets discarded in receive path */
53125 	uint64_t	rx_discard_pkts;
53126 	/* Number of packets in receive path with errors */
53127 	uint64_t	rx_error_pkts;
53128 	/* Number of received bytes for unicast traffic */
53129 	uint64_t	rx_ucast_bytes;
53130 	/* Number of received bytes for multicast traffic */
53131 	uint64_t	rx_mcast_bytes;
53132 	/* Number of received bytes for broadcast traffic */
53133 	uint64_t	rx_bcast_bytes;
53134 	/* Number of aggregated unicast packets */
53135 	uint64_t	rx_agg_pkts;
53136 	/* Number of aggregated unicast bytes */
53137 	uint64_t	rx_agg_bytes;
53138 	/* Number of aggregation events */
53139 	uint64_t	rx_agg_events;
53140 	/* Number of aborted aggregations */
53141 	uint64_t	rx_agg_aborts;
53142 	uint8_t	unused_0[7];
53143 	/*
53144 	 * This field is used in Output records to indicate that the output
53145 	 * is completely written to RAM.  This field should be read as '1'
53146 	 * to indicate that the output has been completely written.
53147 	 * When writing a command completion or response to an internal processor,
53148 	 * the order of writes has to be such that this field is written last.
53149 	 */
53150 	uint8_t	valid;
53151 } __rte_packed;
53152 
53153 /***************************
53154  * hwrm_stat_ext_ctx_query *
53155  ***************************/
53156 
53157 
53158 /* hwrm_stat_ext_ctx_query_input (size:192b/24B) */
53159 struct hwrm_stat_ext_ctx_query_input {
53160 	/* The HWRM command request type. */
53161 	uint16_t	req_type;
53162 	/*
53163 	 * The completion ring to send the completion event on. This should
53164 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
53165 	 */
53166 	uint16_t	cmpl_ring;
53167 	/*
53168 	 * The sequence ID is used by the driver for tracking multiple
53169 	 * commands. This ID is treated as opaque data by the firmware and
53170 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
53171 	 */
53172 	uint16_t	seq_id;
53173 	/*
53174 	 * The target ID of the command:
53175 	 * * 0x0-0xFFF8 - The function ID
53176 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
53177 	 * * 0xFFFD - Reserved for user-space HWRM interface
53178 	 * * 0xFFFF - HWRM
53179 	 */
53180 	uint16_t	target_id;
53181 	/*
53182 	 * A physical address pointer pointing to a host buffer that the
53183 	 * command's response data will be written. This can be either a host
53184 	 * physical address (HPA) or a guest physical address (GPA) and must
53185 	 * point to a physically contiguous block of memory.
53186 	 */
53187 	uint64_t	resp_addr;
53188 	/* ID of the extended statistics context that is being queried. */
53189 	uint32_t	stat_ctx_id;
53190 	uint8_t	flags;
53191 	/*
53192 	 * This bit is set to 1 when request is for a counter mask,
53193 	 * representing the width of each of the stats counters, rather
53194 	 * than counters themselves.
53195 	 */
53196 	#define HWRM_STAT_EXT_CTX_QUERY_INPUT_FLAGS_COUNTER_MASK \
53197 		UINT32_C(0x1)
53198 	uint8_t	unused_0[3];
53199 } __rte_packed;
53200 
53201 /* hwrm_stat_ext_ctx_query_output (size:1536b/192B) */
53202 struct hwrm_stat_ext_ctx_query_output {
53203 	/* The specific error status for the command. */
53204 	uint16_t	error_code;
53205 	/* The HWRM command request type. */
53206 	uint16_t	req_type;
53207 	/* The sequence ID from the original command. */
53208 	uint16_t	seq_id;
53209 	/* The length of the response data in number of bytes. */
53210 	uint16_t	resp_len;
53211 	/* Number of received unicast packets */
53212 	uint64_t	rx_ucast_pkts;
53213 	/* Number of received multicast packets */
53214 	uint64_t	rx_mcast_pkts;
53215 	/* Number of received broadcast packets */
53216 	uint64_t	rx_bcast_pkts;
53217 	/* Number of discarded packets on receive path */
53218 	uint64_t	rx_discard_pkts;
53219 	/* Number of packets on receive path with error */
53220 	uint64_t	rx_error_pkts;
53221 	/* Number of received bytes for unicast traffic */
53222 	uint64_t	rx_ucast_bytes;
53223 	/* Number of received bytes for multicast traffic */
53224 	uint64_t	rx_mcast_bytes;
53225 	/* Number of received bytes for broadcast traffic */
53226 	uint64_t	rx_bcast_bytes;
53227 	/* Number of transmitted unicast packets */
53228 	uint64_t	tx_ucast_pkts;
53229 	/* Number of transmitted multicast packets */
53230 	uint64_t	tx_mcast_pkts;
53231 	/* Number of transmitted broadcast packets */
53232 	uint64_t	tx_bcast_pkts;
53233 	/* Number of packets on transmit path with error */
53234 	uint64_t	tx_error_pkts;
53235 	/* Number of discarded packets on transmit path */
53236 	uint64_t	tx_discard_pkts;
53237 	/* Number of transmitted bytes for unicast traffic */
53238 	uint64_t	tx_ucast_bytes;
53239 	/* Number of transmitted bytes for multicast traffic */
53240 	uint64_t	tx_mcast_bytes;
53241 	/* Number of transmitted bytes for broadcast traffic */
53242 	uint64_t	tx_bcast_bytes;
53243 	/* Number of TPA eligible packets */
53244 	uint64_t	rx_tpa_eligible_pkt;
53245 	/* Number of TPA eligible bytes */
53246 	uint64_t	rx_tpa_eligible_bytes;
53247 	/* Number of TPA packets */
53248 	uint64_t	rx_tpa_pkt;
53249 	/* Number of TPA bytes */
53250 	uint64_t	rx_tpa_bytes;
53251 	/* Number of TPA errors */
53252 	uint64_t	rx_tpa_errors;
53253 	/* Number of TPA events */
53254 	uint64_t	rx_tpa_events;
53255 	uint8_t	unused_0[7];
53256 	/*
53257 	 * This field is used in Output records to indicate that the output
53258 	 * is completely written to RAM.  This field should be read as '1'
53259 	 * to indicate that the output has been completely written.
53260 	 * When writing a command completion or response to an internal processor,
53261 	 * the order of writes has to be such that this field is written last.
53262 	 */
53263 	uint8_t	valid;
53264 } __rte_packed;
53265 
53266 /***************************
53267  * hwrm_stat_ctx_eng_query *
53268  ***************************/
53269 
53270 
53271 /* hwrm_stat_ctx_eng_query_input (size:192b/24B) */
53272 struct hwrm_stat_ctx_eng_query_input {
53273 	/* The HWRM command request type. */
53274 	uint16_t	req_type;
53275 	/*
53276 	 * The completion ring to send the completion event on. This should
53277 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
53278 	 */
53279 	uint16_t	cmpl_ring;
53280 	/*
53281 	 * The sequence ID is used by the driver for tracking multiple
53282 	 * commands. This ID is treated as opaque data by the firmware and
53283 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
53284 	 */
53285 	uint16_t	seq_id;
53286 	/*
53287 	 * The target ID of the command:
53288 	 * * 0x0-0xFFF8 - The function ID
53289 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
53290 	 * * 0xFFFD - Reserved for user-space HWRM interface
53291 	 * * 0xFFFF - HWRM
53292 	 */
53293 	uint16_t	target_id;
53294 	/*
53295 	 * A physical address pointer pointing to a host buffer that the
53296 	 * command's response data will be written. This can be either a host
53297 	 * physical address (HPA) or a guest physical address (GPA) and must
53298 	 * point to a physically contiguous block of memory.
53299 	 */
53300 	uint64_t	resp_addr;
53301 	/* ID of the statistics context that is being queried. */
53302 	uint32_t	stat_ctx_id;
53303 	uint8_t	unused_0[4];
53304 } __rte_packed;
53305 
53306 /* hwrm_stat_ctx_eng_query_output (size:640b/80B) */
53307 struct hwrm_stat_ctx_eng_query_output {
53308 	/* The specific error status for the command. */
53309 	uint16_t	error_code;
53310 	/* The HWRM command request type. */
53311 	uint16_t	req_type;
53312 	/* The sequence ID from the original command. */
53313 	uint16_t	seq_id;
53314 	/* The length of the response data in number of bytes. */
53315 	uint16_t	resp_len;
53316 	/*
53317 	 * Count of data bytes into the Engine.
53318 	 * This includes any user supplied prefix,
53319 	 * but does not include any predefined
53320 	 * prefix data.
53321 	 */
53322 	uint64_t	eng_bytes_in;
53323 	/* Count of data bytes out of the Engine. */
53324 	uint64_t	eng_bytes_out;
53325 	/*
53326 	 * Count, in 4-byte (dword) units, of bytes
53327 	 * that are input as auxiliary data.
53328 	 * This includes the aux_cmd data.
53329 	 */
53330 	uint64_t	aux_bytes_in;
53331 	/*
53332 	 * Count, in 4-byte (dword) units, of bytes
53333 	 * that are output as auxiliary data.
53334 	 * This count is the buffer space for aux_data
53335 	 * output provided in the RQE, not the actual
53336 	 * aux_data written
53337 	 */
53338 	uint64_t	aux_bytes_out;
53339 	/* Count of number of commands executed. */
53340 	uint64_t	commands;
53341 	/*
53342 	 * Count of number of error commands.
53343 	 * These are the commands with a
53344 	 * non-zero status value.
53345 	 */
53346 	uint64_t	error_commands;
53347 	/*
53348 	 * Compression/Encryption Engine usage,
53349 	 * the unit is count of clock cycles
53350 	 */
53351 	uint64_t	cce_engine_usage;
53352 	/*
53353 	 * De-Compression/De-cryption Engine usage,
53354 	 * the unit is count of clock cycles
53355 	 */
53356 	uint64_t	cdd_engine_usage;
53357 	uint8_t	unused_0[7];
53358 	/*
53359 	 * This field is used in Output records to indicate that the output
53360 	 * is completely written to RAM.  This field should be read as '1'
53361 	 * to indicate that the output has been completely written.
53362 	 * When writing a command completion or response to an internal processor,
53363 	 * the order of writes has to be such that this field is written last.
53364 	 */
53365 	uint8_t	valid;
53366 } __rte_packed;
53367 
53368 /***************************
53369  * hwrm_stat_ctx_clr_stats *
53370  ***************************/
53371 
53372 
53373 /* hwrm_stat_ctx_clr_stats_input (size:192b/24B) */
53374 struct hwrm_stat_ctx_clr_stats_input {
53375 	/* The HWRM command request type. */
53376 	uint16_t	req_type;
53377 	/*
53378 	 * The completion ring to send the completion event on. This should
53379 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
53380 	 */
53381 	uint16_t	cmpl_ring;
53382 	/*
53383 	 * The sequence ID is used by the driver for tracking multiple
53384 	 * commands. This ID is treated as opaque data by the firmware and
53385 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
53386 	 */
53387 	uint16_t	seq_id;
53388 	/*
53389 	 * The target ID of the command:
53390 	 * * 0x0-0xFFF8 - The function ID
53391 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
53392 	 * * 0xFFFD - Reserved for user-space HWRM interface
53393 	 * * 0xFFFF - HWRM
53394 	 */
53395 	uint16_t	target_id;
53396 	/*
53397 	 * A physical address pointer pointing to a host buffer that the
53398 	 * command's response data will be written. This can be either a host
53399 	 * physical address (HPA) or a guest physical address (GPA) and must
53400 	 * point to a physically contiguous block of memory.
53401 	 */
53402 	uint64_t	resp_addr;
53403 	/* ID of the statistics context that is being queried. */
53404 	uint32_t	stat_ctx_id;
53405 	uint8_t	unused_0[4];
53406 } __rte_packed;
53407 
53408 /* hwrm_stat_ctx_clr_stats_output (size:128b/16B) */
53409 struct hwrm_stat_ctx_clr_stats_output {
53410 	/* The specific error status for the command. */
53411 	uint16_t	error_code;
53412 	/* The HWRM command request type. */
53413 	uint16_t	req_type;
53414 	/* The sequence ID from the original command. */
53415 	uint16_t	seq_id;
53416 	/* The length of the response data in number of bytes. */
53417 	uint16_t	resp_len;
53418 	uint8_t	unused_0[7];
53419 	/*
53420 	 * This field is used in Output records to indicate that the output
53421 	 * is completely written to RAM.  This field should be read as '1'
53422 	 * to indicate that the output has been completely written.
53423 	 * When writing a command completion or response to an internal processor,
53424 	 * the order of writes has to be such that this field is written last.
53425 	 */
53426 	uint8_t	valid;
53427 } __rte_packed;
53428 
53429 /********************
53430  * hwrm_pcie_qstats *
53431  ********************/
53432 
53433 
53434 /* hwrm_pcie_qstats_input (size:256b/32B) */
53435 struct hwrm_pcie_qstats_input {
53436 	/* The HWRM command request type. */
53437 	uint16_t	req_type;
53438 	/*
53439 	 * The completion ring to send the completion event on. This should
53440 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
53441 	 */
53442 	uint16_t	cmpl_ring;
53443 	/*
53444 	 * The sequence ID is used by the driver for tracking multiple
53445 	 * commands. This ID is treated as opaque data by the firmware and
53446 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
53447 	 */
53448 	uint16_t	seq_id;
53449 	/*
53450 	 * The target ID of the command:
53451 	 * * 0x0-0xFFF8 - The function ID
53452 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
53453 	 * * 0xFFFD - Reserved for user-space HWRM interface
53454 	 * * 0xFFFF - HWRM
53455 	 */
53456 	uint16_t	target_id;
53457 	/*
53458 	 * A physical address pointer pointing to a host buffer that the
53459 	 * command's response data will be written. This can be either a host
53460 	 * physical address (HPA) or a guest physical address (GPA) and must
53461 	 * point to a physically contiguous block of memory.
53462 	 */
53463 	uint64_t	resp_addr;
53464 	/*
53465 	 * The size of PCIe statistics block in bytes.
53466 	 * Firmware will DMA the PCIe statistics to
53467 	 * the host with this field size in the response.
53468 	 */
53469 	uint16_t	pcie_stat_size;
53470 	uint8_t	unused_0[6];
53471 	/*
53472 	 * This is the host address where
53473 	 * PCIe statistics will be stored
53474 	 */
53475 	uint64_t	pcie_stat_host_addr;
53476 } __rte_packed;
53477 
53478 /* hwrm_pcie_qstats_output (size:128b/16B) */
53479 struct hwrm_pcie_qstats_output {
53480 	/* The specific error status for the command. */
53481 	uint16_t	error_code;
53482 	/* The HWRM command request type. */
53483 	uint16_t	req_type;
53484 	/* The sequence ID from the original command. */
53485 	uint16_t	seq_id;
53486 	/* The length of the response data in number of bytes. */
53487 	uint16_t	resp_len;
53488 	/* The size of PCIe statistics block in bytes. */
53489 	uint16_t	pcie_stat_size;
53490 	uint8_t	unused_0[5];
53491 	/*
53492 	 * This field is used in Output records to indicate that the output
53493 	 * is completely written to RAM.  This field should be read as '1'
53494 	 * to indicate that the output has been completely written.
53495 	 * When writing a command completion or response to an internal processor,
53496 	 * the order of writes has to be such that this field is written last.
53497 	 */
53498 	uint8_t	valid;
53499 } __rte_packed;
53500 
53501 /* PCIe Statistics Formats */
53502 /* pcie_ctx_hw_stats (size:768b/96B) */
53503 struct pcie_ctx_hw_stats {
53504 	/* Number of physical layer receiver errors */
53505 	uint64_t	pcie_pl_signal_integrity;
53506 	/* Number of DLLP CRC errors detected by Data Link Layer */
53507 	uint64_t	pcie_dl_signal_integrity;
53508 	/*
53509 	 * Number of TLP LCRC and sequence number errors detected
53510 	 * by Data Link Layer
53511 	 */
53512 	uint64_t	pcie_tl_signal_integrity;
53513 	/* Number of times LTSSM entered Recovery state */
53514 	uint64_t	pcie_link_integrity;
53515 	/* Report number of TLP bits that have been transmitted in Mbps */
53516 	uint64_t	pcie_tx_traffic_rate;
53517 	/* Report number of TLP bits that have been received in Mbps */
53518 	uint64_t	pcie_rx_traffic_rate;
53519 	/* Number of DLLP bytes that have been transmitted */
53520 	uint64_t	pcie_tx_dllp_statistics;
53521 	/* Number of DLLP bytes that have been received */
53522 	uint64_t	pcie_rx_dllp_statistics;
53523 	/*
53524 	 * Number of times spent in each phase of gen3
53525 	 * equalization
53526 	 */
53527 	uint64_t	pcie_equalization_time;
53528 	/* Records the last 16 transitions of the LTSSM */
53529 	uint32_t	pcie_ltssm_histogram[4];
53530 	/*
53531 	 * Record the last 8 reasons on why LTSSM transitioned
53532 	 * to Recovery
53533 	 */
53534 	uint64_t	pcie_recovery_histogram;
53535 } __rte_packed;
53536 
53537 /**********************
53538  * hwrm_exec_fwd_resp *
53539  **********************/
53540 
53541 
53542 /* hwrm_exec_fwd_resp_input (size:1024b/128B) */
53543 struct hwrm_exec_fwd_resp_input {
53544 	/* The HWRM command request type. */
53545 	uint16_t	req_type;
53546 	/*
53547 	 * The completion ring to send the completion event on. This should
53548 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
53549 	 */
53550 	uint16_t	cmpl_ring;
53551 	/*
53552 	 * The sequence ID is used by the driver for tracking multiple
53553 	 * commands. This ID is treated as opaque data by the firmware and
53554 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
53555 	 */
53556 	uint16_t	seq_id;
53557 	/*
53558 	 * The target ID of the command:
53559 	 * * 0x0-0xFFF8 - The function ID
53560 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
53561 	 * * 0xFFFD - Reserved for user-space HWRM interface
53562 	 * * 0xFFFF - HWRM
53563 	 */
53564 	uint16_t	target_id;
53565 	/*
53566 	 * A physical address pointer pointing to a host buffer that the
53567 	 * command's response data will be written. This can be either a host
53568 	 * physical address (HPA) or a guest physical address (GPA) and must
53569 	 * point to a physically contiguous block of memory.
53570 	 */
53571 	uint64_t	resp_addr;
53572 	/*
53573 	 * This is an encapsulated request. This request should
53574 	 * be executed by the HWRM and the response should be
53575 	 * provided in the response buffer inside the encapsulated
53576 	 * request.
53577 	 */
53578 	uint32_t	encap_request[26];
53579 	/*
53580 	 * This value indicates the target id of the response to
53581 	 * the encapsulated request.
53582 	 * 0x0 - 0xFFF8 - Used for function ids
53583 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors
53584 	 * 0xFFFF - HWRM
53585 	 */
53586 	uint16_t	encap_resp_target_id;
53587 	uint8_t	unused_0[6];
53588 } __rte_packed;
53589 
53590 /* hwrm_exec_fwd_resp_output (size:128b/16B) */
53591 struct hwrm_exec_fwd_resp_output {
53592 	/* The specific error status for the command. */
53593 	uint16_t	error_code;
53594 	/* The HWRM command request type. */
53595 	uint16_t	req_type;
53596 	/* The sequence ID from the original command. */
53597 	uint16_t	seq_id;
53598 	/* The length of the response data in number of bytes. */
53599 	uint16_t	resp_len;
53600 	uint8_t	unused_0[7];
53601 	/*
53602 	 * This field is used in Output records to indicate that the output
53603 	 * is completely written to RAM.  This field should be read as '1'
53604 	 * to indicate that the output has been completely written.
53605 	 * When writing a command completion or response to an internal processor,
53606 	 * the order of writes has to be such that this field is written last.
53607 	 */
53608 	uint8_t	valid;
53609 } __rte_packed;
53610 
53611 /************************
53612  * hwrm_reject_fwd_resp *
53613  ************************/
53614 
53615 
53616 /* hwrm_reject_fwd_resp_input (size:1024b/128B) */
53617 struct hwrm_reject_fwd_resp_input {
53618 	/* The HWRM command request type. */
53619 	uint16_t	req_type;
53620 	/*
53621 	 * The completion ring to send the completion event on. This should
53622 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
53623 	 */
53624 	uint16_t	cmpl_ring;
53625 	/*
53626 	 * The sequence ID is used by the driver for tracking multiple
53627 	 * commands. This ID is treated as opaque data by the firmware and
53628 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
53629 	 */
53630 	uint16_t	seq_id;
53631 	/*
53632 	 * The target ID of the command:
53633 	 * * 0x0-0xFFF8 - The function ID
53634 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
53635 	 * * 0xFFFD - Reserved for user-space HWRM interface
53636 	 * * 0xFFFF - HWRM
53637 	 */
53638 	uint16_t	target_id;
53639 	/*
53640 	 * A physical address pointer pointing to a host buffer that the
53641 	 * command's response data will be written. This can be either a host
53642 	 * physical address (HPA) or a guest physical address (GPA) and must
53643 	 * point to a physically contiguous block of memory.
53644 	 */
53645 	uint64_t	resp_addr;
53646 	/*
53647 	 * This is an encapsulated request. This request should
53648 	 * be rejected by the HWRM and the error response should be
53649 	 * provided in the response buffer inside the encapsulated
53650 	 * request.
53651 	 */
53652 	uint32_t	encap_request[26];
53653 	/*
53654 	 * This value indicates the target id of the response to
53655 	 * the encapsulated request.
53656 	 * 0x0 - 0xFFF8 - Used for function ids
53657 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors
53658 	 * 0xFFFF - HWRM
53659 	 */
53660 	uint16_t	encap_resp_target_id;
53661 	uint8_t	unused_0[6];
53662 } __rte_packed;
53663 
53664 /* hwrm_reject_fwd_resp_output (size:128b/16B) */
53665 struct hwrm_reject_fwd_resp_output {
53666 	/* The specific error status for the command. */
53667 	uint16_t	error_code;
53668 	/* The HWRM command request type. */
53669 	uint16_t	req_type;
53670 	/* The sequence ID from the original command. */
53671 	uint16_t	seq_id;
53672 	/* The length of the response data in number of bytes. */
53673 	uint16_t	resp_len;
53674 	uint8_t	unused_0[7];
53675 	/*
53676 	 * This field is used in Output records to indicate that the output
53677 	 * is completely written to RAM.  This field should be read as '1'
53678 	 * to indicate that the output has been completely written.
53679 	 * When writing a command completion or response to an internal processor,
53680 	 * the order of writes has to be such that this field is written last.
53681 	 */
53682 	uint8_t	valid;
53683 } __rte_packed;
53684 
53685 /*****************
53686  * hwrm_fwd_resp *
53687  *****************/
53688 
53689 
53690 /* hwrm_fwd_resp_input (size:1024b/128B) */
53691 struct hwrm_fwd_resp_input {
53692 	/* The HWRM command request type. */
53693 	uint16_t	req_type;
53694 	/*
53695 	 * The completion ring to send the completion event on. This should
53696 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
53697 	 */
53698 	uint16_t	cmpl_ring;
53699 	/*
53700 	 * The sequence ID is used by the driver for tracking multiple
53701 	 * commands. This ID is treated as opaque data by the firmware and
53702 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
53703 	 */
53704 	uint16_t	seq_id;
53705 	/*
53706 	 * The target ID of the command:
53707 	 * * 0x0-0xFFF8 - The function ID
53708 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
53709 	 * * 0xFFFD - Reserved for user-space HWRM interface
53710 	 * * 0xFFFF - HWRM
53711 	 */
53712 	uint16_t	target_id;
53713 	/*
53714 	 * A physical address pointer pointing to a host buffer that the
53715 	 * command's response data will be written. This can be either a host
53716 	 * physical address (HPA) or a guest physical address (GPA) and must
53717 	 * point to a physically contiguous block of memory.
53718 	 */
53719 	uint64_t	resp_addr;
53720 	/*
53721 	 * This value indicates the target id of the encapsulated
53722 	 * response.
53723 	 * 0x0 - 0xFFF8 - Used for function ids
53724 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors
53725 	 * 0xFFFF - HWRM
53726 	 */
53727 	uint16_t	encap_resp_target_id;
53728 	/*
53729 	 * This value indicates the completion ring the encapsulated
53730 	 * response will be optionally completed on.  If the value is
53731 	 * -1, then no CR completion shall be generated for the
53732 	 * encapsulated response. Any other value must be a
53733 	 * valid CR ring_id value. If a valid encap_resp_cmpl_ring
53734 	 * is provided, then a CR completion shall be generated for
53735 	 * the encapsulated response.
53736 	 */
53737 	uint16_t	encap_resp_cmpl_ring;
53738 	/* This field indicates the length of encapsulated response. */
53739 	uint16_t	encap_resp_len;
53740 	uint8_t	unused_0;
53741 	uint8_t	unused_1;
53742 	/*
53743 	 * This is the host address where the encapsulated response
53744 	 * will be written.
53745 	 * This area must be 16B aligned and must be cleared to zero
53746 	 * before the original request is made.
53747 	 */
53748 	uint64_t	encap_resp_addr;
53749 	/* This is an encapsulated response. */
53750 	uint32_t	encap_resp[24];
53751 } __rte_packed;
53752 
53753 /* hwrm_fwd_resp_output (size:128b/16B) */
53754 struct hwrm_fwd_resp_output {
53755 	/* The specific error status for the command. */
53756 	uint16_t	error_code;
53757 	/* The HWRM command request type. */
53758 	uint16_t	req_type;
53759 	/* The sequence ID from the original command. */
53760 	uint16_t	seq_id;
53761 	/* The length of the response data in number of bytes. */
53762 	uint16_t	resp_len;
53763 	uint8_t	unused_0[7];
53764 	/*
53765 	 * This field is used in Output records to indicate that the output
53766 	 * is completely written to RAM.  This field should be read as '1'
53767 	 * to indicate that the output has been completely written.
53768 	 * When writing a command completion or response to an internal processor,
53769 	 * the order of writes has to be such that this field is written last.
53770 	 */
53771 	uint8_t	valid;
53772 } __rte_packed;
53773 
53774 /*****************************
53775  * hwrm_fwd_async_event_cmpl *
53776  *****************************/
53777 
53778 
53779 /* hwrm_fwd_async_event_cmpl_input (size:320b/40B) */
53780 struct hwrm_fwd_async_event_cmpl_input {
53781 	/* The HWRM command request type. */
53782 	uint16_t	req_type;
53783 	/*
53784 	 * The completion ring to send the completion event on. This should
53785 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
53786 	 */
53787 	uint16_t	cmpl_ring;
53788 	/*
53789 	 * The sequence ID is used by the driver for tracking multiple
53790 	 * commands. This ID is treated as opaque data by the firmware and
53791 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
53792 	 */
53793 	uint16_t	seq_id;
53794 	/*
53795 	 * The target ID of the command:
53796 	 * * 0x0-0xFFF8 - The function ID
53797 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
53798 	 * * 0xFFFD - Reserved for user-space HWRM interface
53799 	 * * 0xFFFF - HWRM
53800 	 */
53801 	uint16_t	target_id;
53802 	/*
53803 	 * A physical address pointer pointing to a host buffer that the
53804 	 * command's response data will be written. This can be either a host
53805 	 * physical address (HPA) or a guest physical address (GPA) and must
53806 	 * point to a physically contiguous block of memory.
53807 	 */
53808 	uint64_t	resp_addr;
53809 	/*
53810 	 * This value indicates the target id of the encapsulated
53811 	 * asynchronous event.
53812 	 * 0x0 - 0xFFF8 - Used for function ids
53813 	 * 0xFFF8 - 0xFFFE - Reserved for internal processors
53814 	 * 0xFFFF - Broadcast to all children VFs (only applicable when
53815 	 * a PF is the requester)
53816 	 */
53817 	uint16_t	encap_async_event_target_id;
53818 	uint8_t	unused_0[6];
53819 	/* This is an encapsulated asynchronous event completion. */
53820 	uint32_t	encap_async_event_cmpl[4];
53821 } __rte_packed;
53822 
53823 /* hwrm_fwd_async_event_cmpl_output (size:128b/16B) */
53824 struct hwrm_fwd_async_event_cmpl_output {
53825 	/* The specific error status for the command. */
53826 	uint16_t	error_code;
53827 	/* The HWRM command request type. */
53828 	uint16_t	req_type;
53829 	/* The sequence ID from the original command. */
53830 	uint16_t	seq_id;
53831 	/* The length of the response data in number of bytes. */
53832 	uint16_t	resp_len;
53833 	uint8_t	unused_0[7];
53834 	/*
53835 	 * This field is used in Output records to indicate that the output
53836 	 * is completely written to RAM.  This field should be read as '1'
53837 	 * to indicate that the output has been completely written.
53838 	 * When writing a command completion or response to an internal processor,
53839 	 * the order of writes has to be such that this field is written last.
53840 	 */
53841 	uint8_t	valid;
53842 } __rte_packed;
53843 
53844 /**************************
53845  * hwrm_nvm_raw_write_blk *
53846  **************************/
53847 
53848 
53849 /* hwrm_nvm_raw_write_blk_input (size:256b/32B) */
53850 struct hwrm_nvm_raw_write_blk_input {
53851 	/* The HWRM command request type. */
53852 	uint16_t	req_type;
53853 	/*
53854 	 * The completion ring to send the completion event on. This should
53855 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
53856 	 */
53857 	uint16_t	cmpl_ring;
53858 	/*
53859 	 * The sequence ID is used by the driver for tracking multiple
53860 	 * commands. This ID is treated as opaque data by the firmware and
53861 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
53862 	 */
53863 	uint16_t	seq_id;
53864 	/*
53865 	 * The target ID of the command:
53866 	 * * 0x0-0xFFF8 - The function ID
53867 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
53868 	 * * 0xFFFD - Reserved for user-space HWRM interface
53869 	 * * 0xFFFF - HWRM
53870 	 */
53871 	uint16_t	target_id;
53872 	/*
53873 	 * A physical address pointer pointing to a host buffer that the
53874 	 * command's response data will be written. This can be either a host
53875 	 * physical address (HPA) or a guest physical address (GPA) and must
53876 	 * point to a physically contiguous block of memory.
53877 	 */
53878 	uint64_t	resp_addr;
53879 	/*
53880 	 * 64-bit Host Source Address.
53881 	 * This is the location of the source data to be written.
53882 	 */
53883 	uint64_t	host_src_addr;
53884 	/*
53885 	 * 32-bit Destination Address.
53886 	 * This is the NVRAM byte-offset where the source data will be written to.
53887 	 */
53888 	uint32_t	dest_addr;
53889 	/* Length of data to be written, in bytes. */
53890 	uint32_t	len;
53891 } __rte_packed;
53892 
53893 /* hwrm_nvm_raw_write_blk_output (size:128b/16B) */
53894 struct hwrm_nvm_raw_write_blk_output {
53895 	/* The specific error status for the command. */
53896 	uint16_t	error_code;
53897 	/* The HWRM command request type. */
53898 	uint16_t	req_type;
53899 	/* The sequence ID from the original command. */
53900 	uint16_t	seq_id;
53901 	/* The length of the response data in number of bytes. */
53902 	uint16_t	resp_len;
53903 	uint8_t	unused_0[7];
53904 	/*
53905 	 * This field is used in Output records to indicate that the output
53906 	 * is completely written to RAM.  This field should be read as '1'
53907 	 * to indicate that the output has been completely written.
53908 	 * When writing a command completion or response to an internal processor,
53909 	 * the order of writes has to be such that this field is written last.
53910 	 */
53911 	uint8_t	valid;
53912 } __rte_packed;
53913 
53914 /*****************
53915  * hwrm_nvm_read *
53916  *****************/
53917 
53918 
53919 /* hwrm_nvm_read_input (size:320b/40B) */
53920 struct hwrm_nvm_read_input {
53921 	/* The HWRM command request type. */
53922 	uint16_t	req_type;
53923 	/*
53924 	 * The completion ring to send the completion event on. This should
53925 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
53926 	 */
53927 	uint16_t	cmpl_ring;
53928 	/*
53929 	 * The sequence ID is used by the driver for tracking multiple
53930 	 * commands. This ID is treated as opaque data by the firmware and
53931 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
53932 	 */
53933 	uint16_t	seq_id;
53934 	/*
53935 	 * The target ID of the command:
53936 	 * * 0x0-0xFFF8 - The function ID
53937 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
53938 	 * * 0xFFFD - Reserved for user-space HWRM interface
53939 	 * * 0xFFFF - HWRM
53940 	 */
53941 	uint16_t	target_id;
53942 	/*
53943 	 * A physical address pointer pointing to a host buffer that the
53944 	 * command's response data will be written. This can be either a host
53945 	 * physical address (HPA) or a guest physical address (GPA) and must
53946 	 * point to a physically contiguous block of memory.
53947 	 */
53948 	uint64_t	resp_addr;
53949 	/*
53950 	 * 64-bit Host Destination Address.
53951 	 * This is the host address where the data will be written to.
53952 	 */
53953 	uint64_t	host_dest_addr;
53954 	/* The 0-based index of the directory entry. */
53955 	uint16_t	dir_idx;
53956 	uint8_t	unused_0[2];
53957 	/* The NVRAM byte-offset to read from. */
53958 	uint32_t	offset;
53959 	/* The length of the data to be read, in bytes. */
53960 	uint32_t	len;
53961 	uint8_t	unused_1[4];
53962 } __rte_packed;
53963 
53964 /* hwrm_nvm_read_output (size:128b/16B) */
53965 struct hwrm_nvm_read_output {
53966 	/* The specific error status for the command. */
53967 	uint16_t	error_code;
53968 	/* The HWRM command request type. */
53969 	uint16_t	req_type;
53970 	/* The sequence ID from the original command. */
53971 	uint16_t	seq_id;
53972 	/* The length of the response data in number of bytes. */
53973 	uint16_t	resp_len;
53974 	uint8_t	unused_0[7];
53975 	/*
53976 	 * This field is used in Output records to indicate that the output
53977 	 * is completely written to RAM.  This field should be read as '1'
53978 	 * to indicate that the output has been completely written.
53979 	 * When writing a command completion or response to an internal processor,
53980 	 * the order of writes has to be such that this field is written last.
53981 	 */
53982 	uint8_t	valid;
53983 } __rte_packed;
53984 
53985 /*********************
53986  * hwrm_nvm_raw_dump *
53987  *********************/
53988 
53989 
53990 /* hwrm_nvm_raw_dump_input (size:256b/32B) */
53991 struct hwrm_nvm_raw_dump_input {
53992 	/* The HWRM command request type. */
53993 	uint16_t	req_type;
53994 	/*
53995 	 * The completion ring to send the completion event on. This should
53996 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
53997 	 */
53998 	uint16_t	cmpl_ring;
53999 	/*
54000 	 * The sequence ID is used by the driver for tracking multiple
54001 	 * commands. This ID is treated as opaque data by the firmware and
54002 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
54003 	 */
54004 	uint16_t	seq_id;
54005 	/*
54006 	 * The target ID of the command:
54007 	 * * 0x0-0xFFF8 - The function ID
54008 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
54009 	 * * 0xFFFD - Reserved for user-space HWRM interface
54010 	 * * 0xFFFF - HWRM
54011 	 */
54012 	uint16_t	target_id;
54013 	/*
54014 	 * A physical address pointer pointing to a host buffer that the
54015 	 * command's response data will be written. This can be either a host
54016 	 * physical address (HPA) or a guest physical address (GPA) and must
54017 	 * point to a physically contiguous block of memory.
54018 	 */
54019 	uint64_t	resp_addr;
54020 	/*
54021 	 * 64-bit Host Destination Address.
54022 	 * This is the host address where the data will be written to.
54023 	 */
54024 	uint64_t	host_dest_addr;
54025 	/* 32-bit NVRAM byte-offset to read from. */
54026 	uint32_t	offset;
54027 	/* Total length of NVRAM contents to be read, in bytes. */
54028 	uint32_t	len;
54029 } __rte_packed;
54030 
54031 /* hwrm_nvm_raw_dump_output (size:128b/16B) */
54032 struct hwrm_nvm_raw_dump_output {
54033 	/* The specific error status for the command. */
54034 	uint16_t	error_code;
54035 	/* The HWRM command request type. */
54036 	uint16_t	req_type;
54037 	/* The sequence ID from the original command. */
54038 	uint16_t	seq_id;
54039 	/* The length of the response data in number of bytes. */
54040 	uint16_t	resp_len;
54041 	uint8_t	unused_0[7];
54042 	/*
54043 	 * This field is used in Output records to indicate that the output
54044 	 * is completely written to RAM.  This field should be read as '1'
54045 	 * to indicate that the output has been completely written.
54046 	 * When writing a command completion or response to an internal processor,
54047 	 * the order of writes has to be such that this field is written last.
54048 	 */
54049 	uint8_t	valid;
54050 } __rte_packed;
54051 
54052 /****************************
54053  * hwrm_nvm_get_dir_entries *
54054  ****************************/
54055 
54056 
54057 /* hwrm_nvm_get_dir_entries_input (size:192b/24B) */
54058 struct hwrm_nvm_get_dir_entries_input {
54059 	/* The HWRM command request type. */
54060 	uint16_t	req_type;
54061 	/*
54062 	 * The completion ring to send the completion event on. This should
54063 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
54064 	 */
54065 	uint16_t	cmpl_ring;
54066 	/*
54067 	 * The sequence ID is used by the driver for tracking multiple
54068 	 * commands. This ID is treated as opaque data by the firmware and
54069 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
54070 	 */
54071 	uint16_t	seq_id;
54072 	/*
54073 	 * The target ID of the command:
54074 	 * * 0x0-0xFFF8 - The function ID
54075 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
54076 	 * * 0xFFFD - Reserved for user-space HWRM interface
54077 	 * * 0xFFFF - HWRM
54078 	 */
54079 	uint16_t	target_id;
54080 	/*
54081 	 * A physical address pointer pointing to a host buffer that the
54082 	 * command's response data will be written. This can be either a host
54083 	 * physical address (HPA) or a guest physical address (GPA) and must
54084 	 * point to a physically contiguous block of memory.
54085 	 */
54086 	uint64_t	resp_addr;
54087 	/*
54088 	 * 64-bit Host Destination Address.
54089 	 * This is the host address where the directory will be written.
54090 	 */
54091 	uint64_t	host_dest_addr;
54092 } __rte_packed;
54093 
54094 /* hwrm_nvm_get_dir_entries_output (size:128b/16B) */
54095 struct hwrm_nvm_get_dir_entries_output {
54096 	/* The specific error status for the command. */
54097 	uint16_t	error_code;
54098 	/* The HWRM command request type. */
54099 	uint16_t	req_type;
54100 	/* The sequence ID from the original command. */
54101 	uint16_t	seq_id;
54102 	/* The length of the response data in number of bytes. */
54103 	uint16_t	resp_len;
54104 	uint8_t	unused_0[7];
54105 	/*
54106 	 * This field is used in Output records to indicate that the output
54107 	 * is completely written to RAM.  This field should be read as '1'
54108 	 * to indicate that the output has been completely written.
54109 	 * When writing a command completion or response to an internal processor,
54110 	 * the order of writes has to be such that this field is written last.
54111 	 */
54112 	uint8_t	valid;
54113 } __rte_packed;
54114 
54115 /*************************
54116  * hwrm_nvm_get_dir_info *
54117  *************************/
54118 
54119 
54120 /* hwrm_nvm_get_dir_info_input (size:128b/16B) */
54121 struct hwrm_nvm_get_dir_info_input {
54122 	/* The HWRM command request type. */
54123 	uint16_t	req_type;
54124 	/*
54125 	 * The completion ring to send the completion event on. This should
54126 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
54127 	 */
54128 	uint16_t	cmpl_ring;
54129 	/*
54130 	 * The sequence ID is used by the driver for tracking multiple
54131 	 * commands. This ID is treated as opaque data by the firmware and
54132 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
54133 	 */
54134 	uint16_t	seq_id;
54135 	/*
54136 	 * The target ID of the command:
54137 	 * * 0x0-0xFFF8 - The function ID
54138 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
54139 	 * * 0xFFFD - Reserved for user-space HWRM interface
54140 	 * * 0xFFFF - HWRM
54141 	 */
54142 	uint16_t	target_id;
54143 	/*
54144 	 * A physical address pointer pointing to a host buffer that the
54145 	 * command's response data will be written. This can be either a host
54146 	 * physical address (HPA) or a guest physical address (GPA) and must
54147 	 * point to a physically contiguous block of memory.
54148 	 */
54149 	uint64_t	resp_addr;
54150 } __rte_packed;
54151 
54152 /* hwrm_nvm_get_dir_info_output (size:192b/24B) */
54153 struct hwrm_nvm_get_dir_info_output {
54154 	/* The specific error status for the command. */
54155 	uint16_t	error_code;
54156 	/* The HWRM command request type. */
54157 	uint16_t	req_type;
54158 	/* The sequence ID from the original command. */
54159 	uint16_t	seq_id;
54160 	/* The length of the response data in number of bytes. */
54161 	uint16_t	resp_len;
54162 	/* Number of directory entries in the directory. */
54163 	uint32_t	entries;
54164 	/* Size of each directory entry, in bytes. */
54165 	uint32_t	entry_length;
54166 	uint8_t	unused_0[7];
54167 	/*
54168 	 * This field is used in Output records to indicate that the output
54169 	 * is completely written to RAM.  This field should be read as '1'
54170 	 * to indicate that the output has been completely written.
54171 	 * When writing a command completion or response to an internal processor,
54172 	 * the order of writes has to be such that this field is written last.
54173 	 */
54174 	uint8_t	valid;
54175 } __rte_packed;
54176 
54177 /******************
54178  * hwrm_nvm_write *
54179  ******************/
54180 
54181 
54182 /* hwrm_nvm_write_input (size:448b/56B) */
54183 struct hwrm_nvm_write_input {
54184 	/* The HWRM command request type. */
54185 	uint16_t	req_type;
54186 	/*
54187 	 * The completion ring to send the completion event on. This should
54188 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
54189 	 */
54190 	uint16_t	cmpl_ring;
54191 	/*
54192 	 * The sequence ID is used by the driver for tracking multiple
54193 	 * commands. This ID is treated as opaque data by the firmware and
54194 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
54195 	 */
54196 	uint16_t	seq_id;
54197 	/*
54198 	 * The target ID of the command:
54199 	 * * 0x0-0xFFF8 - The function ID
54200 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
54201 	 * * 0xFFFD - Reserved for user-space HWRM interface
54202 	 * * 0xFFFF - HWRM
54203 	 */
54204 	uint16_t	target_id;
54205 	/*
54206 	 * A physical address pointer pointing to a host buffer that the
54207 	 * command's response data will be written. This can be either a host
54208 	 * physical address (HPA) or a guest physical address (GPA) and must
54209 	 * point to a physically contiguous block of memory.
54210 	 */
54211 	uint64_t	resp_addr;
54212 	/*
54213 	 * 64-bit Host Source Address.
54214 	 * This is where the source data is.
54215 	 */
54216 	uint64_t	host_src_addr;
54217 	/*
54218 	 * The Directory Entry Type (valid values are defined in the
54219 	 * bnxnvm_directory_type enum defined in the file bnxnvm_defs.h).
54220 	 */
54221 	uint16_t	dir_type;
54222 	/*
54223 	 * Directory ordinal.
54224 	 * The 0-based instance of the combined Directory Entry Type and Extension.
54225 	 */
54226 	uint16_t	dir_ordinal;
54227 	/*
54228 	 * The Directory Entry Extension flags (see BNX_DIR_EXT_* in the file
54229 	 * bnxnvm_defs.h).
54230 	 */
54231 	uint16_t	dir_ext;
54232 	/*
54233 	 * Directory Entry Attribute flags (see BNX_DIR_ATTR_* in the file
54234 	 * bnxnvm_defs.h).
54235 	 */
54236 	uint16_t	dir_attr;
54237 	/*
54238 	 * Length of data to write, in bytes. May be less than or equal to the
54239 	 * allocated size for the directory entry.
54240 	 * The data length stored in the directory entry will be updated to
54241 	 * reflect this value once the write is complete.
54242 	 */
54243 	uint32_t	dir_data_length;
54244 	/* Option. */
54245 	uint16_t	option;
54246 	uint16_t	flags;
54247 	/*
54248 	 * When this bit is '1', the original active image
54249 	 * will not be removed. TBD: what purpose is this?
54250 	 */
54251 	#define HWRM_NVM_WRITE_INPUT_FLAGS_KEEP_ORIG_ACTIVE_IMG \
54252 		UINT32_C(0x1)
54253 	/*
54254 	 * This flag indicates the sender wants to modify a continuous
54255 	 * NVRAM area using a batch of this HWRM requests. The
54256 	 * offset of a request must be continuous to the end of previous
54257 	 * request's. Firmware does not update the directory entry until
54258 	 * receiving the last request, which is indicated by the batch_last
54259 	 * flag. This flag is set usually when a sender does not have a
54260 	 * block of memory that is big enough to hold the entire NVRAM
54261 	 * data for send at one time.
54262 	 */
54263 	#define HWRM_NVM_WRITE_INPUT_FLAGS_BATCH_MODE \
54264 		UINT32_C(0x2)
54265 	/*
54266 	 * This flag can be used only when the batch_mode flag is set. It
54267 	 * indicates this request is the last of batch requests.
54268 	 */
54269 	#define HWRM_NVM_WRITE_INPUT_FLAGS_BATCH_LAST \
54270 		UINT32_C(0x4)
54271 	/*
54272 	 * The requested length of the allocated NVM for the item, in bytes.
54273 	 * This value may be greater than or equal to the specified data
54274 	 * length (dir_data_length).
54275 	 * If this value is less than the specified data length, it will be ignored.
54276 	 * The response will contain the actual allocated item length,
54277 	 * which may be greater than the requested item length.
54278 	 * The purpose for allocating more than the required number of bytes
54279 	 * for an item's data is to pre-allocate extra storage (padding) to
54280 	 * accommodate the potential future growth of an item (e.g. upgraded
54281 	 * firmware with a size increase, log growth, expanded configuration data).
54282 	 */
54283 	uint32_t	dir_item_length;
54284 	/*
54285 	 * 32-bit offset of data blob from where data is being written.
54286 	 * Only valid for batch mode. For non-batch writes 'dont care'.
54287 	 */
54288 	uint32_t	offset;
54289 	/*
54290 	 * Length of data to be written.Should be non-zero.
54291 	 * Only valid for batch mode. For non-batch writes 'dont care'.
54292 	 */
54293 	uint32_t	len;
54294 	uint32_t	unused_0;
54295 } __rte_packed;
54296 
54297 /* hwrm_nvm_write_output (size:128b/16B) */
54298 struct hwrm_nvm_write_output {
54299 	/* The specific error status for the command. */
54300 	uint16_t	error_code;
54301 	/* The HWRM command request type. */
54302 	uint16_t	req_type;
54303 	/* The sequence ID from the original command. */
54304 	uint16_t	seq_id;
54305 	/* The length of the response data in number of bytes. */
54306 	uint16_t	resp_len;
54307 	/*
54308 	 * Length of the allocated NVM for the item, in bytes. The value may be
54309 	 * greater than or equal to the specified data length or the requested
54310 	 * item length.
54311 	 * The actual item length used when creating a new directory entry will
54312 	 * be a multiple of an NVM block size.
54313 	 */
54314 	uint32_t	dir_item_length;
54315 	/* The directory index of the created or modified item. */
54316 	uint16_t	dir_idx;
54317 	uint8_t	unused_0;
54318 	/*
54319 	 * This field is used in Output records to indicate that the output
54320 	 * is completely written to RAM.  This field should be read as '1'
54321 	 * to indicate that the output has been completely written.
54322 	 * When writing a command completion or response to an internal processor,
54323 	 * the order of writes has to be such that this field is written last.
54324 	 */
54325 	uint8_t	valid;
54326 } __rte_packed;
54327 
54328 /* hwrm_nvm_write_cmd_err (size:64b/8B) */
54329 struct hwrm_nvm_write_cmd_err {
54330 	/*
54331 	 * command specific error codes that goes to
54332 	 * the cmd_err field in Common HWRM Error Response.
54333 	 */
54334 	uint8_t	code;
54335 	/* Unknown error */
54336 	#define HWRM_NVM_WRITE_CMD_ERR_CODE_UNKNOWN  UINT32_C(0x0)
54337 	/* Unable to complete operation due to fragmentation */
54338 	#define HWRM_NVM_WRITE_CMD_ERR_CODE_FRAG_ERR UINT32_C(0x1)
54339 	/* nvm is completely full. */
54340 	#define HWRM_NVM_WRITE_CMD_ERR_CODE_NO_SPACE UINT32_C(0x2)
54341 	#define HWRM_NVM_WRITE_CMD_ERR_CODE_LAST \
54342 		HWRM_NVM_WRITE_CMD_ERR_CODE_NO_SPACE
54343 	uint8_t	unused_0[7];
54344 } __rte_packed;
54345 
54346 /*******************
54347  * hwrm_nvm_modify *
54348  *******************/
54349 
54350 
54351 /* hwrm_nvm_modify_input (size:320b/40B) */
54352 struct hwrm_nvm_modify_input {
54353 	/* The HWRM command request type. */
54354 	uint16_t	req_type;
54355 	/*
54356 	 * The completion ring to send the completion event on. This should
54357 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
54358 	 */
54359 	uint16_t	cmpl_ring;
54360 	/*
54361 	 * The sequence ID is used by the driver for tracking multiple
54362 	 * commands. This ID is treated as opaque data by the firmware and
54363 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
54364 	 */
54365 	uint16_t	seq_id;
54366 	/*
54367 	 * The target ID of the command:
54368 	 * * 0x0-0xFFF8 - The function ID
54369 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
54370 	 * * 0xFFFD - Reserved for user-space HWRM interface
54371 	 * * 0xFFFF - HWRM
54372 	 */
54373 	uint16_t	target_id;
54374 	/*
54375 	 * A physical address pointer pointing to a host buffer that the
54376 	 * command's response data will be written. This can be either a host
54377 	 * physical address (HPA) or a guest physical address (GPA) and must
54378 	 * point to a physically contiguous block of memory.
54379 	 */
54380 	uint64_t	resp_addr;
54381 	/*
54382 	 * 64-bit Host Source Address.
54383 	 * This is where the modified data is.
54384 	 */
54385 	uint64_t	host_src_addr;
54386 	/* 16-bit directory entry index. */
54387 	uint16_t	dir_idx;
54388 	uint16_t	flags;
54389 	/*
54390 	 * This flag indicates the sender wants to modify a continuous NVRAM
54391 	 * area using a batch of this HWRM requests. The offset of a request
54392 	 * must be continuous to the end of previous request's. Firmware does
54393 	 * not update the directory entry until receiving the last request,
54394 	 * which is indicated by the batch_last flag.
54395 	 * This flag is set usually when a sender does not have a block of
54396 	 * memory that is big enough to hold the entire NVRAM data for send
54397 	 * at one time.
54398 	 */
54399 	#define HWRM_NVM_MODIFY_INPUT_FLAGS_BATCH_MODE     UINT32_C(0x1)
54400 	/*
54401 	 * This flag can be used only when the batch_mode flag is set.
54402 	 * It indicates this request is the last of batch requests.
54403 	 */
54404 	#define HWRM_NVM_MODIFY_INPUT_FLAGS_BATCH_LAST     UINT32_C(0x2)
54405 	/* 32-bit NVRAM byte-offset to modify content from. */
54406 	uint32_t	offset;
54407 	/*
54408 	 * Length of data to be modified, in bytes. The length shall
54409 	 * be non-zero.
54410 	 */
54411 	uint32_t	len;
54412 	uint8_t	unused_1[4];
54413 } __rte_packed;
54414 
54415 /* hwrm_nvm_modify_output (size:128b/16B) */
54416 struct hwrm_nvm_modify_output {
54417 	/* The specific error status for the command. */
54418 	uint16_t	error_code;
54419 	/* The HWRM command request type. */
54420 	uint16_t	req_type;
54421 	/* The sequence ID from the original command. */
54422 	uint16_t	seq_id;
54423 	/* The length of the response data in number of bytes. */
54424 	uint16_t	resp_len;
54425 	uint8_t	unused_0[7];
54426 	/*
54427 	 * This field is used in Output records to indicate that the output
54428 	 * is completely written to RAM.  This field should be read as '1'
54429 	 * to indicate that the output has been completely written.
54430 	 * When writing a command completion or response to an internal processor,
54431 	 * the order of writes has to be such that this field is written last.
54432 	 */
54433 	uint8_t	valid;
54434 } __rte_packed;
54435 
54436 /***************************
54437  * hwrm_nvm_find_dir_entry *
54438  ***************************/
54439 
54440 
54441 /* hwrm_nvm_find_dir_entry_input (size:256b/32B) */
54442 struct hwrm_nvm_find_dir_entry_input {
54443 	/* The HWRM command request type. */
54444 	uint16_t	req_type;
54445 	/*
54446 	 * The completion ring to send the completion event on. This should
54447 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
54448 	 */
54449 	uint16_t	cmpl_ring;
54450 	/*
54451 	 * The sequence ID is used by the driver for tracking multiple
54452 	 * commands. This ID is treated as opaque data by the firmware and
54453 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
54454 	 */
54455 	uint16_t	seq_id;
54456 	/*
54457 	 * The target ID of the command:
54458 	 * * 0x0-0xFFF8 - The function ID
54459 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
54460 	 * * 0xFFFD - Reserved for user-space HWRM interface
54461 	 * * 0xFFFF - HWRM
54462 	 */
54463 	uint16_t	target_id;
54464 	/*
54465 	 * A physical address pointer pointing to a host buffer that the
54466 	 * command's response data will be written. This can be either a host
54467 	 * physical address (HPA) or a guest physical address (GPA) and must
54468 	 * point to a physically contiguous block of memory.
54469 	 */
54470 	uint64_t	resp_addr;
54471 	uint32_t	enables;
54472 	/*
54473 	 * This bit must be '1' for the dir_idx_valid field to be
54474 	 * configured.
54475 	 */
54476 	#define HWRM_NVM_FIND_DIR_ENTRY_INPUT_ENABLES_DIR_IDX_VALID \
54477 		UINT32_C(0x1)
54478 	/* Directory Entry Index */
54479 	uint16_t	dir_idx;
54480 	/* Directory Entry (Image) Type */
54481 	uint16_t	dir_type;
54482 	/*
54483 	 * Directory ordinal.
54484 	 * The instance of this Directory Type
54485 	 */
54486 	uint16_t	dir_ordinal;
54487 	/* The Directory Entry Extension flags. */
54488 	uint16_t	dir_ext;
54489 	/* This value indicates the search option using dir_ordinal. */
54490 	uint8_t	opt_ordinal;
54491 	/* This value indicates the search option using dir_ordinal. */
54492 	#define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_MASK UINT32_C(0x3)
54493 	#define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_SFT 0
54494 	/* Equal to specified ordinal value. */
54495 	#define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_EQ    UINT32_C(0x0)
54496 	/* Greater than or equal to specified ordinal value */
54497 	#define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_GE    UINT32_C(0x1)
54498 	/* Greater than specified ordinal value */
54499 	#define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_GT    UINT32_C(0x2)
54500 	#define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_LAST \
54501 		HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_GT
54502 	uint8_t	unused_0[3];
54503 } __rte_packed;
54504 
54505 /* hwrm_nvm_find_dir_entry_output (size:256b/32B) */
54506 struct hwrm_nvm_find_dir_entry_output {
54507 	/* The specific error status for the command. */
54508 	uint16_t	error_code;
54509 	/* The HWRM command request type. */
54510 	uint16_t	req_type;
54511 	/* The sequence ID from the original command. */
54512 	uint16_t	seq_id;
54513 	/* The length of the response data in number of bytes. */
54514 	uint16_t	resp_len;
54515 	/* Allocated NVRAM for this directory entry, in bytes. */
54516 	uint32_t	dir_item_length;
54517 	/* Size of the stored data for this directory entry, in bytes. */
54518 	uint32_t	dir_data_length;
54519 	/*
54520 	 * Firmware version.
54521 	 * Only valid if the directory entry is for embedded firmware stored
54522 	 * in APE_BIN Format.
54523 	 */
54524 	uint32_t	fw_ver;
54525 	/* Directory ordinal. */
54526 	uint16_t	dir_ordinal;
54527 	/* Directory Entry Index */
54528 	uint16_t	dir_idx;
54529 	uint8_t	unused_0[7];
54530 	/*
54531 	 * This field is used in Output records to indicate that the output
54532 	 * is completely written to RAM.  This field should be read as '1'
54533 	 * to indicate that the output has been completely written.
54534 	 * When writing a command completion or response to an internal processor,
54535 	 * the order of writes has to be such that this field is written last.
54536 	 */
54537 	uint8_t	valid;
54538 } __rte_packed;
54539 
54540 /****************************
54541  * hwrm_nvm_erase_dir_entry *
54542  ****************************/
54543 
54544 
54545 /* hwrm_nvm_erase_dir_entry_input (size:192b/24B) */
54546 struct hwrm_nvm_erase_dir_entry_input {
54547 	/* The HWRM command request type. */
54548 	uint16_t	req_type;
54549 	/*
54550 	 * The completion ring to send the completion event on. This should
54551 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
54552 	 */
54553 	uint16_t	cmpl_ring;
54554 	/*
54555 	 * The sequence ID is used by the driver for tracking multiple
54556 	 * commands. This ID is treated as opaque data by the firmware and
54557 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
54558 	 */
54559 	uint16_t	seq_id;
54560 	/*
54561 	 * The target ID of the command:
54562 	 * * 0x0-0xFFF8 - The function ID
54563 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
54564 	 * * 0xFFFD - Reserved for user-space HWRM interface
54565 	 * * 0xFFFF - HWRM
54566 	 */
54567 	uint16_t	target_id;
54568 	/*
54569 	 * A physical address pointer pointing to a host buffer that the
54570 	 * command's response data will be written. This can be either a host
54571 	 * physical address (HPA) or a guest physical address (GPA) and must
54572 	 * point to a physically contiguous block of memory.
54573 	 */
54574 	uint64_t	resp_addr;
54575 	/* Directory Entry Index */
54576 	uint16_t	dir_idx;
54577 	uint8_t	unused_0[6];
54578 } __rte_packed;
54579 
54580 /* hwrm_nvm_erase_dir_entry_output (size:128b/16B) */
54581 struct hwrm_nvm_erase_dir_entry_output {
54582 	/* The specific error status for the command. */
54583 	uint16_t	error_code;
54584 	/* The HWRM command request type. */
54585 	uint16_t	req_type;
54586 	/* The sequence ID from the original command. */
54587 	uint16_t	seq_id;
54588 	/* The length of the response data in number of bytes. */
54589 	uint16_t	resp_len;
54590 	uint8_t	unused_0[7];
54591 	/*
54592 	 * This field is used in Output records to indicate that the output
54593 	 * is completely written to RAM.  This field should be read as '1'
54594 	 * to indicate that the output has been completely written.
54595 	 * When writing a command completion or response to an internal processor,
54596 	 * the order of writes has to be such that this field is written last.
54597 	 */
54598 	uint8_t	valid;
54599 } __rte_packed;
54600 
54601 /*************************
54602  * hwrm_nvm_get_dev_info *
54603  *************************/
54604 
54605 
54606 /* hwrm_nvm_get_dev_info_input (size:128b/16B) */
54607 struct hwrm_nvm_get_dev_info_input {
54608 	/* The HWRM command request type. */
54609 	uint16_t	req_type;
54610 	/*
54611 	 * The completion ring to send the completion event on. This should
54612 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
54613 	 */
54614 	uint16_t	cmpl_ring;
54615 	/*
54616 	 * The sequence ID is used by the driver for tracking multiple
54617 	 * commands. This ID is treated as opaque data by the firmware and
54618 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
54619 	 */
54620 	uint16_t	seq_id;
54621 	/*
54622 	 * The target ID of the command:
54623 	 * * 0x0-0xFFF8 - The function ID
54624 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
54625 	 * * 0xFFFD - Reserved for user-space HWRM interface
54626 	 * * 0xFFFF - HWRM
54627 	 */
54628 	uint16_t	target_id;
54629 	/*
54630 	 * A physical address pointer pointing to a host buffer that the
54631 	 * command's response data will be written. This can be either a host
54632 	 * physical address (HPA) or a guest physical address (GPA) and must
54633 	 * point to a physically contiguous block of memory.
54634 	 */
54635 	uint64_t	resp_addr;
54636 } __rte_packed;
54637 
54638 /* hwrm_nvm_get_dev_info_output (size:640b/80B) */
54639 struct hwrm_nvm_get_dev_info_output {
54640 	/* The specific error status for the command. */
54641 	uint16_t	error_code;
54642 	/* The HWRM command request type. */
54643 	uint16_t	req_type;
54644 	/* The sequence ID from the original command. */
54645 	uint16_t	seq_id;
54646 	/* The length of the response data in number of bytes. */
54647 	uint16_t	resp_len;
54648 	/* Manufacturer ID. */
54649 	uint16_t	manufacturer_id;
54650 	/* Device ID. */
54651 	uint16_t	device_id;
54652 	/* Sector size of the NVRAM device. */
54653 	uint32_t	sector_size;
54654 	/* Total size, in bytes of the NVRAM device. */
54655 	uint32_t	nvram_size;
54656 	uint32_t	reserved_size;
54657 	/*
54658 	 * Available size that can be used, in bytes.  Available size is the
54659 	 * NVRAM size take away the used size and reserved size.
54660 	 */
54661 	uint32_t	available_size;
54662 	/* This field represents the major version of NVM cfg */
54663 	uint8_t	nvm_cfg_ver_maj;
54664 	/* This field represents the minor version of NVM cfg */
54665 	uint8_t	nvm_cfg_ver_min;
54666 	/* This field represents the update version of NVM cfg */
54667 	uint8_t	nvm_cfg_ver_upd;
54668 	uint8_t	flags;
54669 	/*
54670 	 * If set to 1, firmware will provide various firmware version
54671 	 * information stored in the flash.
54672 	 */
54673 	#define HWRM_NVM_GET_DEV_INFO_OUTPUT_FLAGS_FW_VER_VALID \
54674 		UINT32_C(0x1)
54675 	/*
54676 	 * This field represents the board package name stored in the flash.
54677 	 * (ASCII chars with NULL at the end).
54678 	 */
54679 	char	pkg_name[16];
54680 	/*
54681 	 * This field represents the major version of HWRM firmware, stored in
54682 	 * the flash.
54683 	 */
54684 	uint16_t	hwrm_fw_major;
54685 	/*
54686 	 * This field represents the minor version of HWRM firmware, stored in
54687 	 * the flash.
54688 	 */
54689 	uint16_t	hwrm_fw_minor;
54690 	/*
54691 	 * This field represents the build version of HWRM firmware, stored in
54692 	 * the flash.
54693 	 */
54694 	uint16_t	hwrm_fw_build;
54695 	/*
54696 	 * This field can be used to represent firmware branches or customer
54697 	 * specific releases tied to a specific (major, minor, build) version
54698 	 * of the HWRM firmware.
54699 	 */
54700 	uint16_t	hwrm_fw_patch;
54701 	/*
54702 	 * This field represents the major version of mgmt firmware, stored in
54703 	 * the flash.
54704 	 */
54705 	uint16_t	mgmt_fw_major;
54706 	/*
54707 	 * This field represents the minor version of mgmt firmware, stored in
54708 	 * the flash.
54709 	 */
54710 	uint16_t	mgmt_fw_minor;
54711 	/*
54712 	 * This field represents the build version of mgmt firmware, stored in
54713 	 * the flash.
54714 	 */
54715 	uint16_t	mgmt_fw_build;
54716 	/*
54717 	 * This field can be used to represent firmware branches or customer
54718 	 * specific releases tied to a specific (major, minor, build) version
54719 	 * of the mgmt firmware.
54720 	 */
54721 	uint16_t	mgmt_fw_patch;
54722 	/*
54723 	 * This field represents the major version of roce firmware, stored in
54724 	 * the flash.
54725 	 */
54726 	uint16_t	roce_fw_major;
54727 	/*
54728 	 * This field represents the minor version of roce firmware, stored in
54729 	 * the flash.
54730 	 */
54731 	uint16_t	roce_fw_minor;
54732 	/*
54733 	 * This field represents the build version of roce firmware, stored in
54734 	 * the flash.
54735 	 */
54736 	uint16_t	roce_fw_build;
54737 	/*
54738 	 * This field can be used to represent firmware branches or customer
54739 	 * specific releases tied to a specific (major, minor, build) version
54740 	 * of the roce firmware.
54741 	 */
54742 	uint16_t	roce_fw_patch;
54743 	uint8_t	unused_0[7];
54744 	/*
54745 	 * This field is used in Output records to indicate that the output
54746 	 * is completely written to RAM.  This field should be read as '1'
54747 	 * to indicate that the output has been completely written.
54748 	 * When writing a command completion or response to an internal processor,
54749 	 * the order of writes has to be such that this field is written last.
54750 	 */
54751 	uint8_t	valid;
54752 } __rte_packed;
54753 
54754 /**************************
54755  * hwrm_nvm_mod_dir_entry *
54756  **************************/
54757 
54758 
54759 /* hwrm_nvm_mod_dir_entry_input (size:256b/32B) */
54760 struct hwrm_nvm_mod_dir_entry_input {
54761 	/* The HWRM command request type. */
54762 	uint16_t	req_type;
54763 	/*
54764 	 * The completion ring to send the completion event on. This should
54765 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
54766 	 */
54767 	uint16_t	cmpl_ring;
54768 	/*
54769 	 * The sequence ID is used by the driver for tracking multiple
54770 	 * commands. This ID is treated as opaque data by the firmware and
54771 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
54772 	 */
54773 	uint16_t	seq_id;
54774 	/*
54775 	 * The target ID of the command:
54776 	 * * 0x0-0xFFF8 - The function ID
54777 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
54778 	 * * 0xFFFD - Reserved for user-space HWRM interface
54779 	 * * 0xFFFF - HWRM
54780 	 */
54781 	uint16_t	target_id;
54782 	/*
54783 	 * A physical address pointer pointing to a host buffer that the
54784 	 * command's response data will be written. This can be either a host
54785 	 * physical address (HPA) or a guest physical address (GPA) and must
54786 	 * point to a physically contiguous block of memory.
54787 	 */
54788 	uint64_t	resp_addr;
54789 	uint32_t	enables;
54790 	/*
54791 	 * This bit must be '1' for the checksum field to be
54792 	 * configured.
54793 	 */
54794 	#define HWRM_NVM_MOD_DIR_ENTRY_INPUT_ENABLES_CHECKSUM     UINT32_C(0x1)
54795 	/* Directory Entry Index */
54796 	uint16_t	dir_idx;
54797 	/*
54798 	 * Directory ordinal.
54799 	 * The (0-based) instance of this Directory Type.
54800 	 */
54801 	uint16_t	dir_ordinal;
54802 	/*
54803 	 * The Directory Entry Extension flags (see BNX_DIR_EXT_* for
54804 	 * extension flag definitions).
54805 	 */
54806 	uint16_t	dir_ext;
54807 	/*
54808 	 * Directory Entry Attribute flags (see BNX_DIR_ATTR_* for attribute
54809 	 * flag definitions).
54810 	 */
54811 	uint16_t	dir_attr;
54812 	/*
54813 	 * If valid, then this field updates the checksum
54814 	 * value of the content in the directory entry.
54815 	 */
54816 	uint32_t	checksum;
54817 } __rte_packed;
54818 
54819 /* hwrm_nvm_mod_dir_entry_output (size:128b/16B) */
54820 struct hwrm_nvm_mod_dir_entry_output {
54821 	/* The specific error status for the command. */
54822 	uint16_t	error_code;
54823 	/* The HWRM command request type. */
54824 	uint16_t	req_type;
54825 	/* The sequence ID from the original command. */
54826 	uint16_t	seq_id;
54827 	/* The length of the response data in number of bytes. */
54828 	uint16_t	resp_len;
54829 	uint8_t	unused_0[7];
54830 	/*
54831 	 * This field is used in Output records to indicate that the output
54832 	 * is completely written to RAM.  This field should be read as '1'
54833 	 * to indicate that the output has been completely written.
54834 	 * When writing a command completion or response to an internal processor,
54835 	 * the order of writes has to be such that this field is written last.
54836 	 */
54837 	uint8_t	valid;
54838 } __rte_packed;
54839 
54840 /**************************
54841  * hwrm_nvm_verify_update *
54842  **************************/
54843 
54844 
54845 /* hwrm_nvm_verify_update_input (size:192b/24B) */
54846 struct hwrm_nvm_verify_update_input {
54847 	/* The HWRM command request type. */
54848 	uint16_t	req_type;
54849 	/*
54850 	 * The completion ring to send the completion event on. This should
54851 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
54852 	 */
54853 	uint16_t	cmpl_ring;
54854 	/*
54855 	 * The sequence ID is used by the driver for tracking multiple
54856 	 * commands. This ID is treated as opaque data by the firmware and
54857 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
54858 	 */
54859 	uint16_t	seq_id;
54860 	/*
54861 	 * The target ID of the command:
54862 	 * * 0x0-0xFFF8 - The function ID
54863 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
54864 	 * * 0xFFFD - Reserved for user-space HWRM interface
54865 	 * * 0xFFFF - HWRM
54866 	 */
54867 	uint16_t	target_id;
54868 	/*
54869 	 * A physical address pointer pointing to a host buffer that the
54870 	 * command's response data will be written. This can be either a host
54871 	 * physical address (HPA) or a guest physical address (GPA) and must
54872 	 * point to a physically contiguous block of memory.
54873 	 */
54874 	uint64_t	resp_addr;
54875 	/* Directory Entry Type, to be verified. */
54876 	uint16_t	dir_type;
54877 	/*
54878 	 * Directory ordinal.
54879 	 * The instance of the Directory Type to be verified.
54880 	 */
54881 	uint16_t	dir_ordinal;
54882 	/*
54883 	 * The Directory Entry Extension flags.
54884 	 * The "UPDATE" extension flag must be set in this value.
54885 	 * A corresponding directory entry with the same type and ordinal
54886 	 * values but *without*
54887 	 * the "UPDATE" extension flag must also exist. The other flags of
54888 	 * the extension must
54889 	 * be identical between the active and update entries.
54890 	 */
54891 	uint16_t	dir_ext;
54892 	uint8_t	unused_0[2];
54893 } __rte_packed;
54894 
54895 /* hwrm_nvm_verify_update_output (size:128b/16B) */
54896 struct hwrm_nvm_verify_update_output {
54897 	/* The specific error status for the command. */
54898 	uint16_t	error_code;
54899 	/* The HWRM command request type. */
54900 	uint16_t	req_type;
54901 	/* The sequence ID from the original command. */
54902 	uint16_t	seq_id;
54903 	/* The length of the response data in number of bytes. */
54904 	uint16_t	resp_len;
54905 	uint8_t	unused_0[7];
54906 	/*
54907 	 * This field is used in Output records to indicate that the output
54908 	 * is completely written to RAM.  This field should be read as '1'
54909 	 * to indicate that the output has been completely written.
54910 	 * When writing a command completion or response to an internal processor,
54911 	 * the order of writes has to be such that this field is written last.
54912 	 */
54913 	uint8_t	valid;
54914 } __rte_packed;
54915 
54916 /***************************
54917  * hwrm_nvm_install_update *
54918  ***************************/
54919 
54920 
54921 /* hwrm_nvm_install_update_input (size:192b/24B) */
54922 struct hwrm_nvm_install_update_input {
54923 	/* The HWRM command request type. */
54924 	uint16_t	req_type;
54925 	/*
54926 	 * The completion ring to send the completion event on. This should
54927 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
54928 	 */
54929 	uint16_t	cmpl_ring;
54930 	/*
54931 	 * The sequence ID is used by the driver for tracking multiple
54932 	 * commands. This ID is treated as opaque data by the firmware and
54933 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
54934 	 */
54935 	uint16_t	seq_id;
54936 	/*
54937 	 * The target ID of the command:
54938 	 * * 0x0-0xFFF8 - The function ID
54939 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
54940 	 * * 0xFFFD - Reserved for user-space HWRM interface
54941 	 * * 0xFFFF - HWRM
54942 	 */
54943 	uint16_t	target_id;
54944 	/*
54945 	 * A physical address pointer pointing to a host buffer that the
54946 	 * command's response data will be written. This can be either a host
54947 	 * physical address (HPA) or a guest physical address (GPA) and must
54948 	 * point to a physically contiguous block of memory.
54949 	 */
54950 	uint64_t	resp_addr;
54951 	/*
54952 	 * Installation type. If the value 3 through 0xffff is used,
54953 	 * only packaged items with that type value will be installed and
54954 	 * conditional installation directives for those packaged items
54955 	 * will be over-ridden (i.e. 'create' or 'replace' will be treated
54956 	 * as 'install').
54957 	 */
54958 	uint32_t	install_type;
54959 	/*
54960 	 * Perform a normal package installation. Conditional installation
54961 	 * directives (e.g. 'create' and 'replace') of packaged items
54962 	 * will be followed.
54963 	 */
54964 	#define HWRM_NVM_INSTALL_UPDATE_INPUT_INSTALL_TYPE_NORMAL UINT32_C(0x0)
54965 	/*
54966 	 * Install all packaged items regardless of installation directive
54967 	 * (i.e. treat all packaged items as though they have an installation
54968 	 * directive of 'install').
54969 	 */
54970 	#define HWRM_NVM_INSTALL_UPDATE_INPUT_INSTALL_TYPE_ALL \
54971 		UINT32_C(0xffffffff)
54972 	#define HWRM_NVM_INSTALL_UPDATE_INPUT_INSTALL_TYPE_LAST \
54973 		HWRM_NVM_INSTALL_UPDATE_INPUT_INSTALL_TYPE_ALL
54974 	uint16_t	flags;
54975 	/*
54976 	 * If set to 1, then securely erase all unused locations in
54977 	 * persistent storage.
54978 	 */
54979 	#define HWRM_NVM_INSTALL_UPDATE_INPUT_FLAGS_ERASE_UNUSED_SPACE \
54980 		UINT32_C(0x1)
54981 	/*
54982 	 * If set to 1, then unspecified images, images not in the package
54983 	 * file, will be safely deleted.
54984 	 * When combined with erase_unused_space then unspecified images will
54985 	 * be securely erased.
54986 	 */
54987 	#define HWRM_NVM_INSTALL_UPDATE_INPUT_FLAGS_REMOVE_UNUSED_PKG \
54988 		UINT32_C(0x2)
54989 	/*
54990 	 * If set to 1, FW will defragment the NVM if defragmentation is
54991 	 * required for the update.
54992 	 * Allow additional time for this command to complete if this bit is
54993 	 * set to 1.
54994 	 */
54995 	#define HWRM_NVM_INSTALL_UPDATE_INPUT_FLAGS_ALLOWED_TO_DEFRAG \
54996 		UINT32_C(0x4)
54997 	/*
54998 	 * If set to 1, FW will verify the package in the "UPDATE" NVM item
54999 	 * without installing it. This flag is for FW internal use only.
55000 	 * Users should not set this flag. The request will otherwise fail.
55001 	 */
55002 	#define HWRM_NVM_INSTALL_UPDATE_INPUT_FLAGS_VERIFY_ONLY \
55003 		UINT32_C(0x8)
55004 	uint8_t	unused_0[2];
55005 } __rte_packed;
55006 
55007 /* hwrm_nvm_install_update_output (size:192b/24B) */
55008 struct hwrm_nvm_install_update_output {
55009 	/* The specific error status for the command. */
55010 	uint16_t	error_code;
55011 	/* The HWRM command request type. */
55012 	uint16_t	req_type;
55013 	/* The sequence ID from the original command. */
55014 	uint16_t	seq_id;
55015 	/* The length of the response data in number of bytes. */
55016 	uint16_t	resp_len;
55017 	/*
55018 	 * Bit-mask of successfully installed items.
55019 	 * Bit-0 corresponding to the first packaged item, Bit-1 for the second item, etc.
55020 	 * A value of 0 indicates that no items were successfully installed.
55021 	 */
55022 	uint64_t	installed_items;
55023 	/* result is 8 b corresponding to BCMRETVAL error codes */
55024 	uint8_t	result;
55025 	/* There was no problem with the package installation. */
55026 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_SUCCESS \
55027 		UINT32_C(0x0)
55028 	/* Generic failure */
55029 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_FAILURE \
55030 		UINT32_C(0xff)
55031 	/* Allocation error malloc failure */
55032 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_MALLOC_FAILURE \
55033 		UINT32_C(0xfd)
55034 	/* NVM install error due to invalid index */
55035 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INVALID_INDEX_PARAMETER \
55036 		UINT32_C(0xfb)
55037 	/* NVM install error due to invalid type */
55038 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INVALID_TYPE_PARAMETER \
55039 		UINT32_C(0xf3)
55040 	/* Invalid package due to invalid prerequisite */
55041 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INVALID_PREREQUISITE \
55042 		UINT32_C(0xf2)
55043 	/* Invalid package due to invalid file header */
55044 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INVALID_FILE_HEADER \
55045 		UINT32_C(0xec)
55046 	/* Invalid package due to invalid format */
55047 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INVALID_SIGNATURE \
55048 		UINT32_C(0xeb)
55049 	/* Invalid package due to invalid property stream */
55050 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INVALID_PROP_STREAM \
55051 		UINT32_C(0xea)
55052 	/* Invalid package due to invalid property length */
55053 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INVALID_PROP_LENGTH \
55054 		UINT32_C(0xe9)
55055 	/* Invalid package due to invalid manifest */
55056 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INVALID_MANIFEST \
55057 		UINT32_C(0xe8)
55058 	/* Invalid package due to invalid trailer */
55059 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INVALID_TRAILER \
55060 		UINT32_C(0xe7)
55061 	/* Invalid package due to invalid checksum */
55062 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INVALID_CHECKSUM \
55063 		UINT32_C(0xe6)
55064 	/* Invalid package due to invalid item checksum */
55065 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INVALID_ITEM_CHECKSUM \
55066 		UINT32_C(0xe5)
55067 	/* Invalid package due to invalid length */
55068 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INVALID_DATA_LENGTH \
55069 		UINT32_C(0xe4)
55070 	/* Invalid package due to invalid directive */
55071 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INVALID_DIRECTIVE \
55072 		UINT32_C(0xe1)
55073 	/* Invalid device due to unsupported chip revision */
55074 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_UNSUPPORTED_CHIP_REV \
55075 		UINT32_C(0xce)
55076 	/* Invalid device due to unsupported device ID */
55077 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_UNSUPPORTED_DEVICE_ID \
55078 		UINT32_C(0xcd)
55079 	/* Invalid device due to unsupported subsystem vendor */
55080 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_UNSUPPORTED_SUBSYS_VENDOR \
55081 		UINT32_C(0xcc)
55082 	/* Invalid device due to unsupported subsystem ID */
55083 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_UNSUPPORTED_SUBSYS_ID \
55084 		UINT32_C(0xcb)
55085 	/* Invalid device due to unsupported product ID or customer ID */
55086 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_UNSUPPORTED_PLATFORM \
55087 		UINT32_C(0xc5)
55088 	/* Invalid package due to duplicate item */
55089 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_DUPLICATE_ITEM \
55090 		UINT32_C(0xc4)
55091 	/* Invalid package due to zero length item */
55092 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_ZERO_LENGTH_ITEM \
55093 		UINT32_C(0xc3)
55094 	/* NVM integrity error checksum */
55095 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INSTALL_CHECKSUM_ERROR \
55096 		UINT32_C(0xb9)
55097 	/* NVM integrity error */
55098 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INSTALL_DATA_ERROR \
55099 		UINT32_C(0xb8)
55100 	/* Authentication error */
55101 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_INSTALL_AUTHENTICATION_ERROR \
55102 		UINT32_C(0xb7)
55103 	/* NVM install error item not found */
55104 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_ITEM_NOT_FOUND \
55105 		UINT32_C(0xb0)
55106 	/* NVM install error item locked */
55107 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_ITEM_LOCKED \
55108 		UINT32_C(0xa7)
55109 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_LAST \
55110 		HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_ITEM_LOCKED
55111 	/* problem_item is 8 b */
55112 	uint8_t	problem_item;
55113 	/* There was no problem with any packaged items. */
55114 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_PROBLEM_ITEM_NONE \
55115 		UINT32_C(0x0)
55116 	/* There was a problem with the NVM package itself. */
55117 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_PROBLEM_ITEM_PACKAGE \
55118 		UINT32_C(0xff)
55119 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_PROBLEM_ITEM_LAST \
55120 		HWRM_NVM_INSTALL_UPDATE_OUTPUT_PROBLEM_ITEM_PACKAGE
55121 	/* reset_required is 8 b */
55122 	uint8_t	reset_required;
55123 	/*
55124 	 * No reset is required for installed/updated firmware or
55125 	 * microcode to take effect.
55126 	 */
55127 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_NONE \
55128 		UINT32_C(0x0)
55129 	/*
55130 	 * A PCIe reset (e.g. system reboot) is
55131 	 * required for newly installed/updated firmware or
55132 	 * microcode to take effect.
55133 	 */
55134 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_PCI \
55135 		UINT32_C(0x1)
55136 	/*
55137 	 * A controller power reset (e.g. system power-cycle) is
55138 	 * required for newly installed/updated firmware or
55139 	 * microcode to take effect. Some newly installed/updated
55140 	 * firmware or microcode may still take effect upon the
55141 	 * next PCIe reset.
55142 	 */
55143 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_POWER \
55144 		UINT32_C(0x2)
55145 	#define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_LAST \
55146 		HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_POWER
55147 	uint8_t	unused_0[4];
55148 	/*
55149 	 * This field is used in Output records to indicate that the output
55150 	 * is completely written to RAM.  This field should be read as '1'
55151 	 * to indicate that the output has been completely written.
55152 	 * When writing a command completion or response to an internal processor,
55153 	 * the order of writes has to be such that this field is written last.
55154 	 */
55155 	uint8_t	valid;
55156 } __rte_packed;
55157 
55158 /* hwrm_nvm_install_update_cmd_err (size:64b/8B) */
55159 struct hwrm_nvm_install_update_cmd_err {
55160 	/*
55161 	 * command specific error codes that goes to
55162 	 * the cmd_err field in Common HWRM Error Response.
55163 	 */
55164 	uint8_t	code;
55165 	/* Unknown error */
55166 	#define HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_UNKNOWN \
55167 		UINT32_C(0x0)
55168 	/* Unable to complete operation due to fragmentation */
55169 	#define HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_FRAG_ERR \
55170 		UINT32_C(0x1)
55171 	/* nvm is completely full. */
55172 	#define HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_NO_SPACE \
55173 		UINT32_C(0x2)
55174 	/* Firmware update failed due to Anti-rollback. */
55175 	#define HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_ANTI_ROLLBACK \
55176 		UINT32_C(0x3)
55177 	#define HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_LAST \
55178 		HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_ANTI_ROLLBACK
55179 	uint8_t	unused_0[7];
55180 } __rte_packed;
55181 
55182 /******************
55183  * hwrm_nvm_flush *
55184  ******************/
55185 
55186 
55187 /* hwrm_nvm_flush_input (size:128b/16B) */
55188 struct hwrm_nvm_flush_input {
55189 	/* The HWRM command request type. */
55190 	uint16_t	req_type;
55191 	/*
55192 	 * The completion ring to send the completion event on. This should
55193 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
55194 	 */
55195 	uint16_t	cmpl_ring;
55196 	/*
55197 	 * The sequence ID is used by the driver for tracking multiple
55198 	 * commands. This ID is treated as opaque data by the firmware and
55199 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
55200 	 */
55201 	uint16_t	seq_id;
55202 	/*
55203 	 * The target ID of the command:
55204 	 * * 0x0-0xFFF8 - The function ID
55205 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
55206 	 * * 0xFFFD - Reserved for user-space HWRM interface
55207 	 * * 0xFFFF - HWRM
55208 	 */
55209 	uint16_t	target_id;
55210 	/*
55211 	 * A physical address pointer pointing to a host buffer that the
55212 	 * command's response data will be written. This can be either a host
55213 	 * physical address (HPA) or a guest physical address (GPA) and must
55214 	 * point to a physically contiguous block of memory.
55215 	 */
55216 	uint64_t	resp_addr;
55217 } __rte_packed;
55218 
55219 /* hwrm_nvm_flush_output (size:128b/16B) */
55220 struct hwrm_nvm_flush_output {
55221 	/* The specific error status for the command. */
55222 	uint16_t	error_code;
55223 	/* The HWRM command request type. */
55224 	uint16_t	req_type;
55225 	/* The sequence ID from the original command. */
55226 	uint16_t	seq_id;
55227 	/* The length of the response data in number of bytes. */
55228 	uint16_t	resp_len;
55229 	uint8_t	unused_0[7];
55230 	/*
55231 	 * This field is used in Output records to indicate that the output
55232 	 * is completely written to RAM.  This field should be read as '1'
55233 	 * to indicate that the output has been completely written.
55234 	 * When writing a command completion or response to an internal processor,
55235 	 * the order of writes has to be such that this field is written last.
55236 	 */
55237 	uint8_t	valid;
55238 } __rte_packed;
55239 
55240 /* hwrm_nvm_flush_cmd_err (size:64b/8B) */
55241 struct hwrm_nvm_flush_cmd_err {
55242 	/*
55243 	 * command specific error codes that goes to
55244 	 * the cmd_err field in Common HWRM Error Response.
55245 	 */
55246 	uint8_t	code;
55247 	/* Unknown error */
55248 	#define HWRM_NVM_FLUSH_CMD_ERR_CODE_UNKNOWN UINT32_C(0x0)
55249 	/* flush could not be performed */
55250 	#define HWRM_NVM_FLUSH_CMD_ERR_CODE_FAIL    UINT32_C(0x1)
55251 	#define HWRM_NVM_FLUSH_CMD_ERR_CODE_LAST \
55252 		HWRM_NVM_FLUSH_CMD_ERR_CODE_FAIL
55253 	uint8_t	unused_0[7];
55254 } __rte_packed;
55255 
55256 /*************************
55257  * hwrm_nvm_get_variable *
55258  *************************/
55259 
55260 
55261 /* hwrm_nvm_get_variable_input (size:320b/40B) */
55262 struct hwrm_nvm_get_variable_input {
55263 	/* The HWRM command request type. */
55264 	uint16_t	req_type;
55265 	/*
55266 	 * The completion ring to send the completion event on. This should
55267 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
55268 	 */
55269 	uint16_t	cmpl_ring;
55270 	/*
55271 	 * The sequence ID is used by the driver for tracking multiple
55272 	 * commands. This ID is treated as opaque data by the firmware and
55273 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
55274 	 */
55275 	uint16_t	seq_id;
55276 	/*
55277 	 * The target ID of the command:
55278 	 * * 0x0-0xFFF8 - The function ID
55279 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
55280 	 * * 0xFFFD - Reserved for user-space HWRM interface
55281 	 * * 0xFFFF - HWRM
55282 	 */
55283 	uint16_t	target_id;
55284 	/*
55285 	 * A physical address pointer pointing to a host buffer that the
55286 	 * command's response data will be written. This can be either a host
55287 	 * physical address (HPA) or a guest physical address (GPA) and must
55288 	 * point to a physically contiguous block of memory.
55289 	 */
55290 	uint64_t	resp_addr;
55291 	/*
55292 	 * This is the host address where
55293 	 * nvm variable will be stored
55294 	 */
55295 	uint64_t	dest_data_addr;
55296 	/* size of data in bits */
55297 	uint16_t	data_len;
55298 	/* nvm cfg option number */
55299 	uint16_t	option_num;
55300 	/* reserved. */
55301 	#define HWRM_NVM_GET_VARIABLE_INPUT_OPTION_NUM_RSVD_0    UINT32_C(0x0)
55302 	/* reserved. */
55303 	#define HWRM_NVM_GET_VARIABLE_INPUT_OPTION_NUM_RSVD_FFFF \
55304 		UINT32_C(0xffff)
55305 	#define HWRM_NVM_GET_VARIABLE_INPUT_OPTION_NUM_LAST \
55306 		HWRM_NVM_GET_VARIABLE_INPUT_OPTION_NUM_RSVD_FFFF
55307 	/*
55308 	 * Number of dimensions for this nvm configuration variable.
55309 	 * This value indicates how many of the indexN values to use.
55310 	 * A value of 0 means that none of the indexN values are valid.
55311 	 * A value of 1 requires at index0 is valued, a value of 2
55312 	 * requires that index0 and index1 are valid, and so forth
55313 	 */
55314 	uint16_t	dimensions;
55315 	/* index for the 1st dimensions */
55316 	uint16_t	index_0;
55317 	/* index for the 2nd dimensions */
55318 	uint16_t	index_1;
55319 	/* index for the 3rd dimensions */
55320 	uint16_t	index_2;
55321 	/* index for the 4th dimensions */
55322 	uint16_t	index_3;
55323 	uint8_t	flags;
55324 	/*
55325 	 * When this bit is set to 1, the factory default value will be returned,
55326 	 * 0 returns the operational value.
55327 	 */
55328 	#define HWRM_NVM_GET_VARIABLE_INPUT_FLAGS_FACTORY_DFLT \
55329 		UINT32_C(0x1)
55330 	uint8_t	unused_0;
55331 } __rte_packed;
55332 
55333 /* hwrm_nvm_get_variable_output (size:128b/16B) */
55334 struct hwrm_nvm_get_variable_output {
55335 	/* The specific error status for the command. */
55336 	uint16_t	error_code;
55337 	/* The HWRM command request type. */
55338 	uint16_t	req_type;
55339 	/* The sequence ID from the original command. */
55340 	uint16_t	seq_id;
55341 	/* The length of the response data in number of bytes. */
55342 	uint16_t	resp_len;
55343 	/* size of data of the actual variable retrieved in bits */
55344 	uint16_t	data_len;
55345 	/*
55346 	 * option_num is the option number for the data retrieved. It is
55347 	 * possible in the future that the option number returned would be
55348 	 * different than requested. This condition could occur if an option is
55349 	 * deprecated and a new option id is defined with similar
55350 	 * characteristics, but has a slightly different definition. This
55351 	 * also makes it convenient for the caller to identify the variable
55352 	 * result with the option id from the response.
55353 	 */
55354 	uint16_t	option_num;
55355 	/* reserved. */
55356 	#define HWRM_NVM_GET_VARIABLE_OUTPUT_OPTION_NUM_RSVD_0    UINT32_C(0x0)
55357 	/* reserved. */
55358 	#define HWRM_NVM_GET_VARIABLE_OUTPUT_OPTION_NUM_RSVD_FFFF \
55359 		UINT32_C(0xffff)
55360 	#define HWRM_NVM_GET_VARIABLE_OUTPUT_OPTION_NUM_LAST \
55361 		HWRM_NVM_GET_VARIABLE_OUTPUT_OPTION_NUM_RSVD_FFFF
55362 	uint8_t	unused_0[3];
55363 	/*
55364 	 * This field is used in Output records to indicate that the output
55365 	 * is completely written to RAM.  This field should be read as '1'
55366 	 * to indicate that the output has been completely written.
55367 	 * When writing a command completion or response to an internal processor,
55368 	 * the order of writes has to be such that this field is written last.
55369 	 */
55370 	uint8_t	valid;
55371 } __rte_packed;
55372 
55373 /* hwrm_nvm_get_variable_cmd_err (size:64b/8B) */
55374 struct hwrm_nvm_get_variable_cmd_err {
55375 	/*
55376 	 * command specific error codes that goes to
55377 	 * the cmd_err field in Common HWRM Error Response.
55378 	 */
55379 	uint8_t	code;
55380 	/* Unknown error */
55381 	#define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_UNKNOWN       UINT32_C(0x0)
55382 	/* variable does not exist */
55383 	#define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_VAR_NOT_EXIST UINT32_C(0x1)
55384 	/* configuration is corrupted and the variable cannot be saved */
55385 	#define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_CORRUPT_VAR   UINT32_C(0x2)
55386 	/* length specified is too small */
55387 	#define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_LEN_TOO_SHORT UINT32_C(0x3)
55388 	#define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_LAST \
55389 		HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_LEN_TOO_SHORT
55390 	uint8_t	unused_0[7];
55391 } __rte_packed;
55392 
55393 /*************************
55394  * hwrm_nvm_set_variable *
55395  *************************/
55396 
55397 
55398 /* hwrm_nvm_set_variable_input (size:320b/40B) */
55399 struct hwrm_nvm_set_variable_input {
55400 	/* The HWRM command request type. */
55401 	uint16_t	req_type;
55402 	/*
55403 	 * The completion ring to send the completion event on. This should
55404 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
55405 	 */
55406 	uint16_t	cmpl_ring;
55407 	/*
55408 	 * The sequence ID is used by the driver for tracking multiple
55409 	 * commands. This ID is treated as opaque data by the firmware and
55410 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
55411 	 */
55412 	uint16_t	seq_id;
55413 	/*
55414 	 * The target ID of the command:
55415 	 * * 0x0-0xFFF8 - The function ID
55416 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
55417 	 * * 0xFFFD - Reserved for user-space HWRM interface
55418 	 * * 0xFFFF - HWRM
55419 	 */
55420 	uint16_t	target_id;
55421 	/*
55422 	 * A physical address pointer pointing to a host buffer that the
55423 	 * command's response data will be written. This can be either a host
55424 	 * physical address (HPA) or a guest physical address (GPA) and must
55425 	 * point to a physically contiguous block of memory.
55426 	 */
55427 	uint64_t	resp_addr;
55428 	/*
55429 	 * This is the host address where
55430 	 * nvm variable will be copied from
55431 	 */
55432 	uint64_t	src_data_addr;
55433 	/* size of data in bits */
55434 	uint16_t	data_len;
55435 	/* nvm cfg option number */
55436 	uint16_t	option_num;
55437 	/* reserved. */
55438 	#define HWRM_NVM_SET_VARIABLE_INPUT_OPTION_NUM_RSVD_0    UINT32_C(0x0)
55439 	/* reserved. */
55440 	#define HWRM_NVM_SET_VARIABLE_INPUT_OPTION_NUM_RSVD_FFFF \
55441 		UINT32_C(0xffff)
55442 	#define HWRM_NVM_SET_VARIABLE_INPUT_OPTION_NUM_LAST \
55443 		HWRM_NVM_SET_VARIABLE_INPUT_OPTION_NUM_RSVD_FFFF
55444 	/*
55445 	 * Number of dimensions for this nvm configuration variable.
55446 	 * This value indicates how many of the indexN values to use.
55447 	 * A value of 0 means that none of the indexN values are valid.
55448 	 * A value of 1 requires at index0 is valued, a value of 2
55449 	 * requires that index0 and index1 are valid, and so forth
55450 	 */
55451 	uint16_t	dimensions;
55452 	/* index for the 1st dimensions */
55453 	uint16_t	index_0;
55454 	/* index for the 2nd dimensions */
55455 	uint16_t	index_1;
55456 	/* index for the 3rd dimensions */
55457 	uint16_t	index_2;
55458 	/* index for the 4th dimensions */
55459 	uint16_t	index_3;
55460 	uint8_t	flags;
55461 	/*
55462 	 * When this bit is 1, flush internal cache after this write
55463 	 * operation (see hwrm_nvm_flush command.)
55464 	 */
55465 	#define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_FORCE_FLUSH \
55466 		UINT32_C(0x1)
55467 	/* encryption method */
55468 	#define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_MASK \
55469 		UINT32_C(0xe)
55470 	#define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_SFT           1
55471 	/* No encryption. */
55472 	#define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_NONE \
55473 		(UINT32_C(0x0) << 1)
55474 	/* one-way encryption. */
55475 	#define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_HMAC_SHA1 \
55476 		(UINT32_C(0x1) << 1)
55477 	/* symmetric AES256 encryption. */
55478 	#define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_AES256 \
55479 		(UINT32_C(0x2) << 1)
55480 	/* SHA1 digest appended to plaintext contents, for authentication */
55481 	#define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_HMAC_SHA1_AUTH \
55482 		(UINT32_C(0x3) << 1)
55483 	#define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_LAST \
55484 		HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_HMAC_SHA1_AUTH
55485 	#define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_FLAGS_UNUSED_0_MASK \
55486 		UINT32_C(0x70)
55487 	#define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_FLAGS_UNUSED_0_SFT         4
55488 	/* When this bit is 1, update the factory default region */
55489 	#define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_FACTORY_DEFAULT \
55490 		UINT32_C(0x80)
55491 	uint8_t	unused_0;
55492 } __rte_packed;
55493 
55494 /* hwrm_nvm_set_variable_output (size:128b/16B) */
55495 struct hwrm_nvm_set_variable_output {
55496 	/* The specific error status for the command. */
55497 	uint16_t	error_code;
55498 	/* The HWRM command request type. */
55499 	uint16_t	req_type;
55500 	/* The sequence ID from the original command. */
55501 	uint16_t	seq_id;
55502 	/* The length of the response data in number of bytes. */
55503 	uint16_t	resp_len;
55504 	uint8_t	unused_0[7];
55505 	/*
55506 	 * This field is used in Output records to indicate that the output
55507 	 * is completely written to RAM.  This field should be read as '1'
55508 	 * to indicate that the output has been completely written.
55509 	 * When writing a command completion or response to an internal processor,
55510 	 * the order of writes has to be such that this field is written last.
55511 	 */
55512 	uint8_t	valid;
55513 } __rte_packed;
55514 
55515 /* hwrm_nvm_set_variable_cmd_err (size:64b/8B) */
55516 struct hwrm_nvm_set_variable_cmd_err {
55517 	/*
55518 	 * command specific error codes that goes to
55519 	 * the cmd_err field in Common HWRM Error Response.
55520 	 */
55521 	uint8_t	code;
55522 	/* Unknown error */
55523 	#define HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_UNKNOWN       UINT32_C(0x0)
55524 	/* variable does not exist */
55525 	#define HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_VAR_NOT_EXIST UINT32_C(0x1)
55526 	/* configuration is corrupted and the variable cannot be saved */
55527 	#define HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_CORRUPT_VAR   UINT32_C(0x2)
55528 	#define HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_LAST \
55529 		HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_CORRUPT_VAR
55530 	uint8_t	unused_0[7];
55531 } __rte_packed;
55532 
55533 /****************************
55534  * hwrm_nvm_validate_option *
55535  ****************************/
55536 
55537 
55538 /* hwrm_nvm_validate_option_input (size:320b/40B) */
55539 struct hwrm_nvm_validate_option_input {
55540 	/* The HWRM command request type. */
55541 	uint16_t	req_type;
55542 	/*
55543 	 * The completion ring to send the completion event on. This should
55544 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
55545 	 */
55546 	uint16_t	cmpl_ring;
55547 	/*
55548 	 * The sequence ID is used by the driver for tracking multiple
55549 	 * commands. This ID is treated as opaque data by the firmware and
55550 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
55551 	 */
55552 	uint16_t	seq_id;
55553 	/*
55554 	 * The target ID of the command:
55555 	 * * 0x0-0xFFF8 - The function ID
55556 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
55557 	 * * 0xFFFD - Reserved for user-space HWRM interface
55558 	 * * 0xFFFF - HWRM
55559 	 */
55560 	uint16_t	target_id;
55561 	/*
55562 	 * A physical address pointer pointing to a host buffer that the
55563 	 * command's response data will be written. This can be either a host
55564 	 * physical address (HPA) or a guest physical address (GPA) and must
55565 	 * point to a physically contiguous block of memory.
55566 	 */
55567 	uint64_t	resp_addr;
55568 	/*
55569 	 * This is the host address where
55570 	 * nvm variable will be copied from
55571 	 */
55572 	uint64_t	src_data_addr;
55573 	/* size of data in bits */
55574 	uint16_t	data_len;
55575 	/* nvm cfg option number */
55576 	uint16_t	option_num;
55577 	/* reserved. */
55578 	#define HWRM_NVM_VALIDATE_OPTION_INPUT_OPTION_NUM_RSVD_0 \
55579 		UINT32_C(0x0)
55580 	/* reserved. */
55581 	#define HWRM_NVM_VALIDATE_OPTION_INPUT_OPTION_NUM_RSVD_FFFF \
55582 		UINT32_C(0xffff)
55583 	#define HWRM_NVM_VALIDATE_OPTION_INPUT_OPTION_NUM_LAST \
55584 		HWRM_NVM_VALIDATE_OPTION_INPUT_OPTION_NUM_RSVD_FFFF
55585 	/*
55586 	 * Number of dimensions for this nvm configuration variable.
55587 	 * This value indicates how many of the indexN values to use.
55588 	 * A value of 0 means that none of the indexN values are valid.
55589 	 * A value of 1 requires at index0 is valued, a value of 2
55590 	 * requires that index0 and index1 are valid, and so forth
55591 	 */
55592 	uint16_t	dimensions;
55593 	/* index for the 1st dimensions */
55594 	uint16_t	index_0;
55595 	/* index for the 2nd dimensions */
55596 	uint16_t	index_1;
55597 	/* index for the 3rd dimensions */
55598 	uint16_t	index_2;
55599 	/* index for the 4th dimensions */
55600 	uint16_t	index_3;
55601 	uint8_t	unused_0[2];
55602 } __rte_packed;
55603 
55604 /* hwrm_nvm_validate_option_output (size:128b/16B) */
55605 struct hwrm_nvm_validate_option_output {
55606 	/* The specific error status for the command. */
55607 	uint16_t	error_code;
55608 	/* The HWRM command request type. */
55609 	uint16_t	req_type;
55610 	/* The sequence ID from the original command. */
55611 	uint16_t	seq_id;
55612 	/* The length of the response data in number of bytes. */
55613 	uint16_t	resp_len;
55614 	uint8_t	result;
55615 	/*
55616 	 * indicates that the value provided for the option is not matching
55617 	 * with the saved data.
55618 	 */
55619 	#define HWRM_NVM_VALIDATE_OPTION_OUTPUT_RESULT_NOT_MATCH UINT32_C(0x0)
55620 	/*
55621 	 * indicates that the value provided for the option is matching the
55622 	 * saved data.
55623 	 */
55624 	#define HWRM_NVM_VALIDATE_OPTION_OUTPUT_RESULT_MATCH     UINT32_C(0x1)
55625 	#define HWRM_NVM_VALIDATE_OPTION_OUTPUT_RESULT_LAST \
55626 		HWRM_NVM_VALIDATE_OPTION_OUTPUT_RESULT_MATCH
55627 	uint8_t	unused_0[6];
55628 	/*
55629 	 * This field is used in Output records to indicate that the output
55630 	 * is completely written to RAM.  This field should be read as '1'
55631 	 * to indicate that the output has been completely written.
55632 	 * When writing a command completion or response to an internal processor,
55633 	 * the order of writes has to be such that this field is written last.
55634 	 */
55635 	uint8_t	valid;
55636 } __rte_packed;
55637 
55638 /* hwrm_nvm_validate_option_cmd_err (size:64b/8B) */
55639 struct hwrm_nvm_validate_option_cmd_err {
55640 	/*
55641 	 * command specific error codes that goes to
55642 	 * the cmd_err field in Common HWRM Error Response.
55643 	 */
55644 	uint8_t	code;
55645 	/* Unknown error */
55646 	#define HWRM_NVM_VALIDATE_OPTION_CMD_ERR_CODE_UNKNOWN UINT32_C(0x0)
55647 	#define HWRM_NVM_VALIDATE_OPTION_CMD_ERR_CODE_LAST \
55648 		HWRM_NVM_VALIDATE_OPTION_CMD_ERR_CODE_UNKNOWN
55649 	uint8_t	unused_0[7];
55650 } __rte_packed;
55651 
55652 /*******************
55653  * hwrm_nvm_defrag *
55654  *******************/
55655 
55656 
55657 /* hwrm_nvm_defrag_input (size:192b/24B) */
55658 struct hwrm_nvm_defrag_input {
55659 	/* The HWRM command request type. */
55660 	uint16_t	req_type;
55661 	/*
55662 	 * The completion ring to send the completion event on. This should
55663 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
55664 	 */
55665 	uint16_t	cmpl_ring;
55666 	/*
55667 	 * The sequence ID is used by the driver for tracking multiple
55668 	 * commands. This ID is treated as opaque data by the firmware and
55669 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
55670 	 */
55671 	uint16_t	seq_id;
55672 	/*
55673 	 * The target ID of the command:
55674 	 * * 0x0-0xFFF8 - The function ID
55675 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
55676 	 * * 0xFFFD - Reserved for user-space HWRM interface
55677 	 * * 0xFFFF - HWRM
55678 	 */
55679 	uint16_t	target_id;
55680 	/*
55681 	 * A physical address pointer pointing to a host buffer that the
55682 	 * command's response data will be written. This can be either a host
55683 	 * physical address (HPA) or a guest physical address (GPA) and must
55684 	 * point to a physically contiguous block of memory.
55685 	 */
55686 	uint64_t	resp_addr;
55687 	uint32_t	flags;
55688 	/* This bit must be '1' to perform NVM defragmentation. */
55689 	#define HWRM_NVM_DEFRAG_INPUT_FLAGS_DEFRAG     UINT32_C(0x1)
55690 	uint8_t	unused_0[4];
55691 } __rte_packed;
55692 
55693 /* hwrm_nvm_defrag_output (size:128b/16B) */
55694 struct hwrm_nvm_defrag_output {
55695 	/* The specific error status for the command. */
55696 	uint16_t	error_code;
55697 	/* The HWRM command request type. */
55698 	uint16_t	req_type;
55699 	/* The sequence ID from the original command. */
55700 	uint16_t	seq_id;
55701 	/* The length of the response data in number of bytes. */
55702 	uint16_t	resp_len;
55703 	uint8_t	unused_0[7];
55704 	/*
55705 	 * This field is used in Output records to indicate that the output
55706 	 * is completely written to RAM.  This field should be read as '1'
55707 	 * to indicate that the output has been completely written.
55708 	 * When writing a command completion or response to an internal processor,
55709 	 * the order of writes has to be such that this field is written last.
55710 	 */
55711 	uint8_t	valid;
55712 } __rte_packed;
55713 
55714 /* hwrm_nvm_defrag_cmd_err (size:64b/8B) */
55715 struct hwrm_nvm_defrag_cmd_err {
55716 	/*
55717 	 * command specific error codes that goes to
55718 	 * the cmd_err field in Common HWRM Error Response.
55719 	 */
55720 	uint8_t	code;
55721 	/* Unknown error */
55722 	#define HWRM_NVM_DEFRAG_CMD_ERR_CODE_UNKNOWN UINT32_C(0x0)
55723 	/* NVM defragmentation could not be performed */
55724 	#define HWRM_NVM_DEFRAG_CMD_ERR_CODE_FAIL    UINT32_C(0x1)
55725 	#define HWRM_NVM_DEFRAG_CMD_ERR_CODE_LAST \
55726 		HWRM_NVM_DEFRAG_CMD_ERR_CODE_FAIL
55727 	uint8_t	unused_0[7];
55728 } __rte_packed;
55729 
55730 /****************
55731  * hwrm_oem_cmd *
55732  ****************/
55733 
55734 
55735 /* hwrm_oem_cmd_input (size:1024b/128B) */
55736 struct hwrm_oem_cmd_input {
55737 	/* The HWRM command request type. */
55738 	uint16_t	req_type;
55739 	/*
55740 	 * The completion ring to send the completion event on. This should
55741 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
55742 	 */
55743 	uint16_t	cmpl_ring;
55744 	/*
55745 	 * The sequence ID is used by the driver for tracking multiple
55746 	 * commands. This ID is treated as opaque data by the firmware and
55747 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
55748 	 */
55749 	uint16_t	seq_id;
55750 	/*
55751 	 * The target ID of the command:
55752 	 * * 0x0-0xFFF8 - The function ID
55753 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
55754 	 * * 0xFFFD - Reserved for user-space HWRM interface
55755 	 * * 0xFFFF - HWRM
55756 	 */
55757 	uint16_t	target_id;
55758 	/*
55759 	 * A physical address pointer pointing to a host buffer that the
55760 	 * command's response data will be written. This can be either a host
55761 	 * physical address (HPA) or a guest physical address (GPA) and must
55762 	 * point to a physically contiguous block of memory.
55763 	 */
55764 	uint64_t	resp_addr;
55765 	uint32_t	IANA;
55766 	uint32_t	unused_0;
55767 	/* This field contains the vendor specific command data. */
55768 	uint32_t	oem_data[26];
55769 } __rte_packed;
55770 
55771 /* hwrm_oem_cmd_output (size:768b/96B) */
55772 struct hwrm_oem_cmd_output {
55773 	/* The specific error status for the command. */
55774 	uint16_t	error_code;
55775 	/* The HWRM command request type. */
55776 	uint16_t	req_type;
55777 	/* The sequence ID from the original command. */
55778 	uint16_t	seq_id;
55779 	/* The length of the response data in number of bytes. */
55780 	uint16_t	resp_len;
55781 	uint32_t	IANA;
55782 	uint32_t	unused_0;
55783 	/* This field contains the vendor specific response data. */
55784 	uint32_t	oem_data[18];
55785 	uint8_t	unused_1[7];
55786 	/*
55787 	 * This field is used in Output records to indicate that the output
55788 	 * is completely written to RAM.  This field should be read as '1'
55789 	 * to indicate that the output has been completely written.
55790 	 * When writing a command completion or response to an internal processor,
55791 	 * the order of writes has to be such that this field is written last.
55792 	 */
55793 	uint8_t	valid;
55794 } __rte_packed;
55795 
55796 /*****************
55797  * hwrm_fw_reset *
55798  ******************/
55799 
55800 
55801 /* hwrm_fw_reset_input (size:192b/24B) */
55802 struct hwrm_fw_reset_input {
55803 	/* The HWRM command request type. */
55804 	uint16_t        req_type;
55805 	/*
55806 	 * The completion ring to send the completion event on. This should
55807 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
55808 	 */
55809 	uint16_t        cmpl_ring;
55810 	/*
55811 	 * The sequence ID is used by the driver for tracking multiple
55812 	 * commands. This ID is treated as opaque data by the firmware and
55813 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
55814 	 */
55815 	uint16_t        seq_id;
55816 	/*
55817 	 * The target ID of the command:
55818 	 * * 0x0-0xFFF8 - The function ID
55819 	 * * 0xFFF8-0xFFFE - Reserved for internal processors
55820 	 * * 0xFFFF - HWRM
55821 	 */
55822 	uint16_t        target_id;
55823 	/*
55824 	 * A physical address pointer pointing to a host buffer that the
55825 	 * command's response data will be written. This can be either a host
55826 	 * physical address (HPA) or a guest physical address (GPA) and must
55827 	 * point to a physically contiguous block of memory.
55828 	 */
55829 	uint64_t        resp_addr;
55830 	/* Type of embedded processor. */
55831 	uint8_t embedded_proc_type;
55832 	/* Boot Processor */
55833 	#define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_BOOT \
55834 		UINT32_C(0x0)
55835 	/* Management Processor */
55836 	#define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_MGMT \
55837 		UINT32_C(0x1)
55838 	/* Network control processor */
55839 	#define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_NETCTRL \
55840 		UINT32_C(0x2)
55841 	/* RoCE control processor */
55842 	#define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_ROCE \
55843 		UINT32_C(0x3)
55844 	/*
55845 	 * Host (in multi-host environment): This is only valid if requester is IPC.
55846 	 * Reinit host hardware resources and PCIe.
55847 	 */
55848 	#define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_HOST \
55849 		UINT32_C(0x4)
55850 	/*
55851 	 * AP processor complex (in multi-host environment).
55852 	 * Use host_idx to control which core is reset
55853 	 */
55854 	#define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_AP \
55855 		UINT32_C(0x5)
55856 	/* Reset all blocks of the chip (including all processors) */
55857 	#define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_CHIP \
55858 		UINT32_C(0x6)
55859 	/*
55860 	 * Host (in multi-host environment): This is only valid if requester is IPC.
55861 	 * Reinit host hardware resources.
55862 	 */
55863 	#define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_HOST_RESOURCE_REINIT \
55864 		UINT32_C(0x7)
55865 	#define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_LAST \
55866 		HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_HOST_RESOURCE_REINIT
55867 	/* Type of self reset. */
55868 	uint8_t selfrst_status;
55869 	/* No Self Reset */
55870 	#define HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTNONE \
55871 		UINT32_C(0x0)
55872 	/* Self Reset as soon as possible to do so safely */
55873 	#define HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTASAP \
55874 		UINT32_C(0x1)
55875 	/* Self Reset on PCIe Reset */
55876 	#define HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTPCIERST \
55877 		UINT32_C(0x2)
55878 	/* Self Reset immediately after notification to all clients. */
55879 	#define HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTIMMEDIATE \
55880 		UINT32_C(0x3)
55881 	#define HWRM_FW_RESET_INPUT_SELFRST_STATUS_LAST \
55882 		HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTIMMEDIATE
55883 	/*
55884 	 * Indicate which host is being reset. 0 means first host.
55885 	 * Only valid when embedded_proc_type is host in multihost
55886 	 * environment
55887 	 */
55888 	uint8_t host_idx;
55889 	uint8_t flags;
55890 	/*
55891 	 * When this bit is '1', then the core firmware initiates
55892 	 * the reset only after graceful shut down of all registered instances.
55893 	 * If not, the device will continue with the existing firmware.
55894 	 */
55895 	#define HWRM_FW_RESET_INPUT_FLAGS_RESET_GRACEFUL     UINT32_C(0x1)
55896 	uint8_t unused_0[4];
55897 } __rte_packed;
55898 
55899 /* hwrm_fw_reset_output (size:128b/16B) */
55900 struct hwrm_fw_reset_output {
55901 	/* The specific error status for the command. */
55902 	uint16_t        error_code;
55903 	/* The HWRM command request type. */
55904 	uint16_t        req_type;
55905 	/* The sequence ID from the original command. */
55906 	uint16_t        seq_id;
55907 	/* The length of the response data in number of bytes. */
55908 	uint16_t        resp_len;
55909 	/* Type of self reset. */
55910 	uint8_t selfrst_status;
55911 	/* No Self Reset */
55912 	#define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTNONE \
55913 		UINT32_C(0x0)
55914 	/* Self Reset as soon as possible to do so safely */
55915 	#define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTASAP \
55916 		UINT32_C(0x1)
55917 	/* Self Reset on PCIe Reset */
55918 	#define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTPCIERST \
55919 		UINT32_C(0x2)
55920 	/* Self Reset immediately after notification to all clients. */
55921 	#define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTIMMEDIATE \
55922 		UINT32_C(0x3)
55923 	#define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_LAST \
55924 		HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTIMMEDIATE
55925 	uint8_t unused_0[6];
55926 	/*
55927 	 * This field is used in Output records to indicate that the output
55928 	 * is completely written to RAM.  This field should be read as '1'
55929 	 * to indicate that the output has been completely written.
55930 	 * When writing a command completion or response to an internal processor,
55931 	 * the order of writes has to be such that this field is written last.
55932 	 */
55933 	uint8_t valid;
55934 } __rte_packed;
55935 
55936 /**********************
55937  * hwrm_port_ts_query *
55938  ***********************/
55939 
55940 
55941 /* hwrm_port_ts_query_input (size:192b/24B) */
55942 struct hwrm_port_ts_query_input {
55943 	/* The HWRM command request type. */
55944 	uint16_t	req_type;
55945 	/*
55946 	 * The completion ring to send the completion event on. This should
55947 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
55948 	 */
55949 	uint16_t	cmpl_ring;
55950 	/*
55951 	 * The sequence ID is used by the driver for tracking multiple
55952 	 * commands. This ID is treated as opaque data by the firmware and
55953 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
55954 	 */
55955 	uint16_t	seq_id;
55956 	/*
55957 	 * The target ID of the command:
55958 	 * * 0x0-0xFFF8 - The function ID
55959 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
55960 	 * * 0xFFFD - Reserved for user-space HWRM interface
55961 	 * * 0xFFFF - HWRM
55962 	 */
55963 	uint16_t	target_id;
55964 	/*
55965 	 * A physical address pointer pointing to a host buffer that the
55966 	 * command's response data will be written. This can be either a host
55967 	 * physical address (HPA) or a guest physical address (GPA) and must
55968 	 * point to a physically contiguous block of memory.
55969 	 */
55970 	uint64_t	resp_addr;
55971 	uint32_t	flags;
55972 	/*
55973 	 * Enumeration denoting the RX, TX type of the resource.
55974 	 * This enumeration is used for resources that are similar for both
55975 	 * TX and RX paths of the chip.
55976 	 */
55977 	#define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH		0x1UL
55978 	/* tx path */
55979 	#define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_TX		0x0UL
55980 	/* rx path */
55981 	#define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_RX		0x1UL
55982 	#define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_LAST	\
55983 		HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_RX
55984 	/*
55985 	 * If set, the response includes the current value of the free
55986 	 * running timer.
55987 	 */
55988 	#define HWRM_PORT_TS_QUERY_INPUT_FLAGS_CURRENT_TIME	0x2UL
55989 	/* Port ID of port that is being queried. */
55990 	uint16_t	port_id;
55991 	uint8_t		unused_0[2];
55992 } __rte_packed;
55993 
55994 /* hwrm_port_ts_query_output (size:192b/24B) */
55995 struct hwrm_port_ts_query_output {
55996 	/* The specific error status for the command. */
55997 	uint16_t	error_code;
55998 	/* The HWRM command request type. */
55999 	uint16_t	req_type;
56000 	/* The sequence ID from the original command. */
56001 	uint16_t	seq_id;
56002 	/* The length of the response data in number of bytes. */
56003 	uint16_t	resp_len;
56004 	/*
56005 	 * Timestamp value of PTP message captured, or current value of
56006 	 * free running timer.
56007 	 */
56008 	uint32_t	ptp_msg_ts[2];
56009 	/* Sequence ID of the PTP message captured. */
56010 	uint16_t	ptp_msg_seqid;
56011 	uint8_t		unused_0[5];
56012 	/*
56013 	 * This field is used in Output records to indicate that the output
56014 	 * is completely written to RAM.  This field should be read as '1'
56015 	 * to indicate that the output has been completely written.
56016 	 * When writing a command completion or response to an internal processor,
56017 	 * the order of writes has to be such that this field is written last.
56018 	 */
56019 	uint8_t		valid;
56020 } __rte_packed;
56021 
56022 /*
56023  * This structure is fixed at the beginning of the ChiMP SRAM (GRC
56024  * offset: 0x31001F0). Host software is expected to read from this
56025  * location for a defined signature. If it exists, the software can
56026  * assume the presence of this structure and the validity of the
56027  * FW_STATUS location in the next field.
56028  */
56029 /* hcomm_status (size:64b/8B) */
56030 struct hcomm_status {
56031 	uint32_t	sig_ver;
56032 	/*
56033 	 * This field defines the version of the structure. The latest
56034 	 * version value is 1.
56035 	 */
56036 	#define HCOMM_STATUS_VER_MASK		UINT32_C(0xff)
56037 	#define HCOMM_STATUS_VER_SFT		0
56038 	#define HCOMM_STATUS_VER_LATEST		UINT32_C(0x1)
56039 	#define HCOMM_STATUS_VER_LAST		HCOMM_STATUS_VER_LATEST
56040 	/*
56041 	 * This field is to store the signature value to indicate the
56042 	 * presence of the structure.
56043 	 */
56044 	#define HCOMM_STATUS_SIGNATURE_MASK	UINT32_C(0xffffff00)
56045 	#define HCOMM_STATUS_SIGNATURE_SFT	8
56046 	#define HCOMM_STATUS_SIGNATURE_VAL	(UINT32_C(0x484353) << 8)
56047 	#define HCOMM_STATUS_SIGNATURE_LAST	HCOMM_STATUS_SIGNATURE_VAL
56048 	uint32_t	fw_status_loc;
56049 	#define HCOMM_STATUS_TRUE_ADDR_SPACE_MASK	UINT32_C(0x3)
56050 	#define HCOMM_STATUS_TRUE_ADDR_SPACE_SFT	0
56051 	/* PCIE configuration space */
56052 	#define HCOMM_STATUS_FW_STATUS_LOC_ADDR_SPACE_PCIE_CFG	UINT32_C(0x0)
56053 	/* GRC space */
56054 	#define HCOMM_STATUS_FW_STATUS_LOC_ADDR_SPACE_GRC	UINT32_C(0x1)
56055 	/* BAR0 space */
56056 	#define HCOMM_STATUS_FW_STATUS_LOC_ADDR_SPACE_BAR0	UINT32_C(0x2)
56057 	/* BAR1 space */
56058 	#define HCOMM_STATUS_FW_STATUS_LOC_ADDR_SPACE_BAR1	UINT32_C(0x3)
56059 	#define HCOMM_STATUS_FW_STATUS_LOC_ADDR_SPACE_LAST	\
56060 		HCOMM_STATUS_FW_STATUS_LOC_ADDR_SPACE_BAR1
56061 	/*
56062 	 * This offset where the fw_status register is located. The value
56063 	 * is generally 4-byte aligned.
56064 	 */
56065 	#define HCOMM_STATUS_TRUE_OFFSET_MASK		UINT32_C(0xfffffffc)
56066 	#define HCOMM_STATUS_TRUE_OFFSET_SFT		2
56067 } __rte_packed;
56068 /* This is the GRC offset where the hcomm_status struct resides. */
56069 #define HCOMM_STATUS_STRUCT_LOC		0x31001F0UL
56070 
56071 /**************************
56072  * hwrm_port_phy_i2c_read *
56073  **************************/
56074 
56075 
56076 /* hwrm_port_phy_i2c_read_input (size:320b/40B) */
56077 struct hwrm_port_phy_i2c_read_input {
56078 	/* The HWRM command request type. */
56079 	uint16_t	req_type;
56080 	/*
56081 	 * The completion ring to send the completion event on. This should
56082 	 * be the NQ ID returned from the `nq_alloc` HWRM command.
56083 	 */
56084 	uint16_t	cmpl_ring;
56085 	/*
56086 	 * The sequence ID is used by the driver for tracking multiple
56087 	 * commands. This ID is treated as opaque data by the firmware and
56088 	 * the value is returned in the `hwrm_resp_hdr` upon completion.
56089 	 */
56090 	uint16_t	seq_id;
56091 	/*
56092 	 * The target ID of the command:
56093 	 * * 0x0-0xFFF8 - The function ID
56094 	 * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
56095 	 * * 0xFFFD - Reserved for user-space HWRM interface
56096 	 * * 0xFFFF - HWRM
56097 	 */
56098 	uint16_t	target_id;
56099 	/*
56100 	 * A physical address pointer pointing to a host buffer that the
56101 	 * command's response data will be written. This can be either a host
56102 	 * physical address (HPA) or a guest physical address (GPA) and must
56103 	 * point to a physically contiguous block of memory.
56104 	 */
56105 	uint64_t	resp_addr;
56106 	uint32_t	flags;
56107 	uint32_t	enables;
56108 	/*
56109 	 * This bit must be '1' for the page_offset field to be
56110 	 * configured.
56111 	 */
56112 	#define HWRM_PORT_PHY_I2C_READ_INPUT_ENABLES_PAGE_OFFSET     0x1UL
56113 	/* Port ID of port. */
56114 	uint16_t	port_id;
56115 	/* 8-bit I2C slave address. */
56116 	uint8_t	i2c_slave_addr;
56117 	uint8_t	unused_0;
56118 	/* The page number that is being accessed over I2C. */
56119 	uint16_t	page_number;
56120 	/* Offset within the page that is being accessed over I2C. */
56121 	uint16_t	page_offset;
56122 	/*
56123 	 * Length of data to read, in bytes starting at the offset
56124 	 * specified above. If the offset is not specified, then
56125 	 * the data shall be read from the beginning of the page.
56126 	 */
56127 	uint8_t	data_length;
56128 	uint8_t	unused_1[7];
56129 } __rte_packed;
56130 
56131 /* hwrm_port_phy_i2c_read_output (size:640b/80B) */
56132 struct hwrm_port_phy_i2c_read_output {
56133 	/* The specific error status for the command. */
56134 	uint16_t	error_code;
56135 	/* The HWRM command request type. */
56136 	uint16_t	req_type;
56137 	/* The sequence ID from the original command. */
56138 	uint16_t	seq_id;
56139 	/* The length of the response data in number of bytes. */
56140 	uint16_t	resp_len;
56141 	/* Up to 64B of data. */
56142 	uint32_t	data[16];
56143 	uint8_t	unused_0[7];
56144 	/*
56145 	 * This field is used in Output records to indicate that the output
56146 	 * is completely written to RAM.  This field should be read as '1'
56147 	 * to indicate that the output has been completely written.
56148 	 * When writing a command completion or response to an internal processor,
56149 	 * the order of writes has to be such that this field is written last.
56150 	 */
56151 	uint8_t	valid;
56152 } __rte_packed;
56153 #endif /* _HSI_STRUCT_DEF_DPDK_H_ */
56154