net/mlx5: make VLAN network interface thread safe
[dpdk.git] / drivers / net / bnxt / hsi_struct_def_dpdk.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2014-2020 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_ERROR_RECOVERY_QCFG                  UINT32_C(0xc)
273         #define HWRM_FUNC_DRV_IF_CHANGE                   UINT32_C(0xd)
274         #define HWRM_FUNC_BUF_UNRGTR                      UINT32_C(0xe)
275         #define HWRM_FUNC_VF_CFG                          UINT32_C(0xf)
276         /* Reserved for future use. */
277         #define HWRM_RESERVED1                            UINT32_C(0x10)
278         #define HWRM_FUNC_RESET                           UINT32_C(0x11)
279         #define HWRM_FUNC_GETFID                          UINT32_C(0x12)
280         #define HWRM_FUNC_VF_ALLOC                        UINT32_C(0x13)
281         #define HWRM_FUNC_VF_FREE                         UINT32_C(0x14)
282         #define HWRM_FUNC_QCAPS                           UINT32_C(0x15)
283         #define HWRM_FUNC_QCFG                            UINT32_C(0x16)
284         #define HWRM_FUNC_CFG                             UINT32_C(0x17)
285         #define HWRM_FUNC_QSTATS                          UINT32_C(0x18)
286         #define HWRM_FUNC_CLR_STATS                       UINT32_C(0x19)
287         #define HWRM_FUNC_DRV_UNRGTR                      UINT32_C(0x1a)
288         #define HWRM_FUNC_VF_RESC_FREE                    UINT32_C(0x1b)
289         #define HWRM_FUNC_VF_VNIC_IDS_QUERY               UINT32_C(0x1c)
290         #define HWRM_FUNC_DRV_RGTR                        UINT32_C(0x1d)
291         #define HWRM_FUNC_DRV_QVER                        UINT32_C(0x1e)
292         #define HWRM_FUNC_BUF_RGTR                        UINT32_C(0x1f)
293         #define HWRM_PORT_PHY_CFG                         UINT32_C(0x20)
294         #define HWRM_PORT_MAC_CFG                         UINT32_C(0x21)
295         /* Experimental */
296         #define HWRM_PORT_TS_QUERY                        UINT32_C(0x22)
297         #define HWRM_PORT_QSTATS                          UINT32_C(0x23)
298         #define HWRM_PORT_LPBK_QSTATS                     UINT32_C(0x24)
299         /* Experimental */
300         #define HWRM_PORT_CLR_STATS                       UINT32_C(0x25)
301         /* Experimental */
302         #define HWRM_PORT_LPBK_CLR_STATS                  UINT32_C(0x26)
303         #define HWRM_PORT_PHY_QCFG                        UINT32_C(0x27)
304         #define HWRM_PORT_MAC_QCFG                        UINT32_C(0x28)
305         /* Experimental */
306         #define HWRM_PORT_MAC_PTP_QCFG                    UINT32_C(0x29)
307         #define HWRM_PORT_PHY_QCAPS                       UINT32_C(0x2a)
308         #define HWRM_PORT_PHY_I2C_WRITE                   UINT32_C(0x2b)
309         #define HWRM_PORT_PHY_I2C_READ                    UINT32_C(0x2c)
310         #define HWRM_PORT_LED_CFG                         UINT32_C(0x2d)
311         #define HWRM_PORT_LED_QCFG                        UINT32_C(0x2e)
312         #define HWRM_PORT_LED_QCAPS                       UINT32_C(0x2f)
313         #define HWRM_QUEUE_QPORTCFG                       UINT32_C(0x30)
314         #define HWRM_QUEUE_QCFG                           UINT32_C(0x31)
315         #define HWRM_QUEUE_CFG                            UINT32_C(0x32)
316         #define HWRM_FUNC_VLAN_CFG                        UINT32_C(0x33)
317         #define HWRM_FUNC_VLAN_QCFG                       UINT32_C(0x34)
318         #define HWRM_QUEUE_PFCENABLE_QCFG                 UINT32_C(0x35)
319         #define HWRM_QUEUE_PFCENABLE_CFG                  UINT32_C(0x36)
320         #define HWRM_QUEUE_PRI2COS_QCFG                   UINT32_C(0x37)
321         #define HWRM_QUEUE_PRI2COS_CFG                    UINT32_C(0x38)
322         #define HWRM_QUEUE_COS2BW_QCFG                    UINT32_C(0x39)
323         #define HWRM_QUEUE_COS2BW_CFG                     UINT32_C(0x3a)
324         #define HWRM_QUEUE_DSCP_QCAPS                     UINT32_C(0x3b)
325         #define HWRM_QUEUE_DSCP2PRI_QCFG                  UINT32_C(0x3c)
326         #define HWRM_QUEUE_DSCP2PRI_CFG                   UINT32_C(0x3d)
327         #define HWRM_VNIC_ALLOC                           UINT32_C(0x40)
328         #define HWRM_VNIC_FREE                            UINT32_C(0x41)
329         #define HWRM_VNIC_CFG                             UINT32_C(0x42)
330         #define HWRM_VNIC_QCFG                            UINT32_C(0x43)
331         #define HWRM_VNIC_TPA_CFG                         UINT32_C(0x44)
332         /* Experimental */
333         #define HWRM_VNIC_TPA_QCFG                        UINT32_C(0x45)
334         #define HWRM_VNIC_RSS_CFG                         UINT32_C(0x46)
335         #define HWRM_VNIC_RSS_QCFG                        UINT32_C(0x47)
336         #define HWRM_VNIC_PLCMODES_CFG                    UINT32_C(0x48)
337         #define HWRM_VNIC_PLCMODES_QCFG                   UINT32_C(0x49)
338         #define HWRM_VNIC_QCAPS                           UINT32_C(0x4a)
339         #define HWRM_RING_ALLOC                           UINT32_C(0x50)
340         #define HWRM_RING_FREE                            UINT32_C(0x51)
341         #define HWRM_RING_CMPL_RING_QAGGINT_PARAMS        UINT32_C(0x52)
342         #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS     UINT32_C(0x53)
343         #define HWRM_RING_AGGINT_QCAPS                    UINT32_C(0x54)
344         #define HWRM_RING_SCHQ_ALLOC                      UINT32_C(0x55)
345         #define HWRM_RING_SCHQ_CFG                        UINT32_C(0x56)
346         #define HWRM_RING_SCHQ_FREE                       UINT32_C(0x57)
347         #define HWRM_RING_RESET                           UINT32_C(0x5e)
348         #define HWRM_RING_GRP_ALLOC                       UINT32_C(0x60)
349         #define HWRM_RING_GRP_FREE                        UINT32_C(0x61)
350         #define HWRM_RING_CFG                             UINT32_C(0x62)
351         #define HWRM_RING_QCFG                            UINT32_C(0x63)
352         /* Reserved for future use. */
353         #define HWRM_RESERVED5                            UINT32_C(0x64)
354         /* Reserved for future use. */
355         #define HWRM_RESERVED6                            UINT32_C(0x65)
356         #define HWRM_VNIC_RSS_COS_LB_CTX_ALLOC            UINT32_C(0x70)
357         #define HWRM_VNIC_RSS_COS_LB_CTX_FREE             UINT32_C(0x71)
358         #define HWRM_QUEUE_MPLS_QCAPS                     UINT32_C(0x80)
359         #define HWRM_QUEUE_MPLSTC2PRI_QCFG                UINT32_C(0x81)
360         #define HWRM_QUEUE_MPLSTC2PRI_CFG                 UINT32_C(0x82)
361         #define HWRM_CFA_L2_FILTER_ALLOC                  UINT32_C(0x90)
362         #define HWRM_CFA_L2_FILTER_FREE                   UINT32_C(0x91)
363         #define HWRM_CFA_L2_FILTER_CFG                    UINT32_C(0x92)
364         #define HWRM_CFA_L2_SET_RX_MASK                   UINT32_C(0x93)
365         #define HWRM_CFA_VLAN_ANTISPOOF_CFG               UINT32_C(0x94)
366         #define HWRM_CFA_TUNNEL_FILTER_ALLOC              UINT32_C(0x95)
367         #define HWRM_CFA_TUNNEL_FILTER_FREE               UINT32_C(0x96)
368         /* Experimental */
369         #define HWRM_CFA_ENCAP_RECORD_ALLOC               UINT32_C(0x97)
370         /* Experimental */
371         #define HWRM_CFA_ENCAP_RECORD_FREE                UINT32_C(0x98)
372         #define HWRM_CFA_NTUPLE_FILTER_ALLOC              UINT32_C(0x99)
373         #define HWRM_CFA_NTUPLE_FILTER_FREE               UINT32_C(0x9a)
374         #define HWRM_CFA_NTUPLE_FILTER_CFG                UINT32_C(0x9b)
375         /* Experimental */
376         #define HWRM_CFA_EM_FLOW_ALLOC                    UINT32_C(0x9c)
377         /* Experimental */
378         #define HWRM_CFA_EM_FLOW_FREE                     UINT32_C(0x9d)
379         /* Experimental */
380         #define HWRM_CFA_EM_FLOW_CFG                      UINT32_C(0x9e)
381         #define HWRM_TUNNEL_DST_PORT_QUERY                UINT32_C(0xa0)
382         #define HWRM_TUNNEL_DST_PORT_ALLOC                UINT32_C(0xa1)
383         #define HWRM_TUNNEL_DST_PORT_FREE                 UINT32_C(0xa2)
384         #define HWRM_STAT_CTX_ENG_QUERY                   UINT32_C(0xaf)
385         #define HWRM_STAT_CTX_ALLOC                       UINT32_C(0xb0)
386         #define HWRM_STAT_CTX_FREE                        UINT32_C(0xb1)
387         #define HWRM_STAT_CTX_QUERY                       UINT32_C(0xb2)
388         #define HWRM_STAT_CTX_CLR_STATS                   UINT32_C(0xb3)
389         #define HWRM_PORT_QSTATS_EXT                      UINT32_C(0xb4)
390         #define HWRM_PORT_PHY_MDIO_WRITE                  UINT32_C(0xb5)
391         #define HWRM_PORT_PHY_MDIO_READ                   UINT32_C(0xb6)
392         #define HWRM_PORT_PHY_MDIO_BUS_ACQUIRE            UINT32_C(0xb7)
393         #define HWRM_PORT_PHY_MDIO_BUS_RELEASE            UINT32_C(0xb8)
394         #define HWRM_PORT_QSTATS_EXT_PFC_WD               UINT32_C(0xb9)
395         /* Reserved. */
396         #define HWRM_RESERVED7                            UINT32_C(0xba)
397         #define HWRM_PORT_TX_FIR_CFG                      UINT32_C(0xbb)
398         #define HWRM_PORT_TX_FIR_QCFG                     UINT32_C(0xbc)
399         #define HWRM_PORT_ECN_QSTATS                      UINT32_C(0xbd)
400         #define HWRM_FW_RESET                             UINT32_C(0xc0)
401         #define HWRM_FW_QSTATUS                           UINT32_C(0xc1)
402         #define HWRM_FW_HEALTH_CHECK                      UINT32_C(0xc2)
403         #define HWRM_FW_SYNC                              UINT32_C(0xc3)
404         #define HWRM_FW_STATE_QCAPS                       UINT32_C(0xc4)
405         #define HWRM_FW_STATE_QUIESCE                     UINT32_C(0xc5)
406         #define HWRM_FW_STATE_BACKUP                      UINT32_C(0xc6)
407         #define HWRM_FW_STATE_RESTORE                     UINT32_C(0xc7)
408         /* Experimental */
409         #define HWRM_FW_SET_TIME                          UINT32_C(0xc8)
410         /* Experimental */
411         #define HWRM_FW_GET_TIME                          UINT32_C(0xc9)
412         /* Experimental */
413         #define HWRM_FW_SET_STRUCTURED_DATA               UINT32_C(0xca)
414         /* Experimental */
415         #define HWRM_FW_GET_STRUCTURED_DATA               UINT32_C(0xcb)
416         /* Experimental */
417         #define HWRM_FW_IPC_MAILBOX                       UINT32_C(0xcc)
418         #define HWRM_FW_ECN_CFG                           UINT32_C(0xcd)
419         #define HWRM_FW_ECN_QCFG                          UINT32_C(0xce)
420         #define HWRM_FW_SECURE_CFG                        UINT32_C(0xcf)
421         #define HWRM_EXEC_FWD_RESP                        UINT32_C(0xd0)
422         #define HWRM_REJECT_FWD_RESP                      UINT32_C(0xd1)
423         #define HWRM_FWD_RESP                             UINT32_C(0xd2)
424         #define HWRM_FWD_ASYNC_EVENT_CMPL                 UINT32_C(0xd3)
425         #define HWRM_OEM_CMD                              UINT32_C(0xd4)
426         /* Tells the fw to run PRBS test on a given port and lane. */
427         #define HWRM_PORT_PRBS_TEST                       UINT32_C(0xd5)
428         #define HWRM_PORT_SFP_SIDEBAND_CFG                UINT32_C(0xd6)
429         #define HWRM_PORT_SFP_SIDEBAND_QCFG               UINT32_C(0xd7)
430         #define HWRM_FW_STATE_UNQUIESCE                   UINT32_C(0xd8)
431         /* Tells the fw to collect dsc dump on a given port and lane. */
432         #define HWRM_PORT_DSC_DUMP                        UINT32_C(0xd9)
433         #define HWRM_TEMP_MONITOR_QUERY                   UINT32_C(0xe0)
434         #define HWRM_REG_POWER_QUERY                      UINT32_C(0xe1)
435         #define HWRM_CORE_FREQUENCY_QUERY                 UINT32_C(0xe2)
436         #define HWRM_REG_POWER_HISTOGRAM                  UINT32_C(0xe3)
437         #define HWRM_WOL_FILTER_ALLOC                     UINT32_C(0xf0)
438         #define HWRM_WOL_FILTER_FREE                      UINT32_C(0xf1)
439         #define HWRM_WOL_FILTER_QCFG                      UINT32_C(0xf2)
440         #define HWRM_WOL_REASON_QCFG                      UINT32_C(0xf3)
441         /* Experimental */
442         #define HWRM_CFA_METER_QCAPS                      UINT32_C(0xf4)
443         /* Experimental */
444         #define HWRM_CFA_METER_PROFILE_ALLOC              UINT32_C(0xf5)
445         /* Experimental */
446         #define HWRM_CFA_METER_PROFILE_FREE               UINT32_C(0xf6)
447         /* Experimental */
448         #define HWRM_CFA_METER_PROFILE_CFG                UINT32_C(0xf7)
449         /* Experimental */
450         #define HWRM_CFA_METER_INSTANCE_ALLOC             UINT32_C(0xf8)
451         /* Experimental */
452         #define HWRM_CFA_METER_INSTANCE_FREE              UINT32_C(0xf9)
453         /* Experimental */
454         #define HWRM_CFA_METER_INSTANCE_CFG               UINT32_C(0xfa)
455         /* Experimental */
456         #define HWRM_CFA_VFR_ALLOC                        UINT32_C(0xfd)
457         /* Experimental */
458         #define HWRM_CFA_VFR_FREE                         UINT32_C(0xfe)
459         /* Experimental */
460         #define HWRM_CFA_VF_PAIR_ALLOC                    UINT32_C(0x100)
461         /* Experimental */
462         #define HWRM_CFA_VF_PAIR_FREE                     UINT32_C(0x101)
463         /* Experimental */
464         #define HWRM_CFA_VF_PAIR_INFO                     UINT32_C(0x102)
465         /* Experimental */
466         #define HWRM_CFA_FLOW_ALLOC                       UINT32_C(0x103)
467         /* Experimental */
468         #define HWRM_CFA_FLOW_FREE                        UINT32_C(0x104)
469         /* Experimental */
470         #define HWRM_CFA_FLOW_FLUSH                       UINT32_C(0x105)
471         /* Experimental */
472         #define HWRM_CFA_FLOW_STATS                       UINT32_C(0x106)
473         /* Experimental */
474         #define HWRM_CFA_FLOW_INFO                        UINT32_C(0x107)
475         /* Experimental */
476         #define HWRM_CFA_DECAP_FILTER_ALLOC               UINT32_C(0x108)
477         /* Experimental */
478         #define HWRM_CFA_DECAP_FILTER_FREE                UINT32_C(0x109)
479         #define HWRM_CFA_VLAN_ANTISPOOF_QCFG              UINT32_C(0x10a)
480         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC       UINT32_C(0x10b)
481         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE        UINT32_C(0x10c)
482         /* Experimental */
483         #define HWRM_CFA_PAIR_ALLOC                       UINT32_C(0x10d)
484         /* Experimental */
485         #define HWRM_CFA_PAIR_FREE                        UINT32_C(0x10e)
486         /* Experimental */
487         #define HWRM_CFA_PAIR_INFO                        UINT32_C(0x10f)
488         /* Experimental */
489         #define HWRM_FW_IPC_MSG                           UINT32_C(0x110)
490         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO        UINT32_C(0x111)
491         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE       UINT32_C(0x112)
492         /* Experimental */
493         #define HWRM_CFA_FLOW_AGING_TIMER_RESET           UINT32_C(0x113)
494         /* Experimental */
495         #define HWRM_CFA_FLOW_AGING_CFG                   UINT32_C(0x114)
496         /* Experimental */
497         #define HWRM_CFA_FLOW_AGING_QCFG                  UINT32_C(0x115)
498         /* Experimental */
499         #define HWRM_CFA_FLOW_AGING_QCAPS                 UINT32_C(0x116)
500         /* Experimental */
501         #define HWRM_CFA_CTX_MEM_RGTR                     UINT32_C(0x117)
502         /* Experimental */
503         #define HWRM_CFA_CTX_MEM_UNRGTR                   UINT32_C(0x118)
504         /* Experimental */
505         #define HWRM_CFA_CTX_MEM_QCTX                     UINT32_C(0x119)
506         /* Experimental */
507         #define HWRM_CFA_CTX_MEM_QCAPS                    UINT32_C(0x11a)
508         /* Experimental */
509         #define HWRM_CFA_COUNTER_QCAPS                    UINT32_C(0x11b)
510         /* Experimental */
511         #define HWRM_CFA_COUNTER_CFG                      UINT32_C(0x11c)
512         /* Experimental */
513         #define HWRM_CFA_COUNTER_QCFG                     UINT32_C(0x11d)
514         /* Experimental */
515         #define HWRM_CFA_COUNTER_QSTATS                   UINT32_C(0x11e)
516         /* Experimental */
517         #define HWRM_CFA_TCP_FLAG_PROCESS_QCFG            UINT32_C(0x11f)
518         /* Experimental */
519         #define HWRM_CFA_EEM_QCAPS                        UINT32_C(0x120)
520         /* Experimental */
521         #define HWRM_CFA_EEM_CFG                          UINT32_C(0x121)
522         /* Experimental */
523         #define HWRM_CFA_EEM_QCFG                         UINT32_C(0x122)
524         /* Experimental */
525         #define HWRM_CFA_EEM_OP                           UINT32_C(0x123)
526         /* Experimental */
527         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS              UINT32_C(0x124)
528         /* Experimental - DEPRECATED */
529         #define HWRM_CFA_TFLIB                            UINT32_C(0x125)
530         /* Engine CKV - Get the current allocation status of keys provisioned in the key vault. */
531         #define HWRM_ENGINE_CKV_STATUS                    UINT32_C(0x12e)
532         /* Engine CKV - Add a new CKEK used to encrypt keys. */
533         #define HWRM_ENGINE_CKV_CKEK_ADD                  UINT32_C(0x12f)
534         /* Engine CKV - Delete a previously added CKEK. */
535         #define HWRM_ENGINE_CKV_CKEK_DELETE               UINT32_C(0x130)
536         /* Engine CKV - Add a new key to the key vault. */
537         #define HWRM_ENGINE_CKV_KEY_ADD                   UINT32_C(0x131)
538         /* Engine CKV - Delete a key from the key vault. */
539         #define HWRM_ENGINE_CKV_KEY_DELETE                UINT32_C(0x132)
540         /* Engine CKV - Delete all keys from the key vault. */
541         #define HWRM_ENGINE_CKV_FLUSH                     UINT32_C(0x133)
542         /* Engine CKV - Get random data. */
543         #define HWRM_ENGINE_CKV_RNG_GET                   UINT32_C(0x134)
544         /* Engine CKV - Generate and encrypt a new AES key. */
545         #define HWRM_ENGINE_CKV_KEY_GEN                   UINT32_C(0x135)
546         /* Engine CKV - Configure a label index with a label value. */
547         #define HWRM_ENGINE_CKV_KEY_LABEL_CFG             UINT32_C(0x136)
548         /* Engine CKV - Query a label */
549         #define HWRM_ENGINE_CKV_KEY_LABEL_QCFG            UINT32_C(0x137)
550         /* Engine - Query the available queue groups configuration. */
551         #define HWRM_ENGINE_QG_CONFIG_QUERY               UINT32_C(0x13c)
552         /* Engine - Query the queue groups assigned to a function. */
553         #define HWRM_ENGINE_QG_QUERY                      UINT32_C(0x13d)
554         /* Engine - Query the available queue group meter profile configuration. */
555         #define HWRM_ENGINE_QG_METER_PROFILE_CONFIG_QUERY UINT32_C(0x13e)
556         /* Engine - Query the configuration of a queue group meter profile. */
557         #define HWRM_ENGINE_QG_METER_PROFILE_QUERY        UINT32_C(0x13f)
558         /* Engine - Allocate a queue group meter profile. */
559         #define HWRM_ENGINE_QG_METER_PROFILE_ALLOC        UINT32_C(0x140)
560         /* Engine - Free a queue group meter profile. */
561         #define HWRM_ENGINE_QG_METER_PROFILE_FREE         UINT32_C(0x141)
562         /* Engine - Query the meters assigned to a queue group. */
563         #define HWRM_ENGINE_QG_METER_QUERY                UINT32_C(0x142)
564         /* Engine - Bind a queue group meter profile to a queue group. */
565         #define HWRM_ENGINE_QG_METER_BIND                 UINT32_C(0x143)
566         /* Engine - Unbind a queue group meter profile from a queue group. */
567         #define HWRM_ENGINE_QG_METER_UNBIND               UINT32_C(0x144)
568         /* Engine - Bind a queue group to a function. */
569         #define HWRM_ENGINE_QG_FUNC_BIND                  UINT32_C(0x145)
570         /* Engine - Query the scheduling group configuration. */
571         #define HWRM_ENGINE_SG_CONFIG_QUERY               UINT32_C(0x146)
572         /* Engine - Query the queue groups assigned to a scheduling group. */
573         #define HWRM_ENGINE_SG_QUERY                      UINT32_C(0x147)
574         /* Engine - Query the configuration of a scheduling group's meter profiles. */
575         #define HWRM_ENGINE_SG_METER_QUERY                UINT32_C(0x148)
576         /* Engine - Configure a scheduling group's meter profiles. */
577         #define HWRM_ENGINE_SG_METER_CONFIG               UINT32_C(0x149)
578         /* Engine - Bind a queue group to a scheduling group. */
579         #define HWRM_ENGINE_SG_QG_BIND                    UINT32_C(0x14a)
580         /* Engine - Unbind a queue group from its scheduling group. */
581         #define HWRM_ENGINE_QG_SG_UNBIND                  UINT32_C(0x14b)
582         /* Engine - Query the Engine configuration. */
583         #define HWRM_ENGINE_CONFIG_QUERY                  UINT32_C(0x154)
584         /* Engine - Configure the statistics accumulator for an Engine. */
585         #define HWRM_ENGINE_STATS_CONFIG                  UINT32_C(0x155)
586         /* Engine - Clear the statistics accumulator for an Engine. */
587         #define HWRM_ENGINE_STATS_CLEAR                   UINT32_C(0x156)
588         /* Engine - Query the statistics accumulator for an Engine. */
589         #define HWRM_ENGINE_STATS_QUERY                   UINT32_C(0x157)
590         /* Engine - Query statistics counters for continuous errors from all CDDIP Engines. */
591         #define HWRM_ENGINE_STATS_QUERY_CONTINUOUS_ERROR  UINT32_C(0x158)
592         /* Engine - Allocate an Engine RQ. */
593         #define HWRM_ENGINE_RQ_ALLOC                      UINT32_C(0x15e)
594         /* Engine - Free an Engine RQ. */
595         #define HWRM_ENGINE_RQ_FREE                       UINT32_C(0x15f)
596         /* Engine - Allocate an Engine CQ. */
597         #define HWRM_ENGINE_CQ_ALLOC                      UINT32_C(0x160)
598         /* Engine - Free an Engine CQ. */
599         #define HWRM_ENGINE_CQ_FREE                       UINT32_C(0x161)
600         /* Engine - Allocate an NQ. */
601         #define HWRM_ENGINE_NQ_ALLOC                      UINT32_C(0x162)
602         /* Engine - Free an NQ. */
603         #define HWRM_ENGINE_NQ_FREE                       UINT32_C(0x163)
604         /* Engine - Set the on-die RQE credit update location. */
605         #define HWRM_ENGINE_ON_DIE_RQE_CREDITS            UINT32_C(0x164)
606         /* Engine - Query the engine function configuration. */
607         #define HWRM_ENGINE_FUNC_QCFG                     UINT32_C(0x165)
608         /* Experimental */
609         #define HWRM_FUNC_RESOURCE_QCAPS                  UINT32_C(0x190)
610         /* Experimental */
611         #define HWRM_FUNC_VF_RESOURCE_CFG                 UINT32_C(0x191)
612         /* Experimental */
613         #define HWRM_FUNC_BACKING_STORE_QCAPS             UINT32_C(0x192)
614         /* Experimental */
615         #define HWRM_FUNC_BACKING_STORE_CFG               UINT32_C(0x193)
616         /* Experimental */
617         #define HWRM_FUNC_BACKING_STORE_QCFG              UINT32_C(0x194)
618         /* Configures the BW of any VF */
619         #define HWRM_FUNC_VF_BW_CFG                       UINT32_C(0x195)
620         /* Queries the BW of any VF */
621         #define HWRM_FUNC_VF_BW_QCFG                      UINT32_C(0x196)
622         /* Queries pf ids belong to specified host(s) */
623         #define HWRM_FUNC_HOST_PF_IDS_QUERY               UINT32_C(0x197)
624         /* Queries extended stats per function */
625         #define HWRM_FUNC_QSTATS_EXT                      UINT32_C(0x198)
626         /* Queries extended statistics context */
627         #define HWRM_STAT_EXT_CTX_QUERY                   UINT32_C(0x199)
628         /* Experimental */
629         #define HWRM_SELFTEST_QLIST                       UINT32_C(0x200)
630         /* Experimental */
631         #define HWRM_SELFTEST_EXEC                        UINT32_C(0x201)
632         /* Experimental */
633         #define HWRM_SELFTEST_IRQ                         UINT32_C(0x202)
634         /* Experimental */
635         #define HWRM_SELFTEST_RETRIEVE_SERDES_DATA        UINT32_C(0x203)
636         /* Experimental */
637         #define HWRM_PCIE_QSTATS                          UINT32_C(0x204)
638         /* Experimental */
639         #define HWRM_MFG_FRU_WRITE_CONTROL                UINT32_C(0x205)
640         /* Returns the current value of a free running counter from the device. */
641         #define HWRM_MFG_TIMERS_QUERY                     UINT32_C(0x206)
642         /* Experimental */
643         #define HWRM_MFG_OTP_CFG                          UINT32_C(0x207)
644         /* Experimental */
645         #define HWRM_MFG_OTP_QCFG                         UINT32_C(0x208)
646         /*
647          * Tells the fw to run the DMA read from the host and DMA write
648          * to the host test.
649          */
650         #define HWRM_MFG_HDMA_TEST                        UINT32_C(0x209)
651         /* Tells the fw to program the fru memory */
652         #define HWRM_MFG_FRU_EEPROM_WRITE                 UINT32_C(0x20a)
653         /* Tells the fw to read the fru memory */
654         #define HWRM_MFG_FRU_EEPROM_READ                  UINT32_C(0x20b)
655         /* Experimental */
656         #define HWRM_TF                                   UINT32_C(0x2bc)
657         /* Experimental */
658         #define HWRM_TF_VERSION_GET                       UINT32_C(0x2bd)
659         /* Experimental */
660         #define HWRM_TF_SESSION_OPEN                      UINT32_C(0x2c6)
661         /* Experimental */
662         #define HWRM_TF_SESSION_ATTACH                    UINT32_C(0x2c7)
663         /* Experimental */
664         #define HWRM_TF_SESSION_REGISTER                  UINT32_C(0x2c8)
665         /* Experimental */
666         #define HWRM_TF_SESSION_UNREGISTER                UINT32_C(0x2c9)
667         /* Experimental */
668         #define HWRM_TF_SESSION_CLOSE                     UINT32_C(0x2ca)
669         /* Experimental */
670         #define HWRM_TF_SESSION_QCFG                      UINT32_C(0x2cb)
671         /* Experimental */
672         #define HWRM_TF_SESSION_RESC_QCAPS                UINT32_C(0x2cc)
673         /* Experimental */
674         #define HWRM_TF_SESSION_RESC_ALLOC                UINT32_C(0x2cd)
675         /* Experimental */
676         #define HWRM_TF_SESSION_RESC_FREE                 UINT32_C(0x2ce)
677         /* Experimental */
678         #define HWRM_TF_SESSION_RESC_FLUSH                UINT32_C(0x2cf)
679         /* Experimental */
680         #define HWRM_TF_TBL_TYPE_GET                      UINT32_C(0x2da)
681         /* Experimental */
682         #define HWRM_TF_TBL_TYPE_SET                      UINT32_C(0x2db)
683         /* Experimental */
684         #define HWRM_TF_TBL_TYPE_BULK_GET                 UINT32_C(0x2dc)
685         /* Experimental */
686         #define HWRM_TF_CTXT_MEM_ALLOC                    UINT32_C(0x2e2)
687         /* Experimental */
688         #define HWRM_TF_CTXT_MEM_FREE                     UINT32_C(0x2e3)
689         /* Experimental */
690         #define HWRM_TF_CTXT_MEM_RGTR                     UINT32_C(0x2e4)
691         /* Experimental */
692         #define HWRM_TF_CTXT_MEM_UNRGTR                   UINT32_C(0x2e5)
693         /* Experimental */
694         #define HWRM_TF_EXT_EM_QCAPS                      UINT32_C(0x2e6)
695         /* Experimental */
696         #define HWRM_TF_EXT_EM_OP                         UINT32_C(0x2e7)
697         /* Experimental */
698         #define HWRM_TF_EXT_EM_CFG                        UINT32_C(0x2e8)
699         /* Experimental */
700         #define HWRM_TF_EXT_EM_QCFG                       UINT32_C(0x2e9)
701         /* Experimental */
702         #define HWRM_TF_EM_INSERT                         UINT32_C(0x2ea)
703         /* Experimental */
704         #define HWRM_TF_EM_DELETE                         UINT32_C(0x2eb)
705         /* Experimental */
706         #define HWRM_TF_TCAM_SET                          UINT32_C(0x2f8)
707         /* Experimental */
708         #define HWRM_TF_TCAM_GET                          UINT32_C(0x2f9)
709         /* Experimental */
710         #define HWRM_TF_TCAM_MOVE                         UINT32_C(0x2fa)
711         /* Experimental */
712         #define HWRM_TF_TCAM_FREE                         UINT32_C(0x2fb)
713         /* Experimental */
714         #define HWRM_TF_GLOBAL_CFG_SET                    UINT32_C(0x2fc)
715         /* Experimental */
716         #define HWRM_TF_GLOBAL_CFG_GET                    UINT32_C(0x2fd)
717         /* Experimental */
718         #define HWRM_TF_IF_TBL_SET                        UINT32_C(0x2fe)
719         /* Experimental */
720         #define HWRM_TF_IF_TBL_GET                        UINT32_C(0x2ff)
721         /* Experimental */
722         #define HWRM_SV                                   UINT32_C(0x400)
723         /* Experimental */
724         #define HWRM_DBG_READ_DIRECT                      UINT32_C(0xff10)
725         /* Experimental */
726         #define HWRM_DBG_READ_INDIRECT                    UINT32_C(0xff11)
727         /* Experimental */
728         #define HWRM_DBG_WRITE_DIRECT                     UINT32_C(0xff12)
729         /* Experimental */
730         #define HWRM_DBG_WRITE_INDIRECT                   UINT32_C(0xff13)
731         #define HWRM_DBG_DUMP                             UINT32_C(0xff14)
732         /* Experimental */
733         #define HWRM_DBG_ERASE_NVM                        UINT32_C(0xff15)
734         /* Experimental */
735         #define HWRM_DBG_CFG                              UINT32_C(0xff16)
736         /* Experimental */
737         #define HWRM_DBG_COREDUMP_LIST                    UINT32_C(0xff17)
738         /* Experimental */
739         #define HWRM_DBG_COREDUMP_INITIATE                UINT32_C(0xff18)
740         /* Experimental */
741         #define HWRM_DBG_COREDUMP_RETRIEVE                UINT32_C(0xff19)
742         /* Experimental */
743         #define HWRM_DBG_FW_CLI                           UINT32_C(0xff1a)
744         /*  */
745         #define HWRM_DBG_I2C_CMD                          UINT32_C(0xff1b)
746         /*  */
747         #define HWRM_DBG_RING_INFO_GET                    UINT32_C(0xff1c)
748         /* Experimental */
749         #define HWRM_DBG_CRASHDUMP_HEADER                 UINT32_C(0xff1d)
750         /* Experimental */
751         #define HWRM_DBG_CRASHDUMP_ERASE                  UINT32_C(0xff1e)
752         /* Send driver debug information to firmware */
753         #define HWRM_DBG_DRV_TRACE                        UINT32_C(0xff1f)
754         /* Query debug capabilities of firmware */
755         #define HWRM_DBG_QCAPS                            UINT32_C(0xff20)
756         /* Retrieve debug settings of firmware */
757         #define HWRM_DBG_QCFG                             UINT32_C(0xff21)
758         /* Set destination parameters for crashdump medium */
759         #define HWRM_DBG_CRASHDUMP_MEDIUM_CFG             UINT32_C(0xff22)
760         #define HWRM_NVM_REQ_ARBITRATION                  UINT32_C(0xffed)
761         /* Experimental */
762         #define HWRM_NVM_FACTORY_DEFAULTS                 UINT32_C(0xffee)
763         #define HWRM_NVM_VALIDATE_OPTION                  UINT32_C(0xffef)
764         #define HWRM_NVM_FLUSH                            UINT32_C(0xfff0)
765         #define HWRM_NVM_GET_VARIABLE                     UINT32_C(0xfff1)
766         #define HWRM_NVM_SET_VARIABLE                     UINT32_C(0xfff2)
767         #define HWRM_NVM_INSTALL_UPDATE                   UINT32_C(0xfff3)
768         #define HWRM_NVM_MODIFY                           UINT32_C(0xfff4)
769         #define HWRM_NVM_VERIFY_UPDATE                    UINT32_C(0xfff5)
770         #define HWRM_NVM_GET_DEV_INFO                     UINT32_C(0xfff6)
771         #define HWRM_NVM_ERASE_DIR_ENTRY                  UINT32_C(0xfff7)
772         #define HWRM_NVM_MOD_DIR_ENTRY                    UINT32_C(0xfff8)
773         #define HWRM_NVM_FIND_DIR_ENTRY                   UINT32_C(0xfff9)
774         #define HWRM_NVM_GET_DIR_ENTRIES                  UINT32_C(0xfffa)
775         #define HWRM_NVM_GET_DIR_INFO                     UINT32_C(0xfffb)
776         #define HWRM_NVM_RAW_DUMP                         UINT32_C(0xfffc)
777         #define HWRM_NVM_READ                             UINT32_C(0xfffd)
778         #define HWRM_NVM_WRITE                            UINT32_C(0xfffe)
779         #define HWRM_NVM_RAW_WRITE_BLK                    UINT32_C(0xffff)
780         #define HWRM_LAST                                HWRM_NVM_RAW_WRITE_BLK
781         uint16_t        unused_0[3];
782 } __rte_packed;
783
784 /* Return Codes */
785 /* ret_codes (size:64b/8B) */
786 struct ret_codes {
787         uint16_t        error_code;
788         /* Request was successfully executed by the HWRM. */
789         #define HWRM_ERR_CODE_SUCCESS                      UINT32_C(0x0)
790         /* The HWRM failed to execute the request. */
791         #define HWRM_ERR_CODE_FAIL                         UINT32_C(0x1)
792         /*
793          * The request contains invalid argument(s) or input
794          * parameters.
795          */
796         #define HWRM_ERR_CODE_INVALID_PARAMS               UINT32_C(0x2)
797         /*
798          * The requester is not allowed to access the requested
799          * resource. This error code shall be provided in a
800          * response to a request to query or modify an existing
801          * resource that is not accessible by the requester.
802          */
803         #define HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED       UINT32_C(0x3)
804         /*
805          * The HWRM is unable to allocate the requested resource.
806          * This code only applies to requests for HWRM resource
807          * allocations.
808          */
809         #define HWRM_ERR_CODE_RESOURCE_ALLOC_ERROR         UINT32_C(0x4)
810         /*
811          * Invalid combination of flags is specified in the
812          * request.
813          */
814         #define HWRM_ERR_CODE_INVALID_FLAGS                UINT32_C(0x5)
815         /*
816          * Invalid combination of enables fields is specified in
817          * the request.
818          */
819         #define HWRM_ERR_CODE_INVALID_ENABLES              UINT32_C(0x6)
820         /*
821          * Request contains a required TLV that is not supported by
822          * the installed version of firmware.
823          */
824         #define HWRM_ERR_CODE_UNSUPPORTED_TLV              UINT32_C(0x7)
825         /*
826          * No firmware buffer available to accept the request. Driver
827          * should retry the request.
828          */
829         #define HWRM_ERR_CODE_NO_BUFFER                    UINT32_C(0x8)
830         /*
831          * This error code is only reported by firmware when some
832          * sub-option of a supported HWRM command is unsupported.
833          */
834         #define HWRM_ERR_CODE_UNSUPPORTED_OPTION_ERR       UINT32_C(0x9)
835         /*
836          * This error code is only reported by firmware when the specific
837          * request is not able to process when the HOT reset in progress.
838          */
839         #define HWRM_ERR_CODE_HOT_RESET_PROGRESS           UINT32_C(0xa)
840         /*
841          * This error code is only reported by firmware when the registered
842          * driver instances are not capable of hot reset.
843          */
844         #define HWRM_ERR_CODE_HOT_RESET_FAIL               UINT32_C(0xb)
845         /*
846          * This error code is only reported by the firmware when during
847          * flow allocation when a request for a flow counter fails because
848          * the number of flow counters are exhausted.
849          */
850         #define HWRM_ERR_CODE_NO_FLOW_COUNTER_DURING_ALLOC UINT32_C(0xc)
851         /*
852          * This error code is only reported by firmware when the registered
853          * driver instances requested to offloaded a flow but was unable to because
854          * the requested key's hash collides with the installed keys.
855          */
856         #define HWRM_ERR_CODE_KEY_HASH_COLLISION           UINT32_C(0xd)
857         /*
858          * This error code is only reported by firmware when the registered
859          * driver instances requested to offloaded a flow but was unable to because
860          * the same key has already been installed.
861          */
862         #define HWRM_ERR_CODE_KEY_ALREADY_EXISTS           UINT32_C(0xe)
863         /*
864          * Generic HWRM execution error that represents an
865          * internal error.
866          */
867         #define HWRM_ERR_CODE_HWRM_ERROR                   UINT32_C(0xf)
868         /*
869          * Firmware is unable to service the request at the present time. Caller
870          * may try again later.
871          */
872         #define HWRM_ERR_CODE_BUSY                         UINT32_C(0x10)
873         /*
874          * This error code is reported by Firmware when an operation requested
875          * by the host is not allowed due to a secure lock violation.
876          */
877         #define HWRM_ERR_CODE_RESOURCE_LOCKED              UINT32_C(0x11)
878         /*
879          * This value indicates that the HWRM response is in TLV format and
880          * should be interpreted as one or more TLVs starting with the
881          * hwrm_resp_hdr TLV. This value is not an indication of any error
882          * by itself, just an indication that the response should be parsed
883          * as TLV and the actual error code will be in the hwrm_resp_hdr TLV.
884          */
885         #define HWRM_ERR_CODE_TLV_ENCAPSULATED_RESPONSE    UINT32_C(0x8000)
886         /* Unknown error */
887         #define HWRM_ERR_CODE_UNKNOWN_ERR                  UINT32_C(0xfffe)
888         /* Unsupported or invalid command */
889         #define HWRM_ERR_CODE_CMD_NOT_SUPPORTED            UINT32_C(0xffff)
890         #define HWRM_ERR_CODE_LAST \
891                 HWRM_ERR_CODE_CMD_NOT_SUPPORTED
892         uint16_t        unused_0[3];
893 } __rte_packed;
894
895 /* Output */
896 /* hwrm_err_output (size:128b/16B) */
897 struct hwrm_err_output {
898         /*
899          * Pass/Fail or error type
900          *
901          * Note: receiver to verify the in parameters, and fail the call
902          * with an error when appropriate
903          */
904         uint16_t        error_code;
905         /* This field returns the type of original request. */
906         uint16_t        req_type;
907         /* This field provides original sequence number of the command. */
908         uint16_t        seq_id;
909         /*
910          * This field is the length of the response in bytes.  The
911          * last byte of the response is a valid flag that will read
912          * as '1' when the command has been completely written to
913          * memory.
914          */
915         uint16_t        resp_len;
916         /* debug info for this error response. */
917         uint32_t        opaque_0;
918         /* debug info for this error response. */
919         uint16_t        opaque_1;
920         /*
921          * In the case of an error response, command specific error
922          * code is returned in this field.
923          */
924         uint8_t cmd_err;
925         /*
926          * This field is used in Output records to indicate that the output
927          * is completely written to RAM.  This field should be read as '1'
928          * to indicate that the output has been completely written.
929          * When writing a command completion or response to an internal processor,
930          * the order of writes has to be such that this field is written last.
931          */
932         uint8_t valid;
933 } __rte_packed;
934 /*
935  * Following is the signature for HWRM message field that indicates not
936  * applicable (All F's). Need to cast it the size of the field if needed.
937  */
938 #define HWRM_NA_SIGNATURE ((uint32_t)(-1))
939 /* hwrm_func_buf_rgtr */
940 #define HWRM_MAX_REQ_LEN 128
941 /* hwrm_cfa_flow_info */
942 #define HWRM_MAX_RESP_LEN 704
943 /* 7 bit indirection table index. */
944 #define HW_HASH_INDEX_SIZE 0x80
945 #define HW_HASH_KEY_SIZE 40
946 /* valid key for HWRM response */
947 #define HWRM_RESP_VALID_KEY 1
948 /* Reserved for BONO processor */
949 #define HWRM_TARGET_ID_BONO 0xFFF8
950 /* Reserved for KONG processor */
951 #define HWRM_TARGET_ID_KONG 0xFFF9
952 /* Reserved for APE processor */
953 #define HWRM_TARGET_ID_APE 0xFFFA
954 /*
955  * This value will be used by tools for User-space HWRM Interface.
956  * When tool execute any HWRM command with this target_id, firmware
957  * will copy the response and/or data payload via register space instead
958  * of DMAing it.
959  */
960 #define HWRM_TARGET_ID_TOOLS 0xFFFD
961 #define HWRM_VERSION_MAJOR 1
962 #define HWRM_VERSION_MINOR 10
963 #define HWRM_VERSION_UPDATE 1
964 /* non-zero means beta version */
965 #define HWRM_VERSION_RSVD 70
966 #define HWRM_VERSION_STR "1.10.1.70"
967
968 /****************
969  * hwrm_ver_get *
970  ****************/
971
972
973 /* hwrm_ver_get_input (size:192b/24B) */
974 struct hwrm_ver_get_input {
975         /* The HWRM command request type. */
976         uint16_t        req_type;
977         /*
978          * The completion ring to send the completion event on. This should
979          * be the NQ ID returned from the `nq_alloc` HWRM command.
980          */
981         uint16_t        cmpl_ring;
982         /*
983          * The sequence ID is used by the driver for tracking multiple
984          * commands. This ID is treated as opaque data by the firmware and
985          * the value is returned in the `hwrm_resp_hdr` upon completion.
986          */
987         uint16_t        seq_id;
988         /*
989          * The target ID of the command:
990          * * 0x0-0xFFF8 - The function ID
991          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
992          * * 0xFFFD - Reserved for user-space HWRM interface
993          * * 0xFFFF - HWRM
994          */
995         uint16_t        target_id;
996         /*
997          * A physical address pointer pointing to a host buffer that the
998          * command's response data will be written. This can be either a host
999          * physical address (HPA) or a guest physical address (GPA) and must
1000          * point to a physically contiguous block of memory.
1001          */
1002         uint64_t        resp_addr;
1003         /*
1004          * This field represents the major version of HWRM interface
1005          * specification supported by the driver HWRM implementation.
1006          * The interface major version is intended to change only when
1007          * non backward compatible changes are made to the HWRM
1008          * interface specification.
1009          */
1010         uint8_t hwrm_intf_maj;
1011         /*
1012          * This field represents the minor version of HWRM interface
1013          * specification supported by the driver HWRM implementation.
1014          * A change in interface minor version is used to reflect
1015          * significant backward compatible modification to HWRM
1016          * interface specification.
1017          * This can be due to addition or removal of functionality.
1018          * HWRM interface specifications with the same major version
1019          * but different minor versions are compatible.
1020          */
1021         uint8_t hwrm_intf_min;
1022         /*
1023          * This field represents the update version of HWRM interface
1024          * specification supported by the driver HWRM implementation.
1025          * The interface update version is used to reflect minor
1026          * changes or bug fixes to a released HWRM interface
1027          * specification.
1028          */
1029         uint8_t hwrm_intf_upd;
1030         uint8_t unused_0[5];
1031 } __rte_packed;
1032
1033 /* hwrm_ver_get_output (size:1408b/176B) */
1034 struct hwrm_ver_get_output {
1035         /* The specific error status for the command. */
1036         uint16_t        error_code;
1037         /* The HWRM command request type. */
1038         uint16_t        req_type;
1039         /* The sequence ID from the original command. */
1040         uint16_t        seq_id;
1041         /* The length of the response data in number of bytes. */
1042         uint16_t        resp_len;
1043         /*
1044          * This field represents the major version of HWRM interface
1045          * specification supported by the HWRM implementation.
1046          * The interface major version is intended to change only when
1047          * non backward compatible changes are made to the HWRM
1048          * interface specification.
1049          * A HWRM implementation that is compliant with this
1050          * specification shall provide value of 1 in this field.
1051          */
1052         uint8_t hwrm_intf_maj_8b;
1053         /*
1054          * This field represents the minor version of HWRM interface
1055          * specification supported by the HWRM implementation.
1056          * A change in interface minor version is used to reflect
1057          * significant backward compatible modification to HWRM
1058          * interface specification.
1059          * This can be due to addition or removal of functionality.
1060          * HWRM interface specifications with the same major version
1061          * but different minor versions are compatible.
1062          * A HWRM implementation that is compliant with this
1063          * specification shall provide value of 2 in this field.
1064          */
1065         uint8_t hwrm_intf_min_8b;
1066         /*
1067          * This field represents the update version of HWRM interface
1068          * specification supported by the HWRM implementation.
1069          * The interface update version is used to reflect minor
1070          * changes or bug fixes to a released HWRM interface
1071          * specification.
1072          * A HWRM implementation that is compliant with this
1073          * specification shall provide value of 2 in this field.
1074          */
1075         uint8_t hwrm_intf_upd_8b;
1076         uint8_t hwrm_intf_rsvd_8b;
1077         /*
1078          * This field represents the major version of HWRM firmware.
1079          * A change in firmware major version represents a major
1080          * firmware release.
1081          */
1082         uint8_t hwrm_fw_maj_8b;
1083         /*
1084          * This field represents the minor version of HWRM firmware.
1085          * A change in firmware minor version represents significant
1086          * firmware functionality changes.
1087          */
1088         uint8_t hwrm_fw_min_8b;
1089         /*
1090          * This field represents the build version of HWRM firmware.
1091          * A change in firmware build version represents bug fixes
1092          * to a released firmware.
1093          */
1094         uint8_t hwrm_fw_bld_8b;
1095         /*
1096          * This field is a reserved field. This field can be used to
1097          * represent firmware branches or customer specific releases
1098          * tied to a specific (major,minor,update) version of the
1099          * HWRM firmware.
1100          */
1101         uint8_t hwrm_fw_rsvd_8b;
1102         /*
1103          * This field represents the major version of mgmt firmware.
1104          * A change in major version represents a major release.
1105          */
1106         uint8_t mgmt_fw_maj_8b;
1107         /*
1108          * This field represents the minor version of mgmt firmware.
1109          * A change in minor version represents significant
1110          * functionality changes.
1111          */
1112         uint8_t mgmt_fw_min_8b;
1113         /*
1114          * This field represents the build version of mgmt firmware.
1115          * A change in update version represents bug fixes.
1116          */
1117         uint8_t mgmt_fw_bld_8b;
1118         /*
1119          * This field is a reserved field. This field can be used to
1120          * represent firmware branches or customer specific releases
1121          * tied to a specific (major,minor,update) version
1122          */
1123         uint8_t mgmt_fw_rsvd_8b;
1124         /*
1125          * This field represents the major version of network
1126          * control firmware.
1127          * A change in major version represents a major release.
1128          */
1129         uint8_t netctrl_fw_maj_8b;
1130         /*
1131          * This field represents the minor version of network
1132          * control firmware.
1133          * A change in minor version represents significant
1134          * functionality changes.
1135          */
1136         uint8_t netctrl_fw_min_8b;
1137         /*
1138          * This field represents the build version of network
1139          * control firmware.
1140          * A change in update version represents bug fixes.
1141          */
1142         uint8_t netctrl_fw_bld_8b;
1143         /*
1144          * This field is a reserved field. This field can be used to
1145          * represent firmware branches or customer specific releases
1146          * tied to a specific (major,minor,update) version
1147          */
1148         uint8_t netctrl_fw_rsvd_8b;
1149         /*
1150          * This field is used to indicate device's capabilities and
1151          * configurations.
1152          */
1153         uint32_t        dev_caps_cfg;
1154         /*
1155          * If set to 1, then secure firmware update behavior
1156          * is supported.
1157          * If set to 0, then secure firmware update behavior is
1158          * not supported.
1159          */
1160         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SECURE_FW_UPD_SUPPORTED \
1161                 UINT32_C(0x1)
1162         /*
1163          * If set to 1, then firmware based DCBX agent is supported.
1164          * If set to 0, then firmware based DCBX agent capability
1165          * is not supported on this device.
1166          */
1167         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_FW_DCBX_AGENT_SUPPORTED \
1168                 UINT32_C(0x2)
1169         /*
1170          * If set to 1, then HWRM short command format is supported.
1171          * If set to 0, then HWRM short command format is not supported.
1172          */
1173         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SHORT_CMD_SUPPORTED \
1174                 UINT32_C(0x4)
1175         /*
1176          * If set to 1, then HWRM short command format is required.
1177          * If set to 0, then HWRM short command format is not required.
1178          */
1179         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SHORT_CMD_REQUIRED \
1180                 UINT32_C(0x8)
1181         /*
1182          * If set to 1, then the KONG host mailbox channel is supported.
1183          * If set to 0, then the KONG host mailbox channel is not supported.
1184          * By default, this flag should be 0 for older version of core firmware.
1185          */
1186         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_KONG_MB_CHNL_SUPPORTED \
1187                 UINT32_C(0x10)
1188         /*
1189          * If set to 1, then the 64bit flow handle is supported in addition to the
1190          * legacy 16bit flow handle. If set to 0, then the 64bit flow handle is not
1191          * supported. By default, this flag should be 0 for older version of core firmware.
1192          */
1193         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_FLOW_HANDLE_64BIT_SUPPORTED \
1194                 UINT32_C(0x20)
1195         /*
1196          * If set to 1, then filter type can be provided in filter_alloc or filter_cfg
1197          * filter types like L2 for l2 traffic and ROCE for roce & l2 traffic.
1198          * If set to 0, then filter types not supported.
1199          * By default, this flag should be 0 for older version of core firmware.
1200          */
1201         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_L2_FILTER_TYPES_ROCE_OR_L2_SUPPORTED \
1202                 UINT32_C(0x40)
1203         /*
1204          * If set to 1, firmware is capable to support virtio vSwitch offload model.
1205          * If set to 0, firmware can't supported virtio vSwitch offload model.
1206          * By default, this flag should be 0 for older version of core firmware.
1207          */
1208         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_VIRTIO_VSWITCH_OFFLOAD_SUPPORTED \
1209                 UINT32_C(0x80)
1210         /*
1211          * If set to 1, firmware is capable to support trusted VF.
1212          * If set to 0, firmware is not capable to support trusted VF.
1213          * By default, this flag should be 0 for older version of core firmware.
1214          */
1215         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_TRUSTED_VF_SUPPORTED \
1216                 UINT32_C(0x100)
1217         /*
1218          * If set to 1, firmware is capable to support flow aging.
1219          * If set to 0, firmware is not capable to support flow aging.
1220          * By default, this flag should be 0 for older version of core firmware.
1221          */
1222         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_FLOW_AGING_SUPPORTED \
1223                 UINT32_C(0x200)
1224         /*
1225          * If set to 1, firmware is capable to support advanced flow counters like,
1226          * Meter drop counters and EEM counters.
1227          * If set to 0, firmware is not capable to support advanced flow counters.
1228          * By default, this flag should be 0 for older version of core firmware.
1229          */
1230         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_ADV_FLOW_COUNTERS_SUPPORTED \
1231                 UINT32_C(0x400)
1232         /*
1233          * If set to 1, the firmware is able to support the use of the CFA
1234          * Extended Exact Match(EEM) feature.
1235          * If set to 0, firmware is not capable to support the use of the
1236          * CFA EEM feature.
1237          * By default, this flag should be 0 for older version of core firmware.
1238          */
1239         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_CFA_EEM_SUPPORTED \
1240                 UINT32_C(0x800)
1241         /*
1242          * If set to 1, the firmware is able to support advance CFA flow management
1243          * features reported in the HWRM_CFA_FLOW_MGNT_QCAPS.
1244          * If set to 0, then the firmware doesn’t support the advance CFA flow management
1245          * features.
1246          * By default, this flag should be 0 for older version of core firmware.
1247          */
1248         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_CFA_ADV_FLOW_MGNT_SUPPORTED \
1249                 UINT32_C(0x1000)
1250         /*
1251          * Deprecated and replaced with cfa_truflow_supported.
1252          * If set to 1, the firmware is able to support TFLIB features.
1253          * If set to 0, then the firmware doesn’t support TFLIB features.
1254          * By default, this flag should be 0 for older version of core firmware.
1255          */
1256         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_CFA_TFLIB_SUPPORTED \
1257                 UINT32_C(0x2000)
1258         /*
1259          * If set to 1, the firmware is able to support TruFlow features.
1260          * If set to 0, then the firmware doesn’t support TruFlow features.
1261          * By default, this flag should be 0 for older version of
1262          * core firmware.
1263          */
1264         #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_CFA_TRUFLOW_SUPPORTED \
1265                 UINT32_C(0x4000)
1266         /*
1267          * This field represents the major version of RoCE firmware.
1268          * A change in major version represents a major release.
1269          */
1270         uint8_t roce_fw_maj_8b;
1271         /*
1272          * This field represents the minor version of RoCE firmware.
1273          * A change in minor version represents significant
1274          * functionality changes.
1275          */
1276         uint8_t roce_fw_min_8b;
1277         /*
1278          * This field represents the build version of RoCE firmware.
1279          * A change in update version represents bug fixes.
1280          */
1281         uint8_t roce_fw_bld_8b;
1282         /*
1283          * This field is a reserved field. This field can be used to
1284          * represent firmware branches or customer specific releases
1285          * tied to a specific (major,minor,update) version
1286          */
1287         uint8_t roce_fw_rsvd_8b;
1288         /*
1289          * This field represents the name of HWRM FW (ASCII chars
1290          * with NULL at the end).
1291          */
1292         char    hwrm_fw_name[16];
1293         /*
1294          * This field represents the name of mgmt FW (ASCII chars
1295          * with NULL at the end).
1296          */
1297         char    mgmt_fw_name[16];
1298         /*
1299          * This field represents the name of network control
1300          * firmware (ASCII chars with NULL at the end).
1301          */
1302         char    netctrl_fw_name[16];
1303         /* This field represents the active board package name. */
1304         char    active_pkg_name[16];
1305         /*
1306          * This field represents the name of RoCE FW (ASCII chars
1307          * with NULL at the end).
1308          */
1309         char    roce_fw_name[16];
1310         /* This field returns the chip number. */
1311         uint16_t        chip_num;
1312         /* This field returns the revision of chip. */
1313         uint8_t chip_rev;
1314         /* This field returns the chip metal number. */
1315         uint8_t chip_metal;
1316         /* This field returns the bond id of the chip. */
1317         uint8_t chip_bond_id;
1318         /* This value indicates the type of platform used for chip implementation. */
1319         uint8_t chip_platform_type;
1320         /* ASIC */
1321         #define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_ASIC      UINT32_C(0x0)
1322         /* FPGA platform of the chip. */
1323         #define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_FPGA      UINT32_C(0x1)
1324         /* Palladium platform of the chip. */
1325         #define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_PALLADIUM UINT32_C(0x2)
1326         #define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_LAST \
1327                 HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_PALLADIUM
1328         /*
1329          * This field returns the maximum value of request window that
1330          * is supported by the HWRM. The request window is mapped
1331          * into device address space using MMIO.
1332          */
1333         uint16_t        max_req_win_len;
1334         /*
1335          * This field returns the maximum value of response buffer in
1336          * bytes.
1337          */
1338         uint16_t        max_resp_len;
1339         /*
1340          * This field returns the default request timeout value in
1341          * milliseconds.
1342          */
1343         uint16_t        def_req_timeout;
1344         /*
1345          * This field will indicate if any subsystems is not fully
1346          * initialized.
1347          */
1348         uint8_t flags;
1349         /*
1350          * If set to 1, it will indicate to host drivers that firmware is
1351          * not ready to start full blown HWRM commands. Host drivers should
1352          * re-try HWRM_VER_GET with some timeout period. The timeout period
1353          * can be selected up to 5 seconds.
1354          * For Example, PCIe hot-plug:
1355          *     Hot plug timing is system dependent. It generally takes up to
1356          *     600 miliseconds for firmware to clear DEV_NOT_RDY flag.
1357          * If set to 0, device is ready to accept all HWRM commands.
1358          */
1359         #define HWRM_VER_GET_OUTPUT_FLAGS_DEV_NOT_RDY       UINT32_C(0x1)
1360         /*
1361          * If set to 1, external version present.
1362          * If set to 0, external version not present.
1363          */
1364         #define HWRM_VER_GET_OUTPUT_FLAGS_EXT_VER_AVAIL     UINT32_C(0x2)
1365         uint8_t unused_0[2];
1366         /*
1367          * For backward compatibility this field must be set to 1.
1368          * Older drivers might look for this field to be 1 before
1369          * processing the message.
1370          */
1371         uint8_t always_1;
1372         /*
1373          * This field represents the major version of HWRM interface
1374          * specification supported by the HWRM implementation.
1375          * The interface major version is intended to change only when
1376          * non backward compatible changes are made to the HWRM
1377          * interface specification. A HWRM implementation that is
1378          * compliant with this specification shall provide value of 1
1379          * in this field.
1380          */
1381         uint16_t        hwrm_intf_major;
1382         /*
1383          * This field represents the minor version of HWRM interface
1384          * specification supported by the HWRM implementation.
1385          * A change in interface minor version is used to reflect
1386          * significant backward compatible modification to HWRM
1387          * interface specification. This can be due to addition or
1388          * removal of functionality. HWRM interface specifications
1389          * with the same major version but different minor versions are
1390          * compatible. A HWRM implementation that is compliant with
1391          * this specification shall provide value of 2 in this field.
1392          */
1393         uint16_t        hwrm_intf_minor;
1394         /*
1395          * This field represents the update version of HWRM interface
1396          * specification supported by the HWRM implementation. The
1397          * interface update version is used to reflect minor changes or
1398          * bug fixes to a released HWRM interface specification.
1399          * A HWRM implementation that is compliant with this
1400          * specification shall provide value of 2 in this field.
1401          */
1402         uint16_t        hwrm_intf_build;
1403         /*
1404          * This field represents the patch version of HWRM interface
1405          * specification supported by the HWRM implementation.
1406          */
1407         uint16_t        hwrm_intf_patch;
1408         /*
1409          * This field represents the major version of HWRM firmware.
1410          * A change in firmware major version represents a major
1411          * firmware release.
1412          */
1413         uint16_t        hwrm_fw_major;
1414         /*
1415          * This field represents the minor version of HWRM firmware.
1416          * A change in firmware minor version represents significant
1417          * firmware functionality changes.
1418          */
1419         uint16_t        hwrm_fw_minor;
1420         /*
1421          * This field represents the build version of HWRM firmware.
1422          * A change in firmware build version represents bug fixes to
1423          * a released firmware.
1424          */
1425         uint16_t        hwrm_fw_build;
1426         /*
1427          * This field is a reserved field.
1428          * This field can be used to represent firmware branches or customer
1429          * specific releases tied to a specific (major,minor,update) version
1430          * of the HWRM firmware.
1431          */
1432         uint16_t        hwrm_fw_patch;
1433         /*
1434          * This field represents the major version of mgmt firmware.
1435          * A change in major version represents a major release.
1436          */
1437         uint16_t        mgmt_fw_major;
1438         /*
1439          * This field represents the minor version of HWRM firmware.
1440          * A change in firmware minor version represents significant
1441          * firmware functionality changes.
1442          */
1443         uint16_t        mgmt_fw_minor;
1444         /*
1445          * This field represents the build version of mgmt firmware.
1446          * A change in update version represents bug fixes.
1447          */
1448         uint16_t        mgmt_fw_build;
1449         /*
1450          * This field is a reserved field. This field can be used to
1451          * represent firmware branches or customer specific releases
1452          * tied to a specific (major,minor,update) version.
1453          */
1454         uint16_t        mgmt_fw_patch;
1455         /*
1456          * This field represents the major version of network control
1457          * firmware. A change in major version represents
1458          * a major release.
1459          */
1460         uint16_t        netctrl_fw_major;
1461         /*
1462          * This field represents the minor version of network control
1463          * firmware. A change in minor version represents significant
1464          * functionality changes.
1465          */
1466         uint16_t        netctrl_fw_minor;
1467         /*
1468          * This field represents the build version of network control
1469          * firmware. A change in update version represents bug fixes.
1470          */
1471         uint16_t        netctrl_fw_build;
1472         /*
1473          * This field is a reserved field. This field can be used to
1474          * represent firmware branches or customer specific releases
1475          * tied to a specific (major,minor,update) version
1476          */
1477         uint16_t        netctrl_fw_patch;
1478         /*
1479          * This field represents the major version of RoCE firmware.
1480          * A change in major version represents a major release.
1481          */
1482         uint16_t        roce_fw_major;
1483         /*
1484          * This field represents the minor version of RoCE firmware.
1485          * A change in minor version represents significant
1486          * functionality changes.
1487          */
1488         uint16_t        roce_fw_minor;
1489         /*
1490          * This field represents the build version of RoCE firmware.
1491          * A change in update version represents bug fixes.
1492          */
1493         uint16_t        roce_fw_build;
1494         /*
1495          * This field is a reserved field. This field can be used to
1496          * represent firmware branches or customer specific releases
1497          * tied to a specific (major,minor,update) version
1498          */
1499         uint16_t        roce_fw_patch;
1500         /*
1501          * This field returns the maximum extended request length acceptable
1502          * by the device which allows requests greater than mailbox size when
1503          * used with the short cmd request format.
1504          */
1505         uint16_t        max_ext_req_len;
1506         uint8_t unused_1[5];
1507         /*
1508          * This field is used in Output records to indicate that the output
1509          * is completely written to RAM.  This field should be read as '1'
1510          * to indicate that the output has been completely written.
1511          * When writing a command completion or response to an internal processor,
1512          * the order of writes has to be such that this field is written last.
1513          */
1514         uint8_t valid;
1515 } __rte_packed;
1516
1517 /* cfa_bds_read_cmd_data_msg (size:128b/16B) */
1518 struct cfa_bds_read_cmd_data_msg {
1519         /* This value selects the format for the mid-path command for the CFA. */
1520         uint8_t opcode;
1521         /*
1522          * This is read command. From 32 to 128B can be read from a table
1523          * using this command.
1524          */
1525         #define CFA_BDS_READ_CMD_DATA_MSG_OPCODE_READ UINT32_C(0x0)
1526         #define CFA_BDS_READ_CMD_DATA_MSG_OPCODE_LAST \
1527                 CFA_BDS_READ_CMD_DATA_MSG_OPCODE_READ
1528         /* This value selects the table type to be acted upon. */
1529         uint8_t table_type;
1530         /* This value selects the table type to be acted upon. */
1531         #define CFA_BDS_READ_CMD_DATA_MSG_TABLE_TYPE_MASK  UINT32_C(0xf)
1532         #define CFA_BDS_READ_CMD_DATA_MSG_TABLE_TYPE_SFT   0
1533         /* This command acts on the action table of the specified scope. */
1534         #define CFA_BDS_READ_CMD_DATA_MSG_TABLE_TYPE_ACTION  UINT32_C(0x0)
1535         /* This command acts on the exact match table of the specified scope. */
1536         #define CFA_BDS_READ_CMD_DATA_MSG_TABLE_TYPE_EM      UINT32_C(0x1)
1537         #define CFA_BDS_READ_CMD_DATA_MSG_TABLE_TYPE_LAST \
1538                 CFA_BDS_READ_CMD_DATA_MSG_TABLE_TYPE_EM
1539         /* This value selects which table scope will be accessed. */
1540         uint8_t table_scope;
1541         #define CFA_BDS_READ_CMD_DATA_MSG_TABLE_SCOPE_MASK UINT32_C(0x1f)
1542         #define CFA_BDS_READ_CMD_DATA_MSG_TABLE_SCOPE_SFT 0
1543         /*
1544          * This value identifies the number of 32B units will be accessed. A
1545          * value of zero is invalid. Maximum value is 4.
1546          */
1547         uint8_t data_size;
1548         #define CFA_BDS_READ_CMD_DATA_MSG_DATA_SIZE_MASK UINT32_C(0x7)
1549         #define CFA_BDS_READ_CMD_DATA_MSG_DATA_SIZE_SFT 0
1550         /* This is the 32B index into the selected table to access. */
1551         uint32_t        table_index;
1552         #define CFA_BDS_READ_CMD_DATA_MSG_TABLE_INDEX_MASK UINT32_C(0x3ffffff)
1553         #define CFA_BDS_READ_CMD_DATA_MSG_TABLE_INDEX_SFT 0
1554         /*
1555          * This is the 64b host address where you want the data returned to. The
1556          * data will be written to the same function as the one that owns the SQ
1557          * this command is read from. The bottom two bits of this value must be
1558          * zero. The size of the write is controlled by the data_size field.
1559          */
1560         uint64_t        host_address;
1561 } __rte_packed;
1562
1563 /* cfa_bds_write_cmd_data_msg (size:1152b/144B) */
1564 struct cfa_bds_write_cmd_data_msg {
1565         /* This value selects the format for the mid-path command for the CFA. */
1566         uint8_t opcode;
1567         /*
1568          * This is write command. From 32 to 128B can be written to a table
1569          * using this command.
1570          */
1571         #define CFA_BDS_WRITE_CMD_DATA_MSG_OPCODE_WRITE UINT32_C(0x1)
1572         #define CFA_BDS_WRITE_CMD_DATA_MSG_OPCODE_LAST \
1573                 CFA_BDS_WRITE_CMD_DATA_MSG_OPCODE_WRITE
1574         /* This value selects the table type to be acted upon. */
1575         uint8_t write_thru_table_type;
1576         /* This value selects the table type to be acted upon. */
1577         #define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_TYPE_MASK  UINT32_C(0xf)
1578         #define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_TYPE_SFT   0
1579         /* This command acts on the action table of the specified scope. */
1580         #define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_TYPE_ACTION  UINT32_C(0x0)
1581         /* This command acts on the exact match table of the specified scope. */
1582         #define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_TYPE_EM      UINT32_C(0x1)
1583         #define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_TYPE_LAST \
1584                 CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_TYPE_EM
1585         /*
1586          * Indicates write-through control. Indicates write-through when set,
1587          * or write back when cleared.
1588          */
1589         #define CFA_BDS_WRITE_CMD_DATA_MSG_WRITE_THRU       UINT32_C(0x10)
1590         /* This value selects which table scope will be accessed. */
1591         uint8_t table_scope;
1592         #define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_SCOPE_MASK UINT32_C(0x1f)
1593         #define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_SCOPE_SFT 0
1594         /*
1595          * This value identifies the number of 32B units will be accessed. A
1596          * value of zero is invalid. Maximum value is 4.
1597          */
1598         uint8_t data_size;
1599         #define CFA_BDS_WRITE_CMD_DATA_MSG_DATA_SIZE_MASK UINT32_C(0x7)
1600         #define CFA_BDS_WRITE_CMD_DATA_MSG_DATA_SIZE_SFT 0
1601         /* This is the 32B index into the selected table to access. */
1602         uint32_t        table_index;
1603         #define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_INDEX_MASK UINT32_C(0x3ffffff)
1604         #define CFA_BDS_WRITE_CMD_DATA_MSG_TABLE_INDEX_SFT 0
1605         uint32_t        unused0;
1606         uint32_t        unused1;
1607         /*
1608          * This is the data to be written. Data length is determined by the
1609          * data_size field. The bd_cnt in the encapsulating BD must also be set
1610          * correctly to ensure that the BD is processed correctly and the full
1611          * WRITE_CMD message is extracted from the BD.
1612          */
1613         uint32_t        dta[32];
1614 } __rte_packed;
1615
1616 /* cfa_bds_read_clr_cmd_data_msg (size:192b/24B) */
1617 struct cfa_bds_read_clr_cmd_data_msg {
1618         /* This value selects the format for the mid-path command for the CFA. */
1619         uint8_t opcode;
1620         /*
1621          * This is read-clear command. 32B can be read from a table and
1622          * a 16b mask can be used to clear specific 16b units after the
1623          * read as an atomic operation.
1624          */
1625         #define CFA_BDS_READ_CLR_CMD_DATA_MSG_OPCODE_READ_CLR UINT32_C(0x2)
1626         #define CFA_BDS_READ_CLR_CMD_DATA_MSG_OPCODE_LAST \
1627                 CFA_BDS_READ_CLR_CMD_DATA_MSG_OPCODE_READ_CLR
1628         /* This value selects the table type to be acted upon. */
1629         uint8_t table_type;
1630         /* This value selects the table type to be acted upon. */
1631         #define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_TYPE_MASK  UINT32_C(0xf)
1632         #define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_TYPE_SFT   0
1633         /* This command acts on the action table of the specified scope. */
1634         #define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_TYPE_ACTION  UINT32_C(0x0)
1635         /* This command acts on the exact match table of the specified scope. */
1636         #define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_TYPE_EM      UINT32_C(0x1)
1637         #define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_TYPE_LAST \
1638                 CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_TYPE_EM
1639         /* This value selects which table scope will be accessed. */
1640         uint8_t table_scope;
1641         #define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_SCOPE_MASK UINT32_C(0x1f)
1642         #define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_SCOPE_SFT 0
1643         uint8_t unused0;
1644         /* This is the 32B index into the selected table to access. */
1645         uint32_t        table_index;
1646         #define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_INDEX_MASK \
1647                 UINT32_C(0x3ffffff)
1648         #define CFA_BDS_READ_CLR_CMD_DATA_MSG_TABLE_INDEX_SFT 0
1649         /*
1650          * This is the 64b host address where you want the data returned to. The
1651          * data will be written to the same function as the one that owns the SQ
1652          * this command is read from. The bottom two bits of this value must be
1653          * zero. The size of the write is controlled by the data_size field.
1654          */
1655         uint64_t        host_address;
1656         /*
1657          * This is active high clear mask for the 32B of data that this command
1658          * can read. Bit 0 of the field will clear bits 15:0 of the first word
1659          * of data read when set to '1'.
1660          */
1661         uint16_t        clear_mask;
1662         uint16_t        unused1[3];
1663 } __rte_packed;
1664
1665 /* cfa_bds_em_insert_cmd_data_msg (size:1152b/144B) */
1666 struct cfa_bds_em_insert_cmd_data_msg {
1667         /* This value selects the format for the mid-path command for the CFA. */
1668         uint8_t opcode;
1669         /*
1670          * An exact match table insert will be attempted into the table.
1671          * If there is a free location in the bucket, the payload will
1672          * be written to the bucket.
1673          */
1674         #define CFA_BDS_EM_INSERT_CMD_DATA_MSG_OPCODE_EM_INSERT UINT32_C(0x3)
1675         #define CFA_BDS_EM_INSERT_CMD_DATA_MSG_OPCODE_LAST \
1676                 CFA_BDS_EM_INSERT_CMD_DATA_MSG_OPCODE_EM_INSERT
1677         /*
1678          * Indicates write-through control. Indicates write-through when set,
1679          * or write back when cleared.
1680          */
1681         uint8_t write_thru;
1682         #define CFA_BDS_EM_INSERT_CMD_DATA_MSG_UNUSED_MASK    UINT32_C(0xf)
1683         #define CFA_BDS_EM_INSERT_CMD_DATA_MSG_UNUSED_SFT     0
1684         /*
1685          * Indicates write-through control. Indicates write-through when set,
1686          * or write back when cleared.
1687          */
1688         #define CFA_BDS_EM_INSERT_CMD_DATA_MSG_WRITE_THRU     UINT32_C(0x10)
1689         /* This value selects which table scope will be accessed. */
1690         uint8_t table_scope;
1691         #define CFA_BDS_EM_INSERT_CMD_DATA_MSG_TABLE_SCOPE_MASK UINT32_C(0x1f)
1692         #define CFA_BDS_EM_INSERT_CMD_DATA_MSG_TABLE_SCOPE_SFT 0
1693         /*
1694          * This value identifies the number of 32B units will be accessed. A
1695          * value of zero is invalid. Maximum value is 4.
1696          */
1697         uint8_t data_size;
1698         #define CFA_BDS_EM_INSERT_CMD_DATA_MSG_DATA_SIZE_MASK UINT32_C(0x7)
1699         #define CFA_BDS_EM_INSERT_CMD_DATA_MSG_DATA_SIZE_SFT 0
1700         /* This is the 32B index into the selected table to access. */
1701         uint32_t        table_index;
1702         #define CFA_BDS_EM_INSERT_CMD_DATA_MSG_TABLE_INDEX_MASK \
1703                 UINT32_C(0x3ffffff)
1704         #define CFA_BDS_EM_INSERT_CMD_DATA_MSG_TABLE_INDEX_SFT 0
1705         /*
1706          * This is the 64b host address where you want the data returned to. The
1707          * data will be written to the same function as the one that owns the SQ
1708          */
1709         uint64_t        host_address;
1710         /*
1711          * This is the Exact Match Lookup Record. Data length is determined by
1712          * the data_size field. The bd_cnt in the encapsulating BD must also be
1713          */
1714         uint32_t        dta[32];
1715 } __rte_packed;
1716
1717 /* cfa_bds_em_delete_cmd_data_msg (size:192b/24B) */
1718 struct cfa_bds_em_delete_cmd_data_msg {
1719         /* This value selects the format for the mid-path command for the CFA. */
1720         uint8_t opcode;
1721         /* An exact match table delete will be attempted. */
1722         #define CFA_BDS_EM_DELETE_CMD_DATA_MSG_OPCODE_EM_DELETE UINT32_C(0x4)
1723         #define CFA_BDS_EM_DELETE_CMD_DATA_MSG_OPCODE_LAST \
1724                 CFA_BDS_EM_DELETE_CMD_DATA_MSG_OPCODE_EM_DELETE
1725         /*
1726          * Indicates write-through control. Indicates write-through when set,
1727          * or write back when cleared.
1728          */
1729         uint8_t write_thru;
1730         #define CFA_BDS_EM_DELETE_CMD_DATA_MSG_UNUSED_MASK    UINT32_C(0xf)
1731         #define CFA_BDS_EM_DELETE_CMD_DATA_MSG_UNUSED_SFT     0
1732         /*
1733          * Indicates write-through control. Indicates write-through when set,
1734          * or write back when cleared.
1735          */
1736         #define CFA_BDS_EM_DELETE_CMD_DATA_MSG_WRITE_THRU     UINT32_C(0x10)
1737         /* This value selects which table scope will be accessed. */
1738         uint8_t table_scope;
1739         #define CFA_BDS_EM_DELETE_CMD_DATA_MSG_TABLE_SCOPE_MASK UINT32_C(0x1f)
1740         #define CFA_BDS_EM_DELETE_CMD_DATA_MSG_TABLE_SCOPE_SFT 0
1741         /*
1742          * This value identifies the number of 32B units will be accessed. A
1743          * value of zero is invalid. Maximum value is 4.
1744          */
1745         uint8_t data_size;
1746         #define CFA_BDS_EM_DELETE_CMD_DATA_MSG_DATA_SIZE_MASK UINT32_C(0x7)
1747         #define CFA_BDS_EM_DELETE_CMD_DATA_MSG_DATA_SIZE_SFT 0
1748         uint32_t        unused0;
1749         /*
1750          * This is the 64b host address where you want the data returned to. The
1751          * data will be written to the same function as the one that owns the SQ
1752          */
1753         uint64_t        host_address;
1754         /*
1755          * This is the Exact Match Lookup Record. Data length is determined by
1756          * the data_size field. The bd_cnt in the encapsulating BD must also be
1757          */
1758         uint64_t        dta;
1759 } __rte_packed;
1760
1761 /* cfa_bds_invalidate_cmd_data_msg (size:64b/8B) */
1762 struct cfa_bds_invalidate_cmd_data_msg {
1763         /* This value selects the format for the mid-path command for the CFA. */
1764         uint8_t opcode;
1765         /*
1766          * The specified table area will be invalidated. If it is needed.
1767          * again, it will be read from the backing store.
1768          */
1769         #define CFA_BDS_INVALIDATE_CMD_DATA_MSG_OPCODE_INVALIDATE UINT32_C(0x5)
1770         #define CFA_BDS_INVALIDATE_CMD_DATA_MSG_OPCODE_LAST \
1771                 CFA_BDS_INVALIDATE_CMD_DATA_MSG_OPCODE_INVALIDATE
1772         /* This value selects the table type to be acted upon. */
1773         uint8_t table_type;
1774         /* This value selects the table type to be acted upon. */
1775         #define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_TYPE_MASK  UINT32_C(0xf)
1776         #define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_TYPE_SFT   0
1777         /* This command acts on the action table of the specified scope. */
1778         #define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_TYPE_ACTION \
1779                 UINT32_C(0x0)
1780         /* This command acts on the exact match table of the specified scope. */
1781         #define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_TYPE_EM \
1782                 UINT32_C(0x1)
1783         #define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_TYPE_LAST \
1784                 CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_TYPE_EM
1785         /* This value selects which table scope will be accessed. */
1786         uint8_t table_scope;
1787         #define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_SCOPE_MASK UINT32_C(0x1f)
1788         #define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_SCOPE_SFT 0
1789         uint8_t unused0;
1790         /* This is the 32B index into the selected table to access. */
1791         uint32_t        table_index;
1792         #define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_INDEX_MASK \
1793                 UINT32_C(0x3ffffff)
1794         #define CFA_BDS_INVALIDATE_CMD_DATA_MSG_TABLE_INDEX_SFT 0
1795 } __rte_packed;
1796
1797 /* cfa_bds_event_collect_cmd_data_msg (size:128b/16B) */
1798 struct cfa_bds_event_collect_cmd_data_msg {
1799         /* This value selects the format for the mid-path command for the CFA. */
1800         uint8_t opcode;
1801         /* Reads notification messages from the Host Notification Queue. */
1802         #define CFA_BDS_EVENT_COLLECT_CMD_DATA_MSG_OPCODE_EVENT_COLLECT \
1803                 UINT32_C(0x6)
1804         #define CFA_BDS_EVENT_COLLECT_CMD_DATA_MSG_OPCODE_LAST \
1805                 CFA_BDS_EVENT_COLLECT_CMD_DATA_MSG_OPCODE_EVENT_COLLECT
1806         uint8_t unused0;
1807         /* This value selects which table scope will be accessed. */
1808         uint8_t table_scope;
1809         #define CFA_BDS_EVENT_COLLECT_CMD_DATA_MSG_TABLE_SCOPE_MASK \
1810                 UINT32_C(0x1f)
1811         #define CFA_BDS_EVENT_COLLECT_CMD_DATA_MSG_TABLE_SCOPE_SFT 0
1812         /*
1813          * This value identifies the number of 32B units will be accessed. A
1814          * value of zero is invalid. Maximum value is 4.
1815          */
1816         uint8_t data_size;
1817         #define CFA_BDS_EVENT_COLLECT_CMD_DATA_MSG_DATA_SIZE_MASK UINT32_C(0x7)
1818         #define CFA_BDS_EVENT_COLLECT_CMD_DATA_MSG_DATA_SIZE_SFT 0
1819         uint32_t        unused1;
1820         /*
1821          * This is the 64b host address where you want the data returned to. The
1822          * data will be written to the same function as the one that owns the SQ
1823          */
1824         uint64_t        host_address;
1825 } __rte_packed;
1826
1827 /* ce_bds_add_data_msg (size:512b/64B) */
1828 struct ce_bds_add_data_msg {
1829         uint32_t        version_algorithm_kid_opcode;
1830         /*
1831          * This value selects the operation for the mid-path command for the
1832          * crypto blocks.
1833          */
1834         #define CE_BDS_ADD_DATA_MSG_OPCODE_MASK               UINT32_C(0xf)
1835         #define CE_BDS_ADD_DATA_MSG_OPCODE_SFT                0
1836         /*
1837          * This is the add command. Using this opcode, Host Driver can add
1838          * information required for kTLS processing. The information is
1839          * updated in the CFCK context.
1840          */
1841         #define CE_BDS_ADD_DATA_MSG_OPCODE_ADD                  UINT32_C(0x1)
1842         #define CE_BDS_ADD_DATA_MSG_OPCODE_LAST \
1843                 CE_BDS_ADD_DATA_MSG_OPCODE_ADD
1844         /*
1845          * This field is the Crypto Context ID. The KID is used to store
1846          * information used by the associated kTLS offloaded connection.
1847          */
1848         #define CE_BDS_ADD_DATA_MSG_KID_MASK \
1849                 UINT32_C(0xfffff0)
1850         #define CE_BDS_ADD_DATA_MSG_KID_SFT                   4
1851         /*
1852          * Currently only two algorithms are supported, AES_GCM_128 and
1853          * AES_GCM_256. Additional bits for future growth.
1854          */
1855         #define CE_BDS_ADD_DATA_MSG_ALGORITHM_MASK \
1856                 UINT32_C(0xf000000)
1857         #define CE_BDS_ADD_DATA_MSG_ALGORITHM_SFT             24
1858         /* AES_GCM_128 Algorithm */
1859         #define CE_BDS_ADD_DATA_MSG_ALGORITHM_AES_GCM_128 \
1860                 UINT32_C(0x1000000)
1861         /* AES_GCM_256 Algorithm */
1862         #define CE_BDS_ADD_DATA_MSG_ALGORITHM_AES_GCM_256 \
1863                 UINT32_C(0x2000000)
1864         /*
1865          * Version number of TLS connection. HW will provide registers that
1866          * converts the 4b encoded version number to 16b of actual version
1867          * number in the TLS Header. * Initialized --> By mid-path command *
1868          * Updated --> Never though another mid-path command will result in an
1869          * update.
1870          */
1871         #define CE_BDS_ADD_DATA_MSG_VERSION_MASK \
1872                 UINT32_C(0xf0000000)
1873         #define CE_BDS_ADD_DATA_MSG_VERSION_SFT               28
1874         /* TLS1.2 Version */
1875         #define CE_BDS_ADD_DATA_MSG__TLS1_2 \
1876                 (UINT32_C(0x0) << 28)
1877         /* TLS1.3 Version */
1878         #define CE_BDS_ADD_DATA_MSG__TLS1_3 \
1879                 (UINT32_C(0x1) << 28)
1880         #define CE_BDS_ADD_DATA_MSG__LAST \
1881                 CE_BDS_ADD_DATA_MSG__TLS1_3
1882         /*
1883          * Command Type in the TLS header. HW will provide registers that
1884          * converts the 3b encoded command type to 8b of actual command type in
1885          * the TLS Header. * Initialized --> By mid-path command * Updated -->
1886          * Never though another mid-path command will result in an update
1887          */
1888         uint8_t cmd_type;
1889         #define CE_BDS_ADD_DATA_MSG_CMD_TYPE_MASK UINT32_C(0x7)
1890         #define CE_BDS_ADD_DATA_MSG_CMD_TYPE_SFT 0
1891         /* Application */
1892         #define CE_BDS_ADD_DATA_MSG_CMD_TYPE_APP   UINT32_C(0x0)
1893         #define CE_BDS_ADD_DATA_MSG_CMD_TYPE_LAST \
1894                 CE_BDS_ADD_DATA_MSG_CMD_TYPE_APP
1895         uint8_t unused0[3];
1896         /*
1897          * Salt is part of the nonce that is used as the Initial Vector (IV) in
1898          * AES-GCM cipher suites. These are exchanged as part of the handshake
1899          * process and is either the client_write_iv (when the client is
1900          * sending) or server_write_iv (when the server is sending). In
1901          * TLS1.2, 4B of Salt is concatenated with 8B of explicit_nonce to
1902          * generate the 12B of IV. In TLS1.3, 8B of TLS record sequence number
1903          * is zero padded to 12B and then xor'ed with the 4B of salt to generate
1904          * the 12B of IV. This value is initialized by this mid-path command.
1905          */
1906         uint32_t        salt;
1907         uint32_t        unused1;
1908         /*
1909          * This field keeps track of the TCP sequence number that is expected as
1910          * the first byte in the next TCP packet. This field is calculated by HW
1911          * using the output of the parser. The field is initialized as part of
1912          * the Mid-path BD download/update of a kTLS connection. For every TCP
1913          * packet processed, TCE HW will update the value to Current packet TCP
1914          * sequence number + Current packet TCP Payload Length.
1915          */
1916         uint32_t        pkt_tcp_seq_num;
1917         /*
1918          * This field maintains the TCP sequence number of the first byte in the
1919          * header of the active TLS record. This field is initialized as part of
1920          * the Mid-path BD download/update of a kTLS connection. For every
1921          * record that is processed, TCE HW copies the value from the
1922          * next_tls_header_tcp_seq_num field.
1923          */
1924         uint32_t        tls_header_tcp_seq_num;
1925         /*
1926          * This is sequence number for the TLS record in a particular session.
1927          * In TLS1.2, record sequence number is part of the Associated Data (AD)
1928          * in the AEAD algorithm. In TLS1.3, record sequence number is part of
1929          * the Initial Vector (IV). The field is initialized as part of the
1930          * mid-path BD download/update of a kTLS connection. TCE HW increments
1931          * the field after that for every record processed as it parses the TCP
1932          * packet.
1933          */
1934         uint32_t        record_seq_num[2];
1935         /*
1936          * Key used for encrypting or decrypting TLS records. The Key is
1937          * exchanged during the hand-shake protocol by the client-server and
1938          * provided to HW through this mid-path BD.
1939          */
1940         uint32_t        session_key[8];
1941 } __rte_packed;
1942
1943 /* ce_bds_delete_data_msg (size:64b/8B) */
1944 struct ce_bds_delete_data_msg {
1945         uint32_t        kid_opcode;
1946         /*
1947          * This value selects the operation for the mid-path command for the
1948          * crypto blocks.
1949          */
1950         #define CE_BDS_DELETE_DATA_MSG_OPCODE_MASK  UINT32_C(0xf)
1951         #define CE_BDS_DELETE_DATA_MSG_OPCODE_SFT   0
1952         /*
1953          * This is the delete command. Using this opcode, the host Driver
1954          * can remove a key context from the CFCK. If context is deleted
1955          * and packets with the same KID come through the pipeline, the
1956          * following actions are taken. For transmit packets, no crypto
1957          * operation will be performed, payload will be zero'ed out. For
1958          * receive packets, no crypto operation will be performed,
1959          * payload will be unmodified.
1960          */
1961         #define CE_BDS_DELETE_DATA_MSG_OPCODE_DELETE  UINT32_C(0x2)
1962         #define CE_BDS_DELETE_DATA_MSG_OPCODE_LAST \
1963                 CE_BDS_DELETE_DATA_MSG_OPCODE_DELETE
1964         /*
1965          * This field is the Crypto Context ID. The KID is used to store
1966          * information used by the associated kTLS offloaded connection.
1967          */
1968         #define CE_BDS_DELETE_DATA_MSG_KID_MASK     UINT32_C(0xfffff0)
1969         #define CE_BDS_DELETE_DATA_MSG_KID_SFT      4
1970         uint32_t        unused0;
1971 } __rte_packed;
1972
1973 /* ce_bds_resync_resp_ack_msg (size:128b/16B) */
1974 struct ce_bds_resync_resp_ack_msg {
1975         uint32_t        resync_status_kid_opcode;
1976         /*
1977          * This value selects the operation for the mid-path command for the
1978          * crypto blocks.
1979          */
1980         #define CE_BDS_RESYNC_RESP_ACK_MSG_OPCODE_MASK       UINT32_C(0xf)
1981         #define CE_BDS_RESYNC_RESP_ACK_MSG_OPCODE_SFT        0
1982         /*
1983          * This command is used by the driver as a response to the resync
1984          * request sent by the crypto engine.
1985          */
1986         #define CE_BDS_RESYNC_RESP_ACK_MSG_OPCODE_RESYNC       UINT32_C(0x3)
1987         #define CE_BDS_RESYNC_RESP_ACK_MSG_OPCODE_LAST \
1988                 CE_BDS_RESYNC_RESP_ACK_MSG_OPCODE_RESYNC
1989         /*
1990          * This field is the Crypto Context ID. The KID is used to store
1991          * information used by the associated kTLS offloaded connection.
1992          */
1993         #define CE_BDS_RESYNC_RESP_ACK_MSG_KID_MASK          UINT32_C(0xfffff0)
1994         #define CE_BDS_RESYNC_RESP_ACK_MSG_KID_SFT           4
1995         /*
1996          * This field indicates if the resync request resulted in a success or
1997          * a failure.
1998          */
1999         #define CE_BDS_RESYNC_RESP_ACK_MSG_RESYNC_STATUS \
2000                 UINT32_C(0x1000000)
2001         /*
2002          * An ACK indicates that the driver was able to find the TLS record
2003          * associated with TCP sequence number provided by the HW
2004          */
2005         #define CE_BDS_RESYNC_RESP_ACK_MSG_RESYNC_STATUS_ACK \
2006                 (UINT32_C(0x0) << 24)
2007         #define CE_BDS_RESYNC_RESP_ACK_MSG_RESYNC_STATUS_LAST \
2008                 CE_BDS_RESYNC_RESP_ACK_MSG_RESYNC_STATUS_ACK
2009         /*
2010          * This field is the echo of the TCP sequence number provided in the
2011          * resync request by the HW. If HW sent multiple resync requests, it
2012          * only tracks the latest TCP sequence number. When the response from
2013          * the Driver doesn't match the latest request, HW will drop the resync
2014          * response.
2015          */
2016         uint32_t        resync_record_tcp_seq_num;
2017         /*
2018          * This field indicates the TLS record sequence number associated with
2019          * the resync request. HW will take this number and add the delta records
2020          * it has found since sending the resync request, update the context and
2021          * resume decrypting records.
2022          */
2023         uint32_t        resync_record_seq_num[2];
2024 } __rte_packed;
2025
2026 /* ce_bds_resync_resp_nack_msg (size:64b/8B) */
2027 struct ce_bds_resync_resp_nack_msg {
2028         uint32_t        resync_status_kid_opcode;
2029         /*
2030          * This value selects the operation for the mid-path command for the
2031          * crypto blocks.
2032          */
2033         #define CE_BDS_RESYNC_RESP_NACK_MSG_OPCODE_MASK       UINT32_C(0xf)
2034         #define CE_BDS_RESYNC_RESP_NACK_MSG_OPCODE_SFT        0
2035         /*
2036          * This command is used by the driver as a response to the resync
2037          * request sent by the crypto engine.
2038          */
2039         #define CE_BDS_RESYNC_RESP_NACK_MSG_OPCODE_RESYNC       UINT32_C(0x3)
2040         #define CE_BDS_RESYNC_RESP_NACK_MSG_OPCODE_LAST \
2041                 CE_BDS_RESYNC_RESP_NACK_MSG_OPCODE_RESYNC
2042         /*
2043          * This field is the Crypto Context ID. The KID is used to store
2044          * information used by the associated kTLS offloaded connection.
2045          */
2046         #define CE_BDS_RESYNC_RESP_NACK_MSG_KID_MASK \
2047                 UINT32_C(0xfffff0)
2048         #define CE_BDS_RESYNC_RESP_NACK_MSG_KID_SFT           4
2049         /*
2050          * This field indicates if the resync request resulted in a success or
2051          * a failure.
2052          */
2053         #define CE_BDS_RESYNC_RESP_NACK_MSG_RESYNC_STATUS \
2054                 UINT32_C(0x1000000)
2055         /*
2056          * An NAK indicates that the driver wasn't able to find the TLS
2057          * record associated with TCP sequence number provided by the HW
2058          */
2059         #define CE_BDS_RESYNC_RESP_NACK_MSG_RESYNC_STATUS_NACK \
2060                 (UINT32_C(0x1) << 24)
2061         #define CE_BDS_RESYNC_RESP_NACK_MSG_RESYNC_STATUS_LAST \
2062                 CE_BDS_RESYNC_RESP_NACK_MSG_RESYNC_STATUS_NACK
2063         /*
2064          * This field is the echo of the TCP sequence number provided in the
2065          * resync request by the HW. If HW sent multiple resync requests, it
2066          * only tracks the latest TCP sequence number. When the response from
2067          * the Driver doesn't match the latest request, HW will drop the resync
2068          * response.
2069          */
2070         uint32_t        resync_record_tcp_seq_num;
2071 } __rte_packed;
2072
2073 /* crypto_presync_bd_cmd (size:256b/32B) */
2074 struct crypto_presync_bd_cmd {
2075         uint8_t flags;
2076         /*
2077          * Typically, presync BDs are used for packet retransmissions. Source
2078          * port sends all the packets in order over the network to destination
2079          * port and packets get dropped in the network. The destination port
2080          * will request retranmission of dropped packets and source port driver
2081          * will send presync BD to setup the transmitter appropriately. It will
2082          * provide the start and end TCP sequence number of the data to be
2083          * transmitted. HW keeps two sets of context variable, one for in order
2084          * traffic and one for retransmission traffic. HW is designed to
2085          * transmit everything posted in the presync BD and return to in order
2086          * mode after that. No inorder context variables are updated in the
2087          * process. There is a special case where packets can be dropped
2088          * between the TCP stack and Device Driver (Berkeley Packet Filter for
2089          * ex) and HW still needs to transmit rest of the traffic. In this
2090          * mode, driver will send a presync BD as if it is a retransmission but
2091          * at the end of the transmission, the in order variables need to be
2092          * updated. This flag is used by driver to indicate that in order
2093          * variables needs to be updated at the end of completing the task
2094          * associated with the presync BD.
2095          */
2096         #define CRYPTO_PRESYNC_BD_CMD_FLAGS_UPDATE_IN_ORDER_VAR \
2097                 UINT32_C(0x1)
2098         uint8_t unused0;
2099         uint16_t        unused1;
2100         /*
2101          * This field maintains the TCP sequence number of the first byte in the
2102          * Header of the active TLS record. This field is set to 0 during
2103          * mid-path BD updates, but is set to correct value when a presync BD is
2104          * detected. For every record that is processed, the value from the
2105          * next_tls_header_tcp_seq_num field is copied.
2106          */
2107         uint32_t        header_tcp_seq_num;
2108         /*
2109          * When a retransmitted packet has a TLS authentication TAG present and
2110          * the data spans multiple TCP Packets, HW is required to read the entire
2111          * record to recalculate the TAG but only transmit what is required. This
2112          * field is the start TCP sequence number of the packet(s) that need to
2113          * be re-transmitted. This field is initialized to 0 during Mid-path BD
2114          * add command and initialized to value provided by the driver when
2115          * Pre-sync BD is detected. This field is never updated unless another
2116          * Pre-sync BD signaling a new retransmission is scheduled.
2117          */
2118         uint32_t        start_tcp_seq_num;
2119         /*
2120          * When a retransmitted packet has a TLS authentication TAG present and
2121          * the data spans multiple TCP Packets, HW is required to read the
2122          * entire record to recalculate the TAG but only transmit what is
2123          * required. This field is the end TCP sequence number of the packet(s)
2124          * that need to be re-transmitted. This field is initialized to 0 during
2125          * Mid-path BD add command and initialized to value provided by the
2126          * driver when Pre-sync BD is detected. This field is never updated
2127          * unless another Pre-sync BD signaling a new retransmission is
2128          * scheduled.
2129          */
2130         uint32_t        end_tcp_seq_num;
2131         /*
2132          * For TLS1.2, an explicit nonce is used as part of the IV (concatenated
2133          * with the SALT). For retans packets, this field is extracted from the
2134          * TLS record, field right after the TLS Header and stored in the
2135          * context. This field needs to be stored in context as TCP segmentation
2136          * could have split the field into multiple TCP packets. This value is
2137          * initialized to 0 when presync BD is detected by taking the value from
2138          * the first TLS header. When subsequent TLS Headers are detected, the
2139          * value is extracted from packet.
2140          */
2141         uint32_t        explicit_nonce[2];
2142         /*
2143          * This is sequence number for the TLS record in a particular session. In
2144          * TLS1.2, record sequence number is part of the Associated Data (AD) in
2145          * the AEAD algorithm. In TLS1.3, record sequence number is part of the
2146          * Initial Vector (IV). The field is initialized to 0 during Mid-path BD
2147          * download. Is initialized to correct value when a pre-sync BD is
2148          * detected. TCE HW increments the field after that for every record
2149          * processed as it parses the TCP packet. Subsequent pre-sync BDs
2150          * delivering more retransmission instruction will also update this
2151          * field.
2152          */
2153         uint32_t        record_seq_num[2];
2154 } __rte_packed;
2155
2156 /* bd_base (size:64b/8B) */
2157 struct bd_base {
2158         uint8_t type;
2159         /* This value identifies the type of buffer descriptor. */
2160         #define BD_BASE_TYPE_MASK             UINT32_C(0x3f)
2161         #define BD_BASE_TYPE_SFT              0
2162         /*
2163          * Indicates that this BD is 16B long and is used for
2164          * normal L2 packet transmission.
2165          */
2166         #define BD_BASE_TYPE_TX_BD_SHORT        UINT32_C(0x0)
2167         /*
2168          * Indicates that this BD is 1BB long and is an empty
2169          * TX BD. Not valid for use by the driver.
2170          */
2171         #define BD_BASE_TYPE_TX_BD_EMPTY        UINT32_C(0x1)
2172         /*
2173          * Indicates that this BD is 16B long and is an RX Producer
2174          * (i.e. empty) buffer descriptor.
2175          */
2176         #define BD_BASE_TYPE_RX_PROD_PKT        UINT32_C(0x4)
2177         /*
2178          * Indicates that this BD is 16B long and is an RX
2179          * Producer Buffer BD.
2180          */
2181         #define BD_BASE_TYPE_RX_PROD_BFR        UINT32_C(0x5)
2182         /*
2183          * Indicates that this BD is 16B long and is an
2184          * RX Producer Assembly Buffer Descriptor.
2185          */
2186         #define BD_BASE_TYPE_RX_PROD_AGG        UINT32_C(0x6)
2187         /*
2188          * Indicates that this BD is used to issue a command to one of
2189          * the mid-path destinations.
2190          */
2191         #define BD_BASE_TYPE_TX_BD_MP_CMD       UINT32_C(0x8)
2192         /*
2193          * Indicates that this BD is used to issue a cryptographic pre-
2194          * sync command through the fast path and destined for TCE.
2195          */
2196         #define BD_BASE_TYPE_TX_BD_PRESYNC_CMD  UINT32_C(0x9)
2197         /*
2198          * Indicates that this BD is 32B long and is used for
2199          * normal L2 packet transmission.
2200          */
2201         #define BD_BASE_TYPE_TX_BD_LONG         UINT32_C(0x10)
2202         /*
2203          * Indicates that this BD is 32B long and is used for
2204          * L2 packet transmission for small packets that require
2205          * low latency.
2206          */
2207         #define BD_BASE_TYPE_TX_BD_LONG_INLINE  UINT32_C(0x11)
2208         #define BD_BASE_TYPE_LAST              BD_BASE_TYPE_TX_BD_LONG_INLINE
2209         uint8_t unused_1[7];
2210 } __rte_packed;
2211
2212 /* tx_bd_short (size:128b/16B) */
2213 struct tx_bd_short {
2214         /*
2215          * All bits in this field must be valid on the first BD of a packet.
2216          * Only the packet_end bit must be valid for the remaining BDs
2217          * of a packet.
2218          */
2219         uint16_t        flags_type;
2220         /* This value identifies the type of buffer descriptor. */
2221         #define TX_BD_SHORT_TYPE_MASK            UINT32_C(0x3f)
2222         #define TX_BD_SHORT_TYPE_SFT             0
2223         /*
2224          * Indicates that this BD is 16B long and is used for
2225          * normal L2 packet transmission.
2226          */
2227         #define TX_BD_SHORT_TYPE_TX_BD_SHORT       UINT32_C(0x0)
2228         #define TX_BD_SHORT_TYPE_LAST             TX_BD_SHORT_TYPE_TX_BD_SHORT
2229         /*
2230          * All bits in this field must be valid on the first BD of a packet.
2231          * Only the packet_end bit must be valid for the remaining BDs
2232          * of a packet.
2233          */
2234         #define TX_BD_SHORT_FLAGS_MASK           UINT32_C(0xffc0)
2235         #define TX_BD_SHORT_FLAGS_SFT            6
2236         /*
2237          * If set to 1, the packet ends with the data in the buffer
2238          * pointed to by this descriptor. This flag must be
2239          * valid on every BD.
2240          */
2241         #define TX_BD_SHORT_FLAGS_PACKET_END      UINT32_C(0x40)
2242         /*
2243          * If set to 1, the device will not generate a completion for
2244          * this transmit packet unless there is an error in it's
2245          * processing.
2246          * If this bit
2247          * is set to 0, then the packet will be completed normally.
2248          *
2249          * This bit must be valid only on the first BD of a packet.
2250          */
2251         #define TX_BD_SHORT_FLAGS_NO_CMPL         UINT32_C(0x80)
2252         /*
2253          * This value indicates how many 16B BD locations are consumed
2254          * in the ring by this packet.
2255          * A value of 1 indicates that this BD is the only BD (and that
2256          * it is a short BD). A value
2257          * of 3 indicates either 3 short BDs or 1 long BD and one short
2258          * BD in the packet. A value of 0 indicates
2259          * that there are 32 BD locations in the packet (the maximum).
2260          *
2261          * This field is valid only on the first BD of a packet.
2262          */
2263         #define TX_BD_SHORT_FLAGS_BD_CNT_MASK     UINT32_C(0x1f00)
2264         #define TX_BD_SHORT_FLAGS_BD_CNT_SFT      8
2265         /*
2266          * This value is a hint for the length of the entire packet.
2267          * It is used by the chip to optimize internal processing.
2268          *
2269          * The packet will be dropped if the hint is too short.
2270          *
2271          * This field is valid only on the first BD of a packet.
2272          */
2273         #define TX_BD_SHORT_FLAGS_LHINT_MASK      UINT32_C(0x6000)
2274         #define TX_BD_SHORT_FLAGS_LHINT_SFT       13
2275         /* indicates packet length < 512B */
2276         #define TX_BD_SHORT_FLAGS_LHINT_LT512       (UINT32_C(0x0) << 13)
2277         /* indicates 512 <= packet length < 1KB */
2278         #define TX_BD_SHORT_FLAGS_LHINT_LT1K        (UINT32_C(0x1) << 13)
2279         /* indicates 1KB <= packet length < 2KB */
2280         #define TX_BD_SHORT_FLAGS_LHINT_LT2K        (UINT32_C(0x2) << 13)
2281         /* indicates packet length >= 2KB */
2282         #define TX_BD_SHORT_FLAGS_LHINT_GTE2K       (UINT32_C(0x3) << 13)
2283         #define TX_BD_SHORT_FLAGS_LHINT_LAST \
2284                 TX_BD_SHORT_FLAGS_LHINT_GTE2K
2285         /*
2286          * If set to 1, the device immediately updates the Send Consumer
2287          * Index after the buffer associated with this descriptor has
2288          * been transferred via DMA to NIC memory from host memory. An
2289          * interrupt may or may not be generated according to the state
2290          * of the interrupt avoidance mechanisms. If this bit
2291          * is set to 0, then the Consumer Index is only updated as soon
2292          * as one of the host interrupt coalescing conditions has been met.
2293          *
2294          * This bit must be valid on the first BD of a packet.
2295          */
2296         #define TX_BD_SHORT_FLAGS_COAL_NOW        UINT32_C(0x8000)
2297         /*
2298          * This is the length of the host physical buffer this BD describes
2299          * in bytes.
2300          *
2301          * This field must be valid on all BDs of a packet.
2302          */
2303         uint16_t        len;
2304         /*
2305          * The opaque data field is pass through to the completion and can be
2306          * used for any data that the driver wants to associate with the
2307          * transmit BD.
2308          *
2309          * This field must be valid on the first BD of a packet. If completion
2310          * coalescing is enabled on the TX ring, it is suggested that the driver
2311          * populate the opaque field to indicate the specific TX ring with which
2312          * the completion is associated, then utilize the opaque and sq_cons_idx
2313          * fields in the coalesced completion record to determine the specific
2314          * packets that are to be completed on that ring.
2315          */
2316         uint32_t        opaque;
2317         /*
2318          * This is the host physical address for the portion of the packet
2319          * described by this TX BD.
2320          *
2321          * This value must be valid on all BDs of a packet.
2322          */
2323         uint64_t        address;
2324 } __rte_packed;
2325
2326 /* tx_bd_long (size:128b/16B) */
2327 struct tx_bd_long {
2328         /* This value identifies the type of buffer descriptor. */
2329         uint16_t        flags_type;
2330         /*
2331          * This value indicates the type of buffer descriptor.
2332          * packet.
2333          */
2334         #define TX_BD_LONG_TYPE_MASK            UINT32_C(0x3f)
2335         #define TX_BD_LONG_TYPE_SFT             0
2336         /*
2337          * Indicates that this BD is 32B long and is used for
2338          * normal L2 packet transmission.
2339          */
2340         #define TX_BD_LONG_TYPE_TX_BD_LONG        UINT32_C(0x10)
2341         #define TX_BD_LONG_TYPE_LAST             TX_BD_LONG_TYPE_TX_BD_LONG
2342         /*
2343          * All bits in this field must be valid on the first BD of a packet.
2344          * Only the packet_end bit must be valid for the remaining BDs
2345          * of a packet.
2346          */
2347         #define TX_BD_LONG_FLAGS_MASK           UINT32_C(0xffc0)
2348         #define TX_BD_LONG_FLAGS_SFT            6
2349         /*
2350          * If set to 1, the packet ends with the data in the buffer
2351          * pointed to by this descriptor. This flag must be
2352          * valid on every BD.
2353          */
2354         #define TX_BD_LONG_FLAGS_PACKET_END      UINT32_C(0x40)
2355         /*
2356          * If set to 1, the device will not generate a completion for
2357          * this transmit packet unless there is an error in it's
2358          * processing.
2359          * If this bit
2360          * is set to 0, then the packet will be completed normally.
2361          *
2362          * This bit must be valid only on the first BD of a packet.
2363          */
2364         #define TX_BD_LONG_FLAGS_NO_CMPL         UINT32_C(0x80)
2365         /*
2366          * This value indicates how many 16B BD locations are consumed
2367          * in the ring by this packet.
2368          * A value of 1 indicates that this BD is the only BD (and that
2369          * it is a short BD). A value
2370          * of 3 indicates either 3 short BDs or 1 long BD and one short
2371          * BD in the packet. A value of 0 indicates
2372          * that there are 32 BD locations in the packet (the maximum).
2373          *
2374          * This field is valid only on the first BD of a packet.
2375          */
2376         #define TX_BD_LONG_FLAGS_BD_CNT_MASK     UINT32_C(0x1f00)
2377         #define TX_BD_LONG_FLAGS_BD_CNT_SFT      8
2378         /*
2379          * This value is a hint for the length of the entire packet.
2380          * It is used by the chip to optimize internal processing.
2381          *
2382          * The packet will be dropped if the hint is too short.
2383          *
2384          * This field is valid only on the first BD of a packet.
2385          */
2386         #define TX_BD_LONG_FLAGS_LHINT_MASK      UINT32_C(0x6000)
2387         #define TX_BD_LONG_FLAGS_LHINT_SFT       13
2388         /* indicates packet length < 512B */
2389         #define TX_BD_LONG_FLAGS_LHINT_LT512       (UINT32_C(0x0) << 13)
2390         /* indicates 512 <= packet length < 1KB */
2391         #define TX_BD_LONG_FLAGS_LHINT_LT1K        (UINT32_C(0x1) << 13)
2392         /* indicates 1KB <= packet length < 2KB */
2393         #define TX_BD_LONG_FLAGS_LHINT_LT2K        (UINT32_C(0x2) << 13)
2394         /* indicates packet length >= 2KB */
2395         #define TX_BD_LONG_FLAGS_LHINT_GTE2K       (UINT32_C(0x3) << 13)
2396         #define TX_BD_LONG_FLAGS_LHINT_LAST       TX_BD_LONG_FLAGS_LHINT_GTE2K
2397         /*
2398          * If set to 1, the device immediately updates the Send Consumer
2399          * Index after the buffer associated with this descriptor has
2400          * been transferred via DMA to NIC memory from host memory. An
2401          * interrupt may or may not be generated according to the state
2402          * of the interrupt avoidance mechanisms. If this bit
2403          * is set to 0, then the Consumer Index is only updated as soon
2404          * as one of the host interrupt coalescing conditions has been met.
2405          *
2406          * This bit must be valid on the first BD of a packet.
2407          */
2408         #define TX_BD_LONG_FLAGS_COAL_NOW        UINT32_C(0x8000)
2409         /*
2410          * This is the length of the host physical buffer this BD describes
2411          * in bytes.
2412          *
2413          * This field must be valid on all BDs of a packet.
2414          */
2415         uint16_t        len;
2416         /*
2417          * The opaque data field is passed through to the completion and can be
2418          * used for any data that the driver wants to associate with the
2419          * transmit BD.
2420          *
2421          * This field must be valid on the first BD of a packet. If completion
2422          * coalescing is enabled on the TX ring, it is suggested that the driver
2423          * populate the opaque field to indicate the specific TX ring with which
2424          * the completion is associated, then utilize the opaque and sq_cons_idx
2425          * fields in the coalesced completion record to determine the specific
2426          * packets that are to be completed on that ring.
2427          */
2428         uint32_t        opaque;
2429         /*
2430          * This is the host physical address for the portion of the packet
2431          * described by this TX BD.
2432          *
2433          * This value must be valid on all BDs of a packet.
2434          */
2435         uint64_t        address;
2436 } __rte_packed;
2437
2438 /* Last 16 bytes of tx_bd_long. */
2439 /* tx_bd_long_hi (size:128b/16B) */
2440 struct tx_bd_long_hi {
2441         /*
2442          * All bits in this field must be valid on the first BD of a packet.
2443          * Their value on other BDs of the packet will be ignored.
2444          */
2445         uint16_t        lflags;
2446         /*
2447          * If set to 1, the controller replaces the TCP/UPD checksum
2448          * fields of normal TCP/UPD checksum, or the inner TCP/UDP
2449          * checksum field of the encapsulated TCP/UDP packets with the
2450          * hardware calculated TCP/UDP checksum for the packet associated
2451          * with this descriptor. The flag is ignored if the LSO flag is set.
2452          *
2453          * This bit must be valid on the first BD of a packet.
2454          */
2455         #define TX_BD_LONG_LFLAGS_TCP_UDP_CHKSUM     UINT32_C(0x1)
2456         /*
2457          * If set to 1, the controller replaces the IP checksum of the
2458          * normal packets, or the inner IP checksum of the encapsulated
2459          * packets with the hardware calculated IP checksum for the
2460          * packet associated with this descriptor.
2461          *
2462          * This bit must be valid on the first BD of a packet.
2463          */
2464         #define TX_BD_LONG_LFLAGS_IP_CHKSUM          UINT32_C(0x2)
2465         /*
2466          * If set to 1, the controller will not append an Ethernet CRC
2467          * to the end of the frame.
2468          *
2469          * This bit must be valid on the first BD of a packet.
2470          *
2471          * Packet must be 64B or longer when this flag is set. It is not
2472          * useful to use this bit with any form of TX offload such as
2473          * CSO or LSO. The intent is that the packet from the host already
2474          * has a valid Ethernet CRC on the packet.
2475          */
2476         #define TX_BD_LONG_LFLAGS_NOCRC              UINT32_C(0x4)
2477         /*
2478          * If set to 1, the device will record the time at which the packet
2479          * was actually transmitted at the TX MAC for 2-step time sync.
2480          *
2481          * This bit must be valid on the first BD of a packet.
2482          */
2483         #define TX_BD_LONG_LFLAGS_STAMP              UINT32_C(0x8)
2484         /*
2485          * If set to 1, The controller replaces the tunnel IP checksum
2486          * field with hardware calculated IP checksum for the IP header
2487          * of the packet associated with this descriptor.
2488          *
2489          * For outer UDP checksum, global outer UDP checksum TE_NIC register
2490          * needs to be enabled. If the global outer UDP checksum TE_NIC register
2491          * bit is set, outer UDP checksum will be calculated for the following
2492          * cases:
2493          * 1. Packets with tcp_udp_chksum flag set to offload checksum for inner
2494          * packet AND the inner packet is TCP/UDP. If the inner packet is ICMP for
2495          * example (non-TCP/UDP), even if the tcp_udp_chksum is set, the outer UDP
2496          * checksum will not be calculated.
2497          * 2. Packets with lso flag set which implies inner TCP checksum calculation
2498          * as part of LSO operation.
2499          */
2500         #define TX_BD_LONG_LFLAGS_T_IP_CHKSUM        UINT32_C(0x10)
2501         /*
2502          * If set to 1, the device will treat this packet with LSO(Large
2503          * Send Offload) processing for both normal or encapsulated
2504          * packets, which is a form of TCP segmentation. When this bit
2505          * is 1, the hdr_size and mss fields must be valid. The driver
2506          * doesn't need to set ot_ip_chksum, t_ip_chksum, ip_chksum, and
2507          * tcp_udp_chksum flags since the controller will replace the
2508          * appropriate checksum fields for segmented packets.
2509          *
2510          * When this bit is 1, the hdr_size and mss fields must be valid.
2511          */
2512         #define TX_BD_LONG_LFLAGS_LSO                UINT32_C(0x20)
2513         /*
2514          * If set to zero when LSO is '1', then the IPID will be treated
2515          * as a 16b number and will be wrapped if it exceeds a value of
2516          * 0xffff.
2517          *
2518          * If set to one when LSO is '1', then the IPID will be treated
2519          * as a 15b number and will be wrapped if it exceeds a value 0f
2520          * 0x7fff.
2521          */
2522         #define TX_BD_LONG_LFLAGS_IPID_FMT           UINT32_C(0x40)
2523         /*
2524          * If set to zero when LSO is '1', then the IPID of the tunnel
2525          * IP header will not be modified during LSO operations.
2526          *
2527          * If set to one when LSO is '1', then the IPID of the tunnel
2528          * IP header will be incremented for each subsequent segment of an
2529          * LSO operation.
2530          *
2531          * The flag is ignored if the LSO packet is a normal (non-tunneled)
2532          * TCP packet.
2533          */
2534         #define TX_BD_LONG_LFLAGS_T_IPID             UINT32_C(0x80)
2535         /*
2536          * If set to '1', then the RoCE ICRC will be appended to the
2537          * packet. Packet must be a valid RoCE format packet.
2538          */
2539         #define TX_BD_LONG_LFLAGS_ROCE_CRC           UINT32_C(0x100)
2540         /*
2541          * If set to '1', then the FCoE CRC will be appended to the
2542          * packet. Packet must be a valid FCoE format packet.
2543          */
2544         #define TX_BD_LONG_LFLAGS_FCOE_CRC           UINT32_C(0x200)
2545         /*
2546          * If set to '1', then the timestamp from the BD is used. If cleared
2547          * to 0, then TWE provides the timestamp.
2548          */
2549         #define TX_BD_LONG_LFLAGS_BD_TS_EN           UINT32_C(0x400)
2550         /*
2551          * If set to '1', this operation will cause a trace capture in each
2552          * block it passes through.
2553          */
2554         #define TX_BD_LONG_LFLAGS_DEBUG_TRACE        UINT32_C(0x800)
2555         /*
2556          * If set to '1', the device will record the time at which the packet
2557          * was actually transmitted at the TX MAC for 1-step time sync. This
2558          * bit must be valid on the first BD of a packet.
2559          */
2560         #define TX_BD_LONG_LFLAGS_STAMP_1STEP        UINT32_C(0x1000)
2561         /*
2562          * If set to '1', the controller replaces the Outer-tunnel IP checksum
2563          * field with hardware calculated IP checksum for the IP header of the
2564          * packet associated with this descriptor. For outer UDP checksum, it
2565          * will be the following behavior for all cases independent of settings
2566          * of inner LSO and checksum offload BD flags. If outer UDP checksum
2567          * is 0, then do not update it. If outer UDP checksum is non zero, then
2568          * the hardware should compute and update it.
2569          */
2570         #define TX_BD_LONG_LFLAGS_OT_IP_CHKSUM       UINT32_C(0x2000)
2571         /*
2572          * If set to zero when LSO is '1', then the IPID of the Outer-tunnel IP
2573          * header will not be modified during LSO operations. If set to one
2574          * when LSO is '1', then the IPID of the Outer-tunnel IP header will be
2575          * incremented for each subsequent segment of an LSO operation. The
2576          * flag is ignored if the LSO packet is a normal (non-tunneled) TCP
2577          * packet.
2578          */
2579         #define TX_BD_LONG_LFLAGS_OT_IPID            UINT32_C(0x4000)
2580         /*
2581          * If set to '1', When set to 1, KTLS encryption will be enabled for
2582          * the packet.
2583          */
2584         #define TX_BD_LONG_LFLAGS_CRYPTO_EN          UINT32_C(0x8000)
2585         uint16_t        kid_or_ts_low_hdr_size;
2586         /*
2587          * When LSO is '1', this field must contain the offset of the
2588          * TCP payload from the beginning of the packet in as
2589          * 16b words. In case of encapsulated/tunneling packet, this field
2590          * contains the offset of the inner TCP payload from beginning of the
2591          * packet as 16-bit words.
2592          *
2593          * This value must be valid on the first BD of a packet.
2594          */
2595         #define TX_BD_LONG_HDR_SIZE_MASK     UINT32_C(0x1ff)
2596         #define TX_BD_LONG_HDR_SIZE_SFT      0
2597         /*
2598          * If lflags.bd_ts_en is 1, this is the lower 7 bits of the 24-bit
2599          * timestamp. If lflags.crypto_en is 1, this is the lower 7 bits of the
2600          * 20-bit KID.
2601          */
2602         #define TX_BD_LONG_KID_OR_TS_LOW_MASK UINT32_C(0xfe00)
2603         #define TX_BD_LONG_KID_OR_TS_LOW_SFT 9
2604         uint32_t        kid_or_ts_high_mss;
2605         /*
2606          * This is the MSS value that will be used to do the LSO processing.
2607          * The value is the length in bytes of the TCP payload for each
2608          * segment generated by the LSO operation.
2609          *
2610          * This value must be valid on the first BD of a packet.
2611          */
2612         #define TX_BD_LONG_MSS_MASK           UINT32_C(0x7fff)
2613         #define TX_BD_LONG_MSS_SFT            0
2614         /*
2615          * If lflags.bd_ts_en is 1, this is the upper 17 bits of the 24-bit
2616          * timestamp. If lflags.crypto_en is 1, the least significant 13 bits
2617          * of this field contain the upper 13 bits of the 20-bit KID.
2618          */
2619         #define TX_BD_LONG_KID_OR_TS_HIGH_MASK UINT32_C(0xffff8000)
2620         #define TX_BD_LONG_KID_OR_TS_HIGH_SFT 15
2621         /*
2622          * This value selects bits 25:16 of the CFA action to perform on the
2623          * packet. See the cfa_action field for more information.
2624          */
2625         uint16_t        cfa_action_high;
2626         #define TX_BD_LONG_CFA_ACTION_HIGH_MASK UINT32_C(0x3ff)
2627         #define TX_BD_LONG_CFA_ACTION_HIGH_SFT 0
2628         /*
2629          * This value selects a CFA action to perform on the packet.
2630          * Set this value to zero if no CFA action is desired.
2631          *
2632          * This value must be valid on the first BD of a packet.
2633          */
2634         uint16_t        cfa_action;
2635         /*
2636          * This value is action meta-data that defines CFA edit operations
2637          * that are done in addition to any action editing.
2638          */
2639         uint32_t        cfa_meta;
2640         /* When key=1, This is the VLAN tag VID value. */
2641         #define TX_BD_LONG_CFA_META_VLAN_VID_MASK     UINT32_C(0xfff)
2642         #define TX_BD_LONG_CFA_META_VLAN_VID_SFT      0
2643         /* When key=1, This is the VLAN tag DE value. */
2644         #define TX_BD_LONG_CFA_META_VLAN_DE           UINT32_C(0x1000)
2645         /* When key=1, This is the VLAN tag PRI value. */
2646         #define TX_BD_LONG_CFA_META_VLAN_PRI_MASK     UINT32_C(0xe000)
2647         #define TX_BD_LONG_CFA_META_VLAN_PRI_SFT      13
2648         /* When key=1, This is the VLAN tag TPID select value. */
2649         #define TX_BD_LONG_CFA_META_VLAN_TPID_MASK    UINT32_C(0x70000)
2650         #define TX_BD_LONG_CFA_META_VLAN_TPID_SFT     16
2651         /* 0x88a8 */
2652         #define TX_BD_LONG_CFA_META_VLAN_TPID_TPID88A8  (UINT32_C(0x0) << 16)
2653         /* 0x8100 */
2654         #define TX_BD_LONG_CFA_META_VLAN_TPID_TPID8100  (UINT32_C(0x1) << 16)
2655         /* 0x9100 */
2656         #define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9100  (UINT32_C(0x2) << 16)
2657         /* 0x9200 */
2658         #define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9200  (UINT32_C(0x3) << 16)
2659         /* 0x9300 */
2660         #define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9300  (UINT32_C(0x4) << 16)
2661         /* Value programmed in CFA VLANTPID register. */
2662         #define TX_BD_LONG_CFA_META_VLAN_TPID_TPIDCFG   (UINT32_C(0x5) << 16)
2663         #define TX_BD_LONG_CFA_META_VLAN_TPID_LAST \
2664                 TX_BD_LONG_CFA_META_VLAN_TPID_TPIDCFG
2665         /* When key=1, This is the VLAN tag TPID select value. */
2666         #define TX_BD_LONG_CFA_META_VLAN_RESERVED_MASK UINT32_C(0xff80000)
2667         #define TX_BD_LONG_CFA_META_VLAN_RESERVED_SFT 19
2668         /*
2669          * This field identifies the type of edit to be performed
2670          * on the packet.
2671          *
2672          * This value must be valid on the first BD of a packet.
2673          */
2674         #define TX_BD_LONG_CFA_META_KEY_MASK          UINT32_C(0xf0000000)
2675         #define TX_BD_LONG_CFA_META_KEY_SFT           28
2676         /* No editing */
2677         #define TX_BD_LONG_CFA_META_KEY_NONE            (UINT32_C(0x0) << 28)
2678         /*
2679          * - meta[17:16] - TPID select value (0 = 0x8100).
2680          * - meta[15:12] - PRI/DE value.
2681          * - meta[11:0] - VID value.
2682          */
2683         #define TX_BD_LONG_CFA_META_KEY_VLAN_TAG        (UINT32_C(0x1) << 28)
2684         #define TX_BD_LONG_CFA_META_KEY_LAST \
2685                 TX_BD_LONG_CFA_META_KEY_VLAN_TAG
2686 } __rte_packed;
2687
2688 /*
2689  * This structure is used to inform the NIC of packet data that needs to be
2690  * transmitted with additional processing that requires extra data such as
2691  * VLAN insertion plus attached inline data. This BD type may be used to
2692  * improve latency for small packets needing the additional extended features
2693  * supported by long BDs.
2694  */
2695 /* tx_bd_long_inline (size:256b/32B) */
2696 struct tx_bd_long_inline {
2697         uint16_t        flags_type;
2698         /* This value identifies the type of buffer descriptor. */
2699         #define TX_BD_LONG_INLINE_TYPE_MASK             UINT32_C(0x3f)
2700         #define TX_BD_LONG_INLINE_TYPE_SFT              0
2701         /*
2702          * This type of BD is 32B long and is used for inline L2 packet
2703          * transmission.
2704          */
2705         #define TX_BD_LONG_INLINE_TYPE_TX_BD_LONG_INLINE  UINT32_C(0x11)
2706         #define TX_BD_LONG_INLINE_TYPE_LAST \
2707                 TX_BD_LONG_INLINE_TYPE_TX_BD_LONG_INLINE
2708         /*
2709          * All bits in this field may be set on the first BD of a packet.
2710          * Only the packet_end bit may be set in non-first BDs.
2711          */
2712         #define TX_BD_LONG_INLINE_FLAGS_MASK            UINT32_C(0xffc0)
2713         #define TX_BD_LONG_INLINE_FLAGS_SFT             6
2714         /*
2715          * If set to 1, the packet ends with the data in the buffer
2716          * pointed to by this descriptor. This flag must be
2717          * valid on every BD.
2718          */
2719         #define TX_BD_LONG_INLINE_FLAGS_PACKET_END       UINT32_C(0x40)
2720         /*
2721          * If set to 1, the device will not generate a completion for
2722          * this transmit packet unless there is an error in its processing.
2723          * If this bit is set to 0, then the packet will be completed
2724          * normally.
2725          *
2726          * This bit may be set only on the first BD of a packet.
2727          */
2728         #define TX_BD_LONG_INLINE_FLAGS_NO_CMPL          UINT32_C(0x80)
2729         /*
2730          * This value indicates how many 16B BD locations are consumed
2731          * in the ring by this packet, including the BD and inline
2732          * data.
2733          */
2734         #define TX_BD_LONG_INLINE_FLAGS_BD_CNT_MASK      UINT32_C(0x1f00)
2735         #define TX_BD_LONG_INLINE_FLAGS_BD_CNT_SFT       8
2736         /* This field is deprecated. */
2737         #define TX_BD_LONG_INLINE_FLAGS_LHINT_MASK       UINT32_C(0x6000)
2738         #define TX_BD_LONG_INLINE_FLAGS_LHINT_SFT        13
2739         /*
2740          * If set to 1, the device immediately updates the Send Consumer
2741          * Index after the buffer associated with this descriptor has
2742          * been transferred via DMA to NIC memory from host memory. An
2743          * interrupt may or may not be generated according to the state
2744          * of the interrupt avoidance mechanisms. If this bit
2745          * is set to 0, then the Consumer Index is only updated as soon
2746          * as one of the host interrupt coalescing conditions has been met.
2747          *
2748          * This bit must be valid on the first BD of a packet.
2749          */
2750         #define TX_BD_LONG_INLINE_FLAGS_COAL_NOW         UINT32_C(0x8000)
2751         /*
2752          * This is the length of the inline data, not including BD length, in
2753          * bytes.
2754          * The maximum value is 480.
2755          *
2756          * This field must be valid on all BDs of a packet.
2757          */
2758         uint16_t        len;
2759         /*
2760          * The opaque data field is passed through to the completion and can be
2761          * used for any data that the driver wants to associate with the transmit
2762          * BD. This field must be valid on the first BD of a packet. If
2763          * completion coalescing is enabled on the TX ring, it is suggested that
2764          * the driver populate the opaque field to indicate the specific TX ring
2765          * with which the completion is associated, then utilize the opaque and
2766          * sq_cons_idx fields in the coalesced completion record to determine
2767          * the specific packets that are to be completed on that ring.
2768          *
2769          * This field must be valid on the first BD of a packet.
2770          */
2771         uint32_t        opaque;
2772         uint64_t        unused1;
2773         /*
2774          * All bits in this field must be valid on the first BD of a packet.
2775          * Their value on other BDs of the packet is ignored.
2776          */
2777         uint16_t        lflags;
2778         /*
2779          * If set to 1, the controller replaces the TCP/UPD checksum
2780          * fields of normal TCP/UPD checksum, or the inner TCP/UDP
2781          * checksum field of the encapsulated TCP/UDP packets with the
2782          * hardware calculated TCP/UDP checksum for the packet associated
2783          * with this descriptor. The flag is ignored if the LSO flag is set.
2784          */
2785         #define TX_BD_LONG_INLINE_LFLAGS_TCP_UDP_CHKSUM     UINT32_C(0x1)
2786         /*
2787          * If set to 1, the controller replaces the IP checksum of the
2788          * normal packets, or the inner IP checksum of the encapsulated
2789          * packets with the hardware calculated IP checksum for the
2790          * packet associated with this descriptor.
2791          */
2792         #define TX_BD_LONG_INLINE_LFLAGS_IP_CHKSUM          UINT32_C(0x2)
2793         /*
2794          * If set to 1, the controller will not append an Ethernet CRC
2795          * to the end of the frame.
2796          *
2797          * Packet must be 64B or longer when this flag is set. It is not
2798          * useful to use this bit with any form of TX offload such as
2799          * CSO or LSO. The intent is that the packet from the host already
2800          * has a valid Ethernet CRC on the packet.
2801          */
2802         #define TX_BD_LONG_INLINE_LFLAGS_NOCRC              UINT32_C(0x4)
2803         /*
2804          * If set to 1, the device will record the time at which the packet
2805          * was actually transmitted at the TX MAC for 2-step time sync. This
2806          * bit must be valid on the first BD of a packet.
2807          */
2808         #define TX_BD_LONG_INLINE_LFLAGS_STAMP              UINT32_C(0x8)
2809         /*
2810          * If set to 1, the controller replaces the tunnel IP checksum
2811          * field with hardware calculated IP checksum for the IP header
2812          * of the packet associated with this descriptor. The hardware
2813          * updates an outer UDP checksum if it is non-zero.
2814          */
2815         #define TX_BD_LONG_INLINE_LFLAGS_T_IP_CHKSUM        UINT32_C(0x10)
2816         /*
2817          * This bit must be 0 for BDs of this type. LSO is not supported with
2818          * inline BDs.
2819          */
2820         #define TX_BD_LONG_INLINE_LFLAGS_LSO                UINT32_C(0x20)
2821         /* Since LSO is not supported with inline BDs, this bit is not used. */
2822         #define TX_BD_LONG_INLINE_LFLAGS_IPID_FMT           UINT32_C(0x40)
2823         /* Since LSO is not supported with inline BDs, this bit is not used. */
2824         #define TX_BD_LONG_INLINE_LFLAGS_T_IPID             UINT32_C(0x80)
2825         /*
2826          * If set to '1', then the RoCE ICRC will be appended to the
2827          * packet. Packet must be a valid RoCE format packet.
2828          */
2829         #define TX_BD_LONG_INLINE_LFLAGS_ROCE_CRC           UINT32_C(0x100)
2830         /*
2831          * If set to '1', then the FCoE CRC will be appended to the
2832          * packet. Packet must be a valid FCoE format packet.
2833          */
2834         #define TX_BD_LONG_INLINE_LFLAGS_FCOE_CRC           UINT32_C(0x200)
2835         /*
2836          * If set to '1', then the timestamp from the BD is used. If cleared
2837          * to 0, then TWE provides the timestamp.
2838          */
2839         #define TX_BD_LONG_INLINE_LFLAGS_BD_TS_EN           UINT32_C(0x400)
2840         /*
2841          * If set to '1', this operation will cause a trace capture in each
2842          * block it passes through.
2843          */
2844         #define TX_BD_LONG_INLINE_LFLAGS_DEBUG_TRACE        UINT32_C(0x800)
2845         /*
2846          * If set to '1', the device will record the time at which the packet
2847          * was actually transmitted at the TX MAC for 1-step time sync. This
2848          * bit must be valid on the first BD of a packet.
2849          */
2850         #define TX_BD_LONG_INLINE_LFLAGS_STAMP_1STEP        UINT32_C(0x1000)
2851         /*
2852          * If set to '1', the controller replaces the Outer-tunnel IP checksum
2853          * field with hardware calculated IP checksum for the IP header of the
2854          * packet associated with this descriptor. For outer UDP checksum, it
2855          * will be the following behavior for all cases independent of settings
2856          * of inner LSO and checksum offload BD flags. If outer UDP checksum
2857          * is 0, then do not update it. If outer UDP checksum is non zero, then
2858          * the hardware should compute and update it.
2859          */
2860         #define TX_BD_LONG_INLINE_LFLAGS_OT_IP_CHKSUM       UINT32_C(0x2000)
2861         /*
2862          * If set to zero when LSO is '1', then the IPID of the Outer-tunnel IP
2863          * header will not be modified during LSO operations. If set to one
2864          * when LSO is '1', then the IPID of the Outer-tunnel IP header will be
2865          * incremented for each subsequent segment of an LSO operation. The
2866          * flag is ignored if the LSO packet is a normal (non-tunneled) TCP
2867          * packet.
2868          */
2869         #define TX_BD_LONG_INLINE_LFLAGS_OT_IPID            UINT32_C(0x4000)
2870         /*
2871          * If set to '1', When set to 1, KTLS encryption will be enabled for
2872          * the packet.
2873          */
2874         #define TX_BD_LONG_INLINE_LFLAGS_CRYPTO_EN          UINT32_C(0x8000)
2875         uint8_t unused2;
2876         uint8_t kid_or_ts_low;
2877         #define TX_BD_LONG_INLINE_UNUSED            UINT32_C(0x1)
2878         /*
2879          * If lflags.bd_ts_en is 1, this is the lower 7 bits of the 24-bit
2880          * timestamp. If lflags.crypto_en is 1, this is the lower 7 bits of
2881          * the 20-bit KID.
2882          */
2883         #define TX_BD_LONG_INLINE_KID_OR_TS_LOW_MASK UINT32_C(0xfe)
2884         #define TX_BD_LONG_INLINE_KID_OR_TS_LOW_SFT 1
2885         uint32_t        kid_or_ts_high;
2886         #define TX_BD_LONG_INLINE_UNUSED_MASK        UINT32_C(0x7fff)
2887         #define TX_BD_LONG_INLINE_UNUSED_SFT         0
2888         /*
2889          * If lflags.bd_ts_en is 1, this is the upper 17 bits of the 24-bit
2890          * timestamp. If lflags.crypto_en is 1, the least significant 13 bits
2891          * of this field contain the upper 13 bits of the 20-bit KID.
2892          */
2893         #define TX_BD_LONG_INLINE_KID_OR_TS_HIGH_MASK UINT32_C(0xffff8000)
2894         #define TX_BD_LONG_INLINE_KID_OR_TS_HIGH_SFT 15
2895         /*
2896          * This value selects bits 25:16 of the CFA action to perform on the
2897          * packet. See the cfa_action field for more information.
2898          */
2899         uint16_t        cfa_action_high;
2900         #define TX_BD_LONG_INLINE_CFA_ACTION_HIGH_MASK UINT32_C(0x3ff)
2901         #define TX_BD_LONG_INLINE_CFA_ACTION_HIGH_SFT 0
2902         /*
2903          * This value selects a CFA action to perform on the packet.
2904          * Set this value to zero if no CFA action is desired.
2905          *
2906          * This value must be valid on the first BD of a packet.
2907          */
2908         uint16_t        cfa_action;
2909         /*
2910          * This value is action meta-data that defines CFA edit operations
2911          * that are done in addition to any action editing.
2912          */
2913         uint32_t        cfa_meta;
2914         /* When key = 1, this is the VLAN tag VID value. */
2915         #define TX_BD_LONG_INLINE_CFA_META_VLAN_VID_MASK     UINT32_C(0xfff)
2916         #define TX_BD_LONG_INLINE_CFA_META_VLAN_VID_SFT      0
2917         /* When key = 1, this is the VLAN tag DE value. */
2918         #define TX_BD_LONG_INLINE_CFA_META_VLAN_DE           UINT32_C(0x1000)
2919         /* When key = 1, this is the VLAN tag PRI value. */
2920         #define TX_BD_LONG_INLINE_CFA_META_VLAN_PRI_MASK     UINT32_C(0xe000)
2921         #define TX_BD_LONG_INLINE_CFA_META_VLAN_PRI_SFT      13
2922         /* When key = 1, this is the VLAN tag TPID select value. */
2923         #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_MASK    UINT32_C(0x70000)
2924         #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_SFT     16
2925         /* 0x88a8 */
2926         #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID88A8 \
2927                 (UINT32_C(0x0) << 16)
2928         /* 0x8100 */
2929         #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID8100 \
2930                 (UINT32_C(0x1) << 16)
2931         /* 0x9100 */
2932         #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID9100 \
2933                 (UINT32_C(0x2) << 16)
2934         /* 0x9200 */
2935         #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID9200 \
2936                 (UINT32_C(0x3) << 16)
2937         /* 0x9300 */
2938         #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID9300 \
2939                 (UINT32_C(0x4) << 16)
2940         /* Value programmed in CFA VLANTPID register. */
2941         #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPIDCFG \
2942                 (UINT32_C(0x5) << 16)
2943         #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_LAST \
2944                 TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPIDCFG
2945         #define TX_BD_LONG_INLINE_CFA_META_VLAN_RESERVED_MASK \
2946                 UINT32_C(0xff80000)
2947         #define TX_BD_LONG_INLINE_CFA_META_VLAN_RESERVED_SFT 19
2948         /*
2949          * This field identifies the type of edit to be performed
2950          * on the packet.
2951          *
2952          * This value must be valid on the first BD of a packet.
2953          */
2954         #define TX_BD_LONG_INLINE_CFA_META_KEY_MASK \
2955                 UINT32_C(0xf0000000)
2956         #define TX_BD_LONG_INLINE_CFA_META_KEY_SFT           28
2957         /* No editing */
2958         #define TX_BD_LONG_INLINE_CFA_META_KEY_NONE \
2959                 (UINT32_C(0x0) << 28)
2960         /*
2961          * - meta[17:16] - TPID select value (0 = 0x8100).
2962          * - meta[15:12] - PRI/DE value.
2963          * - meta[11:0] - VID value.
2964          */
2965         #define TX_BD_LONG_INLINE_CFA_META_KEY_VLAN_TAG \
2966                 (UINT32_C(0x1) << 28)
2967         #define TX_BD_LONG_INLINE_CFA_META_KEY_LAST \
2968                 TX_BD_LONG_INLINE_CFA_META_KEY_VLAN_TAG
2969 } __rte_packed;
2970
2971 /* tx_bd_empty (size:128b/16B) */
2972 struct tx_bd_empty {
2973         /* This value identifies the type of buffer descriptor. */
2974         uint8_t type;
2975         #define TX_BD_EMPTY_TYPE_MASK       UINT32_C(0x3f)
2976         #define TX_BD_EMPTY_TYPE_SFT        0
2977         /*
2978          * Indicates that this BD is 1BB long and is an empty
2979          * TX BD. Not valid for use by the driver.
2980          */
2981         #define TX_BD_EMPTY_TYPE_TX_BD_EMPTY  UINT32_C(0x1)
2982         #define TX_BD_EMPTY_TYPE_LAST        TX_BD_EMPTY_TYPE_TX_BD_EMPTY
2983         uint8_t unused_1[3];
2984         uint8_t unused_2;
2985         uint8_t unused_3[3];
2986         uint8_t unused_4[8];
2987 } __rte_packed;
2988
2989 /* tx_bd_mp_cmd (size:128b/16B) */
2990 struct tx_bd_mp_cmd {
2991         /* Unless otherwise stated, sub-fields of this field are always valid. */
2992         uint16_t        flags_type;
2993         /* This value identifies the type of buffer descriptor. */
2994         #define TX_BD_MP_CMD_TYPE_MASK        UINT32_C(0x3f)
2995         #define TX_BD_MP_CMD_TYPE_SFT         0
2996         /*
2997          * Indicates that this BD is used to issue a command to one of
2998          * the mid-path destinations.
2999          */
3000         #define TX_BD_MP_CMD_TYPE_TX_BD_MP_CMD  UINT32_C(0x8)
3001         #define TX_BD_MP_CMD_TYPE_LAST         TX_BD_MP_CMD_TYPE_TX_BD_MP_CMD
3002         #define TX_BD_MP_CMD_FLAGS_MASK       UINT32_C(0xffc0)
3003         #define TX_BD_MP_CMD_FLAGS_SFT        6
3004         /*  */
3005         #define TX_BD_MP_CMD_FLAGS_UNUSED_MASK UINT32_C(0xc0)
3006         #define TX_BD_MP_CMD_FLAGS_UNUSED_SFT  6
3007         /*
3008          * This value indicates the number of 16B BD locations (slots)
3009          * consumed in the ring by this mid-path command BD, including the
3010          * BD header and the command field.
3011          */
3012         #define TX_BD_MP_CMD_FLAGS_BD_CNT_MASK UINT32_C(0x1f00)
3013         #define TX_BD_MP_CMD_FLAGS_BD_CNT_SFT  8
3014         /*
3015          * This value defines the length of command field in bytes. The maximum
3016          * value shall be 496.
3017          */
3018         uint16_t        len;
3019         /*
3020          * The opaque data field is pass through to the completion and can be
3021          * used for any data that the driver wants to associate with this
3022          * Tx mid-path command.
3023          */
3024         uint32_t        opaque;
3025         uint64_t        unused1;
3026 } __rte_packed;
3027
3028 /* tx_bd_presync_cmd (size:128b/16B) */
3029 struct tx_bd_presync_cmd {
3030         /* Unless otherwise stated, sub-fields of this field are always valid. */
3031         uint16_t        flags_type;
3032         /* This value identifies the type of buffer descriptor. */
3033         #define TX_BD_PRESYNC_CMD_TYPE_MASK             UINT32_C(0x3f)
3034         #define TX_BD_PRESYNC_CMD_TYPE_SFT              0
3035         /*
3036          * Indicates that this BD is used to issue a cryptographic pre-
3037          * sync command through the fast path and destined for TCE.
3038          */
3039         #define TX_BD_PRESYNC_CMD_TYPE_TX_BD_PRESYNC_CMD  UINT32_C(0x9)
3040         #define TX_BD_PRESYNC_CMD_TYPE_LAST \
3041                 TX_BD_PRESYNC_CMD_TYPE_TX_BD_PRESYNC_CMD
3042         #define TX_BD_PRESYNC_CMD_FLAGS_MASK            UINT32_C(0xffc0)
3043         #define TX_BD_PRESYNC_CMD_FLAGS_SFT             6
3044         /*  */
3045         #define TX_BD_PRESYNC_CMD_FLAGS_UNUSED_MASK      UINT32_C(0xc0)
3046         #define TX_BD_PRESYNC_CMD_FLAGS_UNUSED_SFT       6
3047         /*
3048          * This value indicates the number of 16B BD locations (slots)
3049          * consumed in the ring by this pre-sync command BD, including the
3050          * BD header and the command field.
3051          */
3052         #define TX_BD_PRESYNC_CMD_FLAGS_BD_CNT_MASK      UINT32_C(0x1f00)
3053         #define TX_BD_PRESYNC_CMD_FLAGS_BD_CNT_SFT       8
3054         /*
3055          * This value defines the length of command field in bytes. The maximum
3056          * value shall be 496.
3057          */
3058         uint16_t        len;
3059         /*
3060          * The opaque data field is pass through to TCE and can be used for
3061          * debug.
3062          */
3063         uint32_t        opaque;
3064         /*
3065          * This field is the Crypto Context ID to which the retransmit packet is
3066          * applied. The KID references the context fields used by the
3067          * associated kTLS offloaded connection.
3068          */
3069         uint32_t        kid;
3070         /*
3071          * The KID value of all-ones is reserved for non-KTLS packets, which
3072          * only implies that this value must not be used when filling this
3073          * field for crypto packets.
3074          */
3075         #define TX_BD_PRESYNC_CMD_KID_VAL_MASK UINT32_C(0xfffff)
3076         #define TX_BD_PRESYNC_CMD_KID_VAL_SFT 0
3077         uint32_t        unused_1;
3078 } __rte_packed;
3079
3080 /* rx_prod_pkt_bd (size:128b/16B) */
3081 struct rx_prod_pkt_bd {
3082         /* This value identifies the type of buffer descriptor. */
3083         uint16_t        flags_type;
3084         /* This value identifies the type of buffer descriptor. */
3085         #define RX_PROD_PKT_BD_TYPE_MASK         UINT32_C(0x3f)
3086         #define RX_PROD_PKT_BD_TYPE_SFT          0
3087         /*
3088          * Indicates that this BD is 16B long and is an RX Producer
3089          * (i.e. empty) buffer descriptor.
3090          */
3091         #define RX_PROD_PKT_BD_TYPE_RX_PROD_PKT    UINT32_C(0x4)
3092         #define RX_PROD_PKT_BD_TYPE_LAST \
3093                 RX_PROD_PKT_BD_TYPE_RX_PROD_PKT
3094         #define RX_PROD_PKT_BD_FLAGS_MASK        UINT32_C(0xffc0)
3095         #define RX_PROD_PKT_BD_FLAGS_SFT         6
3096         /*
3097          * If set to 1, the packet will be placed at the address plus
3098          * 2B. The 2 Bytes of padding will be written as zero.
3099          */
3100         #define RX_PROD_PKT_BD_FLAGS_SOP_PAD      UINT32_C(0x40)
3101         /*
3102          * If set to 1, the packet write will be padded out to the
3103          * nearest cache-line with zero value padding.
3104          */
3105         #define RX_PROD_PKT_BD_FLAGS_EOP_PAD      UINT32_C(0x80)
3106         /*
3107          * This field has been deprecated. There can be no additional
3108          * BDs for this packet from this ring.
3109          *
3110          * Old definition:
3111          * This value is the number of additional buffers in the ring that
3112          * describe the buffer space to be consumed for this packet.
3113          * If the value is zero, then the packet must fit within the
3114          * space described by this BD. If this value is 1 or more, it
3115          * indicates how many additional "buffer" BDs are in the ring
3116          * immediately following this BD to be used for the same
3117          * network packet. Even if the packet to be placed does not need
3118          * all the additional buffers, they will be consumed anyway.
3119          */
3120         #define RX_PROD_PKT_BD_FLAGS_BUFFERS_MASK UINT32_C(0x300)
3121         #define RX_PROD_PKT_BD_FLAGS_BUFFERS_SFT  8
3122         /*
3123          * This is the length in Bytes of the host physical buffer where
3124          * data for the packet may be placed in host memory.
3125          */
3126         uint16_t        len;
3127         /*
3128          * The opaque data field is pass through to the completion and can be
3129          * used for any data that the driver wants to associate with this
3130          * receive buffer set.
3131          */
3132         uint32_t        opaque;
3133         /*
3134          * This is the host physical address where data for the packet may
3135          * be placed in host memory.
3136          */
3137         uint64_t        address;
3138 } __rte_packed;
3139
3140 /* rx_prod_bfr_bd (size:128b/16B) */
3141 struct rx_prod_bfr_bd {
3142         /* This value identifies the type of buffer descriptor. */
3143         uint16_t        flags_type;
3144         /* This value identifies the type of buffer descriptor. */
3145         #define RX_PROD_BFR_BD_TYPE_MASK       UINT32_C(0x3f)
3146         #define RX_PROD_BFR_BD_TYPE_SFT        0
3147         /*
3148          * Indicates that this BD is 16B long and is an RX
3149          * Producer Buffer BD.
3150          */
3151         #define RX_PROD_BFR_BD_TYPE_RX_PROD_BFR  UINT32_C(0x5)
3152         #define RX_PROD_BFR_BD_TYPE_LAST        RX_PROD_BFR_BD_TYPE_RX_PROD_BFR
3153         #define RX_PROD_BFR_BD_FLAGS_MASK      UINT32_C(0xffc0)
3154         #define RX_PROD_BFR_BD_FLAGS_SFT       6
3155         /*
3156          * This is the length in Bytes of the host physical buffer where
3157          * data for the packet may be placed in host memory.
3158          */
3159         uint16_t        len;
3160         /* This field is not used. */
3161         uint32_t        opaque;
3162         /*
3163          * This is the host physical address where data for the packet may
3164          * be placed in host memory.
3165          */
3166         uint64_t        address;
3167 } __rte_packed;
3168
3169 /* rx_prod_agg_bd (size:128b/16B) */
3170 struct rx_prod_agg_bd {
3171         /* This value identifies the type of buffer descriptor. */
3172         uint16_t        flags_type;
3173         /* This value identifies the type of buffer descriptor. */
3174         #define RX_PROD_AGG_BD_TYPE_MASK         UINT32_C(0x3f)
3175         #define RX_PROD_AGG_BD_TYPE_SFT          0
3176         /*
3177          * Indicates that this BD is 16B long and is an
3178          * RX Producer Assembly Buffer Descriptor.
3179          */
3180         #define RX_PROD_AGG_BD_TYPE_RX_PROD_AGG    UINT32_C(0x6)
3181         #define RX_PROD_AGG_BD_TYPE_LAST \
3182                 RX_PROD_AGG_BD_TYPE_RX_PROD_AGG
3183         #define RX_PROD_AGG_BD_FLAGS_MASK        UINT32_C(0xffc0)
3184         #define RX_PROD_AGG_BD_FLAGS_SFT         6
3185         /*
3186          * If set to 1, the packet write will be padded out to the
3187          * nearest cache-line with zero value padding.
3188          */
3189         #define RX_PROD_AGG_BD_FLAGS_EOP_PAD      UINT32_C(0x40)
3190         /*
3191          * This is the length in Bytes of the host physical buffer where
3192          * data for the packet may be placed in host memory.
3193          */
3194         uint16_t        len;
3195         /*
3196          * The opaque data field is pass through to the completion and can be
3197          * used for any data that the driver wants to associate with this
3198          * receive assembly buffer.
3199          */
3200         uint32_t        opaque;
3201         /*
3202          * This is the host physical address where data for the packet may
3203          * be placed in host memory.
3204          */
3205         uint64_t        address;
3206 } __rte_packed;
3207
3208 /* cfa_cmpls_cmp_data_msg (size:128b/16B) */
3209 struct cfa_cmpls_cmp_data_msg {
3210         uint32_t        mp_client_dma_length_opcode_status_type;
3211         /*
3212          * This field represents the Mid-Path client that generated the
3213          * completion.
3214          */
3215         #define CFA_CMPLS_CMP_DATA_MSG_TYPE_MASK                UINT32_C(0x3f)
3216         #define CFA_CMPLS_CMP_DATA_MSG_TYPE_SFT                 0
3217         /* Mid Path Short Completion with length = 16B. */
3218         #define CFA_CMPLS_CMP_DATA_MSG_TYPE_MID_PATH_SHORT \
3219                 UINT32_C(0x1e)
3220         #define CFA_CMPLS_CMP_DATA_MSG_TYPE_LAST \
3221                 CFA_CMPLS_CMP_DATA_MSG_TYPE_MID_PATH_SHORT
3222         /* This value indicates the status for the command. */
3223         #define CFA_CMPLS_CMP_DATA_MSG_STATUS_MASK              UINT32_C(0x3c0)
3224         #define CFA_CMPLS_CMP_DATA_MSG_STATUS_SFT               6
3225         /* Completed without error. */
3226         #define CFA_CMPLS_CMP_DATA_MSG_STATUS_OK \
3227                 (UINT32_C(0x0) << 6)
3228         /* Indicates an unsupported CFA opcode in the command. */
3229         #define CFA_CMPLS_CMP_DATA_MSG_STATUS_UNSPRT_ERR \
3230                 (UINT32_C(0x1) << 6)
3231         /*
3232          * Indicates a CFA command formatting error. This error can occur on
3233          * any of the supported CFA commands.
3234          */
3235         #define CFA_CMPLS_CMP_DATA_MSG_STATUS_FMT_ERR \
3236                 (UINT32_C(0x2) << 6)
3237         /*
3238          * Indicates an SVIF-Table scope error. This error can occur on any
3239          * of the supported CFA commands.
3240          */
3241         #define CFA_CMPLS_CMP_DATA_MSG_STATUS_SCOPE_ERR \
3242                 (UINT32_C(0x3) << 6)
3243         /*
3244          * Indicates that the table_index is either outside of the
3245          * table_scope range set by its EM_SIZE or, for EM Insert, it is in
3246          * the static bucket range. This error can occur on EM Insert
3247          * commands. It can also occur on Read, Read Clear, Write, and
3248          * Invalidate commands if the table_type is EM.
3249          */
3250         #define CFA_CMPLS_CMP_DATA_MSG_STATUS_ADDR_ERR \
3251                 (UINT32_C(0x4) << 6)
3252         /*
3253          * Cache operation responded with an error. This error can occur on
3254          * Read, Read Clear, Write, EM Insert, and EM Delete commands.
3255          */
3256         #define CFA_CMPLS_CMP_DATA_MSG_STATUS_CACHE_ERR \
3257                 (UINT32_C(0x5) << 6)
3258         /*
3259          * Indicates failure on EM Insert or EM Delete Command. Hash index
3260          * and hash msb are returned in table_index and hash_msb fields.
3261          * Dma_length is set to 1 if the bucket is also returned (as dma
3262          * data).
3263          */
3264         #define CFA_CMPLS_CMP_DATA_MSG_STATUS_EM_FAIL \
3265                 (UINT32_C(0x6) << 6)
3266         /*
3267          * Indicates no notifications were available on an Event Collection
3268          * command.
3269          */
3270         #define CFA_CMPLS_CMP_DATA_MSG_STATUS_EVENT_COLLECT_FAIL \
3271                 (UINT32_C(0x7) << 6)
3272         #define CFA_CMPLS_CMP_DATA_MSG_STATUS_LAST \
3273                 CFA_CMPLS_CMP_DATA_MSG_STATUS_EVENT_COLLECT_FAIL
3274         #define CFA_CMPLS_CMP_DATA_MSG_UNUSED0_MASK             UINT32_C(0xc00)
3275         #define CFA_CMPLS_CMP_DATA_MSG_UNUSED0_SFT              10
3276         /* This is the opcode from the command. */
3277         #define CFA_CMPLS_CMP_DATA_MSG_OPCODE_MASK \
3278                 UINT32_C(0xff000)
3279         #define CFA_CMPLS_CMP_DATA_MSG_OPCODE_SFT               12
3280         /*
3281          * This is read command. From 32 to 128B can be read from a table
3282          * using this command.
3283          */
3284         #define CFA_CMPLS_CMP_DATA_MSG_OPCODE_READ \
3285                 (UINT32_C(0x0) << 12)
3286         /*
3287          * This is write command. From 32 to 128B can be written to a table
3288          * using this command.
3289          */
3290         #define CFA_CMPLS_CMP_DATA_MSG_OPCODE_WRITE \
3291                 (UINT32_C(0x1) << 12)
3292         /*
3293          * This is read-clear command. 32B can be read from a table and a 16b
3294          * mask can be used to clear specific 16b units after the read as an
3295          * atomic operation.
3296          */
3297         #define CFA_CMPLS_CMP_DATA_MSG_OPCODE_READ_CLR \
3298                 (UINT32_C(0x2) << 12)
3299         /*
3300          * An exact match table insert will be attempted into the table. If
3301          * there is a free location in the bucket, the payload will be
3302          * written to the bucket.
3303          */
3304         #define CFA_CMPLS_CMP_DATA_MSG_OPCODE_EM_INSERT \
3305                 (UINT32_C(0x3) << 12)
3306         /* An exact match table delete will be attempted. */
3307         #define CFA_CMPLS_CMP_DATA_MSG_OPCODE_EM_DELETE \
3308                 (UINT32_C(0x4) << 12)
3309         /*
3310          * The specified table area will be invalidated. If it is needed
3311          * again, it will be read from the backing store.
3312          */
3313         #define CFA_CMPLS_CMP_DATA_MSG_OPCODE_INVALIDATE \
3314                 (UINT32_C(0x5) << 12)
3315         /* Reads notification messages from the Host Notification Queue. */
3316         #define CFA_CMPLS_CMP_DATA_MSG_OPCODE_EVENT_COLLECT \
3317                 (UINT32_C(0x6) << 12)
3318         #define CFA_CMPLS_CMP_DATA_MSG_OPCODE_LAST \
3319                 CFA_CMPLS_CMP_DATA_MSG_OPCODE_EVENT_COLLECT
3320         /*
3321          * This field indicates the length of the DMA that accompanies the
3322          * completion. Specified in units of DWords (32b). Valid values are
3323          * between 0 and 128. A value of zero indicates that there is no DMA
3324          * that accompanies the completion.
3325          */
3326         #define CFA_CMPLS_CMP_DATA_MSG_DMA_LENGTH_MASK \
3327                 UINT32_C(0xff00000)
3328         #define CFA_CMPLS_CMP_DATA_MSG_DMA_LENGTH_SFT           20
3329         /*
3330          * This field represents the Mid-Path client that generated the
3331          * completion.
3332          */
3333         #define CFA_CMPLS_CMP_DATA_MSG_MP_CLIENT_MASK \
3334                 UINT32_C(0xf0000000)
3335         #define CFA_CMPLS_CMP_DATA_MSG_MP_CLIENT_SFT            28
3336         /* TX configrable flow processing block. */
3337         #define CFA_CMPLS_CMP_DATA_MSG_MP_CLIENT_TE_CFA \
3338                 (UINT32_C(0x2) << 28)
3339         /* RX configrable flow processing block. */
3340         #define CFA_CMPLS_CMP_DATA_MSG_MP_CLIENT_RE_CFA \
3341                 (UINT32_C(0x3) << 28)
3342         #define CFA_CMPLS_CMP_DATA_MSG_MP_CLIENT_LAST \
3343                 CFA_CMPLS_CMP_DATA_MSG_MP_CLIENT_RE_CFA
3344         /*
3345          * This is a copy of the opaque field from the mid path BD of this
3346          * command.
3347          */
3348         uint32_t        opaque;
3349         uint16_t        hash_msb_v;
3350         /*
3351          * This value is written by the NIC such that it will be different for
3352          * each pass through the completion queue. The even passes will
3353          * write 1. The odd passes will write 0.
3354          */
3355         #define CFA_CMPLS_CMP_DATA_MSG_V            UINT32_C(0x1)
3356         #define CFA_CMPLS_CMP_DATA_MSG_UNUSED1_MASK UINT32_C(0xe)
3357         #define CFA_CMPLS_CMP_DATA_MSG_UNUSED1_SFT  1
3358         /*
3359          * This is the upper 12b of the hash, returned on Exact Match
3360          * Insertion/Deletion Commands.
3361          */
3362         #define CFA_CMPLS_CMP_DATA_MSG_HASH_MSB_MASK UINT32_C(0xfff0)
3363         #define CFA_CMPLS_CMP_DATA_MSG_HASH_MSB_SFT 4
3364         /* This is the table type from the command. */
3365         uint8_t table_type;
3366         #define CFA_CMPLS_CMP_DATA_MSG_UNUSED2_MASK     UINT32_C(0xf)
3367         #define CFA_CMPLS_CMP_DATA_MSG_UNUSED2_SFT      0
3368         #define CFA_CMPLS_CMP_DATA_MSG_TABLE_TYPE_MASK  UINT32_C(0xf0)
3369         #define CFA_CMPLS_CMP_DATA_MSG_TABLE_TYPE_SFT   4
3370         /* This command acts on the action table of the specified scope. */
3371         #define CFA_CMPLS_CMP_DATA_MSG_TABLE_TYPE_ACTION  (UINT32_C(0x0) << 4)
3372         /* This command acts on the exact match table of the specified scope. */
3373         #define CFA_CMPLS_CMP_DATA_MSG_TABLE_TYPE_EM      (UINT32_C(0x1) << 4)
3374         #define CFA_CMPLS_CMP_DATA_MSG_TABLE_TYPE_LAST \
3375                 CFA_CMPLS_CMP_DATA_MSG_TABLE_TYPE_EM
3376         uint8_t table_scope;
3377         /* This is the table scope from the command. */
3378         #define CFA_CMPLS_CMP_DATA_MSG_TABLE_SCOPE_MASK UINT32_C(0x1f)
3379         #define CFA_CMPLS_CMP_DATA_MSG_TABLE_SCOPE_SFT 0
3380         uint32_t        table_index;
3381         /*
3382          * This is the table index from the command (if it exists). However, if
3383          * an Exact Match Insertion/Deletion command failed, then this is the
3384          * table index of the calculated static hash bucket.
3385          */
3386         #define CFA_CMPLS_CMP_DATA_MSG_TABLE_INDEX_MASK UINT32_C(0x3ffffff)
3387         #define CFA_CMPLS_CMP_DATA_MSG_TABLE_INDEX_SFT 0
3388 } __rte_packed;
3389
3390 /* CFA Mid-Path 32B DMA Message */
3391 /* cfa_dma32b_data_msg (size:256b/32B) */
3392 struct cfa_dma32b_data_msg {
3393         /* DMA data value. */
3394         uint32_t        dta[8];
3395 } __rte_packed;
3396
3397 /* CFA Mid-Path 64B DMA Message */
3398 /* cfa_dma64b_data_msg (size:512b/64B) */
3399 struct cfa_dma64b_data_msg {
3400         /* DMA data value. */
3401         uint32_t        dta[16];
3402 } __rte_packed;
3403
3404 /* CFA Mid-Path 96B DMA Message */
3405 /* cfa_dma96b_data_msg (size:768b/96B) */
3406 struct cfa_dma96b_data_msg {
3407         /* DMA data value. */
3408         uint32_t        dta[24];
3409 } __rte_packed;
3410
3411 /* CFA Mid-Path 128B DMA Message */
3412 /* cfa_dma128b_data_msg (size:1024b/128B) */
3413 struct cfa_dma128b_data_msg {
3414         /* DMA data value. */
3415         uint32_t        dta[32];
3416 } __rte_packed;
3417
3418 /* ce_cmpls_cmp_data_msg (size:128b/16B) */
3419 struct ce_cmpls_cmp_data_msg {
3420         uint16_t        status_subtype_type;
3421         /*
3422          * This field indicates the exact type of the completion. By
3423          * convention, the LSB identifies the length of the record in 16B
3424          * units. Even values indicate 16B records. Odd values indicate 32B
3425          * records.
3426          */
3427         #define CE_CMPLS_CMP_DATA_MSG_TYPE_MASK          UINT32_C(0x3f)
3428         #define CE_CMPLS_CMP_DATA_MSG_TYPE_SFT           0
3429         /* Completion of a Mid Path Command. Length = 16B */
3430         #define CE_CMPLS_CMP_DATA_MSG_TYPE_MID_PATH_SHORT  UINT32_C(0x1e)
3431         #define CE_CMPLS_CMP_DATA_MSG_TYPE_LAST \
3432                 CE_CMPLS_CMP_DATA_MSG_TYPE_MID_PATH_SHORT
3433         /*
3434          * This value indicates the CE sub-type operation that is being
3435          * completed.
3436          */
3437         #define CE_CMPLS_CMP_DATA_MSG_SUBTYPE_MASK       UINT32_C(0x3c0)
3438         #define CE_CMPLS_CMP_DATA_MSG_SUBTYPE_SFT        6
3439         /* Completion Response for a Solicited Command. */
3440         #define CE_CMPLS_CMP_DATA_MSG_SUBTYPE_SOLICITED    (UINT32_C(0x0) << 6)
3441         /* Error Completion (Unsolicited). */
3442         #define CE_CMPLS_CMP_DATA_MSG_SUBTYPE_ERR          (UINT32_C(0x1) << 6)
3443         /* Re-Sync Completion (Unsolicited) */
3444         #define CE_CMPLS_CMP_DATA_MSG_SUBTYPE_RESYNC       (UINT32_C(0x2) << 6)
3445         #define CE_CMPLS_CMP_DATA_MSG_SUBTYPE_LAST \
3446                 CE_CMPLS_CMP_DATA_MSG_SUBTYPE_RESYNC
3447         /* This value indicates the status for the command. */
3448         #define CE_CMPLS_CMP_DATA_MSG_STATUS_MASK        UINT32_C(0x3c00)
3449         #define CE_CMPLS_CMP_DATA_MSG_STATUS_SFT         10
3450         /* Completed without error. */
3451         #define CE_CMPLS_CMP_DATA_MSG_STATUS_OK \
3452                 (UINT32_C(0x0) << 10)
3453         /* CFCK load error. */
3454         #define CE_CMPLS_CMP_DATA_MSG_STATUS_CTX_LD_ERR \
3455                 (UINT32_C(0x1) << 10)
3456         /* FID check error. */
3457         #define CE_CMPLS_CMP_DATA_MSG_STATUS_FID_CHK_ERR \
3458                 (UINT32_C(0x2) << 10)
3459         #define CE_CMPLS_CMP_DATA_MSG_STATUS_LAST \
3460                 CE_CMPLS_CMP_DATA_MSG_STATUS_FID_CHK_ERR
3461         uint8_t unused0;
3462         uint8_t mp_clients;
3463         #define CE_CMPLS_CMP_DATA_MSG_UNUSED1_MASK   UINT32_C(0xf)
3464         #define CE_CMPLS_CMP_DATA_MSG_UNUSED1_SFT    0
3465         /*
3466          * This field represents the Mid-Path client that generated the
3467          * completion.
3468          */
3469         #define CE_CMPLS_CMP_DATA_MSG_MP_CLIENTS_MASK UINT32_C(0xf0)
3470         #define CE_CMPLS_CMP_DATA_MSG_MP_CLIENTS_SFT 4
3471         /* TX crypto engine block. */
3472         #define CE_CMPLS_CMP_DATA_MSG_MP_CLIENTS_TCE   (UINT32_C(0x0) << 4)
3473         /* RX crypto engine block. */
3474         #define CE_CMPLS_CMP_DATA_MSG_MP_CLIENTS_RCE   (UINT32_C(0x1) << 4)
3475         #define CE_CMPLS_CMP_DATA_MSG_MP_CLIENTS_LAST \
3476                 CE_CMPLS_CMP_DATA_MSG_MP_CLIENTS_RCE
3477         /*
3478          * This is a copy of the opaque field from the mid path BD of this
3479          * command.
3480          */
3481         uint32_t        opaque;
3482         /*  */
3483         uint32_t        kid_v;
3484         /*
3485          * This value is written by the NIC such that it will be different
3486          * for each pass through the completion queue. The even passes will
3487          * write 1. The odd passes will write 0.
3488          */
3489         #define CE_CMPLS_CMP_DATA_MSG_V       UINT32_C(0x1)
3490         /*
3491          * This field is the Crypto Context ID. The KID is used to store
3492          * information used by the associated kTLS offloaded connection.
3493          */
3494         #define CE_CMPLS_CMP_DATA_MSG_KID_MASK UINT32_C(0x1ffffe)
3495         #define CE_CMPLS_CMP_DATA_MSG_KID_SFT 1
3496         uint32_t        unused2;
3497 } __rte_packed;
3498
3499 /* cmpl_base (size:128b/16B) */
3500 struct cmpl_base {
3501         uint16_t        type;
3502         /*
3503          * This field indicates the exact type of the completion.
3504          * By convention, the LSB identifies the length of the
3505          * record in 16B units. Even values indicate 16B
3506          * records. Odd values indicate 32B
3507          * records.
3508          */
3509         #define CMPL_BASE_TYPE_MASK            UINT32_C(0x3f)
3510         #define CMPL_BASE_TYPE_SFT             0
3511         /*
3512          * TX L2 completion:
3513          * Completion of TX packet. Length = 16B
3514          */
3515         #define CMPL_BASE_TYPE_TX_L2             UINT32_C(0x0)
3516         /*
3517          * NO-OP completion:
3518          * Completion of NO-OP. Length = 16B
3519          */
3520         #define CMPL_BASE_TYPE_NO_OP             UINT32_C(0x1)
3521         /*
3522          * TX L2 coalesced completion:
3523          * Completion of coalesced TX packet. Length = 16B
3524          */
3525         #define CMPL_BASE_TYPE_TX_L2_COAL        UINT32_C(0x2)
3526         /*
3527          * TX L2 PTP completion:
3528          * Completion of PTP TX packet. Length = 32B
3529          */
3530         #define CMPL_BASE_TYPE_TX_L2_PTP         UINT32_C(0x3)
3531         /*
3532          * RX L2 TPA Start V2 Completion:
3533          * Completion of and L2 RX packet. Length = 32B
3534          * This is the new version of the RX_TPA_START completion used
3535          * in SR2 and later chips.
3536          */
3537         #define CMPL_BASE_TYPE_RX_TPA_START_V2   UINT32_C(0xd)
3538         /*
3539          * RX L2 V2 completion:
3540          * Completion of and L2 RX packet. Length = 32B
3541          * This is the new version of the RX_L2 completion used in SR2
3542          * and later chips.
3543          */
3544         #define CMPL_BASE_TYPE_RX_L2_V2          UINT32_C(0xf)
3545         /*
3546          * RX L2 completion:
3547          * Completion of and L2 RX packet. Length = 32B
3548          */
3549         #define CMPL_BASE_TYPE_RX_L2             UINT32_C(0x11)
3550         /*
3551          * RX Aggregation Buffer completion :
3552          * Completion of an L2 aggregation buffer in support of
3553          * TPA, HDS, or Jumbo packet completion. Length = 16B
3554          */
3555         #define CMPL_BASE_TYPE_RX_AGG            UINT32_C(0x12)
3556         /*
3557          * RX L2 TPA Start Completion:
3558          * Completion at the beginning of a TPA operation.
3559          * Length = 32B
3560          */
3561         #define CMPL_BASE_TYPE_RX_TPA_START      UINT32_C(0x13)
3562         /*
3563          * RX L2 TPA End Completion:
3564          * Completion at the end of a TPA operation.
3565          * Length = 32B
3566          */
3567         #define CMPL_BASE_TYPE_RX_TPA_END        UINT32_C(0x15)
3568         /*
3569          * Statistics Ejection Completion:
3570          * Completion of statistics data ejection buffer.
3571          * Length = 16B
3572          */
3573         #define CMPL_BASE_TYPE_STAT_EJECT        UINT32_C(0x1a)
3574         /*
3575          * VEE Flush Completion:
3576          * This completion is inserted manually by
3577          * the Primate and processed by the VEE hardware to ensure that
3578          * all completions on a VEE function have been processed by the
3579          * VEE hardware before FLR process is completed.
3580          */
3581         #define CMPL_BASE_TYPE_VEE_FLUSH         UINT32_C(0x1c)
3582         /*
3583          * Mid Path Short Completion :
3584          * Completion of a Mid Path Command. Length = 16B
3585          */
3586         #define CMPL_BASE_TYPE_MID_PATH_SHORT    UINT32_C(0x1e)
3587         /*
3588          * Mid Path Long Completion :
3589          * Completion of a Mid Path Command. Length = 32B
3590          */
3591         #define CMPL_BASE_TYPE_MID_PATH_LONG     UINT32_C(0x1f)
3592         /*
3593          * HWRM Command Completion:
3594          * Completion of an HWRM command.
3595          */
3596         #define CMPL_BASE_TYPE_HWRM_DONE         UINT32_C(0x20)
3597         /* Forwarded HWRM Request */
3598         #define CMPL_BASE_TYPE_HWRM_FWD_REQ      UINT32_C(0x22)
3599         /* Forwarded HWRM Response */
3600         #define CMPL_BASE_TYPE_HWRM_FWD_RESP     UINT32_C(0x24)
3601         /* HWRM Asynchronous Event Information */
3602         #define CMPL_BASE_TYPE_HWRM_ASYNC_EVENT  UINT32_C(0x2e)
3603         /* CQ Notification */
3604         #define CMPL_BASE_TYPE_CQ_NOTIFICATION   UINT32_C(0x30)
3605         /* SRQ Threshold Event */
3606         #define CMPL_BASE_TYPE_SRQ_EVENT         UINT32_C(0x32)
3607         /* DBQ Threshold Event */
3608         #define CMPL_BASE_TYPE_DBQ_EVENT         UINT32_C(0x34)
3609         /* QP Async Notification */
3610         #define CMPL_BASE_TYPE_QP_EVENT          UINT32_C(0x38)
3611         /* Function Async Notification */
3612         #define CMPL_BASE_TYPE_FUNC_EVENT        UINT32_C(0x3a)
3613         #define CMPL_BASE_TYPE_LAST             CMPL_BASE_TYPE_FUNC_EVENT
3614         /* info1 is 16 b */
3615         uint16_t        info1;
3616         /* info2 is 32 b */
3617         uint32_t        info2;
3618         /*
3619          * This value is written by the NIC such that it will be different
3620          * for each pass through the completion queue. The even passes
3621          * will write 1. The odd passes will write 0.
3622          */
3623         uint32_t        info3_v;
3624         #define CMPL_BASE_V         UINT32_C(0x1)
3625         #define CMPL_BASE_INFO3_MASK UINT32_C(0xfffffffe)
3626         #define CMPL_BASE_INFO3_SFT 1
3627         /* info4 is 32 b */
3628         uint32_t        info4;
3629 } __rte_packed;
3630
3631 /* tx_cmpl (size:128b/16B) */
3632 struct tx_cmpl {
3633         uint16_t        flags_type;
3634         /*
3635          * This field indicates the exact type of the completion.
3636          * By convention, the LSB identifies the length of the
3637          * record in 16B units. Even values indicate 16B
3638          * records. Odd values indicate 32B
3639          * records.
3640          */
3641         #define TX_CMPL_TYPE_MASK       UINT32_C(0x3f)
3642         #define TX_CMPL_TYPE_SFT        0
3643         /*
3644          * TX L2 completion:
3645          * Completion of TX packet. Length = 16B
3646          */
3647         #define TX_CMPL_TYPE_TX_L2        UINT32_C(0x0)
3648         #define TX_CMPL_TYPE_LAST        TX_CMPL_TYPE_TX_L2
3649         #define TX_CMPL_FLAGS_MASK      UINT32_C(0xffc0)
3650         #define TX_CMPL_FLAGS_SFT       6
3651         /*
3652          * When this bit is '1', it indicates a packet that has an
3653          * error of some type. Type of error is indicated in
3654          * error_flags.
3655          */
3656         #define TX_CMPL_FLAGS_ERROR      UINT32_C(0x40)
3657         /*
3658          * When this bit is '1', it indicates that the packet completed
3659          * was transmitted using the push acceleration data provided
3660          * by the driver. When this bit is '0', it indicates that the
3661          * packet had not push acceleration data written or was executed
3662          * as a normal packet even though push data was provided.
3663          */
3664         #define TX_CMPL_FLAGS_PUSH       UINT32_C(0x80)
3665         /* unused1 is 16 b */
3666         uint16_t        unused_0;
3667         /*
3668          * This is a copy of the opaque field from the first TX BD of this
3669          * transmitted packet. Note that, if the packet was described by a short
3670          * CSO or short CSO inline BD, then the 16-bit opaque field from the
3671          * short CSO BD will appear in the bottom 16 bits of this field.
3672          */
3673         uint32_t        opaque;
3674         uint16_t        errors_v;
3675         /*
3676          * This value is written by the NIC such that it will be different
3677          * for each pass through the completion queue. The even passes
3678          * will write 1. The odd passes will write 0.
3679          */
3680         #define TX_CMPL_V                                  UINT32_C(0x1)
3681         #define TX_CMPL_ERRORS_MASK                        UINT32_C(0xfffe)
3682         #define TX_CMPL_ERRORS_SFT                         1
3683         /*
3684          * This error indicates that there was some sort of problem
3685          * with the BDs for the packet.
3686          */
3687         #define TX_CMPL_ERRORS_BUFFER_ERROR_MASK            UINT32_C(0xe)
3688         #define TX_CMPL_ERRORS_BUFFER_ERROR_SFT             1
3689         /* No error */
3690         #define TX_CMPL_ERRORS_BUFFER_ERROR_NO_ERROR \
3691                 (UINT32_C(0x0) << 1)
3692         /*
3693          * Bad Format:
3694          * BDs were not formatted correctly.
3695          */
3696         #define TX_CMPL_ERRORS_BUFFER_ERROR_BAD_FMT \
3697                 (UINT32_C(0x2) << 1)
3698         #define TX_CMPL_ERRORS_BUFFER_ERROR_LAST \
3699                 TX_CMPL_ERRORS_BUFFER_ERROR_BAD_FMT
3700         /*
3701          * When this bit is '1', it indicates that the length of
3702          * the packet was zero. No packet was transmitted.
3703          */
3704         #define TX_CMPL_ERRORS_ZERO_LENGTH_PKT              UINT32_C(0x10)
3705         /*
3706          * When this bit is '1', it indicates that the packet
3707          * was longer than the programmed limit in TDI. No
3708          * packet was transmitted.
3709          */
3710         #define TX_CMPL_ERRORS_EXCESSIVE_BD_LENGTH          UINT32_C(0x20)
3711         /*
3712          * When this bit is '1', it indicates that one or more of the
3713          * BDs associated with this packet generated a PCI error.
3714          * This probably means the address was not valid.
3715          */
3716         #define TX_CMPL_ERRORS_DMA_ERROR                    UINT32_C(0x40)
3717         /*
3718          * When this bit is '1', it indicates that the packet was longer
3719          * than indicated by the hint. No packet was transmitted.
3720          */
3721         #define TX_CMPL_ERRORS_HINT_TOO_SHORT               UINT32_C(0x80)
3722         /*
3723          * When this bit is '1', it indicates that the packet was
3724          * dropped due to Poison TLP error on one or more of the
3725          * TLPs in the PXP completion.
3726          */
3727         #define TX_CMPL_ERRORS_POISON_TLP_ERROR             UINT32_C(0x100)
3728         /*
3729          * When this bit is '1', it indicates that the packet was dropped
3730          * due to a transient internal error in TDC. The packet or LSO can
3731          * be retried and may transmit successfully on a subsequent attempt.
3732          */
3733         #define TX_CMPL_ERRORS_INTERNAL_ERROR               UINT32_C(0x200)
3734         /*
3735          * When this bit is '1', it was not possible to collect a a timestamp
3736          * for a PTP completion, in which case the timestamp_hi and
3737          * timestamp_lo fields are invalid. When this bit is '0' for a PTP
3738          * completion, the timestamp_hi and timestamp_lo fields are valid.
3739          * RJRN will copy the value of this bit into the field of the same
3740          * name in all TX completions, regardless of whether such completions
3741          * are PTP completions or other TX completions.
3742          */
3743         #define TX_CMPL_ERRORS_TIMESTAMP_INVALID_ERROR      UINT32_C(0x400)
3744         /* unused2 is 16 b */
3745         uint16_t        unused_1;
3746         /* unused3 is 32 b */
3747         uint32_t        unused_2;
3748 } __rte_packed;
3749
3750 /* tx_cmpl_coal (size:128b/16B) */
3751 struct tx_cmpl_coal {
3752         uint16_t        flags_type;
3753         /*
3754          * This field indicates the exact type of the completion.
3755          * By convention, the LSB identifies the length of the
3756          * record in 16B units. Even values indicate 16B
3757          * records. Odd values indicate 32B
3758          * records.
3759          */
3760         #define TX_CMPL_COAL_TYPE_MASK       UINT32_C(0x3f)
3761         #define TX_CMPL_COAL_TYPE_SFT        0
3762         /*
3763          * TX L2 coalesced completion:
3764          * Completion of TX packet. Length = 16B
3765          */
3766         #define TX_CMPL_COAL_TYPE_TX_L2_COAL   UINT32_C(0x2)
3767         #define TX_CMPL_COAL_TYPE_LAST        TX_CMPL_COAL_TYPE_TX_L2_COAL
3768         #define TX_CMPL_COAL_FLAGS_MASK      UINT32_C(0xffc0)
3769         #define TX_CMPL_COAL_FLAGS_SFT       6
3770         /*
3771          * When this bit is '1', it indicates a packet that has an
3772          * error of some type. Type of error is indicated in
3773          * error_flags.
3774          */
3775         #define TX_CMPL_COAL_FLAGS_ERROR      UINT32_C(0x40)
3776         /*
3777          * When this bit is '1', it indicates that the packet completed
3778          * was transmitted using the push acceleration data provided
3779          * by the driver. When this bit is '0', it indicates that the
3780          * packet had not push acceleration data written or was executed
3781          * as a normal packet even though push data was provided.
3782          */
3783         #define TX_CMPL_COAL_FLAGS_PUSH       UINT32_C(0x80)
3784         /* unused1 is 16 b */
3785         uint16_t        unused_0;
3786         /*
3787          * This is a copy of the opaque field from the first TX BD of the packet
3788          * which corresponds with the reported sq_cons_idx. Note that, with
3789          * coalesced completions, completions are generated for only some of the
3790          * packets. The driver will see the opaque field for only those packets.
3791          * Note that, if the packet was described by a short CSO or short CSO
3792          * inline BD, then the 16-bit opaque field from the short CSO BD will
3793          * appear in the bottom 16 bits of this field. For TX rings with
3794          * completion coalescing enabled (which would use the coalesced
3795          * completion record), it is suggested that the driver populate the
3796          * opaque field to indicate the specific TX ring with which the
3797          * completion is associated, then utilize the opaque and sq_cons_idx
3798          * fields in the coalesced completion record to determine the specific
3799          * packets that are to be completed on that ring.
3800          */
3801         uint32_t        opaque;
3802         uint16_t        errors_v;
3803         /*
3804          * This value is written by the NIC such that it will be different
3805          * for each pass through the completion queue. The even passes
3806          * will write 1. The odd passes will write 0.
3807          */
3808         #define TX_CMPL_COAL_V                                  UINT32_C(0x1)
3809         #define TX_CMPL_COAL_ERRORS_MASK \
3810                 UINT32_C(0xfffe)
3811         #define TX_CMPL_COAL_ERRORS_SFT                         1
3812         /*
3813          * This error indicates that there was some sort of problem
3814          * with the BDs for the packet.
3815          */
3816         #define TX_CMPL_COAL_ERRORS_BUFFER_ERROR_MASK            UINT32_C(0xe)
3817         #define TX_CMPL_COAL_ERRORS_BUFFER_ERROR_SFT             1
3818         /* No error */
3819         #define TX_CMPL_COAL_ERRORS_BUFFER_ERROR_NO_ERROR \
3820                 (UINT32_C(0x0) << 1)
3821         /*
3822          * Bad Format:
3823          * BDs were not formatted correctly.
3824          */
3825         #define TX_CMPL_COAL_ERRORS_BUFFER_ERROR_BAD_FMT \
3826                 (UINT32_C(0x2) << 1)
3827         #define TX_CMPL_COAL_ERRORS_BUFFER_ERROR_LAST \
3828                 TX_CMPL_COAL_ERRORS_BUFFER_ERROR_BAD_FMT
3829         /*
3830          * When this bit is '1', it indicates that the length of
3831          * the packet was zero. No packet was transmitted.
3832          */
3833         #define TX_CMPL_COAL_ERRORS_ZERO_LENGTH_PKT              UINT32_C(0x10)
3834         /*
3835          * When this bit is '1', it indicates that the packet
3836          * was longer than the programmed limit in TDI. No
3837          * packet was transmitted.
3838          */
3839         #define TX_CMPL_COAL_ERRORS_EXCESSIVE_BD_LENGTH          UINT32_C(0x20)
3840         /*
3841          * When this bit is '1', it indicates that one or more of the
3842          * BDs associated with this packet generated a PCI error.
3843          * This probably means the address was not valid.
3844          */
3845         #define TX_CMPL_COAL_ERRORS_DMA_ERROR                    UINT32_C(0x40)
3846         /*
3847          * When this bit is '1', it indicates that the packet was longer
3848          * than indicated by the hint. No packet was transmitted.
3849          */
3850         #define TX_CMPL_COAL_ERRORS_HINT_TOO_SHORT               UINT32_C(0x80)
3851         /*
3852          * When this bit is '1', it indicates that the packet was
3853          * dropped due to Poison TLP error on one or more of the
3854          * TLPs in the PXP completion.
3855          */
3856         #define TX_CMPL_COAL_ERRORS_POISON_TLP_ERROR \
3857                 UINT32_C(0x100)
3858         /*
3859          * When this bit is '1', it indicates that the packet was dropped
3860          * due to a transient internal error in TDC. The packet or LSO can
3861          * be retried and may transmit successfully on a subsequent attempt.
3862          */
3863         #define TX_CMPL_COAL_ERRORS_INTERNAL_ERROR \
3864                 UINT32_C(0x200)
3865         /*
3866          * When this bit is '1', it was not possible to collect a a timestamp
3867          * for a PTP completion, in which case the timestamp_hi and
3868          * timestamp_lo fields are invalid. When this bit is '0' for a PTP
3869          * completion, the timestamp_hi and timestamp_lo fields are valid.
3870          * RJRN will copy the value of this bit into the field of the same
3871          * name in all TX completions, regardless of whether such
3872          * completions are PTP completions or other TX completions.
3873          */
3874         #define TX_CMPL_COAL_ERRORS_TIMESTAMP_INVALID_ERROR \
3875                 UINT32_C(0x400)
3876         /* unused2 is 16 b */
3877         uint16_t        unused_1;
3878         uint32_t        sq_cons_idx;
3879         /*
3880          * This value is SQ index for the start of the packet following the
3881          * last completed packet.
3882          */
3883         #define TX_CMPL_COAL_SQ_CONS_IDX_MASK UINT32_C(0xffffff)
3884         #define TX_CMPL_COAL_SQ_CONS_IDX_SFT 0
3885 } __rte_packed;
3886
3887 /* tx_cmpl_ptp (size:128b/16B) */
3888 struct tx_cmpl_ptp {
3889         uint16_t        flags_type;
3890         /*
3891          * This field indicates the exact type of the completion.
3892          * By convention, the LSB identifies the length of the
3893          * record in 16B units. Even values indicate 16B
3894          * records. Odd values indicate 32B
3895          * records.
3896          */
3897         #define TX_CMPL_PTP_TYPE_MASK       UINT32_C(0x3f)
3898         #define TX_CMPL_PTP_TYPE_SFT        0
3899         /*
3900          * TX L2 PTP completion:
3901          * Completion of TX packet. Length = 32B
3902          */
3903         #define TX_CMPL_PTP_TYPE_TX_L2_PTP    UINT32_C(0x2)
3904         #define TX_CMPL_PTP_TYPE_LAST        TX_CMPL_PTP_TYPE_TX_L2_PTP
3905         #define TX_CMPL_PTP_FLAGS_MASK      UINT32_C(0xffc0)
3906         #define TX_CMPL_PTP_FLAGS_SFT       6
3907         /*
3908          * When this bit is '1', it indicates a packet that has an
3909          * error of some type. Type of error is indicated in
3910          * error_flags.
3911          */
3912         #define TX_CMPL_PTP_FLAGS_ERROR      UINT32_C(0x40)
3913         /*
3914          * When this bit is '1', it indicates that the packet completed
3915          * was transmitted using the push acceleration data provided
3916          * by the driver. When this bit is '0', it indicates that the
3917          * packet had not push acceleration data written or was executed
3918          * as a normal packet even though push data was provided.
3919          */
3920         #define TX_CMPL_PTP_FLAGS_PUSH       UINT32_C(0x80)
3921         /* unused1 is 16 b */
3922         uint16_t        unused_0;
3923         /*
3924          * This is a copy of the opaque field from the first TX BD of this
3925          * transmitted packet. Note that, if the packet was described by a short
3926          * CSO or short CSO inline BD, then the 16-bit opaque field from the
3927          * short CSO BD will appear in the bottom 16 bits of this field.
3928          */
3929         uint32_t        opaque;
3930         uint16_t        errors_v;
3931         /*
3932          * This value is written by the NIC such that it will be different
3933          * for each pass through the completion queue. The even passes
3934          * will write 1. The odd passes will write 0.
3935          */
3936         #define TX_CMPL_PTP_V                                  UINT32_C(0x1)
3937         #define TX_CMPL_PTP_ERRORS_MASK                        UINT32_C(0xfffe)
3938         #define TX_CMPL_PTP_ERRORS_SFT                         1
3939         /*
3940          * This error indicates that there was some sort of problem
3941          * with the BDs for the packet.
3942          */
3943         #define TX_CMPL_PTP_ERRORS_BUFFER_ERROR_MASK            UINT32_C(0xe)
3944         #define TX_CMPL_PTP_ERRORS_BUFFER_ERROR_SFT             1
3945         /* No error */
3946         #define TX_CMPL_PTP_ERRORS_BUFFER_ERROR_NO_ERROR \
3947                 (UINT32_C(0x0) << 1)
3948         /*
3949          * Bad Format:
3950          * BDs were not formatted correctly.
3951          */
3952         #define TX_CMPL_PTP_ERRORS_BUFFER_ERROR_BAD_FMT \
3953                 (UINT32_C(0x2) << 1)
3954         #define TX_CMPL_PTP_ERRORS_BUFFER_ERROR_LAST \
3955                 TX_CMPL_PTP_ERRORS_BUFFER_ERROR_BAD_FMT
3956         /*
3957          * When this bit is '1', it indicates that the length of
3958          * the packet was zero. No packet was transmitted.
3959          */
3960         #define TX_CMPL_PTP_ERRORS_ZERO_LENGTH_PKT              UINT32_C(0x10)
3961         /*
3962          * When this bit is '1', it indicates that the packet
3963          * was longer than the programmed limit in TDI. No
3964          * packet was transmitted.
3965          */
3966         #define TX_CMPL_PTP_ERRORS_EXCESSIVE_BD_LENGTH          UINT32_C(0x20)
3967         /*
3968          * When this bit is '1', it indicates that one or more of the
3969          * BDs associated with this packet generated a PCI error.
3970          * This probably means the address was not valid.
3971          */
3972         #define TX_CMPL_PTP_ERRORS_DMA_ERROR                    UINT32_C(0x40)
3973         /*
3974          * When this bit is '1', it indicates that the packet was longer
3975          * than indicated by the hint. No packet was transmitted.
3976          */
3977         #define TX_CMPL_PTP_ERRORS_HINT_TOO_SHORT               UINT32_C(0x80)
3978         /*
3979          * When this bit is '1', it indicates that the packet was
3980          * dropped due to Poison TLP error on one or more of the
3981          * TLPs in the PXP completion.
3982          */
3983         #define TX_CMPL_PTP_ERRORS_POISON_TLP_ERROR             UINT32_C(0x100)
3984         /*
3985          * When this bit is '1', it indicates that the packet was dropped due
3986          * to a transient internal error in TDC. The packet or LSO can be
3987          * retried and may transmit successfully on a subsequent attempt.
3988          */
3989         #define TX_CMPL_PTP_ERRORS_INTERNAL_ERROR               UINT32_C(0x200)
3990         /*
3991          * When this bit is '1', it was not possible to collect a a timestamp
3992          * for a PTP completion, in which case the timestamp_hi and
3993          * timestamp_lo fields are invalid. When this bit is '0' for a PTP
3994          * completion, the timestamp_hi and timestamp_lo fields are valid.
3995          * RJRN will copy the value of this bit into the field of the same
3996          * name in all TX completions, regardless of whether such
3997          * completions are PTP completions or other TX completions.
3998          */
3999         #define TX_CMPL_PTP_ERRORS_TIMESTAMP_INVALID_ERROR      UINT32_C(0x400)
4000         /* unused2 is 16 b */
4001         uint16_t        unused_1;
4002         /*
4003          * This is timestamp value (lower 32bits) read from PM for the PTP
4004          * timestamp enabled packet.
4005          */
4006         uint32_t        timestamp_lo;
4007 } __rte_packed;
4008
4009 /* tx_cmpl_ptp_hi (size:128b/16B) */
4010 struct tx_cmpl_ptp_hi {
4011         /*
4012          * This is timestamp value (lower 32bits) read from PM for the PTP
4013          * timestamp enabled packet.
4014          */
4015         uint16_t        timestamp_hi[3];
4016         uint16_t        reserved16;
4017         uint64_t        v2;
4018         /*
4019          * This value is written by the NIC such that it will be different for
4020          * each pass through the completion queue.The even passes will write 1.
4021          * The odd passes will write 0
4022          */
4023         #define TX_CMPL_PTP_HI_V2     UINT32_C(0x1)
4024 } __rte_packed;
4025
4026 /* rx_pkt_cmpl (size:128b/16B) */
4027 struct rx_pkt_cmpl {
4028         uint16_t        flags_type;
4029         /*
4030          * This field indicates the exact type of the completion.
4031          * By convention, the LSB identifies the length of the
4032          * record in 16B units. Even values indicate 16B
4033          * records. Odd values indicate 32B
4034          * records.
4035          */
4036         #define RX_PKT_CMPL_TYPE_MASK                   UINT32_C(0x3f)
4037         #define RX_PKT_CMPL_TYPE_SFT                    0
4038         /*
4039          * RX L2 completion:
4040          * Completion of and L2 RX packet. Length = 32B
4041          */
4042         #define RX_PKT_CMPL_TYPE_RX_L2                    UINT32_C(0x11)
4043         #define RX_PKT_CMPL_TYPE_LAST                    RX_PKT_CMPL_TYPE_RX_L2
4044         #define RX_PKT_CMPL_FLAGS_MASK                  UINT32_C(0xffc0)
4045         #define RX_PKT_CMPL_FLAGS_SFT                   6
4046         /*
4047          * When this bit is '1', it indicates a packet that has an
4048          * error of some type. Type of error is indicated in
4049          * error_flags.
4050          */
4051         #define RX_PKT_CMPL_FLAGS_ERROR                  UINT32_C(0x40)
4052         /* This field indicates how the packet was placed in the buffer. */
4053         #define RX_PKT_CMPL_FLAGS_PLACEMENT_MASK         UINT32_C(0x380)
4054         #define RX_PKT_CMPL_FLAGS_PLACEMENT_SFT          7
4055         /*
4056          * Normal:
4057          * Packet was placed using normal algorithm.
4058          */
4059         #define RX_PKT_CMPL_FLAGS_PLACEMENT_NORMAL         (UINT32_C(0x0) << 7)
4060         /*
4061          * Jumbo:
4062          * Packet was placed using jumbo algorithm.
4063          */
4064         #define RX_PKT_CMPL_FLAGS_PLACEMENT_JUMBO          (UINT32_C(0x1) << 7)
4065         /*
4066          * Header/Data Separation:
4067          * Packet was placed using Header/Data separation algorithm.
4068          * The separation location is indicated by the itype field.
4069          */
4070         #define RX_PKT_CMPL_FLAGS_PLACEMENT_HDS            (UINT32_C(0x2) << 7)
4071         #define RX_PKT_CMPL_FLAGS_PLACEMENT_LAST \
4072                 RX_PKT_CMPL_FLAGS_PLACEMENT_HDS
4073         /* This bit is '1' if the RSS field in this completion is valid. */
4074         #define RX_PKT_CMPL_FLAGS_RSS_VALID              UINT32_C(0x400)
4075         /* unused is 1 b */
4076         #define RX_PKT_CMPL_FLAGS_UNUSED                 UINT32_C(0x800)
4077         /*
4078          * This value indicates what the inner packet determined for the
4079          * packet was.
4080          */
4081         #define RX_PKT_CMPL_FLAGS_ITYPE_MASK             UINT32_C(0xf000)
4082         #define RX_PKT_CMPL_FLAGS_ITYPE_SFT              12
4083         /*
4084          * Not Known:
4085          * Indicates that the packet type was not known.
4086          */
4087         #define RX_PKT_CMPL_FLAGS_ITYPE_NOT_KNOWN \
4088                 (UINT32_C(0x0) << 12)
4089         /*
4090          * IP Packet:
4091          * Indicates that the packet was an IP packet, but further
4092          * classification was not possible.
4093          */
4094         #define RX_PKT_CMPL_FLAGS_ITYPE_IP \
4095                 (UINT32_C(0x1) << 12)
4096         /*
4097          * TCP Packet:
4098          * Indicates that the packet was IP and TCP.
4099          * This indicates that the payload_offset field is valid.
4100          */
4101         #define RX_PKT_CMPL_FLAGS_ITYPE_TCP \
4102                 (UINT32_C(0x2) << 12)
4103         /*
4104          * UDP Packet:
4105          * Indicates that the packet was IP and UDP.
4106          * This indicates that the payload_offset field is valid.
4107          */
4108         #define RX_PKT_CMPL_FLAGS_ITYPE_UDP \
4109                 (UINT32_C(0x3) << 12)
4110         /*
4111          * FCoE Packet:
4112          * Indicates that the packet was recognized as a FCoE.
4113          * This also indicates that the payload_offset field is valid.
4114          */
4115         #define RX_PKT_CMPL_FLAGS_ITYPE_FCOE \
4116                 (UINT32_C(0x4) << 12)
4117         /*
4118          * RoCE Packet:
4119          * Indicates that the packet was recognized as a RoCE.
4120          * This also indicates that the payload_offset field is valid.
4121          */
4122         #define RX_PKT_CMPL_FLAGS_ITYPE_ROCE \
4123                 (UINT32_C(0x5) << 12)
4124         /*
4125          * ICMP Packet:
4126          * Indicates that the packet was recognized as ICMP.
4127          * This indicates that the payload_offset field is valid.
4128          */
4129         #define RX_PKT_CMPL_FLAGS_ITYPE_ICMP \
4130                 (UINT32_C(0x7) << 12)
4131         /*
4132          * PtP packet wo/timestamp:
4133          * Indicates that the packet was recognized as a PtP
4134          * packet.
4135          */
4136         #define RX_PKT_CMPL_FLAGS_ITYPE_PTP_WO_TIMESTAMP \
4137                 (UINT32_C(0x8) << 12)
4138         /*
4139          * PtP packet w/timestamp:
4140          * Indicates that the packet was recognized as a PtP
4141          * packet and that a timestamp was taken for the packet.
4142          */
4143         #define RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP \
4144                 (UINT32_C(0x9) << 12)
4145         #define RX_PKT_CMPL_FLAGS_ITYPE_LAST \
4146                 RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP
4147         /*
4148          * This is the length of the data for the packet stored in the
4149          * buffer(s) identified by the opaque value. This includes
4150          * the packet BD and any associated buffer BDs. This does not include
4151          * the length of any data places in aggregation BDs.
4152          */
4153         uint16_t        len;
4154         /*
4155          * This is a copy of the opaque field from the RX BD this completion
4156          * corresponds to.
4157          */
4158         uint32_t        opaque;
4159         uint8_t agg_bufs_v1;
4160         /*
4161          * This value is written by the NIC such that it will be different
4162          * for each pass through the completion queue. The even passes
4163          * will write 1. The odd passes will write 0.
4164          */
4165         #define RX_PKT_CMPL_V1           UINT32_C(0x1)
4166         /*
4167          * This value is the number of aggregation buffers that follow this
4168          * entry in the completion ring that are a part of this packet.
4169          * If the value is zero, then the packet is completely contained
4170          * in the buffer space provided for the packet in the RX ring.
4171          */
4172         #define RX_PKT_CMPL_AGG_BUFS_MASK UINT32_C(0x3e)
4173         #define RX_PKT_CMPL_AGG_BUFS_SFT 1
4174         /* unused1 is 2 b */
4175         #define RX_PKT_CMPL_UNUSED1_MASK UINT32_C(0xc0)
4176         #define RX_PKT_CMPL_UNUSED1_SFT  6
4177         /*
4178          * This is the RSS hash type for the packet. The value is packed
4179          * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
4180          *
4181          * The value of tuple_extrac_op provides the information about
4182          * what fields the hash was computed on.
4183          * * 0: The RSS hash was computed over source IP address,
4184          * destination IP address, source port, and destination port of inner
4185          * IP and TCP or UDP headers. Note: For non-tunneled packets,
4186          * the packet headers are considered inner packet headers for the RSS
4187          * hash computation purpose.
4188          * * 1: The RSS hash was computed over source IP address and destination
4189          * IP address of inner IP header. Note: For non-tunneled packets,
4190          * the packet headers are considered inner packet headers for the RSS
4191          * hash computation purpose.
4192          * * 2: The RSS hash was computed over source IP address,
4193          * destination IP address, source port, and destination port of
4194          * IP and TCP or UDP headers of outer tunnel headers.
4195          * Note: For non-tunneled packets, this value is not applicable.
4196          * * 3: The RSS hash was computed over source IP address and
4197          * destination IP address of IP header of outer tunnel headers.
4198          * Note: For non-tunneled packets, this value is not applicable.
4199          *
4200          * Note that 4-tuples values listed above are applicable
4201          * for layer 4 protocols supported and enabled for RSS in the hardware,
4202          * HWRM firmware, and drivers. For example, if RSS hash is supported and
4203          * enabled for TCP traffic only, then the values of tuple_extract_op
4204          * corresponding to 4-tuples are only valid for TCP traffic.
4205          */
4206         uint8_t rss_hash_type;
4207         /*
4208          * This value indicates the offset in bytes from the beginning of the packet
4209          * where the inner payload starts. This value is valid for TCP, UDP,
4210          * FCoE, and RoCE packets.
4211          *
4212          * A value of zero indicates that header is 256B into the packet.
4213          */
4214         uint8_t payload_offset;
4215         /* unused2 is 8 b */
4216         uint8_t unused1;
4217         /*
4218          * This value is the RSS hash value calculated for the packet
4219          * based on the mode bits and key value in the VNIC.
4220          */
4221         uint32_t        rss_hash;
4222 } __rte_packed;
4223
4224 /* Last 16 bytes of rx_pkt_cmpl. */
4225 /* rx_pkt_cmpl_hi (size:128b/16B) */
4226 struct rx_pkt_cmpl_hi {
4227         uint32_t        flags2;
4228         /*
4229          * This indicates that the ip checksum was calculated for the
4230          * inner packet and that the ip_cs_error field indicates if there
4231          * was an error.
4232          */
4233         #define RX_PKT_CMPL_FLAGS2_IP_CS_CALC                 UINT32_C(0x1)
4234         /*
4235          * This indicates that the TCP, UDP or ICMP checksum was
4236          * calculated for the inner packet and that the l4_cs_error field
4237          * indicates if there was an error.
4238          */
4239         #define RX_PKT_CMPL_FLAGS2_L4_CS_CALC                 UINT32_C(0x2)
4240         /*
4241          * This indicates that the ip checksum was calculated for the
4242          * tunnel header and that the t_ip_cs_error field indicates if there
4243          * was an error.
4244          */
4245         #define RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC               UINT32_C(0x4)
4246         /*
4247          * This indicates that the UDP checksum was
4248          * calculated for the tunnel packet and that the t_l4_cs_error field
4249          * indicates if there was an error.
4250          */
4251         #define RX_PKT_CMPL_FLAGS2_T_L4_CS_CALC               UINT32_C(0x8)
4252         /* This value indicates what format the metadata field is. */
4253         #define RX_PKT_CMPL_FLAGS2_META_FORMAT_MASK           UINT32_C(0xf0)
4254         #define RX_PKT_CMPL_FLAGS2_META_FORMAT_SFT            4
4255         /* No metadata information. Value is zero. */
4256         #define RX_PKT_CMPL_FLAGS2_META_FORMAT_NONE \
4257                 (UINT32_C(0x0) << 4)
4258         /*
4259          * The metadata field contains the VLAN tag and TPID value.
4260          * - metadata[11:0] contains the vlan VID value.
4261          * - metadata[12] contains the vlan DE value.
4262          * - metadata[15:13] contains the vlan PRI value.
4263          * - metadata[31:16] contains the vlan TPID value.
4264          */
4265         #define RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN \
4266                 (UINT32_C(0x1) << 4)
4267         /*
4268          * If ext_meta_format is equal to 1, the metadata field
4269          * contains the lower 16b of the tunnel ID value, justified
4270          * to LSB
4271          * - VXLAN = VNI[23:0] -> VXLAN Network ID
4272          * - Geneve (NGE) = VNI[23:0] a-> Virtual Network Identifier.
4273          * - NVGRE = TNI[23:0] -> Tenant Network ID
4274          * - GRE = KEY[31:0] -> key field with bit mask. zero if K = 0
4275          * - IPV4 = 0 (not populated)
4276          * - IPV6 = Flow Label[19:0]
4277          * - PPPoE = sessionID[15:0]
4278          * - MPLs = Outer label[19:0]
4279          * - UPAR = Selected[31:0] with bit mask
4280          */
4281         #define RX_PKT_CMPL_FLAGS2_META_FORMAT_TUNNEL_ID \
4282                 (UINT32_C(0x2) << 4)
4283         /*
4284          * if ext_meta_format is equal to 1, metadata field contains
4285          * 16b metadata from the prepended header (chdr_data).
4286          */
4287         #define RX_PKT_CMPL_FLAGS2_META_FORMAT_CHDR_DATA \
4288                 (UINT32_C(0x3) << 4)
4289         /*
4290          * If ext_meta_format is equal to 1, the metadata field contains
4291          * the outer_l3_offset, inner_l2_offset, inner_l3_offset and
4292          * inner_l4_size.
4293          * - metadata[8:0] contains the outer_l3_offset.
4294          * - metadata[17:9] contains the inner_l2_offset.
4295          * - metadata[26:18] contains the inner_l3_offset.
4296          * - metadata[31:27] contains the inner_l4_size.
4297          */
4298         #define RX_PKT_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET \
4299                 (UINT32_C(0x4) << 4)
4300         #define RX_PKT_CMPL_FLAGS2_META_FORMAT_LAST \
4301                 RX_PKT_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET
4302         /*
4303          * This field indicates the IP type for the inner-most IP header.
4304          * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
4305          * This value is only valid if itype indicates a packet
4306          * with an IP header.
4307          */
4308         #define RX_PKT_CMPL_FLAGS2_IP_TYPE                    UINT32_C(0x100)
4309         /*
4310          * This indicates that the complete 1's complement checksum was
4311          * calculated for the packet.
4312          */
4313         #define RX_PKT_CMPL_FLAGS2_COMPLETE_CHECKSUM_CALC     UINT32_C(0x200)
4314         /*
4315          * The combination of this value and meta_format indicated what
4316          * format the metadata field is.
4317          */
4318         #define RX_PKT_CMPL_FLAGS2_EXT_META_FORMAT_MASK       UINT32_C(0xc00)
4319         #define RX_PKT_CMPL_FLAGS2_EXT_META_FORMAT_SFT        10
4320         /*
4321          * This value is the complete 1's complement checksum calculated from
4322          * the start of the outer L3 header to the end of the packet (not
4323          * including the ethernet crc). It is valid when the
4324          * 'complete_checksum_calc' flag is set.
4325          */
4326         #define RX_PKT_CMPL_FLAGS2_COMPLETE_CHECKSUM_MASK \
4327                 UINT32_C(0xffff0000)
4328         #define RX_PKT_CMPL_FLAGS2_COMPLETE_CHECKSUM_SFT      16
4329         /*
4330          * This is data from the CFA block as indicated by the meta_format
4331          * field.
4332          */
4333         uint32_t        metadata;
4334         /* When meta_format=1, this value is the VLAN VID. */
4335         #define RX_PKT_CMPL_METADATA_VID_MASK UINT32_C(0xfff)
4336         #define RX_PKT_CMPL_METADATA_VID_SFT  0
4337         /* When meta_format=1, this value is the VLAN DE. */
4338         #define RX_PKT_CMPL_METADATA_DE       UINT32_C(0x1000)
4339         /* When meta_format=1, this value is the VLAN PRI. */
4340         #define RX_PKT_CMPL_METADATA_PRI_MASK UINT32_C(0xe000)
4341         #define RX_PKT_CMPL_METADATA_PRI_SFT  13
4342         /* When meta_format=1, this value is the VLAN TPID. */
4343         #define RX_PKT_CMPL_METADATA_TPID_MASK UINT32_C(0xffff0000)
4344         #define RX_PKT_CMPL_METADATA_TPID_SFT 16
4345         uint16_t        errors_v2;
4346         /*
4347          * This value is written by the NIC such that it will be different
4348          * for each pass through the completion queue. The even passes
4349          * will write 1. The odd passes will write 0.
4350          */
4351         #define RX_PKT_CMPL_V2 \
4352                 UINT32_C(0x1)
4353         #define RX_PKT_CMPL_ERRORS_MASK \
4354                 UINT32_C(0xfffe)
4355         #define RX_PKT_CMPL_ERRORS_SFT                               1
4356         /*
4357          * This error indicates that there was some sort of problem with
4358          * the BDs for the packet that was found after part of the
4359          * packet was already placed. The packet should be treated as
4360          * invalid.
4361          */
4362         #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_MASK \
4363                 UINT32_C(0xe)
4364         #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_SFT                   1
4365         /* No buffer error */
4366         #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
4367                 (UINT32_C(0x0) << 1)
4368         /*
4369          * Did Not Fit:
4370          * Packet did not fit into packet buffer provided.
4371          * For regular placement, this means the packet did not fit
4372          * in the buffer provided. For HDS and jumbo placement, this
4373          * means that the packet could not be placed into 7 physical
4374          * buffers or less.
4375          */
4376         #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_DID_NOT_FIT \
4377                 (UINT32_C(0x1) << 1)
4378         /*
4379          * Not On Chip:
4380          * All BDs needed for the packet were not on-chip when
4381          * the packet arrived.
4382          */
4383         #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
4384                 (UINT32_C(0x2) << 1)
4385         /*
4386          * Bad Format:
4387          * BDs were not formatted correctly.
4388          */
4389         #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
4390                 (UINT32_C(0x3) << 1)
4391         /*
4392          * Flush:
4393          * There was a bad_format error on the previous operation
4394          */
4395         #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
4396                 (UINT32_C(0x5) << 1)
4397         #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_LAST \
4398                 RX_PKT_CMPL_ERRORS_BUFFER_ERROR_FLUSH
4399         /*
4400          * This indicates that there was an error in the IP header
4401          * checksum.
4402          */
4403         #define RX_PKT_CMPL_ERRORS_IP_CS_ERROR \
4404                 UINT32_C(0x10)
4405         /*
4406          * This indicates that there was an error in the TCP, UDP
4407          * or ICMP checksum.
4408          */
4409         #define RX_PKT_CMPL_ERRORS_L4_CS_ERROR \
4410                 UINT32_C(0x20)
4411         /*
4412          * This indicates that there was an error in the tunnel
4413          * IP header checksum.
4414          */
4415         #define RX_PKT_CMPL_ERRORS_T_IP_CS_ERROR \
4416                 UINT32_C(0x40)
4417         /*
4418          * This indicates that there was an error in the tunnel
4419          * UDP checksum.
4420          */
4421         #define RX_PKT_CMPL_ERRORS_T_L4_CS_ERROR \
4422                 UINT32_C(0x80)
4423         /*
4424          * This indicates that there was a CRC error on either an FCoE
4425          * or RoCE packet. The itype indicates the packet type.
4426          */
4427         #define RX_PKT_CMPL_ERRORS_CRC_ERROR \
4428                 UINT32_C(0x100)
4429         /*
4430          * This indicates that there was an error in the tunnel
4431          * portion of the packet when this
4432          * field is non-zero.
4433          */
4434         #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_MASK \
4435                 UINT32_C(0xe00)
4436         #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_SFT                    9
4437         /*
4438          * No additional error occurred on the tunnel portion
4439          * or the packet of the packet does not have a tunnel.
4440          */
4441         #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_NO_ERROR \
4442                 (UINT32_C(0x0) << 9)
4443         /*
4444          * Indicates that IP header version does not match
4445          * expectation from L2 Ethertype for IPv4 and IPv6
4446          * in the tunnel header.
4447          */
4448         #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_VERSION \
4449                 (UINT32_C(0x1) << 9)
4450         /*
4451          * Indicates that header length is out of range in the
4452          * tunnel header. Valid for
4453          * IPv4.
4454          */
4455         #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_HDR_LEN \
4456                 (UINT32_C(0x2) << 9)
4457         /*
4458          * Indicates that the physical packet is shorter than that
4459          * claimed by the PPPoE header length for a tunnel PPPoE
4460          * packet.
4461          */
4462         #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_TUNNEL_TOTAL_ERROR \
4463                 (UINT32_C(0x3) << 9)
4464         /*
4465          * Indicates that physical packet is shorter than that claimed
4466          * by the tunnel l3 header length. Valid for IPv4, or IPv6
4467          * tunnel packet packets.
4468          */
4469         #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_IP_TOTAL_ERROR \
4470                 (UINT32_C(0x4) << 9)
4471         /*
4472          * Indicates that the physical packet is shorter than that
4473          * claimed by the tunnel UDP header length for a tunnel
4474          * UDP packet that is not fragmented.
4475          */
4476         #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_UDP_TOTAL_ERROR \
4477                 (UINT32_C(0x5) << 9)
4478         /*
4479          * indicates that the IPv4 TTL or IPv6 hop limit check
4480          * have failed (e.g. TTL = 0) in the tunnel header. Valid
4481          * for IPv4, and IPv6.
4482          */
4483         #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL \
4484                 (UINT32_C(0x6) << 9)
4485         #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_LAST \
4486                 RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL
4487         /*
4488          * This indicates that there was an error in the inner
4489          * portion of the packet when this
4490          * field is non-zero.
4491          */
4492         #define RX_PKT_CMPL_ERRORS_PKT_ERROR_MASK \
4493                 UINT32_C(0xf000)
4494         #define RX_PKT_CMPL_ERRORS_PKT_ERROR_SFT                      12
4495         /*
4496          * No additional error occurred on the tunnel portion
4497          * or the packet of the packet does not have a tunnel.
4498          */
4499         #define RX_PKT_CMPL_ERRORS_PKT_ERROR_NO_ERROR \
4500                 (UINT32_C(0x0) << 12)
4501         /*
4502          * Indicates that IP header version does not match
4503          * expectation from L2 Ethertype for IPv4 and IPv6 or that
4504          * option other than VFT was parsed on
4505          * FCoE packet.
4506          */
4507         #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_VERSION \
4508                 (UINT32_C(0x1) << 12)
4509         /*
4510          * indicates that header length is out of range. Valid for
4511          * IPv4 and RoCE
4512          */
4513         #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_HDR_LEN \
4514                 (UINT32_C(0x2) << 12)
4515         /*
4516          * indicates that the IPv4 TTL or IPv6 hop limit check
4517          * have failed (e.g. TTL = 0). Valid for IPv4, and IPv6
4518          */
4519         #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_TTL \
4520                 (UINT32_C(0x3) << 12)
4521         /*
4522          * Indicates that physical packet is shorter than that
4523          * claimed by the l3 header length. Valid for IPv4,
4524          * IPv6 packet or RoCE packets.
4525          */
4526         #define RX_PKT_CMPL_ERRORS_PKT_ERROR_IP_TOTAL_ERROR \
4527                 (UINT32_C(0x4) << 12)
4528         /*
4529          * Indicates that the physical packet is shorter than that
4530          * claimed by the UDP header length for a UDP packet that is
4531          * not fragmented.
4532          */
4533         #define RX_PKT_CMPL_ERRORS_PKT_ERROR_UDP_TOTAL_ERROR \
4534                 (UINT32_C(0x5) << 12)
4535         /*
4536          * Indicates that TCP header length > IP payload. Valid for
4537          * TCP packets only.
4538          */
4539         #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN \
4540                 (UINT32_C(0x6) << 12)
4541         /* Indicates that TCP header length < 5. Valid for TCP. */
4542         #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN_TOO_SMALL \
4543                 (UINT32_C(0x7) << 12)
4544         /*
4545          * Indicates that TCP option headers result in a TCP header
4546          * size that does not match data offset in TCP header. Valid
4547          * for TCP.
4548          */
4549         #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN \
4550                 (UINT32_C(0x8) << 12)
4551         #define RX_PKT_CMPL_ERRORS_PKT_ERROR_LAST \
4552                 RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN
4553         /*
4554          * This field identifies the CFA action rule that was used for this
4555          * packet.
4556          */
4557         uint16_t        cfa_code;
4558         uint32_t        reorder;
4559         /*
4560          * This value holds the reordering sequence number for the packet.
4561          * If the reordering sequence is not valid, then this value is zero.
4562          * The reordering domain for the packet is in the bottom 8 to 10b of
4563          * the rss_hash value. The bottom 20b of this value contain the
4564          * ordering domain value for the packet.
4565          */
4566         #define RX_PKT_CMPL_REORDER_MASK UINT32_C(0xffffff)
4567         #define RX_PKT_CMPL_REORDER_SFT 0
4568 } __rte_packed;
4569
4570 /* rx_pkt_v2_cmpl (size:128b/16B) */
4571 struct rx_pkt_v2_cmpl {
4572         uint16_t        flags_type;
4573         /*
4574          * This field indicates the exact type of the completion.
4575          * By convention, the LSB identifies the length of the
4576          * record in 16B units. Even values indicate 16B
4577          * records. Odd values indicate 32B
4578          * records.
4579          */
4580         #define RX_PKT_V2_CMPL_TYPE_MASK                      UINT32_C(0x3f)
4581         #define RX_PKT_V2_CMPL_TYPE_SFT                       0
4582         /*
4583          * RX L2 V2 completion:
4584          * Completion of and L2 RX packet. Length = 32B
4585          * This is the new version of the RX_L2 completion used in SR2
4586          * and later chips.
4587          */
4588         #define RX_PKT_V2_CMPL_TYPE_RX_L2_V2                    UINT32_C(0xf)
4589         #define RX_PKT_V2_CMPL_TYPE_LAST \
4590                 RX_PKT_V2_CMPL_TYPE_RX_L2_V2
4591         #define RX_PKT_V2_CMPL_FLAGS_MASK                     UINT32_C(0xffc0)
4592         #define RX_PKT_V2_CMPL_FLAGS_SFT                      6
4593         /*
4594          * When this bit is '1', it indicates a packet that has an
4595          * error of some type. Type of error is indicated in
4596          * error_flags.
4597          */
4598         #define RX_PKT_V2_CMPL_FLAGS_ERROR                     UINT32_C(0x40)
4599         /* This field indicates how the packet was placed in the buffer. */
4600         #define RX_PKT_V2_CMPL_FLAGS_PLACEMENT_MASK            UINT32_C(0x380)
4601         #define RX_PKT_V2_CMPL_FLAGS_PLACEMENT_SFT             7
4602         /*
4603          * Normal:
4604          * Packet was placed using normal algorithm.
4605          */
4606         #define RX_PKT_V2_CMPL_FLAGS_PLACEMENT_NORMAL \
4607                 (UINT32_C(0x0) << 7)
4608         /*
4609          * Jumbo:
4610          * Packet was placed using jumbo algorithm.
4611          */
4612         #define RX_PKT_V2_CMPL_FLAGS_PLACEMENT_JUMBO \
4613                 (UINT32_C(0x1) << 7)
4614         /*
4615          * Header/Data Separation:
4616          * Packet was placed using Header/Data separation algorithm.
4617          * The separation location is indicated by the itype field.
4618          */
4619         #define RX_PKT_V2_CMPL_FLAGS_PLACEMENT_HDS \
4620                 (UINT32_C(0x2) << 7)
4621         /*
4622          * Truncation:
4623          * Packet was placed using truncation algorithm. The
4624          * placed (truncated) length is indicated in the payload_offset
4625          * field. The original length is indicated in the len field.
4626          */
4627         #define RX_PKT_V2_CMPL_FLAGS_PLACEMENT_TRUNCATION \
4628                 (UINT32_C(0x3) << 7)
4629         #define RX_PKT_V2_CMPL_FLAGS_PLACEMENT_LAST \
4630                 RX_PKT_V2_CMPL_FLAGS_PLACEMENT_TRUNCATION
4631         /* This bit is '1' if the RSS field in this completion is valid. */
4632         #define RX_PKT_V2_CMPL_FLAGS_RSS_VALID                 UINT32_C(0x400)
4633         /*
4634          * This bit is '1' if metadata has been added to the end of the
4635          * packet in host memory. Metadata starts at the first 32B boundary
4636          * after the end of the packet for regular and jumbo placement.
4637          * It starts at the first 32B boundary after the end of the header
4638          * for HDS placement. The length of the metadata is indicated in the
4639          * metadata itself.
4640          */
4641         #define RX_PKT_V2_CMPL_FLAGS_PKT_METADATA_PRESENT      UINT32_C(0x800)
4642         /*
4643          * This value indicates what the inner packet determined for the
4644          * packet was.
4645          */
4646         #define RX_PKT_V2_CMPL_FLAGS_ITYPE_MASK                UINT32_C(0xf000)
4647         #define RX_PKT_V2_CMPL_FLAGS_ITYPE_SFT                 12
4648         /*
4649          * Not Known:
4650          * Indicates that the packet type was not known.
4651          */
4652         #define RX_PKT_V2_CMPL_FLAGS_ITYPE_NOT_KNOWN \
4653                 (UINT32_C(0x0) << 12)
4654         /*
4655          * IP Packet:
4656          * Indicates that the packet was an IP packet, but further
4657          * classification was not possible.
4658          */
4659         #define RX_PKT_V2_CMPL_FLAGS_ITYPE_IP \
4660                 (UINT32_C(0x1) << 12)
4661         /*
4662          * TCP Packet:
4663          * Indicates that the packet was IP and TCP.
4664          * This indicates that the payload_offset field is valid.
4665          */
4666         #define RX_PKT_V2_CMPL_FLAGS_ITYPE_TCP \
4667                 (UINT32_C(0x2) << 12)
4668         /*
4669          * UDP Packet:
4670          * Indicates that the packet was IP and UDP.
4671          * This indicates that the payload_offset field is valid.
4672          */
4673         #define RX_PKT_V2_CMPL_FLAGS_ITYPE_UDP \
4674                 (UINT32_C(0x3) << 12)
4675         /*
4676          * FCoE Packet:
4677          * Indicates that the packet was recognized as a FCoE.
4678          * This also indicates that the payload_offset field is valid.
4679          */
4680         #define RX_PKT_V2_CMPL_FLAGS_ITYPE_FCOE \
4681                 (UINT32_C(0x4) << 12)
4682         /*
4683          * RoCE Packet:
4684          * Indicates that the packet was recognized as a RoCE.
4685          * This also indicates that the payload_offset field is valid.
4686          */
4687         #define RX_PKT_V2_CMPL_FLAGS_ITYPE_ROCE \
4688                 (UINT32_C(0x5) << 12)
4689         /*
4690          * ICMP Packet:
4691          * Indicates that the packet was recognized as ICMP.
4692          * This indicates that the payload_offset field is valid.
4693          */
4694         #define RX_PKT_V2_CMPL_FLAGS_ITYPE_ICMP \
4695                 (UINT32_C(0x7) << 12)
4696         /*
4697          * PtP packet wo/timestamp:
4698          * Indicates that the packet was recognized as a PtP
4699          * packet.
4700          */
4701         #define RX_PKT_V2_CMPL_FLAGS_ITYPE_PTP_WO_TIMESTAMP \
4702                 (UINT32_C(0x8) << 12)
4703         /*
4704          * PtP packet w/timestamp:
4705          * Indicates that the packet was recognized as a PtP
4706          * packet and that a timestamp was taken for the packet.
4707          */
4708         #define RX_PKT_V2_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP \
4709                 (UINT32_C(0x9) << 12)
4710         #define RX_PKT_V2_CMPL_FLAGS_ITYPE_LAST \
4711                 RX_PKT_V2_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP
4712         /*
4713          * This is the length of the data for the packet stored in the
4714          * buffer(s) identified by the opaque value. This includes
4715          * the packet BD and any associated buffer BDs. This does not include
4716          * the length of any data places in aggregation BDs.
4717          */
4718         uint16_t        len;
4719         /*
4720          * This is a copy of the opaque field from the RX BD this completion
4721          * corresponds to.
4722          */
4723         uint32_t        opaque;
4724         uint8_t agg_bufs_v1;
4725         /*
4726          * This value is written by the NIC such that it will be different
4727          * for each pass through the completion queue. The even passes
4728          * will write 1. The odd passes will write 0.
4729          */
4730         #define RX_PKT_V2_CMPL_V1           UINT32_C(0x1)
4731         /*
4732          * This value is the number of aggregation buffers that follow this
4733          * entry in the completion ring that are a part of this packet.
4734          * If the value is zero, then the packet is completely contained
4735          * in the buffer space provided for the packet in the RX ring.
4736          */
4737         #define RX_PKT_V2_CMPL_AGG_BUFS_MASK UINT32_C(0x3e)
4738         #define RX_PKT_V2_CMPL_AGG_BUFS_SFT 1
4739         /* unused1 is 2 b */
4740         #define RX_PKT_V2_CMPL_UNUSED1_MASK UINT32_C(0xc0)
4741         #define RX_PKT_V2_CMPL_UNUSED1_SFT  6
4742         /*
4743          * This is the RSS hash type for the packet. The value is packed
4744          * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
4745          *
4746          * The value of tuple_extrac_op provides the information about
4747          * what fields the hash was computed on.
4748          * * 0: The RSS hash was computed over source IP address,
4749          * destination IP address, source port, and destination port of inner
4750          * IP and TCP or UDP headers. Note: For non-tunneled packets,
4751          * the packet headers are considered inner packet headers for the RSS
4752          * hash computation purpose.
4753          * * 1: The RSS hash was computed over source IP address and destination
4754          * IP address of inner IP header. Note: For non-tunneled packets,
4755          * the packet headers are considered inner packet headers for the RSS
4756          * hash computation purpose.
4757          * * 2: The RSS hash was computed over source IP address,
4758          * destination IP address, source port, and destination port of
4759          * IP and TCP or UDP headers of outer tunnel headers.
4760          * Note: For non-tunneled packets, this value is not applicable.
4761          * * 3: The RSS hash was computed over source IP address and
4762          * destination IP address of IP header of outer tunnel headers.
4763          * Note: For non-tunneled packets, this value is not applicable.
4764          *
4765          * Note that 4-tuples values listed above are applicable
4766          * for layer 4 protocols supported and enabled for RSS in the hardware,
4767          * HWRM firmware, and drivers. For example, if RSS hash is supported and
4768          * enabled for TCP traffic only, then the values of tuple_extract_op
4769          * corresponding to 4-tuples are only valid for TCP traffic.
4770          */
4771         uint8_t rss_hash_type;
4772         uint16_t        metadata1_payload_offset;
4773         /*
4774          * This is data from the CFA as indicated by the meta_format field.
4775          * If truncation placement is not used, this value indicates the offset
4776          * in bytes from the beginning of the packet where the inner payload
4777          * starts. This value is valid for TCP, UDP, FCoE, and RoCE packets. If
4778          * truncation placement is used, this value represents the placed
4779          * (truncated) length of the packet.
4780          */
4781         #define RX_PKT_V2_CMPL_PAYLOAD_OFFSET_MASK        UINT32_C(0x1ff)
4782         #define RX_PKT_V2_CMPL_PAYLOAD_OFFSET_SFT         0
4783         /* This is data from the CFA as indicated by the meta_format field. */
4784         #define RX_PKT_V2_CMPL_METADATA1_MASK             UINT32_C(0xf000)
4785         #define RX_PKT_V2_CMPL_METADATA1_SFT              12
4786         /* When meta_format != 0, this value is the VLAN TPID_SEL. */
4787         #define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_MASK     UINT32_C(0x7000)
4788         #define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_SFT      12
4789         /* 0x88a8 */
4790         #define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_TPID88A8 \
4791                 (UINT32_C(0x0) << 12)
4792         /* 0x8100 */
4793         #define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_TPID8100 \
4794                 (UINT32_C(0x1) << 12)
4795         /* 0x9100 */
4796         #define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_TPID9100 \
4797                 (UINT32_C(0x2) << 12)
4798         /* 0x9200 */
4799         #define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_TPID9200 \
4800                 (UINT32_C(0x3) << 12)
4801         /* 0x9300 */
4802         #define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_TPID9300 \
4803                 (UINT32_C(0x4) << 12)
4804         /* Value programmed in CFA VLANTPID register. */
4805         #define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_TPIDCFG \
4806                 (UINT32_C(0x5) << 12)
4807         #define RX_PKT_V2_CMPL_METADATA1_TPID_SEL_LAST \
4808                 RX_PKT_V2_CMPL_METADATA1_TPID_SEL_TPIDCFG
4809         /* When meta_format != 0, this value is the VLAN valid. */
4810         #define RX_PKT_V2_CMPL_METADATA1_VALID             UINT32_C(0x8000)
4811         /*
4812          * This value is the RSS hash value calculated for the packet
4813          * based on the mode bits and key value in the VNIC. When vee_cmpl_mode
4814          * is set in VNIC context, this is the lower 32b of the host address
4815          * from the first BD used to place the packet.
4816          */
4817         uint32_t        rss_hash;
4818 } __rte_packed;
4819
4820 /* Last 16 bytes of RX Packet V2 Completion Record */
4821 /* rx_pkt_v2_cmpl_hi (size:128b/16B) */
4822 struct rx_pkt_v2_cmpl_hi {
4823         uint32_t        flags2;
4824         /*
4825          * When this bit is '0', the cs_ok field has the following definition:-
4826          * ip_cs_ok[2:0] = The number of header groups with a valid IP checksum
4827          * in the delivered packet, counted from the outer-most header group to
4828          * the inner-most header group, stopping at the first error. -
4829          * l4_cs_ok[5:3] = The number of header groups with a valid L4 checksum
4830          * in the delivered packet, counted from the outer-most header group to
4831          * the inner-most header group, stopping at the first error. When this
4832          * bit is '1', the cs_ok field has the following definition: -
4833          * hdr_cnt[2:0] = The number of header groups that were parsed by the
4834          * chip and passed in the delivered packet. - ip_cs_all_ok[3] =This bit
4835          * will be '1' if all the parsed header groups with an IP checksum are
4836          * valid. - l4_cs_all_ok[4] = This bit will be '1' if all the parsed
4837          * header groups with an L4 checksum are valid.
4838          */
4839         #define RX_PKT_V2_CMPL_HI_FLAGS2_CS_ALL_OK_MODE \
4840                 UINT32_C(0x8)
4841         /* This value indicates what format the metadata field is. */
4842         #define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_MASK \
4843                 UINT32_C(0xf0)
4844         #define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_SFT            4
4845         /* There is no metadata information. Values are zero. */
4846         #define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_NONE \
4847                 (UINT32_C(0x0) << 4)
4848         /*
4849          * The {metadata1, metadata0} fields contain the vtag
4850          * information: - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0],
4851          * de, vid[11:0]} The metadata2 field contains the table scope
4852          * and action record pointer. - metadata2[25:0] contains the
4853          * action record pointer. - metadata2[31:26] contains the table
4854          * scope.
4855          */
4856         #define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_ACT_REC_PTR \
4857                 (UINT32_C(0x1) << 4)
4858         /*
4859          * The {metadata1, metadata0} fields contain the vtag
4860          * information:
4861          * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0], de, vid[11:0]}
4862          * The metadata2 field contains the Tunnel ID
4863          * value, justified to LSB. i
4864          * - VXLAN = VNI[23:0] -> VXLAN Network ID
4865          * - Geneve (NGE) = VNI[23:0] a-> Virtual Network Identifier
4866          * - NVGRE = TNI[23:0] -> Tenant Network ID
4867          * - GRE = KEY[31:0] -> key field with bit mask. zero if K=0
4868          * - IPv4 = 0 (not populated)
4869          * - IPv6 = Flow Label[19:0]
4870          * - PPPoE = sessionID[15:0]
4871          * - MPLs = Outer label[19:0]
4872          * - UPAR = Selected[31:0] with bit mask
4873          */
4874         #define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_TUNNEL_ID \
4875                 (UINT32_C(0x2) << 4)
4876         /*
4877          * The {metadata1, metadata0} fields contain the vtag
4878          * information:
4879          * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0],de, vid[11:0]}
4880          * The metadata2 field contains the 32b metadata from the prepended
4881          * header (chdr_data).
4882          */
4883         #define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_CHDR_DATA \
4884                 (UINT32_C(0x3) << 4)
4885         /*
4886          * The {metadata1, metadata0} fields contain the vtag
4887          * information:
4888          * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0], de, vid[11:0]}
4889          * The metadata2 field contains the outer_l3_offset,
4890          * inner_l2_offset, inner_l3_offset, and inner_l4_size.
4891          * - metadata2[8:0] contains the outer_l3_offset.
4892          * - metadata2[17:9] contains the inner_l2_offset.
4893          * - metadata2[26:18] contains the inner_l3_offset.
4894          * - metadata2[31:27] contains the inner_l4_size.
4895          */
4896         #define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_HDR_OFFSET \
4897                 (UINT32_C(0x4) << 4)
4898         #define RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_LAST \
4899                 RX_PKT_V2_CMPL_HI_FLAGS2_META_FORMAT_HDR_OFFSET
4900         /*
4901          * This field indicates the IP type for the inner-most IP header.
4902          * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
4903          * This value is only valid if itype indicates a packet
4904          * with an IP header.
4905          */
4906         #define RX_PKT_V2_CMPL_HI_FLAGS2_IP_TYPE \
4907                 UINT32_C(0x100)
4908         /*
4909          * This indicates that the complete 1's complement checksum was
4910          * calculated for the packet.
4911          */
4912         #define RX_PKT_V2_CMPL_HI_FLAGS2_COMPLETE_CHECKSUM_CALC \
4913                 UINT32_C(0x200)
4914         /*
4915          * This field indicates the status of IP and L4 CS calculations done
4916          * by the chip. The format of this field is indicated by the
4917          * cs_all_ok_mode bit.
4918          */
4919         #define RX_PKT_V2_CMPL_HI_FLAGS2_CS_OK_MASK \
4920                 UINT32_C(0xfc00)
4921         #define RX_PKT_V2_CMPL_HI_FLAGS2_CS_OK_SFT                  10
4922         /*
4923          * This value is the complete 1's complement checksum calculated from
4924          * the start of the outer L3 header to the end of the packet (not
4925          * including the ethernet crc). It is valid when the
4926          * 'complete_checksum_calc' flag is set.
4927          */
4928         #define RX_PKT_V2_CMPL_HI_FLAGS2_COMPLETE_CHECKSUM_MASK \
4929                 UINT32_C(0xffff0000)
4930         #define RX_PKT_V2_CMPL_HI_FLAGS2_COMPLETE_CHECKSUM_SFT      16
4931         /*
4932          * This is data from the CFA block as indicated by the meta_format
4933          * field.
4934          * - meta_format 0 - none - metadata2 = 0 - not valid/not stripped
4935          * - meta_format 1 - act_rec_ptr - metadata2 = {table_scope[5:0],
4936          *   act_rec_ptr[25:0]}
4937          * - meta_format 2 - tunnel_id - metadata2 = tunnel_id[31:0]
4938          * - meta_format 3 - chdr_data - metadata2 = updated_chdr_data[31:0]
4939          * - meta_format 4 - hdr_offsets - metadata2 = hdr_offsets[31:0]
4940          * When vee_cmpl_mode is set in VNIC context, this is the upper 32b
4941          * of the host address from the first BD used to place the packet.
4942          */
4943         uint32_t        metadata2;
4944         uint16_t        errors_v2;
4945         /*
4946          * This value is written by the NIC such that it will be different
4947          * for each pass through the completion queue. The even passes
4948          * will write 1. The odd passes will write 0.
4949          */
4950         #define RX_PKT_V2_CMPL_HI_V2 \
4951                 UINT32_C(0x1)
4952         #define RX_PKT_V2_CMPL_HI_ERRORS_MASK \
4953                 UINT32_C(0xfffe)
4954         #define RX_PKT_V2_CMPL_HI_ERRORS_SFT                               1
4955         /*
4956          * This error indicates that there was some sort of problem with
4957          * the BDs for the packet that was found after part of the
4958          * packet was already placed. The packet should be treated as
4959          * invalid.
4960          */
4961         #define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_MASK \
4962                 UINT32_C(0xe)
4963         #define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_SFT                   1
4964         /* No buffer error */
4965         #define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_NO_BUFFER \
4966                 (UINT32_C(0x0) << 1)
4967         /*
4968          * Did Not Fit: Packet did not fit into packet buffer provided.
4969          * For regular placement, this means the packet did not fit in
4970          * the buffer provided. For HDS and jumbo placement, this means
4971          * that the packet could not be placed into 8 physical buffers
4972          * (if fixed-size buffers are used), or that the packet could
4973          * not be placed in the number of physical buffers configured
4974          * for the VNIC (if variable-size buffers are used)
4975          */
4976         #define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_DID_NOT_FIT \
4977                 (UINT32_C(0x1) << 1)
4978         /*
4979          * Not On Chip: All BDs needed for the packet were not on-chip
4980          * when the packet arrived. For regular placement, this error is
4981          * not valid. For HDS and jumbo placement, this means that not
4982          * enough agg BDs were posted to place the packet.
4983          */
4984         #define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
4985                 (UINT32_C(0x2) << 1)
4986         /*
4987          * Bad Format:
4988          * BDs were not formatted correctly.
4989          */
4990         #define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_BAD_FORMAT \
4991                 (UINT32_C(0x3) << 1)
4992         /*
4993          * Flush:
4994          * There was a bad_format error on the previous operation
4995          */
4996         #define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_FLUSH \
4997                 (UINT32_C(0x5) << 1)
4998         #define RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_LAST \
4999                 RX_PKT_V2_CMPL_HI_ERRORS_BUFFER_ERROR_FLUSH
5000         /*
5001          * This indicates that there was an error in the outer tunnel
5002          * portion of the packet when this field is non-zero.
5003          */
5004         #define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_MASK \
5005                 UINT32_C(0x70)
5006         #define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_SFT                   4
5007         /*
5008          * No additional error occurred on the outer tunnel portion
5009          * of the packet or the packet does not have a outer tunnel.
5010          */
5011         #define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_NO_ERROR \
5012                 (UINT32_C(0x0) << 4)
5013         /*
5014          * Indicates that IP header version does not match expectation
5015          * from L2 Ethertype for IPv4 and IPv6 in the outer tunnel header.
5016          */
5017         #define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_L3_BAD_VERSION \
5018                 (UINT32_C(0x1) << 4)
5019         /*
5020          * Indicates that header length is out of range in the outer
5021          * tunnel header. Valid for IPv4.
5022          */
5023         #define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_L3_BAD_HDR_LEN \
5024                 (UINT32_C(0x2) << 4)
5025         /*
5026          * Indicates that physical packet is shorter than that claimed
5027          * by the outer tunnel l3 header length. Valid for IPv4, or
5028          * IPv6 outer tunnel packets.
5029          */
5030         #define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_IP_TOTAL_ERROR \
5031                 (UINT32_C(0x3) << 4)
5032         /*
5033          * Indicates that the physical packet is shorter than that
5034          * claimed by the outer tunnel UDP header length for a outer
5035          * tunnel UDP packet that is not fragmented.
5036          */
5037         #define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_UDP_TOTAL_ERROR \
5038                 (UINT32_C(0x4) << 4)
5039         /*
5040          * Indicates that the IPv4 TTL or IPv6 hop limit check have
5041          * failed (e.g. TTL = 0) in the outer tunnel header. Valid for
5042          * IPv4, and IPv6.
5043          */
5044         #define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_L3_BAD_TTL \
5045                 (UINT32_C(0x5) << 4)
5046         /*
5047          * Indicates that the IP checksum failed its check in the outer
5048          * tunnel header.
5049          */
5050         #define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_IP_CS_ERROR \
5051                 (UINT32_C(0x6) << 4)
5052         /*
5053          * Indicates that the L4 checksum failed its check in the outer
5054          * tunnel header.
5055          */
5056         #define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_L4_CS_ERROR \
5057                 (UINT32_C(0x7) << 4)
5058         #define RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_LAST \
5059                 RX_PKT_V2_CMPL_HI_ERRORS_OT_PKT_ERROR_OT_L4_CS_ERROR
5060         /*
5061          * This indicates that there was a CRC error on either an FCoE
5062          * or RoCE packet. The itype indicates the packet type.
5063          */
5064         #define RX_PKT_V2_CMPL_HI_ERRORS_CRC_ERROR \
5065                 UINT32_C(0x100)
5066         /*
5067          * This indicates that there was an error in the tunnel portion
5068          * of the packet when this field is non-zero.
5069          */
5070         #define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_MASK \
5071                 UINT32_C(0xe00)
5072         #define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_SFT                    9
5073         /*
5074          * No additional error occurred on the tunnel portion
5075          * of the packet or the packet does not have a tunnel.
5076          */
5077         #define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_NO_ERROR \
5078                 (UINT32_C(0x0) << 9)
5079         /*
5080          * Indicates that IP header version does not match expectation
5081          * from L2 Ethertype for IPv4 and IPv6 in the tunnel header.
5082          */
5083         #define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_L3_BAD_VERSION \
5084                 (UINT32_C(0x1) << 9)
5085         /*
5086          * Indicates that header length is out of range in the tunnel
5087          * header. Valid for IPv4.
5088          */
5089         #define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_L3_BAD_HDR_LEN \
5090                 (UINT32_C(0x2) << 9)
5091         /*
5092          * Indicates that physical packet is shorter than that claimed
5093          * by the tunnel l3 header length. Valid for IPv4, or IPv6 tunnel
5094          * packet packets.
5095          */
5096         #define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_IP_TOTAL_ERROR \
5097                 (UINT32_C(0x3) << 9)
5098         /*
5099          * Indicates that the physical packet is shorter than that claimed
5100          * by the tunnel UDP header length for a tunnel UDP packet that is
5101          * not fragmented.
5102          */
5103         #define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_UDP_TOTAL_ERROR \
5104                 (UINT32_C(0x4) << 9)
5105         /*
5106          * Indicates that the IPv4 TTL or IPv6 hop limit check have failed
5107          * (e.g. TTL = 0) in the tunnel header. Valid for IPv4, and IPv6.
5108          */
5109         #define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL \
5110                 (UINT32_C(0x5) << 9)
5111         /*
5112          * Indicates that the IP checksum failed its check in the tunnel
5113          * header.
5114          */
5115         #define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_IP_CS_ERROR \
5116                 (UINT32_C(0x6) << 9)
5117         /*
5118          * Indicates that the L4 checksum failed its check in the tunnel
5119          * header.
5120          */
5121         #define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_L4_CS_ERROR \
5122                 (UINT32_C(0x7) << 9)
5123         #define RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_LAST \
5124                 RX_PKT_V2_CMPL_HI_ERRORS_T_PKT_ERROR_T_L4_CS_ERROR
5125         /*
5126          * This indicates that there was an error in the inner
5127          * portion of the packet when this
5128          * field is non-zero.
5129          */
5130         #define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_MASK \
5131                 UINT32_C(0xf000)
5132         #define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_SFT                      12
5133         /*
5134          * No additional error occurred on the tunnel portion
5135          * or the packet of the packet does not have a tunnel.
5136          */
5137         #define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_NO_ERROR \
5138                 (UINT32_C(0x0) << 12)
5139         /*
5140          * Indicates that IP header version does not match
5141          * expectation from L2 Ethertype for IPv4 and IPv6 or that
5142          * option other than VFT was parsed on
5143          * FCoE packet.
5144          */
5145         #define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L3_BAD_VERSION \
5146                 (UINT32_C(0x1) << 12)
5147         /*
5148          * indicates that header length is out of range. Valid for
5149          * IPv4 and RoCE
5150          */
5151         #define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L3_BAD_HDR_LEN \
5152                 (UINT32_C(0x2) << 12)
5153         /*
5154          * indicates that the IPv4 TTL or IPv6 hop limit check
5155          * have failed (e.g. TTL = 0). Valid for IPv4, and IPv6
5156          */
5157         #define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L3_BAD_TTL \
5158                 (UINT32_C(0x3) << 12)
5159         /*
5160          * Indicates that physical packet is shorter than that
5161          * claimed by the l3 header length. Valid for IPv4,
5162          * IPv6 packet or RoCE packets.
5163          */
5164         #define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_IP_TOTAL_ERROR \
5165                 (UINT32_C(0x4) << 12)
5166         /*
5167          * Indicates that the physical packet is shorter than that
5168          * claimed by the UDP header length for a UDP packet that is
5169          * not fragmented.
5170          */
5171         #define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_UDP_TOTAL_ERROR \
5172                 (UINT32_C(0x5) << 12)
5173         /*
5174          * Indicates that TCP header length > IP payload. Valid for
5175          * TCP packets only.
5176          */
5177         #define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN \
5178                 (UINT32_C(0x6) << 12)
5179         /* Indicates that TCP header length < 5. Valid for TCP. */
5180         #define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN_TOO_SMALL \
5181                 (UINT32_C(0x7) << 12)
5182         /*
5183          * Indicates that TCP option headers result in a TCP header
5184          * size that does not match data offset in TCP header. Valid
5185          * for TCP.
5186          */
5187         #define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN \
5188                 (UINT32_C(0x8) << 12)
5189         /*
5190          * Indicates that the IP checksum failed its check in the
5191          * inner header.
5192          */
5193         #define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_IP_CS_ERROR \
5194                 (UINT32_C(0x9) << 12)
5195         /*
5196          * Indicates that the L4 checksum failed its check in the
5197          * inner header.
5198          */
5199         #define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L4_CS_ERROR \
5200                 (UINT32_C(0xa) << 12)
5201         #define RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_LAST \
5202                 RX_PKT_V2_CMPL_HI_ERRORS_PKT_ERROR_L4_CS_ERROR
5203         /*
5204          * This is data from the CFA block as indicated by the meta_format
5205          * field.
5206          */
5207         uint16_t        metadata0;
5208         /* When meta_format=1, this value is the VLAN VID. */
5209         #define RX_PKT_V2_CMPL_HI_METADATA0_VID_MASK UINT32_C(0xfff)
5210         #define RX_PKT_V2_CMPL_HI_METADATA0_VID_SFT 0
5211         /* When meta_format=1, this value is the VLAN DE. */
5212         #define RX_PKT_V2_CMPL_HI_METADATA0_DE      UINT32_C(0x1000)
5213         /* When meta_format=1, this value is the VLAN PRI. */
5214         #define RX_PKT_V2_CMPL_HI_METADATA0_PRI_MASK UINT32_C(0xe000)
5215         #define RX_PKT_V2_CMPL_HI_METADATA0_PRI_SFT 13
5216         /*
5217          * The timestamp field contains the 32b timestamp for the packet from
5218          * the MAC.
5219          */
5220         uint32_t        timestamp;
5221 } __rte_packed;
5222
5223 /*
5224  * This TPA completion structure is used on devices where the
5225  * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
5226  */
5227 /* rx_tpa_start_cmpl (size:128b/16B) */
5228 struct rx_tpa_start_cmpl {
5229         uint16_t        flags_type;
5230         /*
5231          * This field indicates the exact type of the completion.
5232          * By convention, the LSB identifies the length of the
5233          * record in 16B units. Even values indicate 16B
5234          * records. Odd values indicate 32B
5235          * records.
5236          */
5237         #define RX_TPA_START_CMPL_TYPE_MASK                UINT32_C(0x3f)
5238         #define RX_TPA_START_CMPL_TYPE_SFT                 0
5239         /*
5240          * RX L2 TPA Start Completion:
5241          * Completion at the beginning of a TPA operation.
5242          * Length = 32B
5243          */
5244         #define RX_TPA_START_CMPL_TYPE_RX_TPA_START          UINT32_C(0x13)
5245         #define RX_TPA_START_CMPL_TYPE_LAST \
5246                 RX_TPA_START_CMPL_TYPE_RX_TPA_START
5247         #define RX_TPA_START_CMPL_FLAGS_MASK               UINT32_C(0xffc0)
5248         #define RX_TPA_START_CMPL_FLAGS_SFT                6
5249         /* This bit will always be '0' for TPA start completions. */
5250         #define RX_TPA_START_CMPL_FLAGS_ERROR               UINT32_C(0x40)
5251         /* This field indicates how the packet was placed in the buffer. */
5252         #define RX_TPA_START_CMPL_FLAGS_PLACEMENT_MASK      UINT32_C(0x380)
5253         #define RX_TPA_START_CMPL_FLAGS_PLACEMENT_SFT       7
5254         /*
5255          * Jumbo:
5256          * TPA Packet was placed using jumbo algorithm. This means
5257          * that the first buffer will be filled with data before
5258          * moving to aggregation buffers. Each aggregation buffer
5259          * will be filled before moving to the next aggregation
5260          * buffer.
5261          */
5262         #define RX_TPA_START_CMPL_FLAGS_PLACEMENT_JUMBO \
5263                 (UINT32_C(0x1) << 7)
5264         /*
5265          * Header/Data Separation:
5266          * Packet was placed using Header/Data separation algorithm.
5267          * The separation location is indicated by the itype field.
5268          */
5269         #define RX_TPA_START_CMPL_FLAGS_PLACEMENT_HDS \
5270                 (UINT32_C(0x2) << 7)
5271         /*
5272          * GRO/Jumbo:
5273          * Packet will be placed using GRO/Jumbo where the first
5274          * packet is filled with data. Subsequent packets will be
5275          * placed such that any one packet does not span two
5276          * aggregation buffers unless it starts at the beginning of
5277          * an aggregation buffer.
5278          */
5279         #define RX_TPA_START_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
5280                 (UINT32_C(0x5) << 7)
5281         /*
5282          * GRO/Header-Data Separation:
5283          * Packet will be placed using GRO/HDS where the header
5284          * is in the first packet.
5285          * Payload of each packet will be
5286          * placed such that any one packet does not span two
5287          * aggregation buffers unless it starts at the beginning of
5288          * an aggregation buffer.
5289          */
5290         #define RX_TPA_START_CMPL_FLAGS_PLACEMENT_GRO_HDS \
5291                 (UINT32_C(0x6) << 7)
5292         #define RX_TPA_START_CMPL_FLAGS_PLACEMENT_LAST \
5293                 RX_TPA_START_CMPL_FLAGS_PLACEMENT_GRO_HDS
5294         /* This bit is '1' if the RSS field in this completion is valid. */
5295         #define RX_TPA_START_CMPL_FLAGS_RSS_VALID           UINT32_C(0x400)
5296         /* unused is 1 b */
5297         #define RX_TPA_START_CMPL_FLAGS_UNUSED              UINT32_C(0x800)
5298         /*
5299          * This value indicates what the inner packet determined for the
5300          * packet was.
5301          */
5302         #define RX_TPA_START_CMPL_FLAGS_ITYPE_MASK          UINT32_C(0xf000)
5303         #define RX_TPA_START_CMPL_FLAGS_ITYPE_SFT           12
5304         /*
5305          * TCP Packet:
5306          * Indicates that the packet was IP and TCP.
5307          */
5308         #define RX_TPA_START_CMPL_FLAGS_ITYPE_TCP \
5309                 (UINT32_C(0x2) << 12)
5310         #define RX_TPA_START_CMPL_FLAGS_ITYPE_LAST \
5311                 RX_TPA_START_CMPL_FLAGS_ITYPE_TCP
5312         /*
5313          * This value indicates the amount of packet data written to the
5314          * buffer the opaque field in this completion corresponds to.
5315          */
5316         uint16_t        len;
5317         /*
5318          * This is a copy of the opaque field from the RX BD this completion
5319          * corresponds to.
5320          */
5321         uint32_t        opaque;
5322         /*
5323          * This value is written by the NIC such that it will be different
5324          * for each pass through the completion queue. The even passes
5325          * will write 1. The odd passes will write 0.
5326          */
5327         uint8_t v1;
5328         /*
5329          * This value is written by the NIC such that it will be different
5330          * for each pass through the completion queue. The even passes
5331          * will write 1. The odd passes will write 0.
5332          */
5333         #define RX_TPA_START_CMPL_V1 UINT32_C(0x1)
5334         #define RX_TPA_START_CMPL_LAST RX_TPA_START_CMPL_V1
5335         /*
5336          * This is the RSS hash type for the packet. The value is packed
5337          * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
5338          *
5339          * The value of tuple_extrac_op provides the information about
5340          * what fields the hash was computed on.
5341          * * 0: The RSS hash was computed over source IP address,
5342          * destination IP address, source port, and destination port of inner
5343          * IP and TCP or UDP headers. Note: For non-tunneled packets,
5344          * the packet headers are considered inner packet headers for the RSS
5345          * hash computation purpose.
5346          * * 1: The RSS hash was computed over source IP address and destination
5347          * IP address of inner IP header. Note: For non-tunneled packets,
5348          * the packet headers are considered inner packet headers for the RSS
5349          * hash computation purpose.
5350          * * 2: The RSS hash was computed over source IP address,
5351          * destination IP address, source port, and destination port of
5352          * IP and TCP or UDP headers of outer tunnel headers.
5353          * Note: For non-tunneled packets, this value is not applicable.
5354          * * 3: The RSS hash was computed over source IP address and
5355          * destination IP address of IP header of outer tunnel headers.
5356          * Note: For non-tunneled packets, this value is not applicable.
5357          *
5358          * Note that 4-tuples values listed above are applicable
5359          * for layer 4 protocols supported and enabled for RSS in the hardware,
5360          * HWRM firmware, and drivers. For example, if RSS hash is supported and
5361          * enabled for TCP traffic only, then the values of tuple_extract_op
5362          * corresponding to 4-tuples are only valid for TCP traffic.
5363          */
5364         uint8_t rss_hash_type;
5365         /*
5366          * This is the aggregation ID that the completion is associated
5367          * with. Use this number to correlate the TPA start completion
5368          * with the TPA end completion.
5369          */
5370         uint16_t        agg_id;
5371         /* unused2 is 9 b */
5372         #define RX_TPA_START_CMPL_UNUSED2_MASK UINT32_C(0x1ff)
5373         #define RX_TPA_START_CMPL_UNUSED2_SFT 0
5374         /*
5375          * This is the aggregation ID that the completion is associated
5376          * with. Use this number to correlate the TPA start completion
5377          * with the TPA end completion.
5378          */
5379         #define RX_TPA_START_CMPL_AGG_ID_MASK UINT32_C(0xfe00)
5380         #define RX_TPA_START_CMPL_AGG_ID_SFT  9
5381         /*
5382          * This value is the RSS hash value calculated for the packet
5383          * based on the mode bits and key value in the VNIC.
5384          */
5385         uint32_t        rss_hash;
5386 } __rte_packed;
5387
5388 /*
5389  * Last 16 bytes of rx_tpa_start_cmpl.
5390  *
5391  * This TPA completion structure is used on devices where the
5392  * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
5393  */
5394 /* rx_tpa_start_cmpl_hi (size:128b/16B) */
5395 struct rx_tpa_start_cmpl_hi {
5396         uint32_t        flags2;
5397         /*
5398          * This indicates that the ip checksum was calculated for the
5399          * inner packet and that the sum passed for all segments
5400          * included in the aggregation.
5401          */
5402         #define RX_TPA_START_CMPL_FLAGS2_IP_CS_CALC       UINT32_C(0x1)
5403         /*
5404          * This indicates that the TCP, UDP or ICMP checksum was
5405          * calculated for the inner packet and that the sum passed
5406          * for all segments included in the aggregation.
5407          */
5408         #define RX_TPA_START_CMPL_FLAGS2_L4_CS_CALC       UINT32_C(0x2)
5409         /*
5410          * This indicates that the ip checksum was calculated for the
5411          * tunnel header and that the sum passed for all segments
5412          * included in the aggregation.
5413          */
5414         #define RX_TPA_START_CMPL_FLAGS2_T_IP_CS_CALC     UINT32_C(0x4)
5415         /*
5416          * This indicates that the UDP checksum was
5417          * calculated for the tunnel packet and that the sum passed for
5418          * all segments included in the aggregation.
5419          */
5420         #define RX_TPA_START_CMPL_FLAGS2_T_L4_CS_CALC     UINT32_C(0x8)
5421         /* This value indicates what format the metadata field is. */
5422         #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_MASK UINT32_C(0xf0)
5423         #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_SFT  4
5424         /* No metadata information. Value is zero. */
5425         #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_NONE \
5426                 (UINT32_C(0x0) << 4)
5427         /*
5428          * The metadata field contains the VLAN tag and TPID value.
5429          * - metadata[11:0] contains the vlan VID value.
5430          * - metadata[12] contains the vlan DE value.
5431          * - metadata[15:13] contains the vlan PRI value.
5432          * - metadata[31:16] contains the vlan TPID value.
5433          */
5434         #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_VLAN \
5435                 (UINT32_C(0x1) << 4)
5436         #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_LAST \
5437                 RX_TPA_START_CMPL_FLAGS2_META_FORMAT_VLAN
5438         /*
5439          * This field indicates the IP type for the inner-most IP header.
5440          * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
5441          */
5442         #define RX_TPA_START_CMPL_FLAGS2_IP_TYPE          UINT32_C(0x100)
5443         /*
5444          * This is data from the CFA block as indicated by the meta_format
5445          * field.
5446          */
5447         uint32_t        metadata;
5448         /* When meta_format=1, this value is the VLAN VID. */
5449         #define RX_TPA_START_CMPL_METADATA_VID_MASK UINT32_C(0xfff)
5450         #define RX_TPA_START_CMPL_METADATA_VID_SFT  0
5451         /* When meta_format=1, this value is the VLAN DE. */
5452         #define RX_TPA_START_CMPL_METADATA_DE       UINT32_C(0x1000)
5453         /* When meta_format=1, this value is the VLAN PRI. */
5454         #define RX_TPA_START_CMPL_METADATA_PRI_MASK UINT32_C(0xe000)
5455         #define RX_TPA_START_CMPL_METADATA_PRI_SFT  13
5456         /* When meta_format=1, this value is the VLAN TPID. */
5457         #define RX_TPA_START_CMPL_METADATA_TPID_MASK UINT32_C(0xffff0000)
5458         #define RX_TPA_START_CMPL_METADATA_TPID_SFT 16
5459         uint16_t        v2;
5460         /*
5461          * This value is written by the NIC such that it will be different
5462          * for each pass through the completion queue. The even passes
5463          * will write 1. The odd passes will write 0.
5464          */
5465         #define RX_TPA_START_CMPL_V2     UINT32_C(0x1)
5466         /*
5467          * This field identifies the CFA action rule that was used for this
5468          * packet.
5469          */
5470         uint16_t        cfa_code;
5471         /*
5472          * This is the size in bytes of the inner most L4 header.
5473          * This can be subtracted from the payload_offset to determine
5474          * the start of the inner most L4 header.
5475          */
5476         uint32_t        inner_l4_size_inner_l3_offset_inner_l2_offset_outer_l3_offset;
5477         /*
5478          * This is the offset from the beginning of the packet in bytes for
5479          * the outer L3 header. If there is no outer L3 header, then this
5480          * value is zero.
5481          */
5482         #define RX_TPA_START_CMPL_OUTER_L3_OFFSET_MASK UINT32_C(0x1ff)
5483         #define RX_TPA_START_CMPL_OUTER_L3_OFFSET_SFT 0
5484         /*
5485          * This is the offset from the beginning of the packet in bytes for
5486          * the inner most L2 header.
5487          */
5488         #define RX_TPA_START_CMPL_INNER_L2_OFFSET_MASK UINT32_C(0x3fe00)
5489         #define RX_TPA_START_CMPL_INNER_L2_OFFSET_SFT 9
5490         /*
5491          * This is the offset from the beginning of the packet in bytes for
5492          * the inner most L3 header.
5493          */
5494         #define RX_TPA_START_CMPL_INNER_L3_OFFSET_MASK UINT32_C(0x7fc0000)
5495         #define RX_TPA_START_CMPL_INNER_L3_OFFSET_SFT 18
5496         /*
5497          * This is the size in bytes of the inner most L4 header.
5498          * This can be subtracted from the payload_offset to determine
5499          * the start of the inner most L4 header.
5500          */
5501         #define RX_TPA_START_CMPL_INNER_L4_SIZE_MASK  UINT32_C(0xf8000000)
5502         #define RX_TPA_START_CMPL_INNER_L4_SIZE_SFT   27
5503 } __rte_packed;
5504
5505 /*
5506  * This TPA completion structure is used on devices where the
5507  * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
5508  * RX L2 TPA Start V2 Completion Record (32 bytes split to 2 16-byte
5509  * struct)
5510  */
5511 /* rx_tpa_start_v2_cmpl (size:128b/16B) */
5512 struct rx_tpa_start_v2_cmpl {
5513         uint16_t        flags_type;
5514         /*
5515          * This field indicates the exact type of the completion.
5516          * By convention, the LSB identifies the length of the
5517          * record in 16B units. Even values indicate 16B
5518          * records. Odd values indicate 32B
5519          * records.
5520          */
5521         #define RX_TPA_START_V2_CMPL_TYPE_MASK \
5522                 UINT32_C(0x3f)
5523         #define RX_TPA_START_V2_CMPL_TYPE_SFT                       0
5524         /*
5525          * RX L2 TPA Start V2 Completion:
5526          * Completion at the beginning of a TPA operation.
5527          * Length = 32B
5528          * This is the new version of the RX_TPA_START completion used
5529          * in SR2 and later chips.
5530          */
5531         #define RX_TPA_START_V2_CMPL_TYPE_RX_TPA_START_V2 \
5532                 UINT32_C(0xd)
5533         #define RX_TPA_START_V2_CMPL_TYPE_LAST \
5534                 RX_TPA_START_V2_CMPL_TYPE_RX_TPA_START_V2
5535         #define RX_TPA_START_V2_CMPL_FLAGS_MASK \
5536                 UINT32_C(0xffc0)
5537         #define RX_TPA_START_V2_CMPL_FLAGS_SFT                      6
5538         /*
5539          * When this bit is '1', it indicates a packet that has an error
5540          * of some type. Type of error is indicated in error_flags.
5541          */
5542         #define RX_TPA_START_V2_CMPL_FLAGS_ERROR \
5543                 UINT32_C(0x40)
5544         /* This field indicates how the packet was placed in the buffer. */
5545         #define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_MASK \
5546                 UINT32_C(0x380)
5547         #define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_SFT             7
5548         /*
5549          * Jumbo:
5550          * TPA Packet was placed using jumbo algorithm. This means
5551          * that the first buffer will be filled with data before
5552          * moving to aggregation buffers. Each aggregation buffer
5553          * will be filled before moving to the next aggregation
5554          * buffer.
5555          */
5556         #define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_JUMBO \
5557                 (UINT32_C(0x1) << 7)
5558         /*
5559          * Header/Data Separation:
5560          * Packet was placed using Header/Data separation algorithm.
5561          * The separation location is indicated by the itype field.
5562          */
5563         #define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_HDS \
5564                 (UINT32_C(0x2) << 7)
5565         /*
5566          * IOC/Jumbo:
5567          * Packet will be placed using In-Order Completion/Jumbo where
5568          * the first packet of the aggregation is placed using Jumbo
5569          * Placement. Subsequent packets will be placed such that each
5570          * packet starts at the beginning of an aggregation buffer.
5571          */
5572         #define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_IOC_JUMBO \
5573                 (UINT32_C(0x4) << 7)
5574         /*
5575          * GRO/Jumbo:
5576          * Packet will be placed using GRO/Jumbo where the first
5577          * packet is filled with data. Subsequent packets will be
5578          * placed such that any one packet does not span two
5579          * aggregation buffers unless it starts at the beginning of
5580          * an aggregation buffer.
5581          */
5582         #define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
5583                 (UINT32_C(0x5) << 7)
5584         /*
5585          * GRO/Header-Data Separation:
5586          * Packet will be placed using GRO/HDS where the header
5587          * is in the first packet.
5588          * Payload of each packet will be
5589          * placed such that any one packet does not span two
5590          * aggregation buffers unless it starts at the beginning of
5591          * an aggregation buffer.
5592          */
5593         #define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_GRO_HDS \
5594                 (UINT32_C(0x6) << 7)
5595         /*
5596          * IOC/Header-Data Separation:
5597          * Packet will be placed using In-Order Completion/HDS where
5598          * the header is in the first packet buffer. Payload of each
5599          * packet will be placed such that each packet starts at the
5600          * beginning of an aggregation buffer.
5601          */
5602         #define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_IOC_HDS \
5603                 (UINT32_C(0x7) << 7)
5604         #define RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_LAST \
5605                 RX_TPA_START_V2_CMPL_FLAGS_PLACEMENT_IOC_HDS
5606         /* This bit is '1' if the RSS field in this completion is valid. */
5607         #define RX_TPA_START_V2_CMPL_FLAGS_RSS_VALID \
5608                 UINT32_C(0x400)
5609         /*
5610          * This bit is '1' if metadata has been added to the end of the
5611          * packet in host memory. Metadata starts at the first 32B boundary
5612          * after the end of the packet for regular and jumbo placement. It
5613          * starts at the first 32B boundary after the end of the header for
5614          * HDS placement. The length of the metadata is indicated in the
5615          * metadata itself.
5616          */
5617         #define RX_TPA_START_V2_CMPL_FLAGS_PKT_METADATA_PRESENT \
5618                 UINT32_C(0x800)
5619         /*
5620          * This value indicates what the inner packet determined for the
5621          * packet was.
5622          */
5623         #define RX_TPA_START_V2_CMPL_FLAGS_ITYPE_MASK \
5624                 UINT32_C(0xf000)
5625         #define RX_TPA_START_V2_CMPL_FLAGS_ITYPE_SFT                 12
5626         /*
5627          * TCP Packet:
5628          * Indicates that the packet was IP and TCP.
5629          */
5630         #define RX_TPA_START_V2_CMPL_FLAGS_ITYPE_TCP \
5631                 (UINT32_C(0x2) << 12)
5632         #define RX_TPA_START_V2_CMPL_FLAGS_ITYPE_LAST \
5633                 RX_TPA_START_V2_CMPL_FLAGS_ITYPE_TCP
5634         /*
5635          * This value indicates the amount of packet data written to the
5636          * buffer the opaque field in this completion corresponds to.
5637          */
5638         uint16_t        len;
5639         /*
5640          * This is a copy of the opaque field from the RX BD this completion
5641          * corresponds to. If the VNIC is configured to not use an Rx BD for
5642          * the TPA Start completion, then this is a copy of the opaque field
5643          * from the first BD used to place the TPA Start packet.
5644          */
5645         uint32_t        opaque;
5646         /*
5647          * This value is written by the NIC such that it will be different
5648          * for each pass through the completion queue. The even passes
5649          * will write 1. The odd passes will write 0.
5650          */
5651         uint8_t v1;
5652         /*
5653          * This value is written by the NIC such that it will be different
5654          * for each pass through the completion queue. The even passes
5655          * will write 1. The odd passes will write 0.
5656          */
5657         #define RX_TPA_START_V2_CMPL_V1 UINT32_C(0x1)
5658         #define RX_TPA_START_V2_CMPL_LAST RX_TPA_START_V2_CMPL_V1
5659         /*
5660          * This is the RSS hash type for the packet. The value is packed
5661          * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
5662          *
5663          * The value of tuple_extrac_op provides the information about
5664          * what fields the hash was computed on.
5665          * * 0: The RSS hash was computed over source IP address,
5666          * destination IP address, source port, and destination port of inner
5667          * IP and TCP or UDP headers. Note: For non-tunneled packets,
5668          * the packet headers are considered inner packet headers for the RSS
5669          * hash computation purpose.
5670          * * 1: The RSS hash was computed over source IP address and destination
5671          * IP address of inner IP header. Note: For non-tunneled packets,
5672          * the packet headers are considered inner packet headers for the RSS
5673          * hash computation purpose.
5674          * * 2: The RSS hash was computed over source IP address,
5675          * destination IP address, source port, and destination port of
5676          * IP and TCP or UDP headers of outer tunnel headers.
5677          * Note: For non-tunneled packets, this value is not applicable.
5678          * * 3: The RSS hash was computed over source IP address and
5679          * destination IP address of IP header of outer tunnel headers.
5680          * Note: For non-tunneled packets, this value is not applicable.
5681          *
5682          * Note that 4-tuples values listed above are applicable
5683          * for layer 4 protocols supported and enabled for RSS in the hardware,
5684          * HWRM firmware, and drivers. For example, if RSS hash is supported and
5685          * enabled for TCP traffic only, then the values of tuple_extract_op
5686          * corresponding to 4-tuples are only valid for TCP traffic.
5687          */
5688         uint8_t rss_hash_type;
5689         /*
5690          * This is the aggregation ID that the completion is associated
5691          * with. Use this number to correlate the TPA start completion
5692          * with the TPA end completion.
5693          */
5694         uint16_t        agg_id;
5695         /*
5696          * This is the aggregation ID that the completion is associated
5697          * with. Use this number to correlate the TPA start completion
5698          * with the TPA end completion.
5699          */
5700         #define RX_TPA_START_V2_CMPL_AGG_ID_MASK                UINT32_C(0xfff)
5701         #define RX_TPA_START_V2_CMPL_AGG_ID_SFT                 0
5702         #define RX_TPA_START_V2_CMPL_METADATA1_MASK \
5703                 UINT32_C(0xf000)
5704         #define RX_TPA_START_V2_CMPL_METADATA1_SFT              12
5705         /* When meta_format != 0, this value is the VLAN TPID_SEL. */
5706         #define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_MASK \
5707                 UINT32_C(0x7000)
5708         #define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_SFT      12
5709         /* 0x88a8 */
5710         #define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_TPID88A8 \
5711                 (UINT32_C(0x0) << 12)
5712         /* 0x8100 */
5713         #define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_TPID8100 \
5714                 (UINT32_C(0x1) << 12)
5715         /* 0x9100 */
5716         #define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_TPID9100 \
5717                 (UINT32_C(0x2) << 12)
5718         /* 0x9200 */
5719         #define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_TPID9200 \
5720                 (UINT32_C(0x3) << 12)
5721         /* 0x9300 */
5722         #define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_TPID9300 \
5723                 (UINT32_C(0x4) << 12)
5724         /* Value programmed in CFA VLANTPID register. */
5725         #define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_TPIDCFG \
5726                 (UINT32_C(0x5) << 12)
5727         #define RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_LAST \
5728                 RX_TPA_START_V2_CMPL_METADATA1_TPID_SEL_TPIDCFG
5729         /* When meta_format != 0, this value is the VLAN valid. */
5730         #define RX_TPA_START_V2_CMPL_METADATA1_VALID \
5731                 UINT32_C(0x8000)
5732         /*
5733          * This value is the RSS hash value calculated for the packet
5734          * based on the mode bits and key value in the VNIC.
5735          * When vee_cmpl_mode is set in VNIC context, this is the lower
5736          * 32b of the host address from the first BD used to place the packet.
5737          */
5738         uint32_t        rss_hash;
5739 } __rte_packed;
5740
5741 /*
5742  * Last 16 bytes of RX L2 TPA Start V2 Completion Record
5743  *
5744  * This TPA completion structure is used on devices where the
5745  * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
5746  */
5747 /* rx_tpa_start_v2_cmpl_hi (size:128b/16B) */
5748 struct rx_tpa_start_v2_cmpl_hi {
5749         uint32_t        flags2;
5750         /* This indicates that the aggregation was done using GRO rules. */
5751         #define RX_TPA_START_V2_CMPL_FLAGS2_AGG_GRO \
5752                 UINT32_C(0x4)
5753         /*
5754          * When this bit is '0', the cs_ok field has the following definition:-
5755          * ip_cs_ok[2:0] = The number of header groups with a valid IP checksum
5756          * in the delivered packet, counted from the outer-most header group to
5757          * the inner-most header group, stopping at the first error. -
5758          * l4_cs_ok[5:3] = The number of header groups with a valid L4 checksum
5759          * in the delivered packet, counted from the outer-most header group to
5760          * the inner-most header group, stopping at the first error. When this
5761          * bit is '1', the cs_ok field has the following definition: -
5762          * hdr_cnt[2:0] = The number of header groups that were parsed by the
5763          * chip and passed in the delivered packet. - ip_cs_all_ok[3] =This bit
5764          * will be '1' if all the parsed header groups with an IP checksum are
5765          * valid. - l4_cs_all_ok[4] = This bit will be '1' if all the parsed
5766          * header groups with an L4 checksum are valid.
5767          */
5768         #define RX_TPA_START_V2_CMPL_FLAGS2_CS_ALL_OK_MODE \
5769                 UINT32_C(0x8)
5770         /* This value indicates what format the metadata field is. */
5771         #define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_MASK \
5772                 UINT32_C(0xf0)
5773         #define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_SFT            4
5774         /* There is no metadata information. Values are zero. */
5775         #define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_NONE \
5776                 (UINT32_C(0x0) << 4)
5777         /*
5778          * The {metadata1, metadata0} fields contain the vtag
5779          * information: - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0],
5780          * de, vid[11:0]} The metadata2 field contains the table scope
5781          * and action record pointer. - metadata2[25:0] contains the
5782          * action record pointer. - metadata2[31:26] contains the table
5783          * scope.
5784          */
5785         #define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_ACT_REC_PTR \
5786                 (UINT32_C(0x1) << 4)
5787         /*
5788          * The {metadata1, metadata0} fields contain the vtag
5789          * information:
5790          * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0], de, vid[11:0]}
5791          * The metadata2 field contains the Tunnel ID
5792          * value, justified to LSB. i
5793          * - VXLAN = VNI[23:0] -> VXLAN Network ID
5794          * - Geneve (NGE) = VNI[23:0] a-> Virtual Network Identifier
5795          * - NVGRE = TNI[23:0] -> Tenant Network ID
5796          * - GRE = KEY[31:0] -> key field with bit mask. zero if K=0
5797          * - IPv4 = 0 (not populated)
5798          * - IPv6 = Flow Label[19:0]
5799          * - PPPoE = sessionID[15:0]
5800          * - MPLs = Outer label[19:0]
5801          * - UPAR = Selected[31:0] with bit mask
5802          */
5803         #define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_TUNNEL_ID \
5804                 (UINT32_C(0x2) << 4)
5805         /*
5806          * The {metadata1, metadata0} fields contain the vtag
5807          * information:
5808          * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0],de, vid[11:0]}
5809          * The metadata2 field contains the 32b metadata from the prepended
5810          * header (chdr_data).
5811          */
5812         #define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_CHDR_DATA \
5813                 (UINT32_C(0x3) << 4)
5814         /*
5815          * The {metadata1, metadata0} fields contain the vtag
5816          * information:
5817          * - vtag[19:0] = {valid, tpid_sel[2:0], pri[2:0], de, vid[11:0]}
5818          * The metadata2 field contains the outer_l3_offset,
5819          * inner_l2_offset, inner_l3_offset, and inner_l4_size.
5820          * - metadata2[8:0] contains the outer_l3_offset.
5821          * - metadata2[17:9] contains the inner_l2_offset.
5822          * - metadata2[26:18] contains the inner_l3_offset.
5823          * - metadata2[31:27] contains the inner_l4_size.
5824          */
5825         #define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET \
5826                 (UINT32_C(0x4) << 4)
5827         #define RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_LAST \
5828                 RX_TPA_START_V2_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET
5829         /*
5830          * This field indicates the IP type for the inner-most IP header.
5831          * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
5832          * This value is only valid if itype indicates a packet
5833          * with an IP header.
5834          */
5835         #define RX_TPA_START_V2_CMPL_FLAGS2_IP_TYPE \
5836                 UINT32_C(0x100)
5837         /*
5838          * This indicates that the complete 1's complement checksum was
5839          * calculated for the packet in the affregation.
5840          */
5841         #define RX_TPA_START_V2_CMPL_FLAGS2_COMPLETE_CHECKSUM_CALC \
5842                 UINT32_C(0x200)
5843         /*
5844          * This field indicates the status of IP and L4 CS calculations done
5845          * by the chip. The format of this field is indicated by the
5846          * cs_all_ok_mode bit.
5847          * CS status for TPA packets is always valid. This means that "all_ok"
5848          * status will always be set. The ok count status will be set
5849          * appropriately for the packet header, such that all existing CS
5850          * values are ok.
5851          */
5852         #define RX_TPA_START_V2_CMPL_FLAGS2_CS_OK_MASK \
5853                 UINT32_C(0xfc00)
5854         #define RX_TPA_START_V2_CMPL_FLAGS2_CS_OK_SFT                  10
5855         /*
5856          * This value is the complete 1's complement checksum calculated from
5857          * the start of the outer L3 header to the end of the packet (not
5858          * including the ethernet crc). It is valid when the
5859          * 'complete_checksum_calc' flag is set. For TPA Start completions,
5860          * the complete checksum is calculated for the first packet in the
5861          * aggregation only.
5862          */
5863         #define RX_TPA_START_V2_CMPL_FLAGS2_COMPLETE_CHECKSUM_MASK \
5864                 UINT32_C(0xffff0000)
5865         #define RX_TPA_START_V2_CMPL_FLAGS2_COMPLETE_CHECKSUM_SFT      16
5866         /*
5867          * This is data from the CFA block as indicated by the meta_format
5868          * field.
5869          * - meta_format 0 - none - metadata2 = 0 - not valid/not stripped
5870          * - meta_format 1 - act_rec_ptr - metadata2 = {table_scope[5:0],
5871          *   act_rec_ptr[25:0]}
5872          * - meta_format 2 - tunnel_id - metadata2 = tunnel_id[31:0]
5873          * - meta_format 3 - chdr_data - metadata2 = updated_chdr_data[31:0]
5874          * - meta_format 4 - hdr_offsets - metadata2 = hdr_offsets[31:0]
5875          * When vee_cmpl_mode is set in VNIC context, this is the upper 32b
5876          * of the host address from the first BD used to place the packet.
5877          */
5878         uint32_t        metadata2;
5879         uint16_t        errors_v2;
5880         /*
5881          * This value is written by the NIC such that it will be different
5882          * for each pass through the completion queue. The even passes
5883          * will write 1. The odd passes will write 0.
5884          */
5885         #define RX_TPA_START_V2_CMPL_V2 \
5886                 UINT32_C(0x1)
5887         #define RX_TPA_START_V2_CMPL_ERRORS_MASK \
5888                 UINT32_C(0xfffe)
5889         #define RX_TPA_START_V2_CMPL_ERRORS_SFT                     1
5890         /*
5891          * This error indicates that there was some sort of problem with
5892          * the BDs for the packetThe packet should be treated as
5893          * invalid.
5894          */
5895         #define RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_MASK \
5896                 UINT32_C(0xe)
5897         #define RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_SFT         1
5898         /* No buffer error */
5899         #define RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
5900                 (UINT32_C(0x0) << 1)
5901         /*
5902          * Did Not Fit:
5903          * Packet did not fit into packet buffer provided. This means
5904          * that the TPA Start packet was too big to be placed into the
5905          * per-packet maximum number of physical buffers configured for
5906          * the VNIC, or that it was too big to be placed into the
5907          * per-aggregation maximum number of physical buffers configured
5908          * for the VNIC. This error only occurs when the VNIC is
5909          * configured for variable size receive buffers.
5910          */
5911         #define RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_DID_NOT_FIT \
5912                 (UINT32_C(0x1) << 1)
5913         /*
5914          * Bad Format:
5915          * BDs were not formatted correctly.
5916          */
5917         #define RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
5918                 (UINT32_C(0x3) << 1)
5919         /*
5920          * Flush:
5921          * There was a bad_format error on the previous operation
5922          */
5923         #define RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
5924                 (UINT32_C(0x5) << 1)
5925         #define RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_LAST \
5926                 RX_TPA_START_V2_CMPL_ERRORS_BUFFER_ERROR_FLUSH
5927         /*
5928          * This is data from the CFA block as indicated by the meta_format
5929          * field.
5930          */
5931         uint16_t        metadata0;
5932         /* When meta_format != 0, this value is the VLAN VID. */
5933         #define RX_TPA_START_V2_CMPL_METADATA0_VID_MASK UINT32_C(0xfff)
5934         #define RX_TPA_START_V2_CMPL_METADATA0_VID_SFT 0
5935         /* When meta_format != 0, this value is the VLAN DE. */
5936         #define RX_TPA_START_V2_CMPL_METADATA0_DE      UINT32_C(0x1000)
5937         /* When meta_format != 0, this value is the VLAN PRI. */
5938         #define RX_TPA_START_V2_CMPL_METADATA0_PRI_MASK UINT32_C(0xe000)
5939         #define RX_TPA_START_V2_CMPL_METADATA0_PRI_SFT 13
5940         /*
5941          * This field contains the outer_l3_offset, inner_l2_offset,
5942          * inner_l3_offset, and inner_l4_size.
5943          *
5944          * hdr_offsets[8:0] contains the outer_l3_offset.
5945          * hdr_offsets[17:9] contains the inner_l2_offset.
5946          * hdr_offsets[26:18] contains the inner_l3_offset.
5947          * hdr_offsets[31:27] contains the inner_l4_size.
5948          */
5949         uint32_t        hdr_offsets;
5950 } __rte_packed;
5951
5952 /*
5953  * This TPA completion structure is used on devices where the
5954  * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
5955  */
5956 /* rx_tpa_end_cmpl (size:128b/16B) */
5957 struct rx_tpa_end_cmpl {
5958         uint16_t        flags_type;
5959         /*
5960          * This field indicates the exact type of the completion.
5961          * By convention, the LSB identifies the length of the
5962          * record in 16B units. Even values indicate 16B
5963          * records. Odd values indicate 32B
5964          * records.
5965          */
5966         #define RX_TPA_END_CMPL_TYPE_MASK                      UINT32_C(0x3f)
5967         #define RX_TPA_END_CMPL_TYPE_SFT                       0
5968         /*
5969          * RX L2 TPA End Completion:
5970          * Completion at the end of a TPA operation.
5971          * Length = 32B
5972          */
5973         #define RX_TPA_END_CMPL_TYPE_RX_TPA_END                  UINT32_C(0x15)
5974         #define RX_TPA_END_CMPL_TYPE_LAST \
5975                 RX_TPA_END_CMPL_TYPE_RX_TPA_END
5976         #define RX_TPA_END_CMPL_FLAGS_MASK                     UINT32_C(0xffc0)
5977         #define RX_TPA_END_CMPL_FLAGS_SFT                      6
5978         /*
5979          * When this bit is '1', it indicates a packet that has an
5980          * error of some type. Type of error is indicated in
5981          * error_flags.
5982          */
5983         #define RX_TPA_END_CMPL_FLAGS_ERROR                     UINT32_C(0x40)
5984         /* This field indicates how the packet was placed in the buffer. */
5985         #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_MASK            UINT32_C(0x380)
5986         #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_SFT             7
5987         /*
5988          * Jumbo:
5989          * TPA Packet was placed using jumbo algorithm. This means
5990          * that the first buffer will be filled with data before
5991          * moving to aggregation buffers. Each aggregation buffer
5992          * will be filled before moving to the next aggregation
5993          * buffer.
5994          */
5995         #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_JUMBO \
5996                 (UINT32_C(0x1) << 7)
5997         /*
5998          * Header/Data Separation:
5999          * Packet was placed using Header/Data separation algorithm.
6000          * The separation location is indicated by the itype field.
6001          */
6002         #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_HDS \
6003                 (UINT32_C(0x2) << 7)
6004         /*
6005          * IOC/Jumbo:
6006          * Packet will be placed using In-Order Completion/Jumbo where
6007          * the first packet of the aggregation is placed using Jumbo
6008          * Placement. Subsequent packets will be placed such that each
6009          * packet starts at the beginning of an aggregation buffer.
6010          */
6011         #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_IOC_JUMBO \
6012                 (UINT32_C(0x4) << 7)
6013         /*
6014          * GRO/Jumbo:
6015          * Packet will be placed using GRO/Jumbo where the first
6016          * packet is filled with data. Subsequent packets will be
6017          * placed such that any one packet does not span two
6018          * aggregation buffers unless it starts at the beginning of
6019          * an aggregation buffer.
6020          */
6021         #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
6022                 (UINT32_C(0x5) << 7)
6023         /*
6024          * GRO/Header-Data Separation:
6025          * Packet will be placed using GRO/HDS where the header
6026          * is in the first packet.
6027          * Payload of each packet will be
6028          * placed such that any one packet does not span two
6029          * aggregation buffers unless it starts at the beginning of
6030          * an aggregation buffer.
6031          */
6032         #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_GRO_HDS \
6033                 (UINT32_C(0x6) << 7)
6034         /*
6035          * IOC/Header-Data Separation:
6036          * Packet will be placed using In-Order Completion/HDS where
6037          * the header is in the first packet buffer. Payload of each
6038          * packet will be placed such that each packet starts at the
6039          * beginning of an aggregation buffer.
6040          */
6041         #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_IOC_HDS \
6042                 (UINT32_C(0x7) << 7)
6043         #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_LAST \
6044                 RX_TPA_END_CMPL_FLAGS_PLACEMENT_IOC_HDS
6045         /* unused is 1 b */
6046         #define RX_TPA_END_CMPL_FLAGS_UNUSED                    UINT32_C(0x400)
6047         /*
6048          * This bit is '1' if metadata has been added to the end of the
6049          * packet in host memory. Metadata starts at the first 32B boundary
6050          * after the end of the packet for regular and jumbo placement.
6051          * It starts at the first 32B boundary after the end of the header
6052          * for HDS placement. The length of the metadata is indicated in the
6053          * metadata itself.
6054          */
6055         #define RX_TPA_END_CMPL_FLAGS_PKT_METADATA_PRESENT      UINT32_C(0x800)
6056         /*
6057          * This value indicates what the inner packet determined for the
6058          * packet was.
6059          * - 2 TCP Packet
6060          *     Indicates that the packet was IP and TCP. This indicates
6061          *     that the ip_cs field is valid and that the tcp_udp_cs
6062          *     field is valid and contains the TCP checksum.
6063          *     This also indicates that the payload_offset field is valid.
6064          */
6065         #define RX_TPA_END_CMPL_FLAGS_ITYPE_MASK \
6066                 UINT32_C(0xf000)
6067         #define RX_TPA_END_CMPL_FLAGS_ITYPE_SFT                 12
6068         /*
6069          * This value is zero for TPA End completions.
6070          * There is no data in the buffer that corresponds to the opaque
6071          * value in this completion.
6072          */
6073         uint16_t        len;
6074         /*
6075          * This is a copy of the opaque field from the RX BD this completion
6076          * corresponds to.
6077          */
6078         uint32_t        opaque;
6079         /*
6080          * This value is written by the NIC such that it will be different
6081          * for each pass through the completion queue. The even passes
6082          * will write 1. The odd passes will write 0.
6083          */
6084         uint8_t agg_bufs_v1;
6085         /*
6086          * This value is written by the NIC such that it will be different
6087          * for each pass through the completion queue. The even passes
6088          * will write 1. The odd passes will write 0.
6089          */
6090         #define RX_TPA_END_CMPL_V1           UINT32_C(0x1)
6091         /*
6092          * This value is the number of aggregation buffers that follow this
6093          * entry in the completion ring that are a part of this aggregation
6094          * packet.
6095          * If the value is zero, then the packet is completely contained
6096          * in the buffer space provided in the aggregation start completion.
6097          */
6098         #define RX_TPA_END_CMPL_AGG_BUFS_MASK UINT32_C(0x7e)
6099         #define RX_TPA_END_CMPL_AGG_BUFS_SFT 1
6100         /* This value is the number of segments in the TPA operation. */
6101         uint8_t tpa_segs;
6102         /*
6103          * This value indicates the offset in bytes from the beginning of the packet
6104          * where the inner payload starts. This value is valid for TCP, UDP,
6105          * FCoE, and RoCE packets.
6106          *
6107          * A value of zero indicates an offset of 256 bytes.
6108          */
6109         uint8_t payload_offset;
6110         uint8_t agg_id;
6111         /* unused2 is 1 b */
6112         #define RX_TPA_END_CMPL_UNUSED2     UINT32_C(0x1)
6113         /*
6114          * This is the aggregation ID that the completion is associated
6115          * with. Use this number to correlate the TPA start completion
6116          * with the TPA end completion.
6117          */
6118         #define RX_TPA_END_CMPL_AGG_ID_MASK UINT32_C(0xfe)
6119         #define RX_TPA_END_CMPL_AGG_ID_SFT  1
6120         /*
6121          * For non-GRO packets, this value is the
6122          * timestamp delta between earliest and latest timestamp values for
6123          * TPA packet. If packets were not time stamped, then delta will be
6124          * zero.
6125          *
6126          * For GRO packets, this field is zero except for the following
6127          * sub-fields.
6128          * - tsdelta[31]
6129          *     Timestamp present indication. When '0', no Timestamp
6130          *     option is in the packet. When '1', then a Timestamp
6131          *     option is present in the packet.
6132          */
6133         uint32_t        tsdelta;
6134 } __rte_packed;
6135
6136 /*
6137  * Last 16 bytes of rx_tpa_end_cmpl.
6138  *
6139  * This TPA completion structure is used on devices where the
6140  * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
6141  */
6142 /* rx_tpa_end_cmpl_hi (size:128b/16B) */
6143 struct rx_tpa_end_cmpl_hi {
6144         uint32_t        tpa_dup_acks;
6145         /*
6146          * This value is the number of duplicate ACKs that have been
6147          * received as part of the TPA operation.
6148          */
6149         #define RX_TPA_END_CMPL_TPA_DUP_ACKS_MASK UINT32_C(0xf)
6150         #define RX_TPA_END_CMPL_TPA_DUP_ACKS_SFT 0
6151         /*
6152          * This value is the valid when TPA completion is active. It
6153          * indicates the length of the longest segment of the TPA operation
6154          * for LRO mode and the length of the first segment in GRO mode.
6155          *
6156          * This value may be used by GRO software to re-construct the original
6157          * packet stream from the TPA packet. This is the length of all
6158          * but the last segment for GRO. In LRO mode this value may be used
6159          * to indicate MSS size to the stack.
6160          */
6161         uint16_t        tpa_seg_len;
6162         /* unused4 is 16 b */
6163         uint16_t        unused3;
6164         uint16_t        errors_v2;
6165         /*
6166          * This value is written by the NIC such that it will be different
6167          * for each pass through the completion queue. The even passes
6168          * will write 1. The odd passes will write 0.
6169          */
6170         #define RX_TPA_END_CMPL_V2                             UINT32_C(0x1)
6171         #define RX_TPA_END_CMPL_ERRORS_MASK                    UINT32_C(0xfffe)
6172         #define RX_TPA_END_CMPL_ERRORS_SFT                     1
6173         /*
6174          * This error indicates that there was some sort of problem with
6175          * the BDs for the packet that was found after part of the
6176          * packet was already placed. The packet should be treated as
6177          * invalid.
6178          */
6179         #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_MASK        UINT32_C(0xe)
6180         #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_SFT         1
6181         /*
6182          * This error occurs when there is a fatal HW problem in
6183          * the chip only. It indicates that there were not
6184          * BDs on chip but that there was adequate reservation.
6185          * provided by the TPA block.
6186          */
6187         #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
6188                 (UINT32_C(0x2) << 1)
6189         /*
6190          * This error occurs when TPA block was not configured to
6191          * reserve adequate BDs for TPA operations on this RX
6192          * ring. All data for the TPA operation was not placed.
6193          *
6194          * This error can also be generated when the number of
6195          * segments is not programmed correctly in TPA and the
6196          * 33 total aggregation buffers allowed for the TPA
6197          * operation has been exceeded.
6198          */
6199         #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_RSV_ERROR \
6200                 (UINT32_C(0x4) << 1)
6201         #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_LAST \
6202                 RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_RSV_ERROR
6203         /* unused5 is 16 b */
6204         uint16_t        unused_4;
6205         /*
6206          * This is the opaque value that was completed for the TPA start
6207          * completion that corresponds to this TPA end completion.
6208          */
6209         uint32_t        start_opaque;
6210 } __rte_packed;
6211
6212 /*
6213  * This TPA completion structure is used on devices where the
6214  * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
6215  */
6216 /* rx_tpa_v2_start_cmpl (size:128b/16B) */
6217 struct rx_tpa_v2_start_cmpl {
6218         uint16_t        flags_type;
6219         /*
6220          * This field indicates the exact type of the completion.
6221          * By convention, the LSB identifies the length of the
6222          * record in 16B units. Even values indicate 16B
6223          * records. Odd values indicate 32B
6224          * records.
6225          */
6226         #define RX_TPA_V2_START_CMPL_TYPE_MASK \
6227                 UINT32_C(0x3f)
6228         #define RX_TPA_V2_START_CMPL_TYPE_SFT                       0
6229         /*
6230          * RX L2 TPA Start Completion:
6231          * Completion at the beginning of a TPA operation.
6232          * Length = 32B
6233          */
6234         #define RX_TPA_V2_START_CMPL_TYPE_RX_TPA_START \
6235                 UINT32_C(0x13)
6236         #define RX_TPA_V2_START_CMPL_TYPE_LAST \
6237                 RX_TPA_V2_START_CMPL_TYPE_RX_TPA_START
6238         #define RX_TPA_V2_START_CMPL_FLAGS_MASK \
6239                 UINT32_C(0xffc0)
6240         #define RX_TPA_V2_START_CMPL_FLAGS_SFT                      6
6241         /* This bit will always be '0' for TPA start completions. */
6242         #define RX_TPA_V2_START_CMPL_FLAGS_ERROR \
6243                 UINT32_C(0x40)
6244         /* This field indicates how the packet was placed in the buffer. */
6245         #define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_MASK \
6246                 UINT32_C(0x380)
6247         #define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_SFT             7
6248         /*
6249          * Jumbo:
6250          * TPA Packet was placed using jumbo algorithm. This means
6251          * that the first buffer will be filled with data before
6252          * moving to aggregation buffers. Each aggregation buffer
6253          * will be filled before moving to the next aggregation
6254          * buffer.
6255          */
6256         #define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_JUMBO \
6257                 (UINT32_C(0x1) << 7)
6258         /*
6259          * Header/Data Separation:
6260          * Packet was placed using Header/Data separation algorithm.
6261          * The separation location is indicated by the itype field.
6262          */
6263         #define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_HDS \
6264                 (UINT32_C(0x2) << 7)
6265         /*
6266          * GRO/Jumbo:
6267          * Packet will be placed using GRO/Jumbo where the first
6268          * packet is filled with data. Subsequent packets will be
6269          * placed such that any one packet does not span two
6270          * aggregation buffers unless it starts at the beginning of
6271          * an aggregation buffer.
6272          */
6273         #define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
6274                 (UINT32_C(0x5) << 7)
6275         /*
6276          * GRO/Header-Data Separation:
6277          * Packet will be placed using GRO/HDS where the header
6278          * is in the first packet.
6279          * Payload of each packet will be
6280          * placed such that any one packet does not span two
6281          * aggregation buffers unless it starts at the beginning of
6282          * an aggregation buffer.
6283          */
6284         #define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_GRO_HDS \
6285                 (UINT32_C(0x6) << 7)
6286         #define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_LAST \
6287                 RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_GRO_HDS
6288         /* This bit is '1' if the RSS field in this completion is valid. */
6289         #define RX_TPA_V2_START_CMPL_FLAGS_RSS_VALID \
6290                 UINT32_C(0x400)
6291         /*
6292          * For devices that support timestamps, when this bit is cleared the
6293          * `inner_l4_size_inner_l3_offset_inner_l2_offset_outer_l3_offset`
6294          * field contains the 32b timestamp for
6295          * the packet from the MAC. When this bit is set, the
6296          * `inner_l4_size_inner_l3_offset_inner_l2_offset_outer_l3_offset`
6297          * field contains the outer_l3_offset, inner_l2_offset,
6298          * inner_l3_offset, and inner_l4_size.
6299          */
6300         #define RX_TPA_V2_START_CMPL_FLAGS_TIMESTAMP_FLD_FORMAT \
6301                 UINT32_C(0x800)
6302         /*
6303          * This value indicates what the inner packet determined for the
6304          * packet was.
6305          */
6306         #define RX_TPA_V2_START_CMPL_FLAGS_ITYPE_MASK \
6307                 UINT32_C(0xf000)
6308         #define RX_TPA_V2_START_CMPL_FLAGS_ITYPE_SFT                 12
6309         /*
6310          * TCP Packet:
6311          * Indicates that the packet was IP and TCP.
6312          */
6313         #define RX_TPA_V2_START_CMPL_FLAGS_ITYPE_TCP \
6314                 (UINT32_C(0x2) << 12)
6315         #define RX_TPA_V2_START_CMPL_FLAGS_ITYPE_LAST \
6316                 RX_TPA_V2_START_CMPL_FLAGS_ITYPE_TCP
6317         /*
6318          * This value indicates the amount of packet data written to the
6319          * buffer the opaque field in this completion corresponds to.
6320          */
6321         uint16_t        len;
6322         /*
6323          * This is a copy of the opaque field from the RX BD this completion
6324          * corresponds to.
6325          */
6326         uint32_t        opaque;
6327         /*
6328          * This value is written by the NIC such that it will be different
6329          * for each pass through the completion queue. The even passes
6330          * will write 1. The odd passes will write 0.
6331          */
6332         uint8_t v1;
6333         /*
6334          * This value is written by the NIC such that it will be different
6335          * for each pass through the completion queue. The even passes
6336          * will write 1. The odd passes will write 0.
6337          */
6338         #define RX_TPA_V2_START_CMPL_V1 UINT32_C(0x1)
6339         #define RX_TPA_V2_START_CMPL_LAST RX_TPA_V2_START_CMPL_V1
6340         /*
6341          * This is the RSS hash type for the packet. The value is packed
6342          * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
6343          *
6344          * The value of tuple_extrac_op provides the information about
6345          * what fields the hash was computed on.
6346          * * 0: The RSS hash was computed over source IP address,
6347          * destination IP address, source port, and destination port of inner
6348          * IP and TCP or UDP headers. Note: For non-tunneled packets,
6349          * the packet headers are considered inner packet headers for the RSS
6350          * hash computation purpose.
6351          * * 1: The RSS hash was computed over source IP address and destination
6352          * IP address of inner IP header. Note: For non-tunneled packets,
6353          * the packet headers are considered inner packet headers for the RSS
6354          * hash computation purpose.
6355          * * 2: The RSS hash was computed over source IP address,
6356          * destination IP address, source port, and destination port of
6357          * IP and TCP or UDP headers of outer tunnel headers.
6358          * Note: For non-tunneled packets, this value is not applicable.
6359          * * 3: The RSS hash was computed over source IP address and
6360          * destination IP address of IP header of outer tunnel headers.
6361          * Note: For non-tunneled packets, this value is not applicable.
6362          *
6363          * Note that 4-tuples values listed above are applicable
6364          * for layer 4 protocols supported and enabled for RSS in the hardware,
6365          * HWRM firmware, and drivers. For example, if RSS hash is supported and
6366          * enabled for TCP traffic only, then the values of tuple_extract_op
6367          * corresponding to 4-tuples are only valid for TCP traffic.
6368          */
6369         uint8_t rss_hash_type;
6370         /*
6371          * This is the aggregation ID that the completion is associated
6372          * with. Use this number to correlate the TPA start completion
6373          * with the TPA end completion.
6374          */
6375         uint16_t        agg_id;
6376         /*
6377          * This value is the RSS hash value calculated for the packet
6378          * based on the mode bits and key value in the VNIC.
6379          */
6380         uint32_t        rss_hash;
6381 } __rte_packed;
6382
6383 /*
6384  * Last 16 bytes of rx_tpa_v2_start_cmpl.
6385  *
6386  * This TPA completion structure is used on devices where the
6387  * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
6388  */
6389 /* rx_tpa_v2_start_cmpl_hi (size:128b/16B) */
6390 struct rx_tpa_v2_start_cmpl_hi {
6391         uint32_t        flags2;
6392         /*
6393          * This indicates that the ip checksum was calculated for the
6394          * inner packet and that the sum passed for all segments
6395          * included in the aggregation.
6396          */
6397         #define RX_TPA_V2_START_CMPL_FLAGS2_IP_CS_CALC \
6398                 UINT32_C(0x1)
6399         /*
6400          * This indicates that the TCP, UDP or ICMP checksum was
6401          * calculated for the inner packet and that the sum passed
6402          * for all segments included in the aggregation.
6403          */
6404         #define RX_TPA_V2_START_CMPL_FLAGS2_L4_CS_CALC \
6405                 UINT32_C(0x2)
6406         /*
6407          * This indicates that the ip checksum was calculated for the
6408          * tunnel header and that the sum passed for all segments
6409          * included in the aggregation.
6410          */
6411         #define RX_TPA_V2_START_CMPL_FLAGS2_T_IP_CS_CALC \
6412                 UINT32_C(0x4)
6413         /*
6414          * This indicates that the UDP checksum was
6415          * calculated for the tunnel packet and that the sum passed for
6416          * all segments included in the aggregation.
6417          */
6418         #define RX_TPA_V2_START_CMPL_FLAGS2_T_L4_CS_CALC \
6419                 UINT32_C(0x8)
6420         /* This value indicates what format the metadata field is. */
6421         #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_MASK \
6422                 UINT32_C(0xf0)
6423         #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_SFT            4
6424         /* No metadata informtaion. Value is zero. */
6425         #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_NONE \
6426                 (UINT32_C(0x0) << 4)
6427         /*
6428          * The metadata field contains the VLAN tag and TPID value.
6429          * - metadata[11:0] contains the vlan VID value.
6430          * - metadata[12] contains the vlan DE value.
6431          * - metadata[15:13] contains the vlan PRI value.
6432          * - metadata[31:16] contains the vlan TPID value.
6433          */
6434         #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_VLAN \
6435                 (UINT32_C(0x1) << 4)
6436         /*
6437          * If ext_meta_format is equal to 1, the metadata field
6438          * contains the lower 16b of the tunnel ID value, justified
6439          * to LSB
6440          * - VXLAN = VNI[23:0] -> VXLAN Network ID
6441          * - Geneve (NGE) = VNI[23:0] a-> Virtual Network Identifier.
6442          * - NVGRE = TNI[23:0] -> Tenant Network ID
6443          * - GRE = KEY[31:0 -> key fieled with bit mask. zero if K = 0
6444          * - IPV4 = 0 (not populated)
6445          * - IPV6 = Flow Label[19:0]
6446          * - PPPoE = sessionID[15:0]
6447          * - MPLs = Outer label[19:0]
6448          * - UPAR = Selected[31:0] with bit mask
6449          */
6450         #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_TUNNEL_ID \
6451                 (UINT32_C(0x2) << 4)
6452         /*
6453          * if ext_meta_format is equal to 1, metadata field contains
6454          * 16b metadata from the prepended header (chdr_data).
6455          */
6456         #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_CHDR_DATA \
6457                 (UINT32_C(0x3) << 4)
6458         /*
6459          * If ext_meta_format is equal to 1, the metadata field contains
6460          * the outer_l3_offset, inner_l2_offset, inner_l3_offset and
6461          * inner_l4_size.
6462          * - metadata[8:0] contains the outer_l3_offset.
6463          * - metadata[17:9] contains the inner_l2_offset.
6464          * - metadata[26:18] contains the inner_l3_offset.
6465          * - metadata[31:27] contains the inner_l4_size.
6466          */
6467         #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET \
6468                 (UINT32_C(0x4) << 4)
6469         #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_LAST \
6470                 RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET
6471         /*
6472          * This field indicates the IP type for the inner-most IP header.
6473          * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
6474          */
6475         #define RX_TPA_V2_START_CMPL_FLAGS2_IP_TYPE \
6476                 UINT32_C(0x100)
6477         /*
6478          * This indicates that the complete 1's complement checksum was
6479          * calculated for the packet.
6480          */
6481         #define RX_TPA_V2_START_CMPL_FLAGS2_COMPLETE_CHECKSUM_CALC \
6482                 UINT32_C(0x200)
6483         /*
6484          * The combination of this value and meta_format indicated what
6485          * format the metadata field is.
6486          */
6487         #define RX_TPA_V2_START_CMPL_FLAGS2_EXT_META_FORMAT_MASK \
6488                 UINT32_C(0xc00)
6489         #define RX_TPA_V2_START_CMPL_FLAGS2_EXT_META_FORMAT_SFT        10
6490         /*
6491          * This value is the complete 1's complement checksum calculated from
6492          * the start of the outer L3 header to the end of the packet (not
6493          * including the ethernet crc). It is valid when the
6494          * 'complete_checksum_calc' flag is set. For TPA Start completions,
6495          * the complete checksum is calculated for the first packet in the
6496          * aggregation only.
6497          */
6498         #define RX_TPA_V2_START_CMPL_FLAGS2_COMPLETE_CHECKSUM_MASK \
6499                 UINT32_C(0xffff0000)
6500         #define RX_TPA_V2_START_CMPL_FLAGS2_COMPLETE_CHECKSUM_SFT      16
6501         /*
6502          * This is data from the CFA block as indicated by the meta_format
6503          * field.
6504          */
6505         uint32_t        metadata;
6506         /* When {ext_meta_format,meta_format}=1, this value is the VLAN VID. */
6507         #define RX_TPA_V2_START_CMPL_METADATA_VID_MASK UINT32_C(0xfff)
6508         #define RX_TPA_V2_START_CMPL_METADATA_VID_SFT  0
6509         /* When {ext_meta_format,meta_format}=1, this value is the VLAN DE. */
6510         #define RX_TPA_V2_START_CMPL_METADATA_DE       UINT32_C(0x1000)
6511         /* When {ext_meta_format,meta_format}=1, this value is the VLAN PRI. */
6512         #define RX_TPA_V2_START_CMPL_METADATA_PRI_MASK UINT32_C(0xe000)
6513         #define RX_TPA_V2_START_CMPL_METADATA_PRI_SFT  13
6514         /* When {ext_meta_format,meta_format}=1, this value is the VLAN TPID. */
6515         #define RX_TPA_V2_START_CMPL_METADATA_TPID_MASK UINT32_C(0xffff0000)
6516         #define RX_TPA_V2_START_CMPL_METADATA_TPID_SFT 16
6517         uint16_t        errors_v2;
6518         /*
6519          * This value is written by the NIC such that it will be different
6520          * for each pass through the completion queue. The even passes
6521          * will write 1. The odd passes will write 0.
6522          */
6523         #define RX_TPA_V2_START_CMPL_V2 \
6524                 UINT32_C(0x1)
6525         #define RX_TPA_V2_START_CMPL_ERRORS_MASK \
6526                 UINT32_C(0xfffe)
6527         #define RX_TPA_V2_START_CMPL_ERRORS_SFT                    1
6528         /*
6529          * This error indicates that there was some sort of problem with
6530          * the BDs for the packet that was found after part of the
6531          * packet was already placed. The packet should be treated as
6532          * invalid.
6533          */
6534         #define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_MASK \
6535                 UINT32_C(0xe)
6536         #define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_SFT        1
6537         /* No buffer error */
6538         #define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
6539                 (UINT32_C(0x0) << 1)
6540         /*
6541          * Bad Format:
6542          * BDs were not formatted correctly.
6543          */
6544         #define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
6545                 (UINT32_C(0x3) << 1)
6546         /*
6547          * Flush:
6548          * There was a bad_format error on the previous operation
6549          */
6550         #define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
6551                 (UINT32_C(0x5) << 1)
6552         #define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_LAST \
6553                 RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_FLUSH
6554         /*
6555          * This field identifies the CFA action rule that was used for this
6556          * packet.
6557          */
6558         uint16_t        cfa_code;
6559         /*
6560          * For devices that support timestamps this field is overridden
6561          * with the timestamp value. When `flags.timestamp_fld_format` is
6562          * cleared, this field contains the 32b timestamp for the packet from the
6563          * MAC.
6564          *
6565          * When `flags.timestamp_fld_format` is set, this field contains the
6566          * outer_l3_offset, inner_l2_offset, inner_l3_offset, and inner_l4_size
6567          * as defined below.
6568          */
6569         uint32_t        inner_l4_size_inner_l3_offset_inner_l2_offset_outer_l3_offset;
6570         /*
6571          * This is the offset from the beginning of the packet in bytes for
6572          * the outer L3 header. If there is no outer L3 header, then this
6573          * value is zero.
6574          */
6575         #define RX_TPA_V2_START_CMPL_OUTER_L3_OFFSET_MASK UINT32_C(0x1ff)
6576         #define RX_TPA_V2_START_CMPL_OUTER_L3_OFFSET_SFT 0
6577         /*
6578          * This is the offset from the beginning of the packet in bytes for
6579          * the inner most L2 header.
6580          */
6581         #define RX_TPA_V2_START_CMPL_INNER_L2_OFFSET_MASK UINT32_C(0x3fe00)
6582         #define RX_TPA_V2_START_CMPL_INNER_L2_OFFSET_SFT 9
6583         /*
6584          * This is the offset from the beginning of the packet in bytes for
6585          * the inner most L3 header.
6586          */
6587         #define RX_TPA_V2_START_CMPL_INNER_L3_OFFSET_MASK UINT32_C(0x7fc0000)
6588         #define RX_TPA_V2_START_CMPL_INNER_L3_OFFSET_SFT 18
6589         /*
6590          * This is the size in bytes of the inner most L4 header.
6591          * This can be subtracted from the payload_offset to determine
6592          * the start of the inner most L4 header.
6593          */
6594         #define RX_TPA_V2_START_CMPL_INNER_L4_SIZE_MASK  UINT32_C(0xf8000000)
6595         #define RX_TPA_V2_START_CMPL_INNER_L4_SIZE_SFT   27
6596 } __rte_packed;
6597
6598 /*
6599  * This TPA completion structure is used on devices where the
6600  * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
6601  */
6602 /* rx_tpa_v2_end_cmpl (size:128b/16B) */
6603 struct rx_tpa_v2_end_cmpl {
6604         uint16_t        flags_type;
6605         /*
6606          * This field indicates the exact type of the completion.
6607          * By convention, the LSB identifies the length of the
6608          * record in 16B units. Even values indicate 16B
6609          * records. Odd values indicate 32B
6610          * records.
6611          */
6612         #define RX_TPA_V2_END_CMPL_TYPE_MASK \
6613                 UINT32_C(0x3f)
6614         #define RX_TPA_V2_END_CMPL_TYPE_SFT                       0
6615         /*
6616          * RX L2 TPA End Completion:
6617          * Completion at the end of a TPA operation.
6618          * Length = 32B
6619          */
6620         #define RX_TPA_V2_END_CMPL_TYPE_RX_TPA_END \
6621                 UINT32_C(0x15)
6622         #define RX_TPA_V2_END_CMPL_TYPE_LAST \
6623                 RX_TPA_V2_END_CMPL_TYPE_RX_TPA_END
6624         #define RX_TPA_V2_END_CMPL_FLAGS_MASK \
6625                 UINT32_C(0xffc0)
6626         #define RX_TPA_V2_END_CMPL_FLAGS_SFT                      6
6627         /*
6628          * When this bit is '1', it indicates a packet that has an
6629          * error of some type. Type of error is indicated in
6630          * error_flags.
6631          */
6632         #define RX_TPA_V2_END_CMPL_FLAGS_ERROR \
6633                 UINT32_C(0x40)
6634         /* This field indicates how the packet was placed in the buffer. */
6635         #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_MASK \
6636                 UINT32_C(0x380)
6637         #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_SFT             7
6638         /*
6639          * Jumbo:
6640          * TPA Packet was placed using jumbo algorithm. This means
6641          * that the first buffer will be filled with data before
6642          * moving to aggregation buffers. Each aggregation buffer
6643          * will be filled before moving to the next aggregation
6644          * buffer.
6645          */
6646         #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_JUMBO \
6647                 (UINT32_C(0x1) << 7)
6648         /*
6649          * Header/Data Separation:
6650          * Packet was placed using Header/Data separation algorithm.
6651          * The separation location is indicated by the itype field.
6652          */
6653         #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_HDS \
6654                 (UINT32_C(0x2) << 7)
6655         /*
6656          * GRO/Jumbo:
6657          * Packet will be placed using GRO/Jumbo where the first
6658          * packet is filled with data. Subsequent packets will be
6659          * placed such that any one packet does not span two
6660          * aggregation buffers unless it starts at the beginning of
6661          * an aggregation buffer.
6662          */
6663         #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
6664                 (UINT32_C(0x5) << 7)
6665         /*
6666          * GRO/Header-Data Separation:
6667          * Packet will be placed using GRO/HDS where the header
6668          * is in the first packet.
6669          * Payload of each packet will be
6670          * placed such that any one packet does not span two
6671          * aggregation buffers unless it starts at the beginning of
6672          * an aggregation buffer.
6673          */
6674         #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_GRO_HDS \
6675                 (UINT32_C(0x6) << 7)
6676         /*
6677          * IOC/Header-Data Separation:
6678          * Packet will be placed using In-Order Completion/HDS where
6679          * the header is in the first packet buffer. Payload of each
6680          * packet will be placed such that each packet starts at the
6681          * beginning of an aggregation buffer.
6682          */
6683         #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_IOC_HDS \
6684                 (UINT32_C(0x7) << 7)
6685         #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_LAST \
6686                 RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_IOC_HDS
6687         /* unused is 1 b */
6688         #define RX_TPA_V2_END_CMPL_FLAGS_UNUSED \
6689                 UINT32_C(0x400)
6690         /*
6691          * This bit is '1' if metadata has been added to the end of the
6692          * packet in host memory. Metadata starts at the first 32B boundary
6693          * after the end of the packet for regular and jumbo placement.
6694          * It starts at the first 32B boundary after the end of the header
6695          * for HDS placement. The length of the metadata is indicated in the
6696          * metadata itself.
6697          */
6698         #define RX_TPA_V2_END_CMPL_FLAGS_PKT_METADATA_PRESENT \
6699                 UINT32_C(0x800)
6700         /*
6701          * This value indicates what the inner packet determined for the
6702          * packet was.
6703          * - 2 TCP Packet
6704          *     Indicates that the packet was IP and TCP. This indicates
6705          *     that the ip_cs field is valid and that the tcp_udp_cs
6706          *     field is valid and contains the TCP checksum.
6707          *     This also indicates that the payload_offset field is valid.
6708          */
6709         #define RX_TPA_V2_END_CMPL_FLAGS_ITYPE_MASK \
6710                 UINT32_C(0xf000)
6711         #define RX_TPA_V2_END_CMPL_FLAGS_ITYPE_SFT                 12
6712         /*
6713          * This value is zero for TPA End completions.
6714          * There is no data in the buffer that corresponds to the opaque
6715          * value in this completion.
6716          */
6717         uint16_t        len;
6718         /*
6719          * This is a copy of the opaque field from the RX BD this completion
6720          * corresponds to.
6721          */
6722         uint32_t        opaque;
6723         uint8_t v1;
6724         /*
6725          * This value is written by the NIC such that it will be different
6726          * for each pass through the completion queue. The even passes
6727          * will write 1. The odd passes will write 0.
6728          */
6729         #define RX_TPA_V2_END_CMPL_V1     UINT32_C(0x1)
6730         /* This value is the number of segments in the TPA operation. */
6731         uint8_t tpa_segs;
6732         /*
6733          * This is the aggregation ID that the completion is associated
6734          * with. Use this number to correlate the TPA start completion
6735          * with the TPA end completion.
6736          */
6737         uint16_t        agg_id;
6738         /*
6739          * For non-GRO packets, this value is the
6740          * timestamp delta between earliest and latest timestamp values for
6741          * TPA packet. If packets were not time stamped, then delta will be
6742          * zero.
6743          *
6744          * For GRO packets, this field is zero except for the following
6745          * sub-fields.
6746          * - tsdelta[31]
6747          *     Timestamp present indication. When '0', no Timestamp
6748          *     option is in the packet. When '1', then a Timestamp
6749          *     option is present in the packet.
6750          */
6751         uint32_t        tsdelta;
6752 } __rte_packed;
6753
6754 /*
6755  * Last 16 bytes of rx_tpa_v2_end_cmpl.
6756  *
6757  * This TPA completion structure is used on devices where the
6758  * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
6759  */
6760 /* rx_tpa_v2_end_cmpl_hi (size:128b/16B) */
6761 struct rx_tpa_v2_end_cmpl_hi {
6762         /*
6763          * This value is the number of duplicate ACKs that have been
6764          * received as part of the TPA operation.
6765          */
6766         uint16_t        tpa_dup_acks;
6767         /*
6768          * This value is the number of duplicate ACKs that have been
6769          * received as part of the TPA operation.
6770          */
6771         #define RX_TPA_V2_END_CMPL_TPA_DUP_ACKS_MASK UINT32_C(0xf)
6772         #define RX_TPA_V2_END_CMPL_TPA_DUP_ACKS_SFT 0
6773         /*
6774          * This value indicated the offset in bytes from the beginning of
6775          * the packet where the inner payload starts. This value is valid
6776          * for TCP, UDP, FCoE and RoCE packets
6777          */
6778         uint8_t payload_offset;
6779         /*
6780          * The value is the total number of aggregation buffers that were
6781          * used in the TPA operation. All TPA aggregation buffer completions
6782          * precede the TPA End completion. If the value is zero, then the
6783          * aggregation is completely contained in the buffer space provided
6784          * in the aggregation start completion.
6785          * Note that the field is simply provided as a cross check.
6786          */
6787         uint8_t tpa_agg_bufs;
6788         /*
6789          * This value is the valid when TPA completion is active. It
6790          * indicates the length of the longest segment of the TPA operation
6791          * for LRO mode and the length of the first segment in GRO mode.
6792          *
6793          * This value may be used by GRO software to re-construct the original
6794          * packet stream from the TPA packet. This is the length of all
6795          * but the last segment for GRO. In LRO mode this value may be used
6796          * to indicate MSS size to the stack.
6797          */
6798         uint16_t        tpa_seg_len;
6799         uint16_t        unused_1;
6800         uint16_t        errors_v2;
6801         /*
6802          * This value is written by the NIC such that it will be different
6803          * for each pass through the completion queue. The even passes
6804          * will write 1. The odd passes will write 0.
6805          */
6806         #define RX_TPA_V2_END_CMPL_V2                             UINT32_C(0x1)
6807         #define RX_TPA_V2_END_CMPL_ERRORS_MASK \
6808                 UINT32_C(0xfffe)
6809         #define RX_TPA_V2_END_CMPL_ERRORS_SFT                     1
6810         /*
6811          * This error indicates that there was some sort of problem with
6812          * the BDs for the packet that was found after part of the
6813          * packet was already placed. The packet should be treated as
6814          * invalid.
6815          */
6816         #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_MASK \
6817                 UINT32_C(0xe)
6818         #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_SFT         1
6819         /* No buffer error */
6820         #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
6821                 (UINT32_C(0x0) << 1)
6822         /*
6823          * This error occurs when there is a fatal HW problem in
6824          * the chip only. It indicates that there were not
6825          * BDs on chip but that there was adequate reservation.
6826          * provided by the TPA block.
6827          */
6828         #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
6829                 (UINT32_C(0x2) << 1)
6830         /*
6831          * Bad Format:
6832          * BDs were not formatted correctly.
6833          */
6834         #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
6835                 (UINT32_C(0x3) << 1)
6836         /*
6837          * This error occurs when TPA block was not configured to
6838          * reserve adequate BDs for TPA operations on this RX
6839          * ring. All data for the TPA operation was not placed.
6840          *
6841          * This error can also be generated when the number of
6842          * segments is not programmed correctly in TPA and the
6843          * 33 total aggregation buffers allowed for the TPA
6844          * operation has been exceeded.
6845          */
6846         #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_RSV_ERROR \
6847                 (UINT32_C(0x4) << 1)
6848         /*
6849          * Flush:
6850          * There was a bad_format error on the previous operation
6851          */
6852         #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
6853                 (UINT32_C(0x5) << 1)
6854         #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_LAST \
6855                 RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_FLUSH
6856         uint16_t        unused_2;
6857         /*
6858          * This is the opaque value that was completed for the TPA start
6859          * completion that corresponds to this TPA end completion.
6860          */
6861         uint32_t        start_opaque;
6862 } __rte_packed;
6863
6864 /*
6865  * This TPA completion structure is used on devices where the
6866  * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
6867  */
6868 /* rx_tpa_v2_abuf_cmpl (size:128b/16B) */
6869 struct rx_tpa_v2_abuf_cmpl {
6870         uint16_t        type;
6871         /*
6872          * This field indicates the exact type of the completion.
6873          * By convention, the LSB identifies the length of the
6874          * record in 16B units. Even values indicate 16B
6875          * records. Odd values indicate 32B
6876          * records.
6877          */
6878         #define RX_TPA_V2_ABUF_CMPL_TYPE_MASK      UINT32_C(0x3f)
6879         #define RX_TPA_V2_ABUF_CMPL_TYPE_SFT       0
6880         /*
6881          * RX TPA Aggregation Buffer completion :
6882          * Completion of an L2 aggregation buffer in support of
6883          * TPA packet completion. Length = 16B
6884          */
6885         #define RX_TPA_V2_ABUF_CMPL_TYPE_RX_TPA_AGG  UINT32_C(0x16)
6886         #define RX_TPA_V2_ABUF_CMPL_TYPE_LAST \
6887                 RX_TPA_V2_ABUF_CMPL_TYPE_RX_TPA_AGG
6888         /*
6889          * This is the length of the data for the packet stored in this
6890          * aggregation buffer identified by the opaque value. This does not
6891          * include the length of any
6892          * data placed in other aggregation BDs or in the packet or buffer
6893          * BDs. This length does not include any space added due to
6894          * hdr_offset register during HDS placement mode.
6895          */
6896         uint16_t        len;
6897         /*
6898          * This is a copy of the opaque field from the RX BD this aggregation
6899          * buffer corresponds to.
6900          */
6901         uint32_t        opaque;
6902         uint16_t        v;
6903         /*
6904          * This value is written by the NIC such that it will be different
6905          * for each pass through the completion queue. The even passes
6906          * will write 1. The odd passes will write 0.
6907          */
6908         #define RX_TPA_V2_ABUF_CMPL_V     UINT32_C(0x1)
6909         /*
6910          * This is the aggregation ID that the completion is associated with. Use
6911          * this number to correlate the TPA agg completion with the TPA start
6912          * completion and the TPA end completion.
6913          */
6914         uint16_t        agg_id;
6915         uint32_t        unused_1;
6916 } __rte_packed;
6917
6918 /* rx_abuf_cmpl (size:128b/16B) */
6919 struct rx_abuf_cmpl {
6920         uint16_t        type;
6921         /*
6922          * This field indicates the exact type of the completion.
6923          * By convention, the LSB identifies the length of the
6924          * record in 16B units. Even values indicate 16B
6925          * records. Odd values indicate 32B
6926          * records.
6927          */
6928         #define RX_ABUF_CMPL_TYPE_MASK  UINT32_C(0x3f)
6929         #define RX_ABUF_CMPL_TYPE_SFT   0
6930         /*
6931          * RX Aggregation Buffer completion :
6932          * Completion of an L2 aggregation buffer in support of
6933          * TPA, HDS, or Jumbo packet completion. Length = 16B
6934          */
6935         #define RX_ABUF_CMPL_TYPE_RX_AGG  UINT32_C(0x12)
6936         #define RX_ABUF_CMPL_TYPE_LAST   RX_ABUF_CMPL_TYPE_RX_AGG
6937         /*
6938          * This is the length of the data for the packet stored in this
6939          * aggregation buffer identified by the opaque value. This does not
6940          * include the length of any
6941          * data placed in other aggregation BDs or in the packet or buffer
6942          * BDs. This length does not include any space added due to
6943          * hdr_offset register during HDS placement mode.
6944          */
6945         uint16_t        len;
6946         /*
6947          * This is a copy of the opaque field from the RX BD this aggregation
6948          * buffer corresponds to.
6949          */
6950         uint32_t        opaque;
6951         uint32_t        v;
6952         /*
6953          * This value is written by the NIC such that it will be different
6954          * for each pass through the completion queue. The even passes
6955          * will write 1. The odd passes will write 0.
6956          */
6957         #define RX_ABUF_CMPL_V     UINT32_C(0x1)
6958         /* unused3 is 32 b */
6959         uint32_t        unused_2;
6960 } __rte_packed;
6961
6962 /* VEE FLUSH Completion Record (16 bytes) */
6963 /* vee_flush (size:128b/16B) */
6964 struct vee_flush {
6965         uint32_t        downstream_path_type;
6966         /*
6967          * This field indicates the exact type of the completion.
6968          * By convention, the LSB identifies the length of the
6969          * record in 16B units. Even values indicate 16B
6970          * records. Odd values indicate 32B
6971          * records.
6972          */
6973         #define VEE_FLUSH_TYPE_MASK           UINT32_C(0x3f)
6974         #define VEE_FLUSH_TYPE_SFT            0
6975         /*
6976          * VEE Flush Completion:
6977          * This completion is inserted manually by the Primate and processed
6978          * by the VEE hardware to ensure that all completions on a VEE
6979          * function have been processed by the VEE hardware before FLR
6980          * process is completed.
6981          */
6982         #define VEE_FLUSH_TYPE_VEE_FLUSH        UINT32_C(0x1c)
6983         #define VEE_FLUSH_TYPE_LAST            VEE_FLUSH_TYPE_VEE_FLUSH
6984         /* downstream_path is 1 b */
6985         #define VEE_FLUSH_DOWNSTREAM_PATH     UINT32_C(0x40)
6986         /* This completion is associated with VEE Transmit */
6987         #define VEE_FLUSH_DOWNSTREAM_PATH_TX    (UINT32_C(0x0) << 6)
6988         /* This completion is associated with VEE Receive */
6989         #define VEE_FLUSH_DOWNSTREAM_PATH_RX    (UINT32_C(0x1) << 6)
6990         #define VEE_FLUSH_DOWNSTREAM_PATH_LAST VEE_FLUSH_DOWNSTREAM_PATH_RX
6991         /*
6992          * This is an opaque value that is passed through the completion
6993          * to the VEE handler SW and is used to indicate what VEE VQ or
6994          * function has completed FLR processing.
6995          */
6996         uint32_t        opaque;
6997         uint32_t        v;
6998         /*
6999          * This value is written by the NIC such that it will be different
7000          * for each pass through the completion queue. The even passes will
7001          * write 1. The odd passes will write 0.
7002          */
7003         #define VEE_FLUSH_V     UINT32_C(0x1)
7004         /* unused3 is 32 b */
7005         uint32_t        unused_3;
7006 } __rte_packed;
7007
7008 /* eject_cmpl (size:128b/16B) */
7009 struct eject_cmpl {
7010         uint16_t        type;
7011         /*
7012          * This field indicates the exact type of the completion.
7013          * By convention, the LSB identifies the length of the
7014          * record in 16B units. Even values indicate 16B
7015          * records. Odd values indicate 32B
7016          * records.
7017          */
7018         #define EJECT_CMPL_TYPE_MASK       UINT32_C(0x3f)
7019         #define EJECT_CMPL_TYPE_SFT        0
7020         /*
7021          * Statistics Ejection Completion:
7022          * Completion of statistics data ejection buffer.
7023          * Length = 16B
7024          */
7025         #define EJECT_CMPL_TYPE_STAT_EJECT   UINT32_C(0x1a)
7026         #define EJECT_CMPL_TYPE_LAST        EJECT_CMPL_TYPE_STAT_EJECT
7027         #define EJECT_CMPL_FLAGS_MASK      UINT32_C(0xffc0)
7028         #define EJECT_CMPL_FLAGS_SFT       6
7029         /*
7030          * When this bit is '1', it indicates a packet that has an
7031          * error of some type. Type of error is indicated in
7032          * error_flags.
7033          */
7034         #define EJECT_CMPL_FLAGS_ERROR      UINT32_C(0x40)
7035         /*
7036          * This is the length of the statistics data stored in this
7037          * buffer.
7038          */
7039         uint16_t        len;
7040         /*
7041          * This is a copy of the opaque field from the RX BD this ejection
7042          * buffer corresponds to.
7043          */
7044         uint32_t        opaque;
7045         uint16_t        v;
7046         /*
7047          * This value is written by the NIC such that it will be different
7048          * for each pass through the completion queue. The even passes
7049          * will write 1. The odd passes will write 0.
7050          */
7051         #define EJECT_CMPL_V                              UINT32_C(0x1)
7052         #define EJECT_CMPL_ERRORS_MASK                    UINT32_C(0xfffe)
7053         #define EJECT_CMPL_ERRORS_SFT                     1
7054         /*
7055          * This error indicates that there was some sort of problem with
7056          * the BDs for statistics ejection. The statistics ejection should
7057          * be treated as invalid
7058          */
7059         #define EJECT_CMPL_ERRORS_BUFFER_ERROR_MASK        UINT32_C(0xe)
7060         #define EJECT_CMPL_ERRORS_BUFFER_ERROR_SFT         1
7061         /* No buffer error */
7062         #define EJECT_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
7063                 (UINT32_C(0x0) << 1)
7064         /*
7065          * Did Not Fit:
7066          * Statistics did not fit into aggregation buffer provided.
7067          */
7068         #define EJECT_CMPL_ERRORS_BUFFER_ERROR_DID_NOT_FIT \
7069                 (UINT32_C(0x1) << 1)
7070         /*
7071          * Bad Format:
7072          * BDs were not formatted correctly.
7073          */
7074         #define EJECT_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
7075                 (UINT32_C(0x3) << 1)
7076         /*
7077          * Flush:
7078          * There was a bad_format error on the previous operation
7079          */
7080         #define EJECT_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
7081                 (UINT32_C(0x5) << 1)
7082         #define EJECT_CMPL_ERRORS_BUFFER_ERROR_LAST \
7083                 EJECT_CMPL_ERRORS_BUFFER_ERROR_FLUSH
7084         /* reserved16 is 16 b */
7085         uint16_t        reserved16;
7086         /* unused3 is 32 b */
7087         uint32_t        unused_2;
7088 } __rte_packed;
7089
7090 /* hwrm_cmpl (size:128b/16B) */
7091 struct hwrm_cmpl {
7092         uint16_t        type;
7093         /*
7094          * This field indicates the exact type of the completion.
7095          * By convention, the LSB identifies the length of the
7096          * record in 16B units. Even values indicate 16B
7097          * records. Odd values indicate 32B
7098          * records.
7099          */
7100         #define HWRM_CMPL_TYPE_MASK     UINT32_C(0x3f)
7101         #define HWRM_CMPL_TYPE_SFT      0
7102         /*
7103          * HWRM Command Completion:
7104          * Completion of an HWRM command.
7105          */
7106         #define HWRM_CMPL_TYPE_HWRM_DONE  UINT32_C(0x20)
7107         #define HWRM_CMPL_TYPE_LAST      HWRM_CMPL_TYPE_HWRM_DONE
7108         /* This is the sequence_id of the HWRM command that has completed. */
7109         uint16_t        sequence_id;
7110         /* unused2 is 32 b */
7111         uint32_t        unused_1;
7112         uint32_t        v;
7113         /*
7114          * This value is written by the NIC such that it will be different
7115          * for each pass through the completion queue. The even passes
7116          * will write 1. The odd passes will write 0.
7117          */
7118         #define HWRM_CMPL_V     UINT32_C(0x1)
7119         /* unused4 is 32 b */
7120         uint32_t        unused_3;
7121 } __rte_packed;
7122
7123 /* hwrm_fwd_req_cmpl (size:128b/16B) */
7124 struct hwrm_fwd_req_cmpl {
7125         /*
7126          * This field indicates the exact type of the completion.
7127          * By convention, the LSB identifies the length of the
7128          * record in 16B units. Even values indicate 16B
7129          * records. Odd values indicate 32B
7130          * records.
7131          */
7132         uint16_t        req_len_type;
7133         /*
7134          * This field indicates the exact type of the completion.
7135          * By convention, the LSB identifies the length of the
7136          * record in 16B units. Even values indicate 16B
7137          * records. Odd values indicate 32B
7138          * records.
7139          */
7140         #define HWRM_FWD_REQ_CMPL_TYPE_MASK        UINT32_C(0x3f)
7141         #define HWRM_FWD_REQ_CMPL_TYPE_SFT         0
7142         /* Forwarded HWRM Request */
7143         #define HWRM_FWD_REQ_CMPL_TYPE_HWRM_FWD_REQ  UINT32_C(0x22)
7144         #define HWRM_FWD_REQ_CMPL_TYPE_LAST \
7145                 HWRM_FWD_REQ_CMPL_TYPE_HWRM_FWD_REQ
7146         /* Length of forwarded request in bytes. */
7147         #define HWRM_FWD_REQ_CMPL_REQ_LEN_MASK     UINT32_C(0xffc0)
7148         #define HWRM_FWD_REQ_CMPL_REQ_LEN_SFT      6
7149         /*
7150          * Source ID of this request.
7151          * Typically used in forwarding requests and responses.
7152          * 0x0 - 0xFFF8 - Used for function ids
7153          * 0xFFF8 - 0xFFFE - Reserved for internal processors
7154          * 0xFFFF - HWRM
7155          */
7156         uint16_t        source_id;
7157         /* unused1 is 32 b */
7158         uint32_t        unused0;
7159         /* Address of forwarded request. */
7160         uint32_t        req_buf_addr_v[2];
7161         /*
7162          * This value is written by the NIC such that it will be different
7163          * for each pass through the completion queue. The even passes
7164          * will write 1. The odd passes will write 0.
7165          */
7166         #define HWRM_FWD_REQ_CMPL_V                UINT32_C(0x1)
7167         /* Address of forwarded request. */
7168         #define HWRM_FWD_REQ_CMPL_REQ_BUF_ADDR_MASK UINT32_C(0xfffffffe)
7169         #define HWRM_FWD_REQ_CMPL_REQ_BUF_ADDR_SFT 1
7170 } __rte_packed;
7171
7172 /* hwrm_fwd_resp_cmpl (size:128b/16B) */
7173 struct hwrm_fwd_resp_cmpl {
7174         uint16_t        type;
7175         /*
7176          * This field indicates the exact type of the completion.
7177          * By convention, the LSB identifies the length of the
7178          * record in 16B units. Even values indicate 16B
7179          * records. Odd values indicate 32B
7180          * records.
7181          */
7182         #define HWRM_FWD_RESP_CMPL_TYPE_MASK         UINT32_C(0x3f)
7183         #define HWRM_FWD_RESP_CMPL_TYPE_SFT          0
7184         /* Forwarded HWRM Response */
7185         #define HWRM_FWD_RESP_CMPL_TYPE_HWRM_FWD_RESP  UINT32_C(0x24)
7186         #define HWRM_FWD_RESP_CMPL_TYPE_LAST \
7187                 HWRM_FWD_RESP_CMPL_TYPE_HWRM_FWD_RESP
7188         /*
7189          * Source ID of this response.
7190          * Typically used in forwarding requests and responses.
7191          * 0x0 - 0xFFF8 - Used for function ids
7192          * 0xFFF8 - 0xFFFE - Reserved for internal processors
7193          * 0xFFFF - HWRM
7194          */
7195         uint16_t        source_id;
7196         /* Length of forwarded response in bytes. */
7197         uint16_t        resp_len;
7198         /* unused2 is 16 b */
7199         uint16_t        unused_1;
7200         /* Address of forwarded request. */
7201         uint32_t        resp_buf_addr_v[2];
7202         /*
7203          * This value is written by the NIC such that it will be different
7204          * for each pass through the completion queue. The even passes
7205          * will write 1. The odd passes will write 0.
7206          */
7207         #define HWRM_FWD_RESP_CMPL_V                 UINT32_C(0x1)
7208         /* Address of forwarded request. */
7209         #define HWRM_FWD_RESP_CMPL_RESP_BUF_ADDR_MASK UINT32_C(0xfffffffe)
7210         #define HWRM_FWD_RESP_CMPL_RESP_BUF_ADDR_SFT 1
7211 } __rte_packed;
7212
7213 /* hwrm_async_event_cmpl (size:128b/16B) */
7214 struct hwrm_async_event_cmpl {
7215         uint16_t        type;
7216         /*
7217          * This field indicates the exact type of the completion.
7218          * By convention, the LSB identifies the length of the
7219          * record in 16B units. Even values indicate 16B
7220          * records. Odd values indicate 32B
7221          * records.
7222          */
7223         #define HWRM_ASYNC_EVENT_CMPL_TYPE_MASK            UINT32_C(0x3f)
7224         #define HWRM_ASYNC_EVENT_CMPL_TYPE_SFT             0
7225         /* HWRM Asynchronous Event Information */
7226         #define HWRM_ASYNC_EVENT_CMPL_TYPE_HWRM_ASYNC_EVENT  UINT32_C(0x2e)
7227         #define HWRM_ASYNC_EVENT_CMPL_TYPE_LAST \
7228                 HWRM_ASYNC_EVENT_CMPL_TYPE_HWRM_ASYNC_EVENT
7229         /* Identifiers of events. */
7230         uint16_t        event_id;
7231         /* Link status changed */
7232         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE \
7233                 UINT32_C(0x0)
7234         /* Link MTU changed */
7235         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_MTU_CHANGE \
7236                 UINT32_C(0x1)
7237         /* Link speed changed */
7238         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CHANGE \
7239                 UINT32_C(0x2)
7240         /* DCB Configuration changed */
7241         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DCB_CONFIG_CHANGE \
7242                 UINT32_C(0x3)
7243         /* Port connection not allowed */
7244         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_CONN_NOT_ALLOWED \
7245                 UINT32_C(0x4)
7246         /* Link speed configuration was not allowed */
7247         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_NOT_ALLOWED \
7248                 UINT32_C(0x5)
7249         /* Link speed configuration change */
7250         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_CHANGE \
7251                 UINT32_C(0x6)
7252         /* Port PHY configuration change */
7253         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_PHY_CFG_CHANGE \
7254                 UINT32_C(0x7)
7255         /* Reset notification to clients */
7256         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY \
7257                 UINT32_C(0x8)
7258         /* Master function selection event */
7259         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_ERROR_RECOVERY \
7260                 UINT32_C(0x9)
7261         /*
7262          * An event signifying that a ring has been disabled by
7263          * hw due to error.
7264          */
7265         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_RING_MONITOR_MSG \
7266                 UINT32_C(0xa)
7267         /* Function driver unloaded */
7268         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_DRVR_UNLOAD \
7269                 UINT32_C(0x10)
7270         /* Function driver loaded */
7271         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_DRVR_LOAD \
7272                 UINT32_C(0x11)
7273         /* Function FLR related processing has completed */
7274         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_FLR_PROC_CMPLT \
7275                 UINT32_C(0x12)
7276         /* PF driver unloaded */
7277         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_UNLOAD \
7278                 UINT32_C(0x20)
7279         /* PF driver loaded */
7280         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_LOAD \
7281                 UINT32_C(0x21)
7282         /* VF Function Level Reset (FLR) */
7283         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_FLR \
7284                 UINT32_C(0x30)
7285         /* VF MAC Address Change */
7286         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_MAC_ADDR_CHANGE \
7287                 UINT32_C(0x31)
7288         /* PF-VF communication channel status change. */
7289         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_VF_COMM_STATUS_CHANGE \
7290                 UINT32_C(0x32)
7291         /* VF Configuration Change */
7292         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_CFG_CHANGE \
7293                 UINT32_C(0x33)
7294         /* LLFC/PFC Configuration Change */
7295         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LLFC_PFC_CHANGE \
7296                 UINT32_C(0x34)
7297         /* Default VNIC Configuration Change */
7298         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEFAULT_VNIC_CHANGE \
7299                 UINT32_C(0x35)
7300         /* HW flow aged */
7301         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_HW_FLOW_AGED \
7302                 UINT32_C(0x36)
7303         /*
7304          * A debug notification being posted to the driver. These
7305          * notifications are purely for diagnostic purpose and should not be
7306          * used for functional purpose. The driver is not supposed to act
7307          * on these messages except to log/record it.
7308          */
7309         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEBUG_NOTIFICATION \
7310                 UINT32_C(0x37)
7311         /*
7312          * An EEM flow cached memory flush for all flows request event being
7313          * posted to the PF driver.
7314          */
7315         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_EEM_CACHE_FLUSH_REQ \
7316                 UINT32_C(0x38)
7317         /*
7318          * An EEM flow cache memory flush completion event being posted to the
7319          * firmware by the PF driver. This is indication that host EEM flush
7320          * has completed by the PF.
7321          */
7322         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_EEM_CACHE_FLUSH_DONE \
7323                 UINT32_C(0x39)
7324         /*
7325          * A tcp flag action change event being posted to the PF or trusted VF
7326          * driver by the firmware. The PF or trusted VF driver should query
7327          * the firmware for the new TCP flag action update after receiving
7328          * this async event.
7329          */
7330         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_TCP_FLAG_ACTION_CHANGE \
7331                 UINT32_C(0x3a)
7332         /*
7333          * An EEM flow active event being posted to the PF or trusted VF driver
7334          * by the firmware. The PF or trusted VF driver should update the
7335          * flow's aging timer after receiving this async event.
7336          */
7337         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_EEM_FLOW_ACTIVE \
7338                 UINT32_C(0x3b)
7339         /*
7340          * A eem cfg change event being posted to the trusted VF driver by the
7341          * firmware if the parent PF EEM configuration changed.
7342          */
7343         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_EEM_CFG_CHANGE \
7344                 UINT32_C(0x3c)
7345         /*
7346          * Deprecated.
7347          * TFLIB unique default VNIC Configuration Change
7348          */
7349         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_TFLIB_DEFAULT_VNIC_CHANGE \
7350                 UINT32_C(0x3d)
7351         /*
7352          * Deprecated.
7353          * TFLIB unique link status changed
7354          */
7355         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_TFLIB_LINK_STATUS_CHANGE \
7356                 UINT32_C(0x3e)
7357         /*
7358          * An event signifying completion for HWRM_FW_STATE_QUIESCE
7359          * (completion, timeout, or error)
7360          */
7361         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_QUIESCE_DONE \
7362                 UINT32_C(0x3f)
7363         /*
7364          * An event signifying a HWRM command is in progress and its
7365          * response will be deferred. This event is used on crypto controllers
7366          * only.
7367          */
7368         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEFERRED_RESPONSE \
7369                 UINT32_C(0x40)
7370         /*
7371          * An event signifying that a PFC WatchDog configuration
7372          * has changed on any port / cos.
7373          */
7374         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PFC_WATCHDOG_CFG_CHANGE \
7375                 UINT32_C(0x41)
7376         /* Maximum Registrable event id. */
7377         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_MAX_RGTR_EVENT_ID \
7378                 UINT32_C(0x42)
7379         /*
7380          * A trace log message. This contains firmware trace logs string
7381          * embedded in the asynchronous message. This is an experimental
7382          * event, not meant for production use at this time.
7383          */
7384         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FW_TRACE_MSG \
7385                 UINT32_C(0xfe)
7386         /* HWRM Error */
7387         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_HWRM_ERROR \
7388                 UINT32_C(0xff)
7389         #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LAST \
7390                 HWRM_ASYNC_EVENT_CMPL_EVENT_ID_HWRM_ERROR
7391         /* Event specific data */
7392         uint32_t        event_data2;
7393         uint8_t opaque_v;
7394         /*
7395          * This value is written by the NIC such that it will be different
7396          * for each pass through the completion queue. The even passes
7397          * will write 1. The odd passes will write 0.
7398          */
7399         #define HWRM_ASYNC_EVENT_CMPL_V          UINT32_C(0x1)
7400         /* opaque is 7 b */
7401         #define HWRM_ASYNC_EVENT_CMPL_OPAQUE_MASK UINT32_C(0xfe)
7402         #define HWRM_ASYNC_EVENT_CMPL_OPAQUE_SFT 1
7403         /* 8-lsb timestamp from POR (100-msec resolution) */
7404         uint8_t timestamp_lo;
7405         /* 16-lsb timestamp from POR (100-msec resolution) */
7406         uint16_t        timestamp_hi;
7407         /* Event specific data */
7408         uint32_t        event_data1;
7409 } __rte_packed;
7410
7411 /* hwrm_async_event_cmpl_link_status_change (size:128b/16B) */
7412 struct hwrm_async_event_cmpl_link_status_change {
7413         uint16_t        type;
7414         /*
7415          * This field indicates the exact type of the completion.
7416          * By convention, the LSB identifies the length of the
7417          * record in 16B units. Even values indicate 16B
7418          * records. Odd values indicate 32B
7419          * records.
7420          */
7421         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_MASK \
7422                 UINT32_C(0x3f)
7423         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_SFT             0
7424         /* HWRM Asynchronous Event Information */
7425         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_HWRM_ASYNC_EVENT \
7426                 UINT32_C(0x2e)
7427         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_LAST \
7428                 HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_HWRM_ASYNC_EVENT
7429         /* Identifiers of events. */
7430         uint16_t        event_id;
7431         /* Link status changed */
7432         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_ID_LINK_STATUS_CHANGE \
7433                 UINT32_C(0x0)
7434         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_ID_LAST \
7435                 HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_ID_LINK_STATUS_CHANGE
7436         /* Event specific data */
7437         uint32_t        event_data2;
7438         uint8_t opaque_v;
7439         /*
7440          * This value is written by the NIC such that it will be different
7441          * for each pass through the completion queue. The even passes
7442          * will write 1. The odd passes will write 0.
7443          */
7444         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_V \
7445                 UINT32_C(0x1)
7446         /* opaque is 7 b */
7447         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_OPAQUE_MASK \
7448                 UINT32_C(0xfe)
7449         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_OPAQUE_SFT 1
7450         /* 8-lsb timestamp from POR (100-msec resolution) */
7451         uint8_t timestamp_lo;
7452         /* 16-lsb timestamp from POR (100-msec resolution) */
7453         uint16_t        timestamp_hi;
7454         /* Event specific data */
7455         uint32_t        event_data1;
7456         /* Indicates link status change */
7457         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE \
7458                 UINT32_C(0x1)
7459         /*
7460          * If this bit set to 0, then it indicates that the link
7461          * was up and it went down.
7462          */
7463         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE_DOWN \
7464                 UINT32_C(0x0)
7465         /*
7466          * If this bit is set to 1, then it indicates that the link
7467          * was down and it went up.
7468          */
7469         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE_UP \
7470                 UINT32_C(0x1)
7471         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE_LAST \
7472                 HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE_UP
7473         /* Indicates the physical port this link status change occur */
7474         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PORT_MASK \
7475                 UINT32_C(0xe)
7476         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PORT_SFT \
7477                 1
7478         /* PORT ID */
7479         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PORT_ID_MASK \
7480                 UINT32_C(0xffff0)
7481         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PORT_ID_SFT \
7482                 4
7483         /* Indicates the physical function this event occurred on. */
7484         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PF_ID_MASK \
7485                 UINT32_C(0xff00000)
7486         #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PF_ID_SFT \
7487                 20
7488 } __rte_packed;
7489
7490 /* hwrm_async_event_cmpl_link_mtu_change (size:128b/16B) */
7491 struct hwrm_async_event_cmpl_link_mtu_change {
7492         uint16_t        type;
7493         /*
7494          * This field indicates the exact type of the completion.
7495          * By convention, the LSB identifies the length of the
7496          * record in 16B units. Even values indicate 16B
7497          * records. Odd values indicate 32B
7498          * records.
7499          */
7500         #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_MASK \
7501                 UINT32_C(0x3f)
7502         #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_SFT             0
7503         /* HWRM Asynchronous Event Information */
7504         #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_HWRM_ASYNC_EVENT \
7505                 UINT32_C(0x2e)
7506         #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_LAST \
7507                 HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_HWRM_ASYNC_EVENT
7508         /* Identifiers of events. */
7509         uint16_t        event_id;
7510         /* Link MTU changed */
7511         #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_ID_LINK_MTU_CHANGE \
7512                 UINT32_C(0x1)
7513         #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_ID_LAST \
7514                 HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_ID_LINK_MTU_CHANGE
7515         /* Event specific data */
7516         uint32_t        event_data2;
7517         uint8_t opaque_v;
7518         /*
7519          * This value is written by the NIC such that it will be different
7520          * for each pass through the completion queue. The even passes
7521          * will write 1. The odd passes will write 0.
7522          */
7523         #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_V          UINT32_C(0x1)
7524         /* opaque is 7 b */
7525         #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_OPAQUE_MASK \
7526                 UINT32_C(0xfe)
7527         #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_OPAQUE_SFT 1
7528         /* 8-lsb timestamp from POR (100-msec resolution) */
7529         uint8_t timestamp_lo;
7530         /* 16-lsb timestamp from POR (100-msec resolution) */
7531         uint16_t        timestamp_hi;
7532         /* Event specific data */
7533         uint32_t        event_data1;
7534         /* The new MTU of the link in bytes. */
7535         #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_DATA1_NEW_MTU_MASK \
7536                 UINT32_C(0xffff)
7537         #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_DATA1_NEW_MTU_SFT 0
7538 } __rte_packed;
7539
7540 /* hwrm_async_event_cmpl_link_speed_change (size:128b/16B) */
7541 struct hwrm_async_event_cmpl_link_speed_change {
7542         uint16_t        type;
7543         /*
7544          * This field indicates the exact type of the completion.
7545          * By convention, the LSB identifies the length of the
7546          * record in 16B units. Even values indicate 16B
7547          * records. Odd values indicate 32B
7548          * records.
7549          */
7550         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_MASK \
7551                 UINT32_C(0x3f)
7552         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_SFT             0
7553         /* HWRM Asynchronous Event Information */
7554         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_HWRM_ASYNC_EVENT \
7555                 UINT32_C(0x2e)
7556         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_LAST \
7557                 HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_HWRM_ASYNC_EVENT
7558         /* Identifiers of events. */
7559         uint16_t        event_id;
7560         /* Link speed changed */
7561         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_ID_LINK_SPEED_CHANGE \
7562                 UINT32_C(0x2)
7563         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_ID_LAST \
7564                 HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_ID_LINK_SPEED_CHANGE
7565         /* Event specific data */
7566         uint32_t        event_data2;
7567         uint8_t opaque_v;
7568         /*
7569          * This value is written by the NIC such that it will be different
7570          * for each pass through the completion queue. The even passes
7571          * will write 1. The odd passes will write 0.
7572          */
7573         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_V \
7574                 UINT32_C(0x1)
7575         /* opaque is 7 b */
7576         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_OPAQUE_MASK \
7577                 UINT32_C(0xfe)
7578         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_OPAQUE_SFT 1
7579         /* 8-lsb timestamp from POR (100-msec resolution) */
7580         uint8_t timestamp_lo;
7581         /* 16-lsb timestamp from POR (100-msec resolution) */
7582         uint16_t        timestamp_hi;
7583         /* Event specific data */
7584         uint32_t        event_data1;
7585         /*
7586          * When this bit is '1', the link was forced to the
7587          * force_link_speed value.
7588          */
7589         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_FORCE \
7590                 UINT32_C(0x1)
7591         /* The new link speed in 100 Mbps units. */
7592         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_MASK \
7593                 UINT32_C(0xfffe)
7594         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_SFT \
7595                 1
7596         /* 100Mb link speed */
7597         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_100MB \
7598                 (UINT32_C(0x1) << 1)
7599         /* 1Gb link speed */
7600         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_1GB \
7601                 (UINT32_C(0xa) << 1)
7602         /* 2Gb link speed */
7603         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_2GB \
7604                 (UINT32_C(0x14) << 1)
7605         /* 25Gb link speed */
7606         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_2_5GB \
7607                 (UINT32_C(0x19) << 1)
7608         /* 10Gb link speed */
7609         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_10GB \
7610                 (UINT32_C(0x64) << 1)
7611         /* 20Mb link speed */
7612         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_20GB \
7613                 (UINT32_C(0xc8) << 1)
7614         /* 25Gb link speed */
7615         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_25GB \
7616                 (UINT32_C(0xfa) << 1)
7617         /* 40Gb link speed */
7618         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_40GB \
7619                 (UINT32_C(0x190) << 1)
7620         /* 50Gb link speed */
7621         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_50GB \
7622                 (UINT32_C(0x1f4) << 1)
7623         /* 100Gb link speed */
7624         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_100GB \
7625                 (UINT32_C(0x3e8) << 1)
7626         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_LAST \
7627                 HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_100GB
7628         /* PORT ID */
7629         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_PORT_ID_MASK \
7630                 UINT32_C(0xffff0000)
7631         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_PORT_ID_SFT \
7632                 16
7633 } __rte_packed;
7634
7635 /* hwrm_async_event_cmpl_dcb_config_change (size:128b/16B) */
7636 struct hwrm_async_event_cmpl_dcb_config_change {
7637         uint16_t        type;
7638         /*
7639          * This field indicates the exact type of the completion.
7640          * By convention, the LSB identifies the length of the
7641          * record in 16B units. Even values indicate 16B
7642          * records. Odd values indicate 32B
7643          * records.
7644          */
7645         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_MASK \
7646                 UINT32_C(0x3f)
7647         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_SFT             0
7648         /* HWRM Asynchronous Event Information */
7649         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
7650                 UINT32_C(0x2e)
7651         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_LAST \
7652                 HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_HWRM_ASYNC_EVENT
7653         /* Identifiers of events. */
7654         uint16_t        event_id;
7655         /* DCB Configuration changed */
7656         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_ID_DCB_CONFIG_CHANGE \
7657                 UINT32_C(0x3)
7658         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_ID_LAST \
7659                 HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_ID_DCB_CONFIG_CHANGE
7660         /* Event specific data */
7661         uint32_t        event_data2;
7662         /* ETS configuration change */
7663         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA2_ETS \
7664                 UINT32_C(0x1)
7665         /* PFC configuration change */
7666         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA2_PFC \
7667                 UINT32_C(0x2)
7668         /* APP configuration change */
7669         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA2_APP \
7670                 UINT32_C(0x4)
7671         uint8_t opaque_v;
7672         /*
7673          * This value is written by the NIC such that it will be different
7674          * for each pass through the completion queue. The even passes
7675          * will write 1. The odd passes will write 0.
7676          */
7677         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_V \
7678                 UINT32_C(0x1)
7679         /* opaque is 7 b */
7680         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_OPAQUE_MASK \
7681                 UINT32_C(0xfe)
7682         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_OPAQUE_SFT 1
7683         /* 8-lsb timestamp from POR (100-msec resolution) */
7684         uint8_t timestamp_lo;
7685         /* 16-lsb timestamp from POR (100-msec resolution) */
7686         uint16_t        timestamp_hi;
7687         /* Event specific data */
7688         uint32_t        event_data1;
7689         /* PORT ID */
7690         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_PORT_ID_MASK \
7691                 UINT32_C(0xffff)
7692         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_PORT_ID_SFT \
7693                 0
7694         /* Priority recommended for RoCE traffic */
7695         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_MASK \
7696                 UINT32_C(0xff0000)
7697         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_SFT \
7698                 16
7699         /* none is 255 */
7700         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_NONE \
7701                 (UINT32_C(0xff) << 16)
7702         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_LAST \
7703                 HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_NONE
7704         /* Priority recommended for L2 traffic */
7705         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_MASK \
7706                 UINT32_C(0xff000000)
7707         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_SFT \
7708                 24
7709         /* none is 255 */
7710         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_NONE \
7711                 (UINT32_C(0xff) << 24)
7712         #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_LAST \
7713                 HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_NONE
7714 } __rte_packed;
7715
7716 /* hwrm_async_event_cmpl_port_conn_not_allowed (size:128b/16B) */
7717 struct hwrm_async_event_cmpl_port_conn_not_allowed {
7718         uint16_t        type;
7719         /*
7720          * This field indicates the exact type of the completion.
7721          * By convention, the LSB identifies the length of the
7722          * record in 16B units. Even values indicate 16B
7723          * records. Odd values indicate 32B
7724          * records.
7725          */
7726         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_MASK \
7727                 UINT32_C(0x3f)
7728         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_SFT \
7729                 0
7730         /* HWRM Asynchronous Event Information */
7731         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT \
7732                 UINT32_C(0x2e)
7733         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_LAST \
7734                 HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT
7735         /* Identifiers of events. */
7736         uint16_t        event_id;
7737         /* Port connection not allowed */
7738         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_ID_PORT_CONN_NOT_ALLOWED \
7739                 UINT32_C(0x4)
7740         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_ID_LAST \
7741                 HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_ID_PORT_CONN_NOT_ALLOWED
7742         /* Event specific data */
7743         uint32_t        event_data2;
7744         uint8_t opaque_v;
7745         /*
7746          * This value is written by the NIC such that it will be different
7747          * for each pass through the completion queue. The even passes
7748          * will write 1. The odd passes will write 0.
7749          */
7750         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_V \
7751                 UINT32_C(0x1)
7752         /* opaque is 7 b */
7753         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_OPAQUE_MASK \
7754                 UINT32_C(0xfe)
7755         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_OPAQUE_SFT 1
7756         /* 8-lsb timestamp from POR (100-msec resolution) */
7757         uint8_t timestamp_lo;
7758         /* 16-lsb timestamp from POR (100-msec resolution) */
7759         uint16_t        timestamp_hi;
7760         /* Event specific data */
7761         uint32_t        event_data1;
7762         /* PORT ID */
7763         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_PORT_ID_MASK \
7764                 UINT32_C(0xffff)
7765         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_PORT_ID_SFT \
7766                 0
7767         /*
7768          * This value indicates the current port level enforcement policy
7769          * for the optics module when there is an optical module mismatch
7770          * and port is not connected.
7771          */
7772         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_MASK \
7773                 UINT32_C(0xff0000)
7774         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_SFT \
7775                 16
7776         /* No enforcement */
7777         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_NONE \
7778                 (UINT32_C(0x0) << 16)
7779         /* Disable Transmit side Laser. */
7780         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_DISABLETX \
7781                 (UINT32_C(0x1) << 16)
7782         /* Raise a warning message. */
7783         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_WARNINGMSG \
7784                 (UINT32_C(0x2) << 16)
7785         /* Power down the module. */
7786         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_PWRDOWN \
7787                 (UINT32_C(0x3) << 16)
7788         #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_LAST \
7789                 HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_PWRDOWN
7790 } __rte_packed;
7791
7792 /* hwrm_async_event_cmpl_link_speed_cfg_not_allowed (size:128b/16B) */
7793 struct hwrm_async_event_cmpl_link_speed_cfg_not_allowed {
7794         uint16_t        type;
7795         /*
7796          * This field indicates the exact type of the completion.
7797          * By convention, the LSB identifies the length of the
7798          * record in 16B units. Even values indicate 16B
7799          * records. Odd values indicate 32B
7800          * records.
7801          */
7802         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_MASK \
7803                 UINT32_C(0x3f)
7804         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_SFT \
7805                 0
7806         /* HWRM Asynchronous Event Information */
7807         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT \
7808                 UINT32_C(0x2e)
7809         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_LAST \
7810                 HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT
7811         /* Identifiers of events. */
7812         uint16_t        event_id;
7813         /* Link speed configuration was not allowed */
7814         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_ID_LINK_SPEED_CFG_NOT_ALLOWED \
7815                 UINT32_C(0x5)
7816         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_ID_LAST \
7817                 HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_ID_LINK_SPEED_CFG_NOT_ALLOWED
7818         /* Event specific data */
7819         uint32_t        event_data2;
7820         uint8_t opaque_v;
7821         /*
7822          * This value is written by the NIC such that it will be different
7823          * for each pass through the completion queue. The even passes
7824          * will write 1. The odd passes will write 0.
7825          */
7826         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_V \
7827                 UINT32_C(0x1)
7828         /* opaque is 7 b */
7829         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_OPAQUE_MASK \
7830                 UINT32_C(0xfe)
7831         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_OPAQUE_SFT 1
7832         /* 8-lsb timestamp from POR (100-msec resolution) */
7833         uint8_t timestamp_lo;
7834         /* 16-lsb timestamp from POR (100-msec resolution) */
7835         uint16_t        timestamp_hi;
7836         /* Event specific data */
7837         uint32_t        event_data1;
7838         /* PORT ID */
7839         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_DATA1_PORT_ID_MASK \
7840                 UINT32_C(0xffff)
7841         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_DATA1_PORT_ID_SFT \
7842                 0
7843 } __rte_packed;
7844
7845 /* hwrm_async_event_cmpl_link_speed_cfg_change (size:128b/16B) */
7846 struct hwrm_async_event_cmpl_link_speed_cfg_change {
7847         uint16_t        type;
7848         /*
7849          * This field indicates the exact type of the completion.
7850          * By convention, the LSB identifies the length of the
7851          * record in 16B units. Even values indicate 16B
7852          * records. Odd values indicate 32B
7853          * records.
7854          */
7855         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_MASK \
7856                 UINT32_C(0x3f)
7857         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_SFT \
7858                 0
7859         /* HWRM Asynchronous Event Information */
7860         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
7861                 UINT32_C(0x2e)
7862         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_LAST \
7863                 HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT
7864         /* Identifiers of events. */
7865         uint16_t        event_id;
7866         /* Link speed configuration change */
7867         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LINK_SPEED_CFG_CHANGE \
7868                 UINT32_C(0x6)
7869         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LAST \
7870                 HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LINK_SPEED_CFG_CHANGE
7871         /* Event specific data */
7872         uint32_t        event_data2;
7873         uint8_t opaque_v;
7874         /*
7875          * This value is written by the NIC such that it will be different
7876          * for each pass through the completion queue. The even passes
7877          * will write 1. The odd passes will write 0.
7878          */
7879         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_V \
7880                 UINT32_C(0x1)
7881         /* opaque is 7 b */
7882         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_OPAQUE_MASK \
7883                 UINT32_C(0xfe)
7884         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_OPAQUE_SFT 1
7885         /* 8-lsb timestamp from POR (100-msec resolution) */
7886         uint8_t timestamp_lo;
7887         /* 16-lsb timestamp from POR (100-msec resolution) */
7888         uint16_t        timestamp_hi;
7889         /* Event specific data */
7890         uint32_t        event_data1;
7891         /* PORT ID */
7892         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_PORT_ID_MASK \
7893                 UINT32_C(0xffff)
7894         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_PORT_ID_SFT \
7895                 0
7896         /*
7897          * If set to 1, it indicates that the supported link speeds
7898          * configuration on the port has changed.
7899          * If set to 0, then there is no change in supported link speeds
7900          * configuration.
7901          */
7902         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_SUPPORTED_LINK_SPEEDS_CHANGE \
7903                 UINT32_C(0x10000)
7904         /*
7905          * If set to 1, it indicates that the link speed configuration
7906          * on the port has become illegal or invalid.
7907          * If set to 0, then the link speed configuration on the port is
7908          * legal or valid.
7909          */
7910         #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_ILLEGAL_LINK_SPEED_CFG \
7911                 UINT32_C(0x20000)
7912 } __rte_packed;
7913
7914 /* hwrm_async_event_cmpl_port_phy_cfg_change (size:128b/16B) */
7915 struct hwrm_async_event_cmpl_port_phy_cfg_change {
7916         uint16_t        type;
7917         /*
7918          * This field indicates the exact type of the completion.
7919          * By convention, the LSB identifies the length of the
7920          * record in 16B units. Even values indicate 16B
7921          * records. Odd values indicate 32B
7922          * records.
7923          */
7924         #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_MASK \
7925                 UINT32_C(0x3f)
7926         #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_SFT \
7927                 0
7928         /* HWRM Asynchronous Event Information */
7929         #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
7930                 UINT32_C(0x2e)
7931         #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_LAST \
7932                 HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT
7933         /* Identifiers of events. */
7934         uint16_t        event_id;
7935         /* Port PHY configuration change */
7936         #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_PORT_PHY_CFG_CHANGE \
7937                 UINT32_C(0x7)
7938         #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_LAST \
7939                 HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_PORT_PHY_CFG_CHANGE
7940         /* Event specific data */
7941         uint32_t        event_data2;
7942         uint8_t opaque_v;
7943         /*
7944          * This value is written by the NIC such that it will be different
7945          * for each pass through the completion queue. The even passes
7946          * will write 1. The odd passes will write 0.
7947          */
7948         #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_V \
7949                 UINT32_C(0x1)
7950         /* opaque is 7 b */
7951         #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_OPAQUE_MASK \
7952                 UINT32_C(0xfe)
7953         #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_OPAQUE_SFT 1
7954         /* 8-lsb timestamp from POR (100-msec resolution) */
7955         uint8_t timestamp_lo;
7956         /* 16-lsb timestamp from POR (100-msec resolution) */
7957         uint16_t        timestamp_hi;
7958         /* Event specific data */
7959         uint32_t        event_data1;
7960         /* PORT ID */
7961         #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PORT_ID_MASK \
7962                 UINT32_C(0xffff)
7963         #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PORT_ID_SFT \
7964                 0
7965         /*
7966          * If set to 1, it indicates that the FEC
7967          * configuration on the port has changed.
7968          * If set to 0, then there is no change in FEC configuration.
7969          */
7970         #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_FEC_CFG_CHANGE \
7971                 UINT32_C(0x10000)
7972         /*
7973          * If set to 1, it indicates that the EEE configuration
7974          * on the port has changed.
7975          * If set to 0, then there is no change in EEE configuration
7976          * on the port.
7977          */
7978         #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_EEE_CFG_CHANGE \
7979                 UINT32_C(0x20000)
7980         /*
7981          * If set to 1, it indicates that the pause configuration
7982          * on the PHY has changed.
7983          * If set to 0, then there is no change in the pause
7984          * configuration on the PHY.
7985          */
7986         #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PAUSE_CFG_CHANGE \
7987                 UINT32_C(0x40000)
7988 } __rte_packed;
7989
7990 /* hwrm_async_event_cmpl_reset_notify (size:128b/16B) */
7991 struct hwrm_async_event_cmpl_reset_notify {
7992         uint16_t        type;
7993         /*
7994          * This field indicates the exact type of the completion.
7995          * By convention, the LSB identifies the length of the
7996          * record in 16B units. Even values indicate 16B
7997          * records. Odd values indicate 32B
7998          * records.
7999          */
8000         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_MASK \
8001                 UINT32_C(0x3f)
8002         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_SFT             0
8003         /* HWRM Asynchronous Event Information */
8004         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_HWRM_ASYNC_EVENT \
8005                 UINT32_C(0x2e)
8006         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_LAST \
8007                 HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_HWRM_ASYNC_EVENT
8008         /* Identifiers of events. */
8009         uint16_t        event_id;
8010         /* Notify clients of imminent reset. */
8011         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_ID_RESET_NOTIFY \
8012                 UINT32_C(0x8)
8013         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_ID_LAST \
8014                 HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_ID_RESET_NOTIFY
8015         /* Event specific data. The data is for internal debug use only. */
8016         uint32_t        event_data2;
8017         uint8_t opaque_v;
8018         /*
8019          * This value is written by the NIC such that it will be different
8020          * for each pass through the completion queue. The even passes
8021          * will write 1. The odd passes will write 0.
8022          */
8023         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_V          UINT32_C(0x1)
8024         /* opaque is 7 b */
8025         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_OPAQUE_MASK UINT32_C(0xfe)
8026         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_OPAQUE_SFT 1
8027         /*
8028          * 8-lsb timestamp (100-msec resolution)
8029          * The Minimum time required for the Firmware readiness after sending this
8030          * notification to the driver instances.
8031          */
8032         uint8_t timestamp_lo;
8033         /*
8034          * 16-lsb timestamp (100-msec resolution)
8035          * The Maximum Firmware Reset bail out value in the order of 100
8036          * milli seconds. The driver instances will use this value to re-initiate the
8037          * registration process again if the core firmware didn’t set the ready
8038          * state bit.
8039          */
8040         uint16_t        timestamp_hi;
8041         /* Event specific data */
8042         uint32_t        event_data1;
8043         /* Indicates driver action requested */
8044         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_MASK \
8045                 UINT32_C(0xff)
8046         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_SFT \
8047                 0
8048         /*
8049          * If set to 1, it indicates that the l2 client should
8050          * stop sending in band traffic to Nitro.
8051          * if set to 0, there is no change in L2 client behavior.
8052          */
8053         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_DRIVER_STOP_TX_QUEUE \
8054                 UINT32_C(0x1)
8055         /*
8056          * If set to 1, it indicates that the L2 client should
8057          * bring down the interface.
8058          * If set to 0, then there is no change in L2 client behavior.
8059          */
8060         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_DRIVER_IFDOWN \
8061                 UINT32_C(0x2)
8062         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_LAST \
8063                 HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_DRIVER_IFDOWN
8064         /* Indicates reason for reset. */
8065         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_MASK \
8066                 UINT32_C(0xff00)
8067         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_SFT \
8068                 8
8069         /* A management client has requested reset. */
8070         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_MANAGEMENT_RESET_REQUEST \
8071                 (UINT32_C(0x1) << 8)
8072         /* A fatal firmware exception has occurred. */
8073         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_EXCEPTION_FATAL \
8074                 (UINT32_C(0x2) << 8)
8075         /* A non-fatal firmware exception has occurred. */
8076         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_EXCEPTION_NON_FATAL \
8077                 (UINT32_C(0x3) << 8)
8078         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_LAST \
8079                 HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_EXCEPTION_NON_FATAL
8080         /*
8081          * Minimum time before driver should attempt access - units 100ms ticks.
8082          * Range 0-65535
8083          */
8084         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DELAY_IN_100MS_TICKS_MASK \
8085                 UINT32_C(0xffff0000)
8086         #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DELAY_IN_100MS_TICKS_SFT \
8087                 16
8088 } __rte_packed;
8089
8090 /* hwrm_async_event_cmpl_error_recovery (size:128b/16B) */
8091 struct hwrm_async_event_cmpl_error_recovery {
8092         uint16_t        type;
8093         /*
8094          * This field indicates the exact type of the completion.
8095          * By convention, the LSB identifies the length of the
8096          * record in 16B units. Even values indicate 16B
8097          * records. Odd values indicate 32B
8098          * records.
8099          */
8100         #define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_TYPE_MASK \
8101                 UINT32_C(0x3f)
8102         #define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_TYPE_SFT             0
8103         /* HWRM Asynchronous Event Information */
8104         #define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_TYPE_HWRM_ASYNC_EVENT \
8105                 UINT32_C(0x2e)
8106         #define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_TYPE_LAST \
8107                 HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_TYPE_HWRM_ASYNC_EVENT
8108         /* Identifiers of events. */
8109         uint16_t        event_id;
8110         /*
8111          * This async notification message can be used for selecting or
8112          * deselecting master function for error recovery,
8113          * and to communicate to all the functions whether error recovery
8114          * was enabled/disabled.
8115          */
8116         #define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_ID_ERROR_RECOVERY \
8117                 UINT32_C(0x9)
8118         #define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_ID_LAST \
8119                 HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_ID_ERROR_RECOVERY
8120         /* Event specific data */
8121         uint32_t        event_data2;
8122         uint8_t opaque_v;
8123         /*
8124          * This value is written by the NIC such that it will be different
8125          * for each pass through the completion queue. The even passes
8126          * will write 1. The odd passes will write 0.
8127          */
8128         #define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_V          UINT32_C(0x1)
8129         /* opaque is 7 b */
8130         #define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_OPAQUE_MASK UINT32_C(0xfe)
8131         #define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_OPAQUE_SFT 1
8132         /* 8-lsb timestamp (100-msec resolution) */
8133         uint8_t timestamp_lo;
8134         /* 16-lsb timestamp (100-msec resolution) */
8135         uint16_t        timestamp_hi;
8136         /* Event specific data */
8137         uint32_t        event_data1;
8138         /* Indicates driver action requested */
8139         #define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_MASK \
8140                 UINT32_C(0xff)
8141         #define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_SFT \
8142                 0
8143         /*
8144          * If set to 1, this function is selected as Master function.
8145          * This function has responsibility to do 'chip reset' when it
8146          * detects a fatal error. If set to 0, master function functionality
8147          * is disabled on this function.
8148          */
8149         #define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_MASTER_FUNC \
8150                 UINT32_C(0x1)
8151         /*
8152          * If set to 1, error recovery is enabled.
8153          * If set to 0, error recovery is disabled.
8154          */
8155         #define HWRM_ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_RECOVERY_ENABLED \
8156                 UINT32_C(0x2)
8157 } __rte_packed;
8158
8159 /* hwrm_async_event_cmpl_ring_monitor_msg (size:128b/16B) */
8160 struct hwrm_async_event_cmpl_ring_monitor_msg {
8161         uint16_t        type;
8162         /*
8163          * This field indicates the exact type of the completion.
8164          * By convention, the LSB identifies the length of the
8165          * record in 16B units. Even values indicate 16B
8166          * records. Odd values indicate 32B
8167          * records.
8168          */
8169         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_TYPE_MASK \
8170                 UINT32_C(0x3f)
8171         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_TYPE_SFT             0
8172         /* HWRM Asynchronous Event Information */
8173         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_TYPE_HWRM_ASYNC_EVENT \
8174                 UINT32_C(0x2e)
8175         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_TYPE_LAST \
8176                 HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_TYPE_HWRM_ASYNC_EVENT
8177         /* Identifiers of events. */
8178         uint16_t        event_id;
8179         /* Ring Monitor Message. */
8180         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_ID_RING_MONITOR_MSG \
8181                 UINT32_C(0xa)
8182         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_ID_LAST \
8183                 HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_ID_RING_MONITOR_MSG
8184         /* Event specific data */
8185         uint32_t        event_data2;
8186         /* Type of Ring disabled. */
8187         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_DATA2_DISABLE_RING_TYPE_MASK \
8188                 UINT32_C(0xff)
8189         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_DATA2_DISABLE_RING_TYPE_SFT \
8190                 0
8191         /* tx ring disabled. */
8192         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_DATA2_DISABLE_RING_TYPE_TX \
8193                 UINT32_C(0x0)
8194         /* rx ring disabled. */
8195         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_DATA2_DISABLE_RING_TYPE_RX \
8196                 UINT32_C(0x1)
8197         /* cmpl ring disabled. */
8198         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_DATA2_DISABLE_RING_TYPE_CMPL \
8199                 UINT32_C(0x2)
8200         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_DATA2_DISABLE_RING_TYPE_LAST \
8201                 HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_EVENT_DATA2_DISABLE_RING_TYPE_CMPL
8202         uint8_t opaque_v;
8203         /*
8204          * This value is written by the NIC such that it will be different
8205          * for each pass through the completion queue. The even passes
8206          * will write 1. The odd passes will write 0.
8207          */
8208         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_V          UINT32_C(0x1)
8209         /* opaque is 7 b */
8210         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_OPAQUE_MASK \
8211                 UINT32_C(0xfe)
8212         #define HWRM_ASYNC_EVENT_CMPL_RING_MONITOR_MSG_OPAQUE_SFT 1
8213         /* 8-lsb timestamp from POR (100-msec resolution) */
8214         uint8_t timestamp_lo;
8215         /* 16-lsb timestamp from POR (100-msec resolution) */
8216         uint16_t        timestamp_hi;
8217         /*
8218          * Event specific data. If ring_type_disabled indicates a tx,rx or cmpl
8219          * then this field will indicate the ring id.
8220          */
8221         uint32_t        event_data1;
8222 } __rte_packed;
8223
8224 /* hwrm_async_event_cmpl_func_drvr_unload (size:128b/16B) */
8225 struct hwrm_async_event_cmpl_func_drvr_unload {
8226         uint16_t        type;
8227         /*
8228          * This field indicates the exact type of the completion.
8229          * By convention, the LSB identifies the length of the
8230          * record in 16B units. Even values indicate 16B
8231          * records. Odd values indicate 32B
8232          * records.
8233          */
8234         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_MASK \
8235                 UINT32_C(0x3f)
8236         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_SFT             0
8237         /* HWRM Asynchronous Event Information */
8238         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT \
8239                 UINT32_C(0x2e)
8240         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_LAST \
8241                 HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT
8242         /* Identifiers of events. */
8243         uint16_t        event_id;
8244         /* Function driver unloaded */
8245         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_ID_FUNC_DRVR_UNLOAD \
8246                 UINT32_C(0x10)
8247         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_ID_LAST \
8248                 HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_ID_FUNC_DRVR_UNLOAD
8249         /* Event specific data */
8250         uint32_t        event_data2;
8251         uint8_t opaque_v;
8252         /*
8253          * This value is written by the NIC such that it will be different
8254          * for each pass through the completion queue. The even passes
8255          * will write 1. The odd passes will write 0.
8256          */
8257         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_V          UINT32_C(0x1)
8258         /* opaque is 7 b */
8259         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_OPAQUE_MASK \
8260                 UINT32_C(0xfe)
8261         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_OPAQUE_SFT 1
8262         /* 8-lsb timestamp from POR (100-msec resolution) */
8263         uint8_t timestamp_lo;
8264         /* 16-lsb timestamp from POR (100-msec resolution) */
8265         uint16_t        timestamp_hi;
8266         /* Event specific data */
8267         uint32_t        event_data1;
8268         /* Function ID */
8269         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_MASK \
8270                 UINT32_C(0xffff)
8271         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_SFT \
8272                 0
8273 } __rte_packed;
8274
8275 /* hwrm_async_event_cmpl_func_drvr_load (size:128b/16B) */
8276 struct hwrm_async_event_cmpl_func_drvr_load {
8277         uint16_t        type;
8278         /*
8279          * This field indicates the exact type of the completion.
8280          * By convention, the LSB identifies the length of the
8281          * record in 16B units. Even values indicate 16B
8282          * records. Odd values indicate 32B
8283          * records.
8284          */
8285         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_MASK \
8286                 UINT32_C(0x3f)
8287         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_SFT             0
8288         /* HWRM Asynchronous Event Information */
8289         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT \
8290                 UINT32_C(0x2e)
8291         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_LAST \
8292                 HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT
8293         /* Identifiers of events. */
8294         uint16_t        event_id;
8295         /* Function driver loaded */
8296         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_ID_FUNC_DRVR_LOAD \
8297                 UINT32_C(0x11)
8298         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_ID_LAST \
8299                 HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_ID_FUNC_DRVR_LOAD
8300         /* Event specific data */
8301         uint32_t        event_data2;
8302         uint8_t opaque_v;
8303         /*
8304          * This value is written by the NIC such that it will be different
8305          * for each pass through the completion queue. The even passes
8306          * will write 1. The odd passes will write 0.
8307          */
8308         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_V          UINT32_C(0x1)
8309         /* opaque is 7 b */
8310         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_OPAQUE_MASK UINT32_C(0xfe)
8311         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_OPAQUE_SFT 1
8312         /* 8-lsb timestamp from POR (100-msec resolution) */
8313         uint8_t timestamp_lo;
8314         /* 16-lsb timestamp from POR (100-msec resolution) */
8315         uint16_t        timestamp_hi;
8316         /* Event specific data */
8317         uint32_t        event_data1;
8318         /* Function ID */
8319         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_DATA1_FUNC_ID_MASK \
8320                 UINT32_C(0xffff)
8321         #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_DATA1_FUNC_ID_SFT 0
8322 } __rte_packed;
8323
8324 /* hwrm_async_event_cmpl_func_flr_proc_cmplt (size:128b/16B) */
8325 struct hwrm_async_event_cmpl_func_flr_proc_cmplt {
8326         uint16_t        type;
8327         /*
8328          * This field indicates the exact type of the completion.
8329          * By convention, the LSB identifies the length of the
8330          * record in 16B units. Even values indicate 16B
8331          * records. Odd values indicate 32B
8332          * records.
8333          */
8334         #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_MASK \
8335                 UINT32_C(0x3f)
8336         #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_SFT \
8337                 0
8338         /* HWRM Asynchronous Event Information */
8339         #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_HWRM_ASYNC_EVENT \
8340                 UINT32_C(0x2e)
8341         #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_LAST \
8342                 HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_HWRM_ASYNC_EVENT
8343         /* Identifiers of events. */
8344         uint16_t        event_id;
8345         /* Function FLR related processing has completed */
8346         #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_ID_FUNC_FLR_PROC_CMPLT \
8347                 UINT32_C(0x12)
8348         #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_ID_LAST \
8349                 HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_ID_FUNC_FLR_PROC_CMPLT
8350         /* Event specific data */
8351         uint32_t        event_data2;
8352         uint8_t opaque_v;
8353         /*
8354          * This value is written by the NIC such that it will be different
8355          * for each pass through the completion queue. The even passes
8356          * will write 1. The odd passes will write 0.
8357          */
8358         #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_V \
8359                 UINT32_C(0x1)
8360         /* opaque is 7 b */
8361         #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_OPAQUE_MASK \
8362                 UINT32_C(0xfe)
8363         #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_OPAQUE_SFT 1
8364         /* 8-lsb timestamp from POR (100-msec resolution) */
8365         uint8_t timestamp_lo;
8366         /* 16-lsb timestamp from POR (100-msec resolution) */
8367         uint16_t        timestamp_hi;
8368         /* Event specific data */
8369         uint32_t        event_data1;
8370         /* Function ID */
8371         #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_DATA1_FUNC_ID_MASK \
8372                 UINT32_C(0xffff)
8373         #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_DATA1_FUNC_ID_SFT \
8374                 0
8375 } __rte_packed;
8376
8377 /* hwrm_async_event_cmpl_pf_drvr_unload (size:128b/16B) */
8378 struct hwrm_async_event_cmpl_pf_drvr_unload {
8379         uint16_t        type;
8380         /*
8381          * This field indicates the exact type of the completion.
8382          * By convention, the LSB identifies the length of the
8383          * record in 16B units. Even values indicate 16B
8384          * records. Odd values indicate 32B
8385          * records.
8386          */
8387         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_MASK \
8388                 UINT32_C(0x3f)
8389         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_SFT             0
8390         /* HWRM Asynchronous Event Information */
8391         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT \
8392                 UINT32_C(0x2e)
8393         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_LAST \
8394                 HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT
8395         /* Identifiers of events. */
8396         uint16_t        event_id;
8397         /* PF driver unloaded */
8398         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_PF_DRVR_UNLOAD \
8399                 UINT32_C(0x20)
8400         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_LAST \
8401                 HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_PF_DRVR_UNLOAD
8402         /* Event specific data */
8403         uint32_t        event_data2;
8404         uint8_t opaque_v;
8405         /*
8406          * This value is written by the NIC such that it will be different
8407          * for each pass through the completion queue. The even passes
8408          * will write 1. The odd passes will write 0.
8409          */
8410         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_V          UINT32_C(0x1)
8411         /* opaque is 7 b */
8412         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_OPAQUE_MASK UINT32_C(0xfe)
8413         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_OPAQUE_SFT 1
8414         /* 8-lsb timestamp from POR (100-msec resolution) */
8415         uint8_t timestamp_lo;
8416         /* 16-lsb timestamp from POR (100-msec resolution) */
8417         uint16_t        timestamp_hi;
8418         /* Event specific data */
8419         uint32_t        event_data1;
8420         /* PF ID */
8421         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_MASK \
8422                 UINT32_C(0xffff)
8423         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_SFT 0
8424         /* Indicates the physical port this pf belongs to */
8425         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_PORT_MASK \
8426                 UINT32_C(0x70000)
8427         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_PORT_SFT    16
8428 } __rte_packed;
8429
8430 /* hwrm_async_event_cmpl_pf_drvr_load (size:128b/16B) */
8431 struct hwrm_async_event_cmpl_pf_drvr_load {
8432         uint16_t        type;
8433         /*
8434          * This field indicates the exact type of the completion.
8435          * By convention, the LSB identifies the length of the
8436          * record in 16B units. Even values indicate 16B
8437          * records. Odd values indicate 32B
8438          * records.
8439          */
8440         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_MASK \
8441                 UINT32_C(0x3f)
8442         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_SFT             0
8443         /* HWRM Asynchronous Event Information */
8444         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT \
8445                 UINT32_C(0x2e)
8446         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_LAST \
8447                 HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT
8448         /* Identifiers of events. */
8449         uint16_t        event_id;
8450         /* PF driver loaded */
8451         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_ID_PF_DRVR_LOAD \
8452                 UINT32_C(0x21)
8453         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_ID_LAST \
8454                 HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_ID_PF_DRVR_LOAD
8455         /* Event specific data */
8456         uint32_t        event_data2;
8457         uint8_t opaque_v;
8458         /*
8459          * This value is written by the NIC such that it will be different
8460          * for each pass through the completion queue. The even passes
8461          * will write 1. The odd passes will write 0.
8462          */
8463         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_V          UINT32_C(0x1)
8464         /* opaque is 7 b */
8465         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_OPAQUE_MASK UINT32_C(0xfe)
8466         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_OPAQUE_SFT 1
8467         /* 8-lsb timestamp from POR (100-msec resolution) */
8468         uint8_t timestamp_lo;
8469         /* 16-lsb timestamp from POR (100-msec resolution) */
8470         uint16_t        timestamp_hi;
8471         /* Event specific data */
8472         uint32_t        event_data1;
8473         /* PF ID */
8474         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_FUNC_ID_MASK \
8475                 UINT32_C(0xffff)
8476         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_FUNC_ID_SFT 0
8477         /* Indicates the physical port this pf belongs to */
8478         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_PORT_MASK \
8479                 UINT32_C(0x70000)
8480         #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_PORT_SFT    16
8481 } __rte_packed;
8482
8483 /* hwrm_async_event_cmpl_vf_flr (size:128b/16B) */
8484 struct hwrm_async_event_cmpl_vf_flr {
8485         uint16_t        type;
8486         /*
8487          * This field indicates the exact type of the completion.
8488          * By convention, the LSB identifies the length of the
8489          * record in 16B units. Even values indicate 16B
8490          * records. Odd values indicate 32B
8491          * records.
8492          */
8493         #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_MASK \
8494                 UINT32_C(0x3f)
8495         #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_SFT             0
8496         /* HWRM Asynchronous Event Information */
8497         #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_HWRM_ASYNC_EVENT \
8498                 UINT32_C(0x2e)
8499         #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_LAST \
8500                 HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_HWRM_ASYNC_EVENT
8501         /* Identifiers of events. */
8502         uint16_t        event_id;
8503         /* VF Function Level Reset (FLR) */
8504         #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_ID_VF_FLR UINT32_C(0x30)
8505         #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_ID_LAST \
8506                 HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_ID_VF_FLR
8507         /* Event specific data */
8508         uint32_t        event_data2;
8509         uint8_t opaque_v;
8510         /*
8511          * This value is written by the NIC such that it will be different
8512          * for each pass through the completion queue. The even passes
8513          * will write 1. The odd passes will write 0.
8514          */
8515         #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_V          UINT32_C(0x1)
8516         /* opaque is 7 b */
8517         #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_OPAQUE_MASK UINT32_C(0xfe)
8518         #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_OPAQUE_SFT 1
8519         /* 8-lsb timestamp from POR (100-msec resolution) */
8520         uint8_t timestamp_lo;
8521         /* 16-lsb timestamp from POR (100-msec resolution) */
8522         uint16_t        timestamp_hi;
8523         /* Event specific data */
8524         uint32_t        event_data1;
8525         /* VF ID */
8526         #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_VF_ID_MASK \
8527                 UINT32_C(0xffff)
8528         #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_VF_ID_SFT 0
8529         /* Indicates the physical function this event occurred on. */
8530         #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_PF_ID_MASK \
8531                 UINT32_C(0xff0000)
8532         #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_PF_ID_SFT 16
8533 } __rte_packed;
8534
8535 /* hwrm_async_event_cmpl_vf_mac_addr_change (size:128b/16B) */
8536 struct hwrm_async_event_cmpl_vf_mac_addr_change {
8537         uint16_t        type;
8538         /*
8539          * This field indicates the exact type of the completion.
8540          * By convention, the LSB identifies the length of the
8541          * record in 16B units. Even values indicate 16B
8542          * records. Odd values indicate 32B
8543          * records.
8544          */
8545         #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_MASK \
8546                 UINT32_C(0x3f)
8547         #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_SFT             0
8548         /* HWRM Asynchronous Event Information */
8549         #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_HWRM_ASYNC_EVENT \
8550                 UINT32_C(0x2e)
8551         #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_LAST \
8552                 HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_HWRM_ASYNC_EVENT
8553         /* Identifiers of events. */
8554         uint16_t        event_id;
8555         /* VF MAC Address Change */
8556         #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_ID_VF_MAC_ADDR_CHANGE \
8557                 UINT32_C(0x31)
8558         #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_ID_LAST \
8559                 HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_ID_VF_MAC_ADDR_CHANGE
8560         /* Event specific data */
8561         uint32_t        event_data2;
8562         uint8_t opaque_v;
8563         /*
8564          * This value is written by the NIC such that it will be different
8565          * for each pass through the completion queue. The even passes
8566          * will write 1. The odd passes will write 0.
8567          */
8568         #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_V \
8569                 UINT32_C(0x1)
8570         /* opaque is 7 b */
8571         #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_OPAQUE_MASK \
8572                 UINT32_C(0xfe)
8573         #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_OPAQUE_SFT 1
8574         /* 8-lsb timestamp from POR (100-msec resolution) */
8575         uint8_t timestamp_lo;
8576         /* 16-lsb timestamp from POR (100-msec resolution) */
8577         uint16_t        timestamp_hi;
8578         /* Event specific data */
8579         uint32_t        event_data1;
8580         /* VF ID */
8581         #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_DATA1_VF_ID_MASK \
8582                 UINT32_C(0xffff)
8583         #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_DATA1_VF_ID_SFT \
8584                 0
8585 } __rte_packed;
8586
8587 /* hwrm_async_event_cmpl_pf_vf_comm_status_change (size:128b/16B) */
8588 struct hwrm_async_event_cmpl_pf_vf_comm_status_change {
8589         uint16_t        type;
8590         /*
8591          * This field indicates the exact type of the completion.
8592          * By convention, the LSB identifies the length of the
8593          * record in 16B units. Even values indicate 16B
8594          * records. Odd values indicate 32B
8595          * records.
8596          */
8597         #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_MASK \
8598                 UINT32_C(0x3f)
8599         #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_SFT \
8600                 0
8601         /* HWRM Asynchronous Event Information */
8602         #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_HWRM_ASYNC_EVENT \
8603                 UINT32_C(0x2e)
8604         #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_LAST \
8605                 HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_HWRM_ASYNC_EVENT
8606         /* Identifiers of events. */
8607         uint16_t        event_id;
8608         /* PF-VF communication channel status change. */
8609         #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_ID_PF_VF_COMM_STATUS_CHANGE \
8610                 UINT32_C(0x32)
8611         #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_ID_LAST \
8612                 HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_ID_PF_VF_COMM_STATUS_CHANGE
8613         /* Event specific data */
8614         uint32_t        event_data2;
8615         uint8_t opaque_v;
8616         /*
8617          * This value is written by the NIC such that it will be different
8618          * for each pass through the completion queue. The even passes
8619          * will write 1. The odd passes will write 0.
8620          */
8621         #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_V \
8622                 UINT32_C(0x1)
8623         /* opaque is 7 b */
8624         #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_OPAQUE_MASK \
8625                 UINT32_C(0xfe)
8626         #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_OPAQUE_SFT 1
8627         /* 8-lsb timestamp from POR (100-msec resolution) */
8628         uint8_t timestamp_lo;
8629         /* 16-lsb timestamp from POR (100-msec resolution) */
8630         uint16_t        timestamp_hi;
8631         /* Event specific data */
8632         uint32_t        event_data1;
8633         /*
8634          * If this bit is set to 1, then it indicates that the PF-VF
8635          * communication was lost and it is established.
8636          * If this bit set to 0, then it indicates that the PF-VF
8637          * communication was established and it is lost.
8638          */
8639         #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_DATA1_COMM_ESTABLISHED \
8640                 UINT32_C(0x1)
8641 } __rte_packed;
8642
8643 /* hwrm_async_event_cmpl_vf_cfg_change (size:128b/16B) */
8644 struct hwrm_async_event_cmpl_vf_cfg_change {
8645         uint16_t        type;
8646         /*
8647          * This field indicates the exact type of the completion.
8648          * By convention, the LSB identifies the length of the
8649          * record in 16B units. Even values indicate 16B
8650          * records. Odd values indicate 32B
8651          * records.
8652          */
8653         #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_MASK \
8654                 UINT32_C(0x3f)
8655         #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_SFT             0
8656         /* HWRM Asynchronous Event Information */
8657         #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
8658                 UINT32_C(0x2e)
8659         #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_LAST \
8660                 HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT
8661         /* Identifiers of events. */
8662         uint16_t        event_id;
8663         /* VF Configuration Change */
8664         #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_VF_CFG_CHANGE \
8665                 UINT32_C(0x33)
8666         #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_LAST \
8667                 HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_VF_CFG_CHANGE
8668         /* Event specific data */
8669         uint32_t        event_data2;
8670         uint8_t opaque_v;
8671         /*
8672          * This value is written by the NIC such that it will be different
8673          * for each pass through the completion queue. The even passes
8674          * will write 1. The odd passes will write 0.
8675          */
8676         #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_V          UINT32_C(0x1)
8677         /* opaque is 7 b */
8678         #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_OPAQUE_MASK UINT32_C(0xfe)
8679         #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_OPAQUE_SFT 1
8680         /* 8-lsb timestamp from POR (100-msec resolution) */
8681         uint8_t timestamp_lo;
8682         /* 16-lsb timestamp from POR (100-msec resolution) */
8683         uint16_t        timestamp_hi;
8684         /*
8685          * Each flag provided in this field indicates a specific VF
8686          * configuration change. At least one of these flags shall be set to 1
8687          * when an asynchronous event completion of this type is provided
8688          * by the HWRM.
8689          */
8690         uint32_t        event_data1;
8691         /*
8692          * If this bit is set to 1, then the value of MTU
8693          * was changed on this VF.
8694          * If set to 0, then this bit should be ignored.
8695          */
8696         #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_MTU_CHANGE \
8697                 UINT32_C(0x1)
8698         /*
8699          * If this bit is set to 1, then the value of MRU
8700          * was changed on this VF.
8701          * If set to 0, then this bit should be ignored.
8702          */
8703         #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_MRU_CHANGE \
8704                 UINT32_C(0x2)
8705         /*
8706          * If this bit is set to 1, then the value of default MAC
8707          * address was changed on this VF.
8708          * If set to 0, then this bit should be ignored.
8709          */
8710         #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_DFLT_MAC_ADDR_CHANGE \
8711                 UINT32_C(0x4)
8712         /*
8713          * If this bit is set to 1, then the value of default VLAN
8714          * was changed on this VF.
8715          * If set to 0, then this bit should be ignored.
8716          */
8717         #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_DFLT_VLAN_CHANGE \
8718                 UINT32_C(0x8)
8719         /*
8720          * If this bit is set to 1, then the value of trusted VF enable
8721          * was changed on this VF.
8722          * If set to 0, then this bit should be ignored.
8723          */
8724         #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_TRUSTED_VF_CFG_CHANGE \
8725                 UINT32_C(0x10)
8726 } __rte_packed;
8727
8728 /* hwrm_async_event_cmpl_llfc_pfc_change (size:128b/16B) */
8729 struct hwrm_async_event_cmpl_llfc_pfc_change {
8730         uint16_t        type;
8731         /*
8732          * This field indicates the exact type of the completion.
8733          * By convention, the LSB identifies the length of the
8734          * record in 16B units. Even values indicate 16B
8735          * records. Odd values indicate 32B
8736          * records.
8737          */
8738         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_MASK \
8739                 UINT32_C(0x3f)
8740         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_SFT             0
8741         /* HWRM Asynchronous Event Information */
8742         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_HWRM_ASYNC_EVENT \
8743                 UINT32_C(0x2e)
8744         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_LAST \
8745                 HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_HWRM_ASYNC_EVENT
8746         /* unused1 is 10 b */
8747         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_UNUSED1_MASK \
8748                 UINT32_C(0xffc0)
8749         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_UNUSED1_SFT          6
8750         /* Identifiers of events. */
8751         uint16_t        event_id;
8752         /* LLFC/PFC Configuration Change */
8753         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_ID_LLFC_PFC_CHANGE \
8754                 UINT32_C(0x34)
8755         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_ID_LAST \
8756                 HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_ID_LLFC_PFC_CHANGE
8757         /* Event specific data */
8758         uint32_t        event_data2;
8759         uint8_t opaque_v;
8760         /*
8761          * This value is written by the NIC such that it will be different
8762          * for each pass through the completion queue. The even passes
8763          * will write 1. The odd passes will write 0.
8764          */
8765         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_V          UINT32_C(0x1)
8766         /* opaque is 7 b */
8767         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_OPAQUE_MASK \
8768                 UINT32_C(0xfe)
8769         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_OPAQUE_SFT 1
8770         /* 8-lsb timestamp from POR (100-msec resolution) */
8771         uint8_t timestamp_lo;
8772         /* 16-lsb timestamp from POR (100-msec resolution) */
8773         uint16_t        timestamp_hi;
8774         /* Event specific data */
8775         uint32_t        event_data1;
8776         /* Indicates llfc pfc status change */
8777         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_MASK \
8778                 UINT32_C(0x3)
8779         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_SFT \
8780                 0
8781         /*
8782          * If this field set to 1, then it indicates that llfc is
8783          * enabled.
8784          */
8785         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_LLFC \
8786                 UINT32_C(0x1)
8787         /*
8788          * If this field is set to 2, then it indicates that pfc
8789          * is enabled.
8790          */
8791         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_PFC \
8792                 UINT32_C(0x2)
8793         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_LAST \
8794                 HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_PFC
8795         /* Indicates the physical port this llfc pfc change occur */
8796         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_MASK \
8797                 UINT32_C(0x1c)
8798         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_SFT \
8799                 2
8800         /* PORT ID */
8801         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_ID_MASK \
8802                 UINT32_C(0x1fffe0)
8803         #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_ID_SFT \
8804                 5
8805 } __rte_packed;
8806
8807 /* hwrm_async_event_cmpl_default_vnic_change (size:128b/16B) */
8808 struct hwrm_async_event_cmpl_default_vnic_change {
8809         uint16_t        type;
8810         /*
8811          * This field indicates the exact type of the completion.
8812          * By convention, the LSB identifies the length of the
8813          * record in 16B units. Even values indicate 16B
8814          * records. Odd values indicate 32B
8815          * records.
8816          */
8817         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_MASK \
8818                 UINT32_C(0x3f)
8819         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_SFT \
8820                 0
8821         /* HWRM Asynchronous Event Information */
8822         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_HWRM_ASYNC_EVENT \
8823                 UINT32_C(0x2e)
8824         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_LAST \
8825                 HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_HWRM_ASYNC_EVENT
8826         /* unused1 is 10 b */
8827         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_UNUSED1_MASK \
8828                 UINT32_C(0xffc0)
8829         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_UNUSED1_SFT \
8830                 6
8831         /* Identifiers of events. */
8832         uint16_t        event_id;
8833         /* Notification of a default vnic allocation or free */
8834         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_ALLOC_FREE_NOTIFICATION \
8835                 UINT32_C(0x35)
8836         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_LAST \
8837                 HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_ALLOC_FREE_NOTIFICATION
8838         /* Event specific data */
8839         uint32_t        event_data2;
8840         uint8_t opaque_v;
8841         /*
8842          * This value is written by the NIC such that it will be different
8843          * for each pass through the completion queue. The even passes
8844          * will write 1. The odd passes will write 0.
8845          */
8846         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_V \
8847                 UINT32_C(0x1)
8848         /* opaque is 7 b */
8849         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_OPAQUE_MASK \
8850                 UINT32_C(0xfe)
8851         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_OPAQUE_SFT 1
8852         /* 8-lsb timestamp from POR (100-msec resolution) */
8853         uint8_t timestamp_lo;
8854         /* 16-lsb timestamp from POR (100-msec resolution) */
8855         uint16_t        timestamp_hi;
8856         /* Event specific data */
8857         uint32_t        event_data1;
8858         /* Indicates default vnic configuration change */
8859         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_MASK \
8860                 UINT32_C(0x3)
8861         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_SFT \
8862                 0
8863         /*
8864          * If this field is set to 1, then it indicates that
8865          * a default VNIC has been allocate.
8866          */
8867         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_ALLOC \
8868                 UINT32_C(0x1)
8869         /*
8870          * If this field is set to 2, then it indicates that
8871          * a default VNIC has been freed.
8872          */
8873         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_FREE \
8874                 UINT32_C(0x2)
8875         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_LAST \
8876                 HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_FREE
8877         /* Indicates the physical function this event occurred on. */
8878         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_PF_ID_MASK \
8879                 UINT32_C(0x3fc)
8880         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_PF_ID_SFT \
8881                 2
8882         /* Indicates the virtual function this event occurred on */
8883         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_VF_ID_MASK \
8884                 UINT32_C(0x3fffc00)
8885         #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_VF_ID_SFT \
8886                 10
8887 } __rte_packed;
8888
8889 /* hwrm_async_event_cmpl_hw_flow_aged (size:128b/16B) */
8890 struct hwrm_async_event_cmpl_hw_flow_aged {
8891         uint16_t        type;
8892         /*
8893          * This field indicates the exact type of the completion.
8894          * By convention, the LSB identifies the length of the
8895          * record in 16B units. Even values indicate 16B
8896          * records. Odd values indicate 32B
8897          * records.
8898          */
8899         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_TYPE_MASK \
8900                 UINT32_C(0x3f)
8901         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_TYPE_SFT             0
8902         /* HWRM Asynchronous Event Information */
8903         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_TYPE_HWRM_ASYNC_EVENT \
8904                 UINT32_C(0x2e)
8905         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_TYPE_LAST \
8906                 HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_TYPE_HWRM_ASYNC_EVENT
8907         /* Identifiers of events. */
8908         uint16_t        event_id;
8909         /* Notification of a hw flow aged */
8910         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_ID_HW_FLOW_AGED \
8911                 UINT32_C(0x36)
8912         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_ID_LAST \
8913                 HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_ID_HW_FLOW_AGED
8914         /* Event specific data */
8915         uint32_t        event_data2;
8916         uint8_t opaque_v;
8917         /*
8918          * This value is written by the NIC such that it will be different
8919          * for each pass through the completion queue. The even passes
8920          * will write 1. The odd passes will write 0.
8921          */
8922         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_V          UINT32_C(0x1)
8923         /* opaque is 7 b */
8924         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_OPAQUE_MASK UINT32_C(0xfe)
8925         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_OPAQUE_SFT 1
8926         /* 8-lsb timestamp from POR (100-msec resolution) */
8927         uint8_t timestamp_lo;
8928         /* 16-lsb timestamp from POR (100-msec resolution) */
8929         uint16_t        timestamp_hi;
8930         /* Event specific data */
8931         uint32_t        event_data1;
8932         /* Indicates flow ID this event occurred on. */
8933         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_DATA1_FLOW_ID_MASK \
8934                 UINT32_C(0x7fffffff)
8935         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_DATA1_FLOW_ID_SFT \
8936                 0
8937         /* Indicates flow direction this event occurred on. */
8938         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_DATA1_FLOW_DIRECTION \
8939                 UINT32_C(0x80000000)
8940         /*
8941          * If this bit set to 0, then it indicates that the aged
8942          * event was rx flow.
8943          */
8944         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_DATA1_FLOW_DIRECTION_RX \
8945                 (UINT32_C(0x0) << 31)
8946         /*
8947          * If this bit is set to 1, then it indicates that the aged
8948          * event was tx flow.
8949          */
8950         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_DATA1_FLOW_DIRECTION_TX \
8951                 (UINT32_C(0x1) << 31)
8952         #define HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_DATA1_FLOW_DIRECTION_LAST \
8953                 HWRM_ASYNC_EVENT_CMPL_HW_FLOW_AGED_EVENT_DATA1_FLOW_DIRECTION_TX
8954 } __rte_packed;
8955
8956 /* hwrm_async_event_cmpl_eem_cache_flush_req (size:128b/16B) */
8957 struct hwrm_async_event_cmpl_eem_cache_flush_req {
8958         uint16_t        type;
8959         /*
8960          * This field indicates the exact type of the completion.
8961          * By convention, the LSB identifies the length of the
8962          * record in 16B units. Even values indicate 16B
8963          * records. Odd values indicate 32B
8964          * records.
8965          */
8966         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_TYPE_MASK \
8967                 UINT32_C(0x3f)
8968         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_TYPE_SFT \
8969                 0
8970         /* HWRM Asynchronous Event Information */
8971         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_TYPE_HWRM_ASYNC_EVENT \
8972                 UINT32_C(0x2e)
8973         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_TYPE_LAST \
8974                 HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_TYPE_HWRM_ASYNC_EVENT
8975         /* Identifiers of events. */
8976         uint16_t        event_id;
8977         /* Notification of a eem_cache_flush request */
8978         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_EVENT_ID_EEM_CACHE_FLUSH_REQ \
8979                 UINT32_C(0x38)
8980         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_EVENT_ID_LAST \
8981                 HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_EVENT_ID_EEM_CACHE_FLUSH_REQ
8982         /* Event specific data */
8983         uint32_t        event_data2;
8984         uint8_t opaque_v;
8985         /*
8986          * This value is written by the NIC such that it will be different
8987          * for each pass through the completion queue. The even passes
8988          * will write 1. The odd passes will write 0.
8989          */
8990         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_V \
8991                 UINT32_C(0x1)
8992         /* opaque is 7 b */
8993         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_OPAQUE_MASK \
8994                 UINT32_C(0xfe)
8995         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_REQ_OPAQUE_SFT 1
8996         /* 8-lsb timestamp from POR (100-msec resolution) */
8997         uint8_t timestamp_lo;
8998         /* 16-lsb timestamp from POR (100-msec resolution) */
8999         uint16_t        timestamp_hi;
9000         /* Event specific data */
9001         uint32_t        event_data1;
9002 } __rte_packed;
9003
9004 /* hwrm_async_event_cmpl_eem_cache_flush_done (size:128b/16B) */
9005 struct hwrm_async_event_cmpl_eem_cache_flush_done {
9006         uint16_t        type;
9007         /*
9008          * This field indicates the exact type of the completion.
9009          * By convention, the LSB identifies the length of the
9010          * record in 16B units. Even values indicate 16B
9011          * records. Odd values indicate 32B
9012          * records.
9013          */
9014         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_TYPE_MASK \
9015                 UINT32_C(0x3f)
9016         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_TYPE_SFT \
9017                 0
9018         /* HWRM Asynchronous Event Information */
9019         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_TYPE_HWRM_ASYNC_EVENT \
9020                 UINT32_C(0x2e)
9021         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_TYPE_LAST \
9022                 HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_TYPE_HWRM_ASYNC_EVENT
9023         /* Identifiers of events. */
9024         uint16_t        event_id;
9025         /*
9026          * Notification of a host eem_cache_flush has completed. This event
9027          * is generated by the host driver.
9028          */
9029         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_EVENT_ID_EEM_CACHE_FLUSH_DONE \
9030                 UINT32_C(0x39)
9031         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_EVENT_ID_LAST \
9032                 HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_EVENT_ID_EEM_CACHE_FLUSH_DONE
9033         /* Event specific data */
9034         uint32_t        event_data2;
9035         uint8_t opaque_v;
9036         /*
9037          * This value is written by the NIC such that it will be different
9038          * for each pass through the completion queue. The even passes
9039          * will write 1. The odd passes will write 0.
9040          */
9041         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_V \
9042                 UINT32_C(0x1)
9043         /* opaque is 7 b */
9044         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_OPAQUE_MASK \
9045                 UINT32_C(0xfe)
9046         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_OPAQUE_SFT 1
9047         /* 8-lsb timestamp from POR (100-msec resolution) */
9048         uint8_t timestamp_lo;
9049         /* 16-lsb timestamp from POR (100-msec resolution) */
9050         uint16_t        timestamp_hi;
9051         /* Event specific data */
9052         uint32_t        event_data1;
9053         /* Indicates function ID that this event occurred on. */
9054         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_EVENT_DATA1_FID_MASK \
9055                 UINT32_C(0xffff)
9056         #define HWRM_ASYNC_EVENT_CMPL_EEM_CACHE_FLUSH_DONE_EVENT_DATA1_FID_SFT \
9057                 0
9058 } __rte_packed;
9059
9060 /* hwrm_async_event_cmpl_tcp_flag_action_change (size:128b/16B) */
9061 struct hwrm_async_event_cmpl_tcp_flag_action_change {
9062         uint16_t        type;
9063         /*
9064          * This field indicates the exact type of the completion.
9065          * By convention, the LSB identifies the length of the
9066          * record in 16B units. Even values indicate 16B
9067          * records. Odd values indicate 32B
9068          * records.
9069          */
9070         #define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_TYPE_MASK \
9071                 UINT32_C(0x3f)
9072         #define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_TYPE_SFT \
9073                 0
9074         /* HWRM Asynchronous Event Information */
9075         #define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_TYPE_HWRM_ASYNC_EVENT \
9076                 UINT32_C(0x2e)
9077         #define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_TYPE_LAST \
9078                 HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_TYPE_HWRM_ASYNC_EVENT
9079         /* Identifiers of events. */
9080         uint16_t        event_id;
9081         /* Notification of tcp flag action change */
9082         #define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_EVENT_ID_TCP_FLAG_ACTION_CHANGE \
9083                 UINT32_C(0x3a)
9084         #define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_EVENT_ID_LAST \
9085                 HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_EVENT_ID_TCP_FLAG_ACTION_CHANGE
9086         /* Event specific data */
9087         uint32_t        event_data2;
9088         uint8_t opaque_v;
9089         /*
9090          * This value is written by the NIC such that it will be different
9091          * for each pass through the completion queue. The even passes
9092          * will write 1. The odd passes will write 0.
9093          */
9094         #define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_V \
9095                 UINT32_C(0x1)
9096         /* opaque is 7 b */
9097         #define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_OPAQUE_MASK \
9098                 UINT32_C(0xfe)
9099         #define HWRM_ASYNC_EVENT_CMPL_TCP_FLAG_ACTION_CHANGE_OPAQUE_SFT 1
9100         /* 8-lsb timestamp from POR (100-msec resolution) */
9101         uint8_t timestamp_lo;
9102         /* 16-lsb timestamp from POR (100-msec resolution) */
9103         uint16_t        timestamp_hi;
9104         /* Event specific data */
9105         uint32_t        event_data1;
9106 } __rte_packed;
9107
9108 /* hwrm_async_event_cmpl_eem_flow_active (size:128b/16B) */
9109 struct hwrm_async_event_cmpl_eem_flow_active {
9110         uint16_t        type;
9111         /*
9112          * This field indicates the exact type of the completion.
9113          * By convention, the LSB identifies the length of the
9114          * record in 16B units. Even values indicate 16B
9115          * records. Odd values indicate 32B
9116          * records.
9117          */
9118         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_TYPE_MASK \
9119                 UINT32_C(0x3f)
9120         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_TYPE_SFT             0
9121         /* HWRM Asynchronous Event Information */
9122         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_TYPE_HWRM_ASYNC_EVENT \
9123                 UINT32_C(0x2e)
9124         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_TYPE_LAST \
9125                 HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_TYPE_HWRM_ASYNC_EVENT
9126         /* Identifiers of events. */
9127         uint16_t        event_id;
9128         /* Notification of an active eem flow */
9129         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_ID_EEM_FLOW_ACTIVE \
9130                 UINT32_C(0x3b)
9131         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_ID_LAST \
9132                 HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_ID_EEM_FLOW_ACTIVE
9133         /* Event specific data */
9134         uint32_t        event_data2;
9135         /* Indicates the 2nd global id this event occurred on. */
9136         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA2_GLOBAL_ID_2_MASK \
9137                 UINT32_C(0x3fffffff)
9138         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA2_GLOBAL_ID_2_SFT \
9139                 0
9140         /*
9141          * Indicates flow direction of the flow identified by
9142          * the global_id_2.
9143          */
9144         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA2_FLOW_DIRECTION \
9145                 UINT32_C(0x40000000)
9146         /* If this bit is set to 0, then it indicates that this rx flow. */
9147         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA2_FLOW_DIRECTION_RX \
9148                 (UINT32_C(0x0) << 30)
9149         /* If this bit is set to 1, then it indicates that this tx flow. */
9150         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA2_FLOW_DIRECTION_TX \
9151                 (UINT32_C(0x1) << 30)
9152         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA2_FLOW_DIRECTION_LAST \
9153                 HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA2_FLOW_DIRECTION_TX
9154         uint8_t opaque_v;
9155         /*
9156          * This value is written by the NIC such that it will be different
9157          * for each pass through the completion queue. The even passes
9158          * will write 1. The odd passes will write 0.
9159          */
9160         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_V          UINT32_C(0x1)
9161         /* opaque is 7 b */
9162         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_OPAQUE_MASK \
9163                 UINT32_C(0xfe)
9164         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_OPAQUE_SFT 1
9165         /* 8-lsb timestamp from POR (100-msec resolution) */
9166         uint8_t timestamp_lo;
9167         /* 16-lsb timestamp from POR (100-msec resolution) */
9168         uint16_t        timestamp_hi;
9169         /* Event specific data */
9170         uint32_t        event_data1;
9171         /* Indicates the 1st global id this event occurred on. */
9172         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_GLOBAL_ID_1_MASK \
9173                 UINT32_C(0x3fffffff)
9174         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_GLOBAL_ID_1_SFT \
9175                 0
9176         /*
9177          * Indicates flow direction of the flow identified by the
9178          * global_id_1.
9179          */
9180         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_FLOW_DIRECTION \
9181                 UINT32_C(0x40000000)
9182         /* If this bit is set to 0, then it indicates that this is rx flow. */
9183         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_FLOW_DIRECTION_RX \
9184                 (UINT32_C(0x0) << 30)
9185         /* If this bit is set to 1, then it indicates that this is tx flow. */
9186         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_FLOW_DIRECTION_TX \
9187                 (UINT32_C(0x1) << 30)
9188         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_FLOW_DIRECTION_LAST \
9189                 HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_FLOW_DIRECTION_TX
9190         /*
9191          * Indicates EEM flow aging mode this event occurred on. If
9192          * this bit is set to 0, the event_data1 is the EEM global
9193          * ID. If this bit is set to 1, the event_data1 is the number
9194          * of global ID in the context memory.
9195          */
9196         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_MODE \
9197                 UINT32_C(0x80000000)
9198         /* EEM flow aging mode 0. */
9199         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_MODE_0 \
9200                 (UINT32_C(0x0) << 31)
9201         /* EEM flow aging mode 1. */
9202         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_MODE_1 \
9203                 (UINT32_C(0x1) << 31)
9204         #define HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_MODE_LAST \
9205                 HWRM_ASYNC_EVENT_CMPL_EEM_FLOW_ACTIVE_EVENT_DATA1_MODE_1
9206 } __rte_packed;
9207
9208 /* hwrm_async_event_cmpl_eem_cfg_change (size:128b/16B) */
9209 struct hwrm_async_event_cmpl_eem_cfg_change {
9210         uint16_t        type;
9211         /*
9212          * This field indicates the exact type of the completion.
9213          * By convention, the LSB identifies the length of the
9214          * record in 16B units. Even values indicate 16B
9215          * records. Odd values indicate 32B
9216          * records.
9217          */
9218         #define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_TYPE_MASK \
9219                 UINT32_C(0x3f)
9220         #define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_TYPE_SFT             0
9221         /* HWRM Asynchronous Event Information */
9222         #define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
9223                 UINT32_C(0x2e)
9224         #define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_TYPE_LAST \
9225                 HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT
9226         /* Identifiers of events. */
9227         uint16_t        event_id;
9228         /* Notification of EEM configuration change */
9229         #define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_EVENT_ID_EEM_CFG_CHANGE \
9230                 UINT32_C(0x3c)
9231         #define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_EVENT_ID_LAST \
9232                 HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_EVENT_ID_EEM_CFG_CHANGE
9233         /* Event specific data */
9234         uint32_t        event_data2;
9235         uint8_t opaque_v;
9236         /*
9237          * This value is written by the NIC such that it will be different
9238          * for each pass through the completion queue. The even passes
9239          * will write 1. The odd passes will write 0.
9240          */
9241         #define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_V          UINT32_C(0x1)
9242         /* opaque is 7 b */
9243         #define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_OPAQUE_MASK UINT32_C(0xfe)
9244         #define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_OPAQUE_SFT 1
9245         /* 8-lsb timestamp from POR (100-msec resolution) */
9246         uint8_t timestamp_lo;
9247         /* 16-lsb timestamp from POR (100-msec resolution) */
9248         uint16_t        timestamp_hi;
9249         /* Event specific data */
9250         uint32_t        event_data1;
9251         /*
9252          * Value of 1 to indicate EEM TX configuration is enabled. Value of
9253          * 0 to indicate the EEM TX configuration is disabled.
9254          */
9255         #define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_EVENT_DATA1_EEM_TX_ENABLE \
9256                 UINT32_C(0x1)
9257         /*
9258          * Value of 1 to indicate EEM RX configuration is enabled. Value of 0
9259          * to indicate the EEM RX configuration is disabled.
9260          */
9261         #define HWRM_ASYNC_EVENT_CMPL_EEM_CFG_CHANGE_EVENT_DATA1_EEM_RX_ENABLE \
9262                 UINT32_C(0x2)
9263 } __rte_packed;
9264
9265 /* hwrm_async_event_cmpl_quiesce_done (size:128b/16B) */
9266 struct hwrm_async_event_cmpl_quiesce_done {
9267         uint16_t        type;
9268         /*
9269          * This field indicates the exact type of the completion.
9270          * By convention, the LSB identifies the length of the
9271          * record in 16B units. Even values indicate 16B
9272          * records. Odd values indicate 32B
9273          * records.
9274          */
9275         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_TYPE_MASK \
9276                 UINT32_C(0x3f)
9277         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_TYPE_SFT             0
9278         /* HWRM Asynchronous Event Information */
9279         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_TYPE_HWRM_ASYNC_EVENT \
9280                 UINT32_C(0x2e)
9281         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_TYPE_LAST \
9282                 HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_TYPE_HWRM_ASYNC_EVENT
9283         /* Identifiers of events. */
9284         uint16_t        event_id;
9285         /* An event signifying completion of HWRM_FW_STATE_QUIESCE */
9286         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_ID_QUIESCE_DONE \
9287                 UINT32_C(0x3f)
9288         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_ID_LAST \
9289                 HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_ID_QUIESCE_DONE
9290         /* Event specific data */
9291         uint32_t        event_data2;
9292         /* Status of HWRM_FW_STATE_QUIESCE completion */
9293         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_QUIESCE_STATUS_MASK \
9294                 UINT32_C(0xff)
9295         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_QUIESCE_STATUS_SFT \
9296                 0
9297         /*
9298          * The quiesce operation started by HWRM_FW_STATE_QUIESCE
9299          * completed successfully.
9300          */
9301         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_QUIESCE_STATUS_SUCCESS \
9302                 UINT32_C(0x0)
9303         /*
9304          * The quiesce operation started by HWRM_FW_STATE_QUIESCE timed
9305          * out.
9306          */
9307         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_QUIESCE_STATUS_TIMEOUT \
9308                 UINT32_C(0x1)
9309         /*
9310          * The quiesce operation started by HWRM_FW_STATE_QUIESCE
9311          * encountered an error.
9312          */
9313         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_QUIESCE_STATUS_ERROR \
9314                 UINT32_C(0x2)
9315         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_QUIESCE_STATUS_LAST \
9316                 HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_QUIESCE_STATUS_ERROR
9317         /* opaque is 8 b */
9318         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_OPAQUE_MASK \
9319                 UINT32_C(0xff00)
9320         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_OPAQUE_SFT \
9321                 8
9322         /*
9323          * Additional information about internal hardware state related to
9324          * idle/quiesce state.  QUIESCE may succeed per quiesce_status
9325          * regardless of idle_state_flags.  If QUIESCE fails, the host may
9326          * inspect idle_state_flags to determine whether a retry is warranted.
9327          */
9328         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_IDLE_STATE_FLAGS_MASK \
9329                 UINT32_C(0xff0000)
9330         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_IDLE_STATE_FLAGS_SFT \
9331                 16
9332         /*
9333          * Failure to quiesce is caused by host not updating the NQ consumer
9334          * index.
9335          */
9336         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_IDLE_STATE_FLAGS_INCOMPLETE_NQ \
9337                 UINT32_C(0x10000)
9338         /* Flag 1 indicating partial non-idle state. */
9339         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_IDLE_STATE_FLAGS_IDLE_STATUS_1 \
9340                 UINT32_C(0x20000)
9341         /* Flag 2 indicating partial non-idle state. */
9342         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_IDLE_STATE_FLAGS_IDLE_STATUS_2 \
9343                 UINT32_C(0x40000)
9344         /* Flag 3 indicating partial non-idle state. */
9345         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA2_IDLE_STATE_FLAGS_IDLE_STATUS_3 \
9346                 UINT32_C(0x80000)
9347         uint8_t opaque_v;
9348         /*
9349          * This value is written by the NIC such that it will be different
9350          * for each pass through the completion queue. The even passes
9351          * will write 1. The odd passes will write 0.
9352          */
9353         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_V          UINT32_C(0x1)
9354         /* opaque is 7 b */
9355         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_OPAQUE_MASK UINT32_C(0xfe)
9356         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_OPAQUE_SFT 1
9357         /* 8-lsb timestamp from POR (100-msec resolution) */
9358         uint8_t timestamp_lo;
9359         /* 16-lsb timestamp from POR (100-msec resolution) */
9360         uint16_t        timestamp_hi;
9361         /* Event specific data */
9362         uint32_t        event_data1;
9363         /* Time stamp for error event */
9364         #define HWRM_ASYNC_EVENT_CMPL_QUIESCE_DONE_EVENT_DATA1_TIMESTAMP \
9365                 UINT32_C(0x1)
9366 } __rte_packed;
9367
9368 /* hwrm_async_event_cmpl_deferred_response (size:128b/16B) */
9369 struct hwrm_async_event_cmpl_deferred_response {
9370         uint16_t        type;
9371         /*
9372          * This field indicates the exact type of the completion.
9373          * By convention, the LSB identifies the length of the
9374          * record in 16B units. Even values indicate 16B
9375          * records. Odd values indicate 32B
9376          * records.
9377          */
9378         #define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_TYPE_MASK \
9379                 UINT32_C(0x3f)
9380         #define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_TYPE_SFT             0
9381         /* HWRM Asynchronous Event Information */
9382         #define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_TYPE_HWRM_ASYNC_EVENT \
9383                 UINT32_C(0x2e)
9384         #define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_TYPE_LAST \
9385                 HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_TYPE_HWRM_ASYNC_EVENT
9386         /* Identifiers of events. */
9387         uint16_t        event_id;
9388         /*
9389          * An event signifying a HWRM command is in progress and its
9390          * response will be deferred
9391          */
9392         #define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_EVENT_ID_DEFERRED_RESPONSE \
9393                 UINT32_C(0x40)
9394         #define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_EVENT_ID_LAST \
9395                 HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_EVENT_ID_DEFERRED_RESPONSE
9396         /* Event specific data */
9397         uint32_t        event_data2;
9398         /*
9399          * The PF's mailbox is clear to issue another command.
9400          * A command with this seq_id is still in progress
9401          * and will return a regular HWRM completion when done.
9402          * 'event_data1' field, if non-zero, contains the estimated
9403          * execution time for the command.
9404          */
9405         #define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_EVENT_DATA2_SEQ_ID_MASK \
9406                 UINT32_C(0xffff)
9407         #define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_EVENT_DATA2_SEQ_ID_SFT \
9408                 0
9409         uint8_t opaque_v;
9410         /*
9411          * This value is written by the NIC such that it will be different
9412          * for each pass through the completion queue. The even passes
9413          * will write 1. The odd passes will write 0.
9414          */
9415         #define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_V \
9416                 UINT32_C(0x1)
9417         /* opaque is 7 b */
9418         #define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_OPAQUE_MASK \
9419                 UINT32_C(0xfe)
9420         #define HWRM_ASYNC_EVENT_CMPL_DEFERRED_RESPONSE_OPAQUE_SFT 1
9421         /* 8-lsb timestamp from POR (100-msec resolution) */
9422         uint8_t timestamp_lo;
9423         /* 16-lsb timestamp from POR (100-msec resolution) */
9424         uint16_t        timestamp_hi;
9425         /* Estimated remaining time of command execution in ms (if not zero) */
9426         uint32_t        event_data1;
9427 } __rte_packed;
9428
9429 /* hwrm_async_event_cmpl_pfc_watchdog_cfg_change (size:128b/16B) */
9430 struct hwrm_async_event_cmpl_pfc_watchdog_cfg_change {
9431         uint16_t        type;
9432         /*
9433          * This field indicates the exact type of the completion.
9434          * By convention, the LSB identifies the length of the
9435          * record in 16B units. Even values indicate 16B
9436          * records. Odd values indicate 32B
9437          * records.
9438          */
9439         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_TYPE_MASK \
9440                 UINT32_C(0x3f)
9441         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_TYPE_SFT \
9442                 0
9443         /* HWRM Asynchronous Event Information */
9444         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
9445                 UINT32_C(0x2e)
9446         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_TYPE_LAST \
9447                 HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT
9448         /* Identifiers of events. */
9449         uint16_t        event_id;
9450         /* PFC watchdog configuration change for given port/cos */
9451         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_ID_PFC_WATCHDOG_CFG_CHANGE \
9452                 UINT32_C(0x41)
9453         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_ID_LAST \
9454                 HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_ID_PFC_WATCHDOG_CFG_CHANGE
9455         /* Event specific data */
9456         uint32_t        event_data2;
9457         uint8_t opaque_v;
9458         /*
9459          * This value is written by the NIC such that it will be different
9460          * for each pass through the completion queue. The even passes
9461          * will write 1. The odd passes will write 0.
9462          */
9463         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_V \
9464                 UINT32_C(0x1)
9465         /* opaque is 7 b */
9466         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_OPAQUE_MASK \
9467                 UINT32_C(0xfe)
9468         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_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         /*
9476          * 1 in bit position X indicates PFC watchdog should
9477          * be on for COSX
9478          */
9479         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_MASK \
9480                 UINT32_C(0xff)
9481         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_SFT \
9482                 0
9483         /* 1 means PFC WD for COS0 is on, 0 - off. */
9484         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS0 \
9485                 UINT32_C(0x1)
9486         /* 1 means PFC WD for COS1 is on, 0 - off. */
9487         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS1 \
9488                 UINT32_C(0x2)
9489         /* 1 means PFC WD for COS2 is on, 0 - off. */
9490         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS2 \
9491                 UINT32_C(0x4)
9492         /* 1 means PFC WD for COS3 is on, 0 - off. */
9493         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS3 \
9494                 UINT32_C(0x8)
9495         /* 1 means PFC WD for COS4 is on, 0 - off. */
9496         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS4 \
9497                 UINT32_C(0x10)
9498         /* 1 means PFC WD for COS5 is on, 0 - off. */
9499         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS5 \
9500                 UINT32_C(0x20)
9501         /* 1 means PFC WD for COS6 is on, 0 - off. */
9502         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS6 \
9503                 UINT32_C(0x40)
9504         /* 1 means PFC WD for COS7 is on, 0 - off. */
9505         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PFC_WD_COS_PFC_WD_COS7 \
9506                 UINT32_C(0x80)
9507         /* PORT ID */
9508         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PORT_ID_MASK \
9509                 UINT32_C(0xffff00)
9510         #define HWRM_ASYNC_EVENT_CMPL_PFC_WATCHDOG_CFG_CHANGE_EVENT_DATA1_PORT_ID_SFT \
9511                 8
9512 } __rte_packed;
9513
9514 /* hwrm_async_event_cmpl_fw_trace_msg (size:128b/16B) */
9515 struct hwrm_async_event_cmpl_fw_trace_msg {
9516         uint16_t        type;
9517         /*
9518          * This field indicates the exact type of the completion.
9519          * By convention, the LSB identifies the length of the
9520          * record in 16B units. Even values indicate 16B
9521          * records. Odd values indicate 32B
9522          * records.
9523          */
9524         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TYPE_MASK \
9525                 UINT32_C(0x3f)
9526         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TYPE_SFT             0
9527         /* HWRM Asynchronous Event Information */
9528         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TYPE_HWRM_ASYNC_EVENT \
9529                 UINT32_C(0x2e)
9530         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TYPE_LAST \
9531                 HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TYPE_HWRM_ASYNC_EVENT
9532         /* Identifiers of events. */
9533         uint16_t        event_id;
9534         /* Firmware trace log message */
9535         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_ID_FW_TRACE_MSG \
9536                 UINT32_C(0xfe)
9537         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_ID_LAST \
9538                 HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_ID_FW_TRACE_MSG
9539         /* Trace byte 0 to 3 */
9540         uint32_t        event_data2;
9541         /* Trace byte0 */
9542         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE0_MASK \
9543                 UINT32_C(0xff)
9544         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE0_SFT 0
9545         /* Trace byte1 */
9546         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE1_MASK \
9547                 UINT32_C(0xff00)
9548         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE1_SFT 8
9549         /* Trace byte2 */
9550         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE2_MASK \
9551                 UINT32_C(0xff0000)
9552         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE2_SFT 16
9553         /* Trace byte3 */
9554         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE3_MASK \
9555                 UINT32_C(0xff000000)
9556         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA2_BYTE3_SFT 24
9557         uint8_t opaque_v;
9558         /*
9559          * This value is written by the NIC such that it will be different
9560          * for each pass through the completion queue. The even passes
9561          * will write 1. The odd passes will write 0.
9562          */
9563         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_V          UINT32_C(0x1)
9564         /* opaque is 7 b */
9565         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_OPAQUE_MASK UINT32_C(0xfe)
9566         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_OPAQUE_SFT 1
9567         /* Trace flags */
9568         uint8_t timestamp_lo;
9569         /* Indicates if the string is partial or complete. */
9570         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_STRING \
9571                 UINT32_C(0x1)
9572         /* Complete string */
9573         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_STRING_COMPLETE \
9574                 UINT32_C(0x0)
9575         /* Partial string */
9576         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_STRING_PARTIAL \
9577                 UINT32_C(0x1)
9578         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_STRING_LAST \
9579                 HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_STRING_PARTIAL
9580         /* Indicates the firmware that sent the trace message. */
9581         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_FIRMWARE \
9582                 UINT32_C(0x2)
9583         /* Primary firmware */
9584         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_FIRMWARE_PRIMARY \
9585                 (UINT32_C(0x0) << 1)
9586         /* Secondary firmware */
9587         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_FIRMWARE_SECONDARY \
9588                 (UINT32_C(0x1) << 1)
9589         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_FIRMWARE_LAST \
9590                 HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_LO_FIRMWARE_SECONDARY
9591         /* Trace byte 4 to 5 */
9592         uint16_t        timestamp_hi;
9593         /* Trace byte4 */
9594         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_HI_BYTE4_MASK \
9595                 UINT32_C(0xff)
9596         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_HI_BYTE4_SFT 0
9597         /* Trace byte5 */
9598         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_HI_BYTE5_MASK \
9599                 UINT32_C(0xff00)
9600         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_TIMESTAMP_HI_BYTE5_SFT 8
9601         /* Trace byte 6 to 9 */
9602         uint32_t        event_data1;
9603         /* Trace byte6 */
9604         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE6_MASK \
9605                 UINT32_C(0xff)
9606         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE6_SFT 0
9607         /* Trace byte7 */
9608         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE7_MASK \
9609                 UINT32_C(0xff00)
9610         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE7_SFT 8
9611         /* Trace byte8 */
9612         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE8_MASK \
9613                 UINT32_C(0xff0000)
9614         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE8_SFT 16
9615         /* Trace byte9 */
9616         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE9_MASK \
9617                 UINT32_C(0xff000000)
9618         #define HWRM_ASYNC_EVENT_CMPL_FW_TRACE_MSG_EVENT_DATA1_BYTE9_SFT 24
9619 } __rte_packed;
9620
9621 /* hwrm_async_event_cmpl_hwrm_error (size:128b/16B) */
9622 struct hwrm_async_event_cmpl_hwrm_error {
9623         uint16_t        type;
9624         /*
9625          * This field indicates the exact type of the completion.
9626          * By convention, the LSB identifies the length of the
9627          * record in 16B units. Even values indicate 16B
9628          * records. Odd values indicate 32B
9629          * records.
9630          */
9631         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_MASK \
9632                 UINT32_C(0x3f)
9633         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_SFT             0
9634         /* HWRM Asynchronous Event Information */
9635         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_HWRM_ASYNC_EVENT \
9636                 UINT32_C(0x2e)
9637         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_LAST \
9638                 HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_HWRM_ASYNC_EVENT
9639         /* Identifiers of events. */
9640         uint16_t        event_id;
9641         /* HWRM Error */
9642         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_HWRM_ERROR \
9643                 UINT32_C(0xff)
9644         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_LAST \
9645                 HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_HWRM_ERROR
9646         /* Event specific data */
9647         uint32_t        event_data2;
9648         /* Severity of HWRM Error */
9649         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_MASK \
9650                 UINT32_C(0xff)
9651         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_SFT     0
9652         /* Warning */
9653         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_WARNING \
9654                 UINT32_C(0x0)
9655         /* Non-fatal Error */
9656         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_NONFATAL \
9657                 UINT32_C(0x1)
9658         /* Fatal Error */
9659         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_FATAL \
9660                 UINT32_C(0x2)
9661         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_LAST \
9662                 HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_FATAL
9663         uint8_t opaque_v;
9664         /*
9665          * This value is written by the NIC such that it will be different
9666          * for each pass through the completion queue. The even passes
9667          * will write 1. The odd passes will write 0.
9668          */
9669         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_V          UINT32_C(0x1)
9670         /* opaque is 7 b */
9671         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_OPAQUE_MASK UINT32_C(0xfe)
9672         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_OPAQUE_SFT 1
9673         /* 8-lsb timestamp from POR (100-msec resolution) */
9674         uint8_t timestamp_lo;
9675         /* 16-lsb timestamp from POR (100-msec resolution) */
9676         uint16_t        timestamp_hi;
9677         /* Event specific data */
9678         uint32_t        event_data1;
9679         /* Time stamp for error event */
9680         #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA1_TIMESTAMP \
9681                 UINT32_C(0x1)
9682 } __rte_packed;
9683
9684 /* metadata_base_msg (size:64b/8B) */
9685 struct metadata_base_msg {
9686         uint16_t        md_type_link;
9687         /* This field classifies the data present in the meta-data. */
9688         #define METADATA_BASE_MSG_MD_TYPE_MASK      UINT32_C(0x1f)
9689         #define METADATA_BASE_MSG_MD_TYPE_SFT       0
9690         /* Meta data fields are not valid */
9691         #define METADATA_BASE_MSG_MD_TYPE_NONE        UINT32_C(0x0)
9692         /*
9693          * This setting is used when packets are coming in-order. Depending on
9694          * the state of the receive context, the meta-data will carry different
9695          * information.
9696          */
9697         #define METADATA_BASE_MSG_MD_TYPE_TLS_INSYNC  UINT32_C(0x1)
9698         /*
9699          * With this setting HW passes the TCP sequence number of the TLS
9700          * record that it is requesting a resync on in the meta data.
9701          */
9702         #define METADATA_BASE_MSG_MD_TYPE_TLS_RESYNC  UINT32_C(0x2)
9703         #define METADATA_BASE_MSG_MD_TYPE_LAST \
9704                 METADATA_BASE_MSG_MD_TYPE_TLS_RESYNC
9705         /*
9706          * This field indicates where the next metadata block starts. It is
9707          * counted in 16B units. A value of zero indicates that there is no
9708          * metadata.
9709          */
9710         #define METADATA_BASE_MSG_LINK_MASK         UINT32_C(0x1e0)
9711         #define METADATA_BASE_MSG_LINK_SFT          5
9712         uint16_t        unused0;
9713         uint32_t        unused1;
9714 } __rte_packed;
9715
9716 /* tls_metadata_base_msg (size:64b/8B) */
9717 struct tls_metadata_base_msg {
9718         uint32_t        md_type_link_flags_kid_lo;
9719         /* This field classifies the data present in the meta-data. */
9720         #define TLS_METADATA_BASE_MSG_MD_TYPE_MASK \
9721                 UINT32_C(0x1f)
9722         #define TLS_METADATA_BASE_MSG_MD_TYPE_SFT                  0
9723         /*
9724          * This setting is used when packets are coming in-order. Depending on
9725          * the state of the receive context, the meta-data will carry different
9726          * information.
9727          */
9728         #define TLS_METADATA_BASE_MSG_MD_TYPE_TLS_INSYNC \
9729                 UINT32_C(0x1)
9730         /*
9731          * With this setting HW passes the TCP sequence number of the TLS
9732          * record that it is requesting a resync on in the meta data.
9733          */
9734         #define TLS_METADATA_BASE_MSG_MD_TYPE_TLS_RESYNC \
9735                 UINT32_C(0x2)
9736         #define TLS_METADATA_BASE_MSG_MD_TYPE_LAST \
9737                 TLS_METADATA_BASE_MSG_MD_TYPE_TLS_RESYNC
9738         /*
9739          * This field indicates where the next metadata block starts. It is
9740          * counted in 16B units. A value of zero indicates that there is no
9741          * metadata.
9742          */
9743         #define TLS_METADATA_BASE_MSG_LINK_MASK \
9744                 UINT32_C(0x1e0)
9745         #define TLS_METADATA_BASE_MSG_LINK_SFT                     5
9746         /* These are flags present in the metadata. */
9747         #define TLS_METADATA_BASE_MSG_FLAGS_MASK \
9748                 UINT32_C(0x1fffe00)
9749         #define TLS_METADATA_BASE_MSG_FLAGS_SFT                    9
9750         /*
9751          * A value of 1 implies that the packet was decrypted by HW. Otherwise
9752          * the packet is passed on as it came in on the wire.
9753          */
9754         #define TLS_METADATA_BASE_MSG_FLAGS_DECRYPTED \
9755                 UINT32_C(0x200)
9756         /*
9757          * This field indicates the state of the ghash field passed in the
9758          * meta-data.
9759          */
9760         #define TLS_METADATA_BASE_MSG_FLAGS_GHASH_MASK \
9761                 UINT32_C(0xc00)
9762         #define TLS_METADATA_BASE_MSG_FLAGS_GHASH_SFT               10
9763         /*
9764          * This enumeration states that the ghash is not valid in the
9765          * meta-data.
9766          */
9767         #define TLS_METADATA_BASE_MSG_FLAGS_GHASH_NOT_VALID \
9768                 (UINT32_C(0x0) << 10)
9769         /*
9770          * This enumeration indicates that this pkt contains the record's
9771          * tag and this pkt was received ooo, the partial_ghash field
9772          * contains the ghash.
9773          */
9774         #define TLS_METADATA_BASE_MSG_FLAGS_GHASH_CUR_REC \
9775                 (UINT32_C(0x1) << 10)
9776         /*
9777          * This enumeration indicates that the current record's tag wasn't
9778          * seen and the chip is moving on to the next record, the
9779          * partial_ghash field contains the ghash.
9780          */
9781         #define TLS_METADATA_BASE_MSG_FLAGS_GHASH_PRIOR_REC \
9782                 (UINT32_C(0x2) << 10)
9783         #define TLS_METADATA_BASE_MSG_FLAGS_GHASH_LAST \
9784                 TLS_METADATA_BASE_MSG_FLAGS_GHASH_PRIOR_REC
9785         /* This field indicates the status of tag authentication. */
9786         #define TLS_METADATA_BASE_MSG_FLAGS_TAG_AUTH_STATUS_MASK \
9787                 UINT32_C(0x3000)
9788         #define TLS_METADATA_BASE_MSG_FLAGS_TAG_AUTH_STATUS_SFT     12
9789         /*
9790          * This enumeration is set when there is no tags present in the
9791          * packet.
9792          */
9793         #define TLS_METADATA_BASE_MSG_FLAGS_TAG_AUTH_STATUS_NONE \
9794                 (UINT32_C(0x0) << 12)
9795         /*
9796          * This enumeration states that there is at least one tag in the
9797          * packet and every tag is valid.
9798          */
9799         #define TLS_METADATA_BASE_MSG_FLAGS_TAG_AUTH_STATUS_SUCCESS \
9800                 (UINT32_C(0x1) << 12)
9801         /*
9802          * This enumeration states that there is at least one tag in the
9803          * packet and at least one of the tag is invalid. The entire packet
9804          * is sent decrypted to the host.
9805          */
9806         #define TLS_METADATA_BASE_MSG_FLAGS_TAG_AUTH_STATUS_FAILURE \
9807                 (UINT32_C(0x2) << 12)
9808         #define TLS_METADATA_BASE_MSG_FLAGS_TAG_AUTH_STATUS_LAST \
9809                 TLS_METADATA_BASE_MSG_FLAGS_TAG_AUTH_STATUS_FAILURE
9810         /*
9811          * A value of 1 indicates that this packet contains a record that
9812          * starts in the packet and extends beyond the packet.
9813          */
9814         #define TLS_METADATA_BASE_MSG_FLAGS_HEADER_FLDS_VALID \
9815                 UINT32_C(0x4000)
9816         /*
9817          * This value indicates the lower 7-bit of the Crypto Key ID
9818          * associated with this operation.
9819          */
9820         #define TLS_METADATA_BASE_MSG_KID_LO_MASK \
9821                 UINT32_C(0xfe000000)
9822         #define TLS_METADATA_BASE_MSG_KID_LO_SFT                   25
9823         uint16_t        kid_hi;
9824         /*
9825          * This value indicates the upper 13-bit of the Crypto Key ID
9826          * associated with this operation.
9827          */
9828         #define TLS_METADATA_BASE_MSG_KID_HI_MASK UINT32_C(0x1fff)
9829         #define TLS_METADATA_BASE_MSG_KID_HI_SFT 0
9830         uint16_t        unused0;
9831 } __rte_packed;
9832
9833 /* tls_metadata_insync_msg (size:192b/24B) */
9834 struct tls_metadata_insync_msg {
9835         uint32_t        md_type_link_flags_kid_lo;
9836         /* This field classifies the data present in the meta-data. */
9837         #define TLS_METADATA_INSYNC_MSG_MD_TYPE_MASK \
9838                 UINT32_C(0x1f)
9839         #define TLS_METADATA_INSYNC_MSG_MD_TYPE_SFT                  0
9840         /*
9841          * This setting is used when packets are coming in-order. Depending on
9842          * the state of the receive context, the meta-data will carry different
9843          * information.
9844          */
9845         #define TLS_METADATA_INSYNC_MSG_MD_TYPE_TLS_INSYNC \
9846                 UINT32_C(0x1)
9847         #define TLS_METADATA_INSYNC_MSG_MD_TYPE_LAST \
9848                 TLS_METADATA_INSYNC_MSG_MD_TYPE_TLS_INSYNC
9849         /*
9850          * This field indicates where the next metadata block starts. It is
9851          * counted in 16B units. A value of zero indicates that there is no
9852          * metadata.
9853          */
9854         #define TLS_METADATA_INSYNC_MSG_LINK_MASK \
9855                 UINT32_C(0x1e0)
9856         #define TLS_METADATA_INSYNC_MSG_LINK_SFT                     5
9857         /* These are flags present in the metadata. */
9858         #define TLS_METADATA_INSYNC_MSG_FLAGS_MASK \
9859                 UINT32_C(0x1fffe00)
9860         #define TLS_METADATA_INSYNC_MSG_FLAGS_SFT                    9
9861         /*
9862          * A value of 1 implies that the packet was decrypted by HW. Otherwise
9863          * the packet is passed on as it came in on the wire.
9864          */
9865         #define TLS_METADATA_INSYNC_MSG_FLAGS_DECRYPTED \
9866                 UINT32_C(0x200)
9867         /*
9868          * This field indicates the state of the ghash field passed in the
9869          * meta-data.
9870          */
9871         #define TLS_METADATA_INSYNC_MSG_FLAGS_GHASH_MASK \
9872                 UINT32_C(0xc00)
9873         #define TLS_METADATA_INSYNC_MSG_FLAGS_GHASH_SFT               10
9874         /*
9875          * This enumeration states that the ghash is not valid in the
9876          * meta-data.
9877          */
9878         #define TLS_METADATA_INSYNC_MSG_FLAGS_GHASH_NOT_VALID \
9879                 (UINT32_C(0x0) << 10)
9880         /*
9881          * This enumeration indicates that this pkt contains the record's
9882          * tag and this pkt was received ooo, the partial_ghash field
9883          * contains the ghash.
9884          */
9885         #define TLS_METADATA_INSYNC_MSG_FLAGS_GHASH_CUR_REC \
9886                 (UINT32_C(0x1) << 10)
9887         /*
9888          * This enumeration indicates that the current record's tag wasn't
9889          * seen and the chip is moving on to the next record, the
9890          * partial_ghash field contains the ghash.
9891          */
9892         #define TLS_METADATA_INSYNC_MSG_FLAGS_GHASH_PRIOR_REC \
9893                 (UINT32_C(0x2) << 10)
9894         #define TLS_METADATA_INSYNC_MSG_FLAGS_GHASH_LAST \
9895                 TLS_METADATA_INSYNC_MSG_FLAGS_GHASH_PRIOR_REC
9896         /* This field indicates the status of tag authentication. */
9897         #define TLS_METADATA_INSYNC_MSG_FLAGS_TAG_AUTH_STATUS_MASK \
9898                 UINT32_C(0x3000)
9899         #define TLS_METADATA_INSYNC_MSG_FLAGS_TAG_AUTH_STATUS_SFT     12
9900         /*
9901          * This enumeration is set when there is no tags present in the
9902          * packet.
9903          */
9904         #define TLS_METADATA_INSYNC_MSG_FLAGS_TAG_AUTH_STATUS_NONE \
9905                 (UINT32_C(0x0) << 12)
9906         /*
9907          * This enumeration states that there is at least one tag in the
9908          * packet and every tag is valid.
9909          */
9910         #define TLS_METADATA_INSYNC_MSG_FLAGS_TAG_AUTH_STATUS_SUCCESS \
9911                 (UINT32_C(0x1) << 12)
9912         /*
9913          * This enumeration states that there is at least one tag in the
9914          * packet and at least one of the tag is invalid. The entire packet
9915          * is sent decrypted to the host.
9916          */
9917         #define TLS_METADATA_INSYNC_MSG_FLAGS_TAG_AUTH_STATUS_FAILURE \
9918                 (UINT32_C(0x2) << 12)
9919         #define TLS_METADATA_INSYNC_MSG_FLAGS_TAG_AUTH_STATUS_LAST \
9920                 TLS_METADATA_INSYNC_MSG_FLAGS_TAG_AUTH_STATUS_FAILURE
9921         /*
9922          * A value of 1 indicates that this packet contains a record that
9923          * starts in the packet and extends beyond the packet.
9924          */
9925         #define TLS_METADATA_INSYNC_MSG_FLAGS_HEADER_FLDS_VALID \
9926                 UINT32_C(0x4000)
9927         /*
9928          * This value indicates the lower 7-bit of the Crypto Key ID
9929          * associated with this operation.
9930          */
9931         #define TLS_METADATA_INSYNC_MSG_KID_LO_MASK \
9932                 UINT32_C(0xfe000000)
9933         #define TLS_METADATA_INSYNC_MSG_KID_LO_SFT                   25
9934         uint16_t        kid_hi;
9935         /*
9936          * This value indicates the upper 13-bit of the Crypto Key ID
9937          * associated with this operation.
9938          */
9939         #define TLS_METADATA_INSYNC_MSG_KID_HI_MASK UINT32_C(0x1fff)
9940         #define TLS_METADATA_INSYNC_MSG_KID_HI_SFT 0
9941         /*
9942          * This field is only valid when md_type is set to tls_insync. This field
9943          * indicates the offset within the current TCP packet where the TLS header
9944          * starts. If there are multiple TLS headers in the packet, this provides
9945          * the offset of the last TLS header.
9946          *
9947          * The field is calculated by subtracting TCP sequence number of the first
9948          * byte of the TCP payload of the packet from the TCP sequence number of
9949          * the last TLS header in the packet.
9950          */
9951         uint16_t        tls_header_offset;
9952         /*
9953          * This is the sequence Number of the record that was processed by the HW.
9954          * If there are multiple records in a packet, this would be the sequence
9955          * number of the last record.
9956          */
9957         uint64_t        record_seq_num;
9958         /*
9959          * This field contains cumulative partial GHASH value of all the packets
9960          * decrypted by the HW associated with a TLS record. This field is valid
9961          * on when packets belonging to have arrived out-of-order and HW could
9962          * not decrypt every packet and authenticate the record. Partial GHASH is
9963          * only sent out with packet having the TAG field.
9964          */
9965         uint64_t        partial_ghash;
9966 } __rte_packed;
9967
9968 /* tls_metadata_resync_msg (size:256b/32B) */
9969 struct tls_metadata_resync_msg {
9970         uint32_t        md_type_link_flags_kid_lo;
9971         /* This field classifies the data present in the meta-data. */
9972         #define TLS_METADATA_RESYNC_MSG_MD_TYPE_MASK \
9973                 UINT32_C(0x1f)
9974         #define TLS_METADATA_RESYNC_MSG_MD_TYPE_SFT                 0
9975         /*
9976          * With this setting HW passes the TCP sequence number of the TLS
9977          * record that it is requesting a resync on in the meta data.
9978          */
9979         #define TLS_METADATA_RESYNC_MSG_MD_TYPE_TLS_RESYNC \
9980                 UINT32_C(0x2)
9981         #define TLS_METADATA_RESYNC_MSG_MD_TYPE_LAST \
9982                 TLS_METADATA_RESYNC_MSG_MD_TYPE_TLS_RESYNC
9983         /*
9984          * This field indicates where the next metadata block starts. It is
9985          * counted in 16B units. A value of zero indicates that there is no
9986          * metadata.
9987          */
9988         #define TLS_METADATA_RESYNC_MSG_LINK_MASK \
9989                 UINT32_C(0x1e0)
9990         #define TLS_METADATA_RESYNC_MSG_LINK_SFT                    5
9991         /* These are flags present in the metadata. */
9992         #define TLS_METADATA_RESYNC_MSG_FLAGS_MASK \
9993                 UINT32_C(0x1fffe00)
9994         #define TLS_METADATA_RESYNC_MSG_FLAGS_SFT                   9
9995         /*
9996          * A value of 1 implies that the packet was decrypted by HW. Otherwise
9997          * the packet is passed on as it came in on the wire.
9998          */
9999         #define TLS_METADATA_RESYNC_MSG_FLAGS_DECRYPTED \
10000                 UINT32_C(0x200)
10001         /*
10002          * This field indicates the state of the ghash field passed in the
10003          * meta-data.
10004          */
10005         #define TLS_METADATA_RESYNC_MSG_FLAGS_GHASH_MASK \
10006                 UINT32_C(0xc00)
10007         #define TLS_METADATA_RESYNC_MSG_FLAGS_GHASH_SFT              10
10008         /*
10009          * This enumeration states that the ghash is not valid in the
10010          * meta-data.
10011          */
10012         #define TLS_METADATA_RESYNC_MSG_FLAGS_GHASH_NOT_VALID \
10013                 (UINT32_C(0x0) << 10)
10014         #define TLS_METADATA_RESYNC_MSG_FLAGS_GHASH_LAST \
10015                 TLS_METADATA_RESYNC_MSG_FLAGS_GHASH_NOT_VALID
10016         /* This field indicates the status of tag authentication. */
10017         #define TLS_METADATA_RESYNC_MSG_FLAGS_TAG_AUTH_STATUS_MASK \
10018                 UINT32_C(0x3000)
10019         #define TLS_METADATA_RESYNC_MSG_FLAGS_TAG_AUTH_STATUS_SFT    12
10020         /*
10021          * This enumeration is set when there is no tags present in the
10022          * packet.
10023          */
10024         #define TLS_METADATA_RESYNC_MSG_FLAGS_TAG_AUTH_STATUS_NONE \
10025                 (UINT32_C(0x0) << 12)
10026         #define TLS_METADATA_RESYNC_MSG_FLAGS_TAG_AUTH_STATUS_LAST \
10027                 TLS_METADATA_RESYNC_MSG_FLAGS_TAG_AUTH_STATUS_NONE
10028         /*
10029          * A value of 1 indicates that this packet contains a record that
10030          * starts in the packet and extends beyond the packet.
10031          */
10032         #define TLS_METADATA_RESYNC_MSG_FLAGS_HEADER_FLDS_VALID \
10033                 UINT32_C(0x4000)
10034         /*
10035          * This value indicates the lower 7-bit of the Crypto Key ID
10036          * associated with this operation.
10037          */
10038         #define TLS_METADATA_RESYNC_MSG_KID_LO_MASK \
10039                 UINT32_C(0xfe000000)
10040         #define TLS_METADATA_RESYNC_MSG_KID_LO_SFT                  25
10041         uint16_t        kid_hi;
10042         /*
10043          * This value indicates the upper 13-bit of the Crypto Key ID
10044          * associated with this operation.
10045          */
10046         #define TLS_METADATA_RESYNC_MSG_KID_HI_MASK UINT32_C(0x1fff)
10047         #define TLS_METADATA_RESYNC_MSG_KID_HI_SFT 0
10048         /* This field is unused in this context. */
10049         uint16_t        metadata_0;
10050         /*
10051          * This field indicates the TCP sequence number of the TLS record that HW
10052          * is requesting a resync on from the Driver. HW will keep a count of the
10053          * TLS records it found after this record (delta_records). Driver will
10054          * provide the TLS Record Sequence Number associated with the record. HW
10055          * will add the delta_records to the Record Sequence Number provided by
10056          * the driver and get back on sync.
10057          */
10058         uint32_t        resync_record_tcp_seq_num;
10059         uint32_t        unused0;
10060         /* This field is unused in this context. */
10061         uint64_t        metadata_2;
10062         /* This field is unused in this context. */
10063         uint64_t        metadata_3;
10064 } __rte_packed;
10065
10066 /*******************
10067  * hwrm_func_reset *
10068  *******************/
10069
10070
10071 /* hwrm_func_reset_input (size:192b/24B) */
10072 struct hwrm_func_reset_input {
10073         /* The HWRM command request type. */
10074         uint16_t        req_type;
10075         /*
10076          * The completion ring to send the completion event on. This should
10077          * be the NQ ID returned from the `nq_alloc` HWRM command.
10078          */
10079         uint16_t        cmpl_ring;
10080         /*
10081          * The sequence ID is used by the driver for tracking multiple
10082          * commands. This ID is treated as opaque data by the firmware and
10083          * the value is returned in the `hwrm_resp_hdr` upon completion.
10084          */
10085         uint16_t        seq_id;
10086         /*
10087          * The target ID of the command:
10088          * * 0x0-0xFFF8 - The function ID
10089          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
10090          * * 0xFFFD - Reserved for user-space HWRM interface
10091          * * 0xFFFF - HWRM
10092          */
10093         uint16_t        target_id;
10094         /*
10095          * A physical address pointer pointing to a host buffer that the
10096          * command's response data will be written. This can be either a host
10097          * physical address (HPA) or a guest physical address (GPA) and must
10098          * point to a physically contiguous block of memory.
10099          */
10100         uint64_t        resp_addr;
10101         uint32_t        enables;
10102         /*
10103          * This bit must be '1' for the vf_id_valid field to be
10104          * configured.
10105          */
10106         #define HWRM_FUNC_RESET_INPUT_ENABLES_VF_ID_VALID     UINT32_C(0x1)
10107         /*
10108          * The ID of the VF that this PF is trying to reset.
10109          * Only the parent PF shall be allowed to reset a child VF.
10110          *
10111          * A parent PF driver shall use this field only when a specific child VF
10112          * is requested to be reset.
10113          */
10114         uint16_t        vf_id;
10115         /* This value indicates the level of a function reset. */
10116         uint8_t func_reset_level;
10117         /*
10118          * Reset the caller function and its children VFs (if any). If no
10119          * children functions exist, then reset the caller function only.
10120          */
10121         #define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETALL \
10122                 UINT32_C(0x0)
10123         /* Reset the caller function only */
10124         #define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETME \
10125                 UINT32_C(0x1)
10126         /*
10127          * Reset all children VFs of the caller function driver if the
10128          * caller is a PF driver.
10129          * It is an error to specify this level by a VF driver.
10130          * It is an error to specify this level by a PF driver with
10131          * no children VFs.
10132          */
10133         #define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETCHILDREN \
10134                 UINT32_C(0x2)
10135         /*
10136          * Reset a specific VF of the caller function driver if the caller
10137          * is the parent PF driver.
10138          * It is an error to specify this level by a VF driver.
10139          * It is an error to specify this level by a PF driver that is not
10140          * the parent of the VF that is being requested to reset.
10141          */
10142         #define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETVF \
10143                 UINT32_C(0x3)
10144         #define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_LAST \
10145                 HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETVF
10146         uint8_t unused_0;
10147 } __rte_packed;
10148
10149 /* hwrm_func_reset_output (size:128b/16B) */
10150 struct hwrm_func_reset_output {
10151         /* The specific error status for the command. */
10152         uint16_t        error_code;
10153         /* The HWRM command request type. */
10154         uint16_t        req_type;
10155         /* The sequence ID from the original command. */
10156         uint16_t        seq_id;
10157         /* The length of the response data in number of bytes. */
10158         uint16_t        resp_len;
10159         uint8_t unused_0[7];
10160         /*
10161          * This field is used in Output records to indicate that the output
10162          * is completely written to RAM.  This field should be read as '1'
10163          * to indicate that the output has been completely written.
10164          * When writing a command completion or response to an internal processor,
10165          * the order of writes has to be such that this field is written last.
10166          */
10167         uint8_t valid;
10168 } __rte_packed;
10169
10170 /********************
10171  * hwrm_func_getfid *
10172  ********************/
10173
10174
10175 /* hwrm_func_getfid_input (size:192b/24B) */
10176 struct hwrm_func_getfid_input {
10177         /* The HWRM command request type. */
10178         uint16_t        req_type;
10179         /*
10180          * The completion ring to send the completion event on. This should
10181          * be the NQ ID returned from the `nq_alloc` HWRM command.
10182          */
10183         uint16_t        cmpl_ring;
10184         /*
10185          * The sequence ID is used by the driver for tracking multiple
10186          * commands. This ID is treated as opaque data by the firmware and
10187          * the value is returned in the `hwrm_resp_hdr` upon completion.
10188          */
10189         uint16_t        seq_id;
10190         /*
10191          * The target ID of the command:
10192          * * 0x0-0xFFF8 - The function ID
10193          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
10194          * * 0xFFFD - Reserved for user-space HWRM interface
10195          * * 0xFFFF - HWRM
10196          */
10197         uint16_t        target_id;
10198         /*
10199          * A physical address pointer pointing to a host buffer that the
10200          * command's response data will be written. This can be either a host
10201          * physical address (HPA) or a guest physical address (GPA) and must
10202          * point to a physically contiguous block of memory.
10203          */
10204         uint64_t        resp_addr;
10205         uint32_t        enables;
10206         /*
10207          * This bit must be '1' for the pci_id field to be
10208          * configured.
10209          */
10210         #define HWRM_FUNC_GETFID_INPUT_ENABLES_PCI_ID     UINT32_C(0x1)
10211         /*
10212          * This value is the PCI ID of the queried function.
10213          * If ARI is enabled, then it is
10214          * Bus Number (8b):Function Number(8b). Otherwise, it is
10215          * Bus Number (8b):Device Number (5b):Function Number(3b).
10216          */
10217         uint16_t        pci_id;
10218         uint8_t unused_0[2];
10219 } __rte_packed;
10220
10221 /* hwrm_func_getfid_output (size:128b/16B) */
10222 struct hwrm_func_getfid_output {
10223         /* The specific error status for the command. */
10224         uint16_t        error_code;
10225         /* The HWRM command request type. */
10226         uint16_t        req_type;
10227         /* The sequence ID from the original command. */
10228         uint16_t        seq_id;
10229         /* The length of the response data in number of bytes. */
10230         uint16_t        resp_len;
10231         /*
10232          * FID value.  This value is used to identify operations on the PCI
10233          * bus as belonging to a particular PCI function.
10234          */
10235         uint16_t        fid;
10236         uint8_t unused_0[5];
10237         /*
10238          * This field is used in Output records to indicate that the output
10239          * is completely written to RAM.  This field should be read as '1'
10240          * to indicate that the output has been completely written.
10241          * When writing a command completion or response to an internal processor,
10242          * the order of writes has to be such that this field is written last.
10243          */
10244         uint8_t valid;
10245 } __rte_packed;
10246
10247 /**********************
10248  * hwrm_func_vf_alloc *
10249  **********************/
10250
10251
10252 /* hwrm_func_vf_alloc_input (size:192b/24B) */
10253 struct hwrm_func_vf_alloc_input {
10254         /* The HWRM command request type. */
10255         uint16_t        req_type;
10256         /*
10257          * The completion ring to send the completion event on. This should
10258          * be the NQ ID returned from the `nq_alloc` HWRM command.
10259          */
10260         uint16_t        cmpl_ring;
10261         /*
10262          * The sequence ID is used by the driver for tracking multiple
10263          * commands. This ID is treated as opaque data by the firmware and
10264          * the value is returned in the `hwrm_resp_hdr` upon completion.
10265          */
10266         uint16_t        seq_id;
10267         /*
10268          * The target ID of the command:
10269          * * 0x0-0xFFF8 - The function ID
10270          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
10271          * * 0xFFFD - Reserved for user-space HWRM interface
10272          * * 0xFFFF - HWRM
10273          */
10274         uint16_t        target_id;
10275         /*
10276          * A physical address pointer pointing to a host buffer that the
10277          * command's response data will be written. This can be either a host
10278          * physical address (HPA) or a guest physical address (GPA) and must
10279          * point to a physically contiguous block of memory.
10280          */
10281         uint64_t        resp_addr;
10282         uint32_t        enables;
10283         /*
10284          * This bit must be '1' for the first_vf_id field to be
10285          * configured.
10286          */
10287         #define HWRM_FUNC_VF_ALLOC_INPUT_ENABLES_FIRST_VF_ID     UINT32_C(0x1)
10288         /*
10289          * This value is used to identify a Virtual Function (VF).
10290          * The scope of VF ID is local within a PF.
10291          */
10292         uint16_t        first_vf_id;
10293         /* The number of virtual functions requested. */
10294         uint16_t        num_vfs;
10295 } __rte_packed;
10296
10297 /* hwrm_func_vf_alloc_output (size:128b/16B) */
10298 struct hwrm_func_vf_alloc_output {
10299         /* The specific error status for the command. */
10300         uint16_t        error_code;
10301         /* The HWRM command request type. */
10302         uint16_t        req_type;
10303         /* The sequence ID from the original command. */
10304         uint16_t        seq_id;
10305         /* The length of the response data in number of bytes. */
10306         uint16_t        resp_len;
10307         /* The ID of the first VF allocated. */
10308         uint16_t        first_vf_id;
10309         uint8_t unused_0[5];
10310         /*
10311          * This field is used in Output records to indicate that the output
10312          * is completely written to RAM.  This field should be read as '1'
10313          * to indicate that the output has been completely written.
10314          * When writing a command completion or response to an internal processor,
10315          * the order of writes has to be such that this field is written last.
10316          */
10317         uint8_t valid;
10318 } __rte_packed;
10319
10320 /*********************
10321  * hwrm_func_vf_free *
10322  *********************/
10323
10324
10325 /* hwrm_func_vf_free_input (size:192b/24B) */
10326 struct hwrm_func_vf_free_input {
10327         /* The HWRM command request type. */
10328         uint16_t        req_type;
10329         /*
10330          * The completion ring to send the completion event on. This should
10331          * be the NQ ID returned from the `nq_alloc` HWRM command.
10332          */
10333         uint16_t        cmpl_ring;
10334         /*
10335          * The sequence ID is used by the driver for tracking multiple
10336          * commands. This ID is treated as opaque data by the firmware and
10337          * the value is returned in the `hwrm_resp_hdr` upon completion.
10338          */
10339         uint16_t        seq_id;
10340         /*
10341          * The target ID of the command:
10342          * * 0x0-0xFFF8 - The function ID
10343          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
10344          * * 0xFFFD - Reserved for user-space HWRM interface
10345          * * 0xFFFF - HWRM
10346          */
10347         uint16_t        target_id;
10348         /*
10349          * A physical address pointer pointing to a host buffer that the
10350          * command's response data will be written. This can be either a host
10351          * physical address (HPA) or a guest physical address (GPA) and must
10352          * point to a physically contiguous block of memory.
10353          */
10354         uint64_t        resp_addr;
10355         uint32_t        enables;
10356         /*
10357          * This bit must be '1' for the first_vf_id field to be
10358          * configured.
10359          */
10360         #define HWRM_FUNC_VF_FREE_INPUT_ENABLES_FIRST_VF_ID     UINT32_C(0x1)
10361         /*
10362          * This value is used to identify a Virtual Function (VF).
10363          * The scope of VF ID is local within a PF.
10364          */
10365         uint16_t        first_vf_id;
10366         /*
10367          * The number of virtual functions requested.
10368          * 0xFFFF - Cleanup all children of this PF.
10369          */
10370         uint16_t        num_vfs;
10371 } __rte_packed;
10372
10373 /* hwrm_func_vf_free_output (size:128b/16B) */
10374 struct hwrm_func_vf_free_output {
10375         /* The specific error status for the command. */
10376         uint16_t        error_code;
10377         /* The HWRM command request type. */
10378         uint16_t        req_type;
10379         /* The sequence ID from the original command. */
10380         uint16_t        seq_id;
10381         /* The length of the response data in number of bytes. */
10382         uint16_t        resp_len;
10383         uint8_t unused_0[7];
10384         /*
10385          * This field is used in Output records to indicate that the output
10386          * is completely written to RAM.  This field should be read as '1'
10387          * to indicate that the output has been completely written.
10388          * When writing a command completion or response to an internal processor,
10389          * the order of writes has to be such that this field is written last.
10390          */
10391         uint8_t valid;
10392 } __rte_packed;
10393
10394 /********************
10395  * hwrm_func_vf_cfg *
10396  ********************/
10397
10398
10399 /* hwrm_func_vf_cfg_input (size:448b/56B) */
10400 struct hwrm_func_vf_cfg_input {
10401         /* The HWRM command request type. */
10402         uint16_t        req_type;
10403         /*
10404          * The completion ring to send the completion event on. This should
10405          * be the NQ ID returned from the `nq_alloc` HWRM command.
10406          */
10407         uint16_t        cmpl_ring;
10408         /*
10409          * The sequence ID is used by the driver for tracking multiple
10410          * commands. This ID is treated as opaque data by the firmware and
10411          * the value is returned in the `hwrm_resp_hdr` upon completion.
10412          */
10413         uint16_t        seq_id;
10414         /*
10415          * The target ID of the command:
10416          * * 0x0-0xFFF8 - The function ID
10417          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
10418          * * 0xFFFD - Reserved for user-space HWRM interface
10419          * * 0xFFFF - HWRM
10420          */
10421         uint16_t        target_id;
10422         /*
10423          * A physical address pointer pointing to a host buffer that the
10424          * command's response data will be written. This can be either a host
10425          * physical address (HPA) or a guest physical address (GPA) and must
10426          * point to a physically contiguous block of memory.
10427          */
10428         uint64_t        resp_addr;
10429         uint32_t        enables;
10430         /*
10431          * This bit must be '1' for the mtu field to be
10432          * configured.
10433          */
10434         #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_MTU \
10435                 UINT32_C(0x1)
10436         /*
10437          * This bit must be '1' for the guest_vlan field to be
10438          * configured.
10439          */
10440         #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_GUEST_VLAN \
10441                 UINT32_C(0x2)
10442         /*
10443          * This bit must be '1' for the async_event_cr field to be
10444          * configured.
10445          */
10446         #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_ASYNC_EVENT_CR \
10447                 UINT32_C(0x4)
10448         /*
10449          * This bit must be '1' for the dflt_mac_addr field to be
10450          * configured.
10451          */
10452         #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_DFLT_MAC_ADDR \
10453                 UINT32_C(0x8)
10454         /*
10455          * This bit must be '1' for the num_rsscos_ctxs field to be
10456          * configured.
10457          */
10458         #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_RSSCOS_CTXS \
10459                 UINT32_C(0x10)
10460         /*
10461          * This bit must be '1' for the num_cmpl_rings field to be
10462          * configured.
10463          */
10464         #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_CMPL_RINGS \
10465                 UINT32_C(0x20)
10466         /*
10467          * This bit must be '1' for the num_tx_rings field to be
10468          * configured.
10469          */
10470         #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_TX_RINGS \
10471                 UINT32_C(0x40)
10472         /*
10473          * This bit must be '1' for the num_rx_rings field to be
10474          * configured.
10475          */
10476         #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_RX_RINGS \
10477                 UINT32_C(0x80)
10478         /*
10479          * This bit must be '1' for the num_l2_ctxs field to be
10480          * configured.
10481          */
10482         #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_L2_CTXS \
10483                 UINT32_C(0x100)
10484         /*
10485          * This bit must be '1' for the num_vnics field to be
10486          * configured.
10487          */
10488         #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_VNICS \
10489                 UINT32_C(0x200)
10490         /*
10491          * This bit must be '1' for the num_stat_ctxs field to be
10492          * configured.
10493          */
10494         #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_STAT_CTXS \
10495                 UINT32_C(0x400)
10496         /*
10497          * This bit must be '1' for the num_hw_ring_grps field to be
10498          * configured.
10499          */
10500         #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_HW_RING_GRPS \
10501                 UINT32_C(0x800)
10502         /*
10503          * The maximum transmission unit requested on the function.
10504          * The HWRM should make sure that the mtu of
10505          * the function does not exceed the mtu of the physical
10506          * port that this function is associated with.
10507          *
10508          * In addition to requesting mtu per function, it is
10509          * possible to configure mtu per transmit ring.
10510          * By default, the mtu of each transmit ring associated
10511          * with a function is equal to the mtu of the function.
10512          * The HWRM should make sure that the mtu of each transmit
10513          * ring that is assigned to a function has a valid mtu.
10514          */
10515         uint16_t        mtu;
10516         /*
10517          * The guest VLAN for the function being configured.
10518          * This field's format is same as 802.1Q Tag's
10519          * Tag Control Information (TCI) format that includes both
10520          * Priority Code Point (PCP) and VLAN Identifier (VID).
10521          */
10522         uint16_t        guest_vlan;
10523         /*
10524          * ID of the target completion ring for receiving asynchronous
10525          * event completions. If this field is not valid, then the
10526          * HWRM shall use the default completion ring of the function
10527          * that is being configured as the target completion ring for
10528          * providing any asynchronous event completions for that
10529          * function.
10530          * If this field is valid, then the HWRM shall use the
10531          * completion ring identified by this ID as the target
10532          * completion ring for providing any asynchronous event
10533          * completions for the function that is being configured.
10534          */
10535         uint16_t        async_event_cr;
10536         /*
10537          * This value is the current MAC address requested by the VF
10538          * driver to be configured on this VF. A value of
10539          * 00-00-00-00-00-00 indicates no MAC address configuration
10540          * is requested by the VF driver.
10541          * The parent PF driver may reject or overwrite this
10542          * MAC address.
10543          */
10544         uint8_t dflt_mac_addr[6];
10545         uint32_t        flags;
10546         /*
10547          * This bit requests that the firmware test to see if all the assets
10548          * requested in this command (i.e. number of TX rings) are available.
10549          * The firmware will return an error if the requested assets are
10550          * not available. The firwmare will NOT reserve the assets if they
10551          * are available.
10552          */
10553         #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_TX_ASSETS_TEST \
10554                 UINT32_C(0x1)
10555         /*
10556          * This bit requests that the firmware test to see if all the assets
10557          * requested in this command (i.e. number of RX rings) are available.
10558          * The firmware will return an error if the requested assets are
10559          * not available. The firwmare will NOT reserve the assets if they
10560          * are available.
10561          */
10562         #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_RX_ASSETS_TEST \
10563                 UINT32_C(0x2)
10564         /*
10565          * This bit requests that the firmware test to see if all the assets
10566          * requested in this command (i.e. number of CMPL rings) are available.
10567          * The firmware will return an error if the requested assets are
10568          * not available. The firwmare will NOT reserve the assets if they
10569          * are available.
10570          */
10571         #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_CMPL_ASSETS_TEST \
10572                 UINT32_C(0x4)
10573         /*
10574          * This bit requests that the firmware test to see if all the assets
10575          * requested in this command (i.e. number of RSS ctx) are available.
10576          * The firmware will return an error if the requested assets are
10577          * not available. The firwmare will NOT reserve the assets if they
10578          * are available.
10579          */
10580         #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_RSSCOS_CTX_ASSETS_TEST \
10581                 UINT32_C(0x8)
10582         /*
10583          * This bit requests that the firmware test to see if all the assets
10584          * requested in this command (i.e. number of ring groups) are available.
10585          * The firmware will return an error if the requested assets are
10586          * not available. The firwmare will NOT reserve the assets if they
10587          * are available.
10588          */
10589         #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_RING_GRP_ASSETS_TEST \
10590                 UINT32_C(0x10)
10591         /*
10592          * This bit requests that the firmware test to see if all the assets
10593          * requested in this command (i.e. number of stat ctx) are available.
10594          * The firmware will return an error if the requested assets are
10595          * not available. The firwmare will NOT reserve the assets if they
10596          * are available.
10597          */
10598         #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_STAT_CTX_ASSETS_TEST \
10599                 UINT32_C(0x20)
10600         /*
10601          * This bit requests that the firmware test to see if all the assets
10602          * requested in this command (i.e. number of VNICs) are available.
10603          * The firmware will return an error if the requested assets are
10604          * not available. The firwmare will NOT reserve the assets if they
10605          * are available.
10606          */
10607         #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_VNIC_ASSETS_TEST \
10608                 UINT32_C(0x40)
10609         /*
10610          * This bit requests that the firmware test to see if all the assets
10611          * requested in this command (i.e. number of L2 ctx) are available.
10612          * The firmware will return an error if the requested assets are
10613          * not available. The firwmare will NOT reserve the assets if they
10614          * are available.
10615          */
10616         #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_L2_CTX_ASSETS_TEST \
10617                 UINT32_C(0x80)
10618         /*
10619          * If this bit is set to 1, the VF driver is requesting FW to enable
10620          * PPP TX PUSH feature on all the TX rings specified in the
10621          * num_tx_rings field. By default, the PPP TX push feature is
10622          * disabled for all the TX rings of the VF. This flag is ignored if
10623          * the num_tx_rings field is not specified or the VF doesn't support
10624          * PPP tx push feature.
10625          */
10626         #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_PPP_PUSH_MODE_ENABLE \
10627                 UINT32_C(0x100)
10628         /*
10629          * If this bit is set to 1, the VF driver is requesting FW to disable
10630          * PPP TX PUSH feature on all the TX rings of the VF. This flag is
10631          * ignored if the VF doesn't support PPP tx push feature.
10632          */
10633         #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_PPP_PUSH_MODE_DISABLE \
10634                 UINT32_C(0x200)
10635         /* The number of RSS/COS contexts requested for the VF. */
10636         uint16_t        num_rsscos_ctxs;
10637         /* The number of completion rings requested for the VF. */
10638         uint16_t        num_cmpl_rings;
10639         /* The number of transmit rings requested for the VF. */
10640         uint16_t        num_tx_rings;
10641         /* The number of receive rings requested for the VF. */
10642         uint16_t        num_rx_rings;
10643         /* The number of L2 contexts requested for the VF. */
10644         uint16_t        num_l2_ctxs;
10645         /* The number of vnics requested for the VF. */
10646         uint16_t        num_vnics;
10647         /* The number of statistic contexts requested for the VF. */
10648         uint16_t        num_stat_ctxs;
10649         /* The number of HW ring groups requested for the VF. */
10650         uint16_t        num_hw_ring_grps;
10651         uint8_t unused_0[4];
10652 } __rte_packed;
10653
10654 /* hwrm_func_vf_cfg_output (size:128b/16B) */
10655 struct hwrm_func_vf_cfg_output {
10656         /* The specific error status for the command. */
10657         uint16_t        error_code;
10658         /* The HWRM command request type. */
10659         uint16_t        req_type;
10660         /* The sequence ID from the original command. */
10661         uint16_t        seq_id;
10662         /* The length of the response data in number of bytes. */
10663         uint16_t        resp_len;
10664         uint8_t unused_0[7];
10665         /*
10666          * This field is used in Output records to indicate that the output
10667          * is completely written to RAM.  This field should be read as '1'
10668          * to indicate that the output has been completely written.
10669          * When writing a command completion or response to an internal processor,
10670          * the order of writes has to be such that this field is written last.
10671          */
10672         uint8_t valid;
10673 } __rte_packed;
10674
10675 /*******************
10676  * hwrm_func_qcaps *
10677  *******************/
10678
10679
10680 /* hwrm_func_qcaps_input (size:192b/24B) */
10681 struct hwrm_func_qcaps_input {
10682         /* The HWRM command request type. */
10683         uint16_t        req_type;
10684         /*
10685          * The completion ring to send the completion event on. This should
10686          * be the NQ ID returned from the `nq_alloc` HWRM command.
10687          */
10688         uint16_t        cmpl_ring;
10689         /*
10690          * The sequence ID is used by the driver for tracking multiple
10691          * commands. This ID is treated as opaque data by the firmware and
10692          * the value is returned in the `hwrm_resp_hdr` upon completion.
10693          */
10694         uint16_t        seq_id;
10695         /*
10696          * The target ID of the command:
10697          * * 0x0-0xFFF8 - The function ID
10698          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
10699          * * 0xFFFD - Reserved for user-space HWRM interface
10700          * * 0xFFFF - HWRM
10701          */
10702         uint16_t        target_id;
10703         /*
10704          * A physical address pointer pointing to a host buffer that the
10705          * command's response data will be written. This can be either a host
10706          * physical address (HPA) or a guest physical address (GPA) and must
10707          * point to a physically contiguous block of memory.
10708          */
10709         uint64_t        resp_addr;
10710         /*
10711          * Function ID of the function that is being queried.
10712          * 0xFF... (All Fs) if the query is for the requesting
10713          * function.
10714          * 0xFFFE (REQUESTING_PARENT_FID) This is a special FID
10715          * to be used by a trusted VF to query its parent PF.
10716          */
10717         uint16_t        fid;
10718         uint8_t unused_0[6];
10719 } __rte_packed;
10720
10721 /* hwrm_func_qcaps_output (size:704b/88B) */
10722 struct hwrm_func_qcaps_output {
10723         /* The specific error status for the command. */
10724         uint16_t        error_code;
10725         /* The HWRM command request type. */
10726         uint16_t        req_type;
10727         /* The sequence ID from the original command. */
10728         uint16_t        seq_id;
10729         /* The length of the response data in number of bytes. */
10730         uint16_t        resp_len;
10731         /*
10732          * FID value.  This value is used to identify operations on the PCI
10733          * bus as belonging to a particular PCI function.
10734          */
10735         uint16_t        fid;
10736         /*
10737          * Port ID of port that this function is associated with.
10738          * Valid only for the PF.
10739          * 0xFF... (All Fs) if this function is not associated with
10740          * any port.
10741          * 0xFF... (All Fs) if this function is called from a VF.
10742          */
10743         uint16_t        port_id;
10744         uint32_t        flags;
10745         /* If 1, then Push mode is supported on this function. */
10746         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_PUSH_MODE_SUPPORTED \
10747                 UINT32_C(0x1)
10748         /*
10749          * If 1, then the global MSI-X auto-masking is enabled for the
10750          * device.
10751          */
10752         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_GLOBAL_MSIX_AUTOMASKING \
10753                 UINT32_C(0x2)
10754         /*
10755          * If 1, then the Precision Time Protocol (PTP) processing
10756          * is supported on this function.
10757          * The HWRM should enable PTP on only a single Physical
10758          * Function (PF) per port.
10759          */
10760         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_PTP_SUPPORTED \
10761                 UINT32_C(0x4)
10762         /*
10763          * If 1, then RDMA over Converged Ethernet (RoCE) v1
10764          * is supported on this function.
10765          */
10766         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ROCE_V1_SUPPORTED \
10767                 UINT32_C(0x8)
10768         /*
10769          * If 1, then RDMA over Converged Ethernet (RoCE) v2
10770          * is supported on this function.
10771          */
10772         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ROCE_V2_SUPPORTED \
10773                 UINT32_C(0x10)
10774         /*
10775          * If 1, then control and configuration of WoL magic packet
10776          * are supported on this function.
10777          */
10778         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_WOL_MAGICPKT_SUPPORTED \
10779                 UINT32_C(0x20)
10780         /*
10781          * If 1, then control and configuration of bitmap pattern
10782          * packet are supported on this function.
10783          */
10784         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_WOL_BMP_SUPPORTED \
10785                 UINT32_C(0x40)
10786         /*
10787          * If set to 1, then the control and configuration of rate limit
10788          * of an allocated TX ring on the queried function is supported.
10789          */
10790         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_TX_RING_RL_SUPPORTED \
10791                 UINT32_C(0x80)
10792         /*
10793          * If 1, then control and configuration of minimum and
10794          * maximum bandwidths are supported on the queried function.
10795          */
10796         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_TX_BW_CFG_SUPPORTED \
10797                 UINT32_C(0x100)
10798         /*
10799          * If the query is for a VF, then this flag shall be ignored.
10800          * If this query is for a PF and this flag is set to 1,
10801          * then the PF has the capability to set the rate limits
10802          * on the TX rings of its children VFs.
10803          * If this query is for a PF and this flag is set to 0, then
10804          * the PF does not have the capability to set the rate limits
10805          * on the TX rings of its children VFs.
10806          */
10807         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_VF_TX_RING_RL_SUPPORTED \
10808                 UINT32_C(0x200)
10809         /*
10810          * If the query is for a VF, then this flag shall be ignored.
10811          * If this query is for a PF and this flag is set to 1,
10812          * then the PF has the capability to set the minimum and/or
10813          * maximum bandwidths for its children VFs.
10814          * If this query is for a PF and this flag is set to 0, then
10815          * the PF does not have the capability to set the minimum or
10816          * maximum bandwidths for its children VFs.
10817          */
10818         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_VF_BW_CFG_SUPPORTED \
10819                 UINT32_C(0x400)
10820         /*
10821          * Standard TX Ring mode is used for the allocation of TX ring
10822          * and underlying scheduling resources that allow bandwidth
10823          * reservation and limit settings on the queried function.
10824          * If set to 1, then standard TX ring mode is supported
10825          * on the queried function.
10826          * If set to 0, then standard TX ring mode is not available
10827          * on the queried function.
10828          */
10829         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_STD_TX_RING_MODE_SUPPORTED \
10830                 UINT32_C(0x800)
10831         /*
10832          * If the query is for a VF, then this flag shall be ignored,
10833          * If this query is for a PF and this flag is set to 1,
10834          * then the PF has the capability to detect GENEVE tunnel
10835          * flags.
10836          */
10837         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_GENEVE_TUN_FLAGS_SUPPORTED \
10838                 UINT32_C(0x1000)
10839         /*
10840          * If the query is for a VF, then this flag shall be ignored,
10841          * If this query is for a PF and this flag is set to 1,
10842          * then the PF has the capability to detect NVGRE tunnel
10843          * flags.
10844          */
10845         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_NVGRE_TUN_FLAGS_SUPPORTED \
10846                 UINT32_C(0x2000)
10847         /*
10848          * If the query is for a VF, then this flag shall be ignored,
10849          * If this query is for a PF and this flag is set to 1,
10850          * then the PF has the capability to detect GRE tunnel
10851          * flags.
10852          */
10853         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_GRE_TUN_FLAGS_SUPPORTED \
10854                 UINT32_C(0x4000)
10855         /*
10856          * If the query is for a VF, then this flag shall be ignored,
10857          * If this query is for a PF and this flag is set to 1,
10858          * then the PF has the capability to detect MPLS tunnel
10859          * flags.
10860          */
10861         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_MPLS_TUN_FLAGS_SUPPORTED \
10862                 UINT32_C(0x8000)
10863         /*
10864          * If the query is for a VF, then this flag shall be ignored,
10865          * If this query is for a PF and this flag is set to 1,
10866          * then the PF has the capability to support pcie stats.
10867          */
10868         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_PCIE_STATS_SUPPORTED \
10869                 UINT32_C(0x10000)
10870         /*
10871          * If the query is for a VF, then this flag shall be ignored,
10872          * If this query is for a PF and this flag is set to 1,
10873          * then the PF has the capability to adopt the VF's belonging
10874          * to another PF.
10875          */
10876         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ADOPTED_PF_SUPPORTED \
10877                 UINT32_C(0x20000)
10878         /*
10879          * If the query is for a VF, then this flag shall be ignored,
10880          * If this query is for a PF and this flag is set to 1,
10881          * then the PF has the administrative privilege to configure another PF
10882          */
10883         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ADMIN_PF_SUPPORTED \
10884                 UINT32_C(0x40000)
10885         /*
10886          * If the query is for a VF, then this flag shall be ignored.
10887          * If this query is for a PF and this flag is set to 1, then
10888          * the PF will know that the firmware has the capability to track
10889          * the virtual link status.
10890          */
10891         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_LINK_ADMIN_STATUS_SUPPORTED \
10892                 UINT32_C(0x80000)
10893         /*
10894          * If 1, then this function supports the push mode that uses
10895          * write combine buffers and the long inline tx buffer descriptor.
10896          */
10897         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_WCB_PUSH_MODE \
10898                 UINT32_C(0x100000)
10899         /*
10900          * If 1, then FW has capability to allocate TX rings dynamically
10901          * in ring alloc even if PF reserved pool is zero.
10902          * This bit will be used only for PFs.
10903          */
10904         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_DYNAMIC_TX_RING_ALLOC \
10905                 UINT32_C(0x200000)
10906         /*
10907          * When this bit is '1', it indicates that core firmware is
10908          * capable of Hot Reset.
10909          */
10910         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_HOT_RESET_CAPABLE \
10911                 UINT32_C(0x400000)
10912         /*
10913          * This flag will be set to 1 by the FW if FW supports adapter error
10914          * recovery.
10915          */
10916         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ERROR_RECOVERY_CAPABLE \
10917                 UINT32_C(0x800000)
10918         /*
10919          * If the query is for a VF, then this flag shall be ignored.
10920          * If this query is for a PF and this flag is set to 1, then
10921          * the PF has the capability to support extended stats.
10922          */
10923         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_STATS_SUPPORTED \
10924                 UINT32_C(0x1000000)
10925         /*
10926          * If the query is for a VF, then this flag shall be ignored.
10927          * If this query is for a PF and this flag is set to 1, then host
10928          * must initiate reset or reload (or fastboot) the firmware image
10929          * upon detection of device shutdown state.
10930          */
10931         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ERR_RECOVER_RELOAD \
10932                 UINT32_C(0x2000000)
10933         /*
10934          * If the query is for a VF, then this flag (always set to 0) shall
10935          * be ignored. If this query is for a PF and this flag is set to 1,
10936          * host, when registered for the default vnic change async event,
10937          * receives async notification whenever a default vnic state is
10938          * changed for any of child or adopted VFs.
10939          */
10940         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_NOTIFY_VF_DEF_VNIC_CHNG_SUPPORTED \
10941                 UINT32_C(0x4000000)
10942         /* If set to 1, then the vlan acceleration for TX is disabled. */
10943         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_VLAN_ACCELERATION_TX_DISABLED \
10944                 UINT32_C(0x8000000)
10945         /*
10946          * When this bit is '1', it indicates that core firmware supports
10947          * DBG_COREDUMP_XXX commands.
10948          */
10949         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_COREDUMP_CMD_SUPPORTED \
10950                 UINT32_C(0x10000000)
10951         /*
10952          * When this bit is '1', it indicates that core firmware supports
10953          * DBG_CRASHDUMP_XXX commands.
10954          */
10955         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_CRASHDUMP_CMD_SUPPORTED \
10956                 UINT32_C(0x20000000)
10957         /*
10958          * If the query is for a VF, then this flag should be ignored.
10959          * If the query is for a PF and this flag is set to 1, then
10960          * the PF has the capability to support retrieval of
10961          * rx_port_stats_ext_pfc_wd statistics (supported by the PFC
10962          * WatchDog feature) via the hwrm_port_qstats_ext_pfc_wd command.
10963          * If this flag is set to 1, only that (supported) command should
10964          * be used for retrieval of PFC related statistics (rather than
10965          * hwrm_port_qstats_ext command, which could previously be used).
10966          */
10967         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_PFC_WD_STATS_SUPPORTED \
10968                 UINT32_C(0x40000000)
10969         /*
10970          * When this bit is '1', it indicates that core firmware supports
10971          * DBG_QCAPS command
10972          */
10973         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_DBG_QCAPS_CMD_SUPPORTED \
10974                 UINT32_C(0x80000000)
10975         /*
10976          * This value is current MAC address configured for this
10977          * function. A value of 00-00-00-00-00-00 indicates no
10978          * MAC address is currently configured.
10979          */
10980         uint8_t mac_address[6];
10981         /*
10982          * The maximum number of RSS/COS contexts that can be
10983          * allocated to the function.
10984          */
10985         uint16_t        max_rsscos_ctx;
10986         /*
10987          * The maximum number of completion rings that can be
10988          * allocated to the function.
10989          */
10990         uint16_t        max_cmpl_rings;
10991         /*
10992          * The maximum number of transmit rings that can be
10993          * allocated to the function.
10994          */
10995         uint16_t        max_tx_rings;
10996         /*
10997          * The maximum number of receive rings that can be
10998          * allocated to the function.
10999          */
11000         uint16_t        max_rx_rings;
11001         /*
11002          * The maximum number of L2 contexts that can be
11003          * allocated to the function.
11004          */
11005         uint16_t        max_l2_ctxs;
11006         /*
11007          * The maximum number of VNICs that can be
11008          * allocated to the function.
11009          */
11010         uint16_t        max_vnics;
11011         /*
11012          * The identifier for the first VF enabled on a PF. This
11013          * is valid only on the PF with SR-IOV enabled.
11014          * 0xFF... (All Fs) if this command is called on a PF with
11015          * SR-IOV disabled or on a VF.
11016          */
11017         uint16_t        first_vf_id;
11018         /*
11019          * The maximum number of VFs that can be
11020          * allocated to the function. This is valid only on the
11021          * PF with SR-IOV enabled. 0xFF... (All Fs) if this
11022          * command is called on a PF with SR-IOV disabled or
11023          * on a VF.
11024          */
11025         uint16_t        max_vfs;
11026         /*
11027          * The maximum number of statistic contexts that can be
11028          * allocated to the function.
11029          */
11030         uint16_t        max_stat_ctx;
11031         /*
11032          * The maximum number of Encapsulation records that can be
11033          * offloaded by this function.
11034          */
11035         uint32_t        max_encap_records;
11036         /*
11037          * The maximum number of decapsulation records that can
11038          * be offloaded by this function.
11039          */
11040         uint32_t        max_decap_records;
11041         /*
11042          * The maximum number of Exact Match (EM) flows that can be
11043          * offloaded by this function on the TX side.
11044          */
11045         uint32_t        max_tx_em_flows;
11046         /*
11047          * The maximum number of Wildcard Match (WM) flows that can
11048          * be offloaded by this function on the TX side.
11049          */
11050         uint32_t        max_tx_wm_flows;
11051         /*
11052          * The maximum number of Exact Match (EM) flows that can be
11053          * offloaded by this function on the RX side.
11054          */
11055         uint32_t        max_rx_em_flows;
11056         /*
11057          * The maximum number of Wildcard Match (WM) flows that can
11058          * be offloaded by this function on the RX side.
11059          */
11060         uint32_t        max_rx_wm_flows;
11061         /*
11062          * The maximum number of multicast filters that can
11063          * be supported by this function on the RX side.
11064          */
11065         uint32_t        max_mcast_filters;
11066         /*
11067          * The maximum value of flow_id that can be supported
11068          * in completion records.
11069          */
11070         uint32_t        max_flow_id;
11071         /*
11072          * The maximum number of HW ring groups that can be
11073          * supported on this function.
11074          */
11075         uint32_t        max_hw_ring_grps;
11076         /*
11077          * The maximum number of strict priority transmit rings
11078          * that can be allocated to the function.
11079          * This number indicates the maximum number of TX rings
11080          * that can be assigned strict priorities out of the
11081          * maximum number of TX rings that can be allocated
11082          * (max_tx_rings) to the function.
11083          */
11084         uint16_t        max_sp_tx_rings;
11085         uint8_t unused_0[2];
11086         uint32_t        flags_ext;
11087         /*
11088          * If 1, the device can be configured to set the ECN bits in the
11089          * IP header of received packets if the receive queue length
11090          * exceeds a given threshold.
11091          */
11092         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_ECN_MARK_SUPPORTED \
11093                 UINT32_C(0x1)
11094         /*
11095          * If 1, the device can report the number of received packets
11096          * that it marked as having experienced congestion.
11097          */
11098         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_ECN_STATS_SUPPORTED \
11099                 UINT32_C(0x2)
11100         /*
11101          * If 1, the device can report extended hw statistics (including
11102          * additional tpa statistics).
11103          */
11104         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_EXT_HW_STATS_SUPPORTED \
11105                 UINT32_C(0x4)
11106         /*
11107          * If set to 1, then the core firmware has support to enable/
11108          * disable hot reset support for interface dynamically through
11109          * HWRM_FUNC_CFG.
11110          */
11111         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_HOT_RESET_IF_SUPPORT \
11112                 UINT32_C(0x8)
11113         /* If 1, the proxy mode is supported on this function */
11114         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_PROXY_MODE_SUPPORT \
11115                 UINT32_C(0x10)
11116         /*
11117          * If 1, the tx rings source interface override feature is supported
11118          * on this function.
11119          */
11120         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_TX_PROXY_SRC_INTF_OVERRIDE_SUPPORT \
11121                 UINT32_C(0x20)
11122         /*
11123          * If 1, the device supports scheduler queues. SCHQs can be managed
11124          * using RING_SCHQ_ALLOC/CFG/FREE commands.
11125          */
11126         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_SCHQ_SUPPORTED \
11127                 UINT32_C(0x40)
11128         /*
11129          * If set to 1, then this function supports the TX push mode that
11130          * uses ping-pong buffers from the push pages.
11131          */
11132         #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_PPP_PUSH_MODE_SUPPORTED \
11133                 UINT32_C(0x80)
11134         /* The maximum number of SCHQs supported by this device. */
11135         uint8_t max_schqs;
11136         uint8_t mpc_chnls_cap;
11137         /*
11138          * When this bit is '1', it indicates that HW and firmware
11139          * supports the use of a MPC channel with destination set
11140          * to the TX crypto engine block.
11141          */
11142         #define HWRM_FUNC_QCAPS_OUTPUT_MPC_CHNLS_CAP_TCE         UINT32_C(0x1)
11143         /*
11144          * When this bit is '1', it indicates that HW and firmware
11145          * supports the use of a MPC channel with destination set
11146          * to the RX crypto engine block.
11147          */
11148         #define HWRM_FUNC_QCAPS_OUTPUT_MPC_CHNLS_CAP_RCE         UINT32_C(0x2)
11149         /*
11150          * When this bit is '1', it indicates that HW and firmware
11151          * supports the use of a MPC channel with destination set
11152          * to the TX configurable flow processing block.
11153          */
11154         #define HWRM_FUNC_QCAPS_OUTPUT_MPC_CHNLS_CAP_TE_CFA      UINT32_C(0x4)
11155         /*
11156          * When this bit is '1', it indicates that HW and firmware
11157          * supports the use of a MPC channel with destination set
11158          * to the RX configurable flow processing block.
11159          */
11160         #define HWRM_FUNC_QCAPS_OUTPUT_MPC_CHNLS_CAP_RE_CFA      UINT32_C(0x8)
11161         /*
11162          * When this bit is '1', it indicates that HW and firmware
11163          * supports the use of a MPC channel with destination set
11164          * to the primate processor block.
11165          */
11166         #define HWRM_FUNC_QCAPS_OUTPUT_MPC_CHNLS_CAP_PRIMATE     UINT32_C(0x10)
11167         uint8_t unused_1;
11168         /*
11169          * This field is used in Output records to indicate that the output
11170          * is completely written to RAM.  This field should be read as '1'
11171          * to indicate that the output has been completely written.
11172          * When writing a command completion or response to an internal processor,
11173          * the order of writes has to be such that this field is written last.
11174          */
11175         uint8_t valid;
11176 } __rte_packed;
11177
11178 /******************
11179  * hwrm_func_qcfg *
11180  ******************/
11181
11182
11183 /* hwrm_func_qcfg_input (size:192b/24B) */
11184 struct hwrm_func_qcfg_input {
11185         /* The HWRM command request type. */
11186         uint16_t        req_type;
11187         /*
11188          * The completion ring to send the completion event on. This should
11189          * be the NQ ID returned from the `nq_alloc` HWRM command.
11190          */
11191         uint16_t        cmpl_ring;
11192         /*
11193          * The sequence ID is used by the driver for tracking multiple
11194          * commands. This ID is treated as opaque data by the firmware and
11195          * the value is returned in the `hwrm_resp_hdr` upon completion.
11196          */
11197         uint16_t        seq_id;
11198         /*
11199          * The target ID of the command:
11200          * * 0x0-0xFFF8 - The function ID
11201          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
11202          * * 0xFFFD - Reserved for user-space HWRM interface
11203          * * 0xFFFF - HWRM
11204          */
11205         uint16_t        target_id;
11206         /*
11207          * A physical address pointer pointing to a host buffer that the
11208          * command's response data will be written. This can be either a host
11209          * physical address (HPA) or a guest physical address (GPA) and must
11210          * point to a physically contiguous block of memory.
11211          */
11212         uint64_t        resp_addr;
11213         /*
11214          * Function ID of the function that is being queried.
11215          * 0xFF... (All Fs) if the query is for the requesting
11216          * function.
11217          * 0xFFFE (REQUESTING_PARENT_FID) This is a special FID
11218          * to be used by a trusted VF to query its parent PF.
11219          */
11220         uint16_t        fid;
11221         uint8_t unused_0[6];
11222 } __rte_packed;
11223
11224 /* hwrm_func_qcfg_output (size:768b/96B) */
11225 struct hwrm_func_qcfg_output {
11226         /* The specific error status for the command. */
11227         uint16_t        error_code;
11228         /* The HWRM command request type. */
11229         uint16_t        req_type;
11230         /* The sequence ID from the original command. */
11231         uint16_t        seq_id;
11232         /* The length of the response data in number of bytes. */
11233         uint16_t        resp_len;
11234         /*
11235          * FID value.  This value is used to identify operations on the PCI
11236          * bus as belonging to a particular PCI function.
11237          */
11238         uint16_t        fid;
11239         /*
11240          * Port ID of port that this function is associated with.
11241          * 0xFF... (All Fs) if this function is not associated with
11242          * any port.
11243          */
11244         uint16_t        port_id;
11245         /*
11246          * This value is the current VLAN setting for this
11247          * function. The value of 0 for this field indicates
11248          * no priority tagging or VLAN is used.
11249          * This field's format is same as 802.1Q Tag's
11250          * Tag Control Information (TCI) format that includes both
11251          * Priority Code Point (PCP) and VLAN Identifier (VID).
11252          */
11253         uint16_t        vlan;
11254         uint16_t        flags;
11255         /*
11256          * If 1, then magic packet based Out-Of-Box WoL is enabled on
11257          * the port associated with this function.
11258          */
11259         #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_OOB_WOL_MAGICPKT_ENABLED \
11260                 UINT32_C(0x1)
11261         /*
11262          * If 1, then bitmap pattern based Out-Of-Box WoL packet is enabled
11263          * on the port associated with this function.
11264          */
11265         #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_OOB_WOL_BMP_ENABLED \
11266                 UINT32_C(0x2)
11267         /*
11268          * If set to 1, then FW based DCBX agent is enabled and running on
11269          * the port associated with this function.
11270          * If set to 0, then DCBX agent is not running in the firmware.
11271          */
11272         #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_FW_DCBX_AGENT_ENABLED \
11273                 UINT32_C(0x4)
11274         /*
11275          * Standard TX Ring mode is used for the allocation of TX ring
11276          * and underlying scheduling resources that allow bandwidth
11277          * reservation and limit settings on the queried function.
11278          * If set to 1, then standard TX ring mode is enabled
11279          * on the queried function.
11280          * If set to 0, then the standard TX ring mode is disabled
11281          * on the queried function. In this extended TX ring resource
11282          * mode, the minimum and maximum bandwidth settings are not
11283          * supported to allow the allocation of TX rings to span multiple
11284          * scheduler nodes.
11285          */
11286         #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_STD_TX_RING_MODE_ENABLED \
11287                 UINT32_C(0x8)
11288         /*
11289          * If set to 1 then FW based LLDP agent is enabled and running on
11290          * the port associated with this function.
11291          * If set to 0 then the LLDP agent is not running in the firmware.
11292          */
11293         #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_FW_LLDP_AGENT_ENABLED \
11294                 UINT32_C(0x10)
11295         /*
11296          * If set to 1, then multi-host mode is active for this function.
11297          * If set to 0, then multi-host mode is inactive for this function
11298          * or not applicable for this device.
11299          */
11300         #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_MULTI_HOST \
11301                 UINT32_C(0x20)
11302         /*
11303          * If the function that is being queried is a PF, then the HWRM shall
11304          * set this field to 0 and the HWRM client shall ignore this field.
11305          * If the function that is being queried is a VF, then the HWRM shall
11306          * set this field to 1 if the queried VF is trusted, otherwise the HWRM
11307          * shall set this field to 0.
11308          */
11309         #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_TRUSTED_VF \
11310                 UINT32_C(0x40)
11311         /*
11312          * If set to 1, then secure mode is enabled for this function or device.
11313          * If set to 0, then secure mode is disabled (or normal mode) for this
11314          * function or device.
11315          */
11316         #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_SECURE_MODE_ENABLED \
11317                 UINT32_C(0x80)
11318         /*
11319          * If set to 1, then this PF is enabled with a preboot driver that
11320          * requires access to the legacy L2 ring model and legacy 32b
11321          * doorbells. If set to 0, then this PF is not allowed to use
11322          * the legacy L2 rings. This feature is not allowed on VFs and
11323          * is only relevant for devices that require a context backing
11324          * store.
11325          */
11326         #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_PREBOOT_LEGACY_L2_RINGS \
11327                 UINT32_C(0x100)
11328         /*
11329          * If set to 1, then the firmware and all currently registered driver
11330          * instances support hot reset. The hot reset support will be updated
11331          * dynamically based on the driver interface advertisement.
11332          * If set to 0, then the adapter is not currently able to initiate
11333          * hot reset.
11334          */
11335         #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_HOT_RESET_ALLOWED \
11336                 UINT32_C(0x200)
11337         /*
11338          * If set to 1, then the PPP tx push mode is enabled for all the
11339          * reserved TX rings of this function. If set to 0, then PPP tx push
11340          * mode is disabled for all the reserved TX rings of this function.
11341          */
11342         #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_PPP_PUSH_MODE_ENABLED \
11343                 UINT32_C(0x400)
11344         /*
11345          * If set to 1, then the firmware will notify driver using async
11346          * event when a ring is disabled due to a Hardware error.
11347          */
11348         #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_RING_MONITOR_ENABLED \
11349                 UINT32_C(0x800)
11350         /*
11351          * This value is current MAC address configured for this
11352          * function. A value of 00-00-00-00-00-00 indicates no
11353          * MAC address is currently configured.
11354          */
11355         uint8_t mac_address[6];
11356         /*
11357          * This value is current PCI ID of this
11358          * function. If ARI is enabled, then it is
11359          * Bus Number (8b):Function Number(8b). Otherwise, it is
11360          * Bus Number (8b):Device Number (4b):Function Number(4b).
11361          * If multi-host mode is active, the 4 lsb will indicate
11362          * the PF index for this function.
11363          */
11364         uint16_t        pci_id;
11365         /*
11366          * The number of RSS/COS contexts currently
11367          * allocated to the function.
11368          */
11369         uint16_t        alloc_rsscos_ctx;
11370         /*
11371          * The number of completion rings currently allocated to
11372          * the function. This does not include the rings allocated
11373          * to any children functions if any.
11374          */
11375         uint16_t        alloc_cmpl_rings;
11376         /*
11377          * The number of transmit rings currently allocated to
11378          * the function. This does not include the rings allocated
11379          * to any children functions if any.
11380          */
11381         uint16_t        alloc_tx_rings;
11382         /*
11383          * The number of receive rings currently allocated to
11384          * the function. This does not include the rings allocated
11385          * to any children functions if any.
11386          */
11387         uint16_t        alloc_rx_rings;
11388         /* The allocated number of L2 contexts to the function. */
11389         uint16_t        alloc_l2_ctx;
11390         /* The allocated number of vnics to the function. */
11391         uint16_t        alloc_vnics;
11392         /*
11393          * The maximum transmission unit of the function.
11394          * If the reported mtu value is non-zero then it will used for the
11395          * rings allocated on this function. otherwise the default
11396          * value is used if ring MTU is not specified.
11397          */
11398         uint16_t        mtu;
11399         /*
11400          * The maximum receive unit of the function.
11401          * For vnics allocated on this function, this default
11402          * value is used if vnic MRU is not specified.
11403          */
11404         uint16_t        mru;
11405         /* The statistics context assigned to a function. */
11406         uint16_t        stat_ctx_id;
11407         /*
11408          * The HWRM shall return Unknown value for this field
11409          * when this command is used to query VF's configuration.
11410          */
11411         uint8_t port_partition_type;
11412         /* Single physical function */
11413         #define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_SPF     UINT32_C(0x0)
11414         /* Multiple physical functions */
11415         #define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_MPFS    UINT32_C(0x1)
11416         /* Network Partitioning 1.0 */
11417         #define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_NPAR1_0 UINT32_C(0x2)
11418         /* Network Partitioning 1.5 */
11419         #define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_NPAR1_5 UINT32_C(0x3)
11420         /* Network Partitioning 2.0 */
11421         #define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_NPAR2_0 UINT32_C(0x4)
11422         /* Unknown */
11423         #define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_UNKNOWN \
11424                 UINT32_C(0xff)
11425         #define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_LAST \
11426                 HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_UNKNOWN
11427         /*
11428          * This field will indicate number of physical functions on this port_partition.
11429          * HWRM shall return unavail (i.e. value of 0) for this field
11430          * when this command is used to query VF's configuration or
11431          * from older firmware that doesn't support this field.
11432          */
11433         uint8_t port_pf_cnt;
11434         /* number of PFs is not available */
11435         #define HWRM_FUNC_QCFG_OUTPUT_PORT_PF_CNT_UNAVAIL UINT32_C(0x0)
11436         #define HWRM_FUNC_QCFG_OUTPUT_PORT_PF_CNT_LAST \
11437                 HWRM_FUNC_QCFG_OUTPUT_PORT_PF_CNT_UNAVAIL
11438         /*
11439          * The default VNIC ID assigned to a function that is
11440          * being queried.
11441          */
11442         uint16_t        dflt_vnic_id;
11443         uint16_t        max_mtu_configured;
11444         /*
11445          * Minimum BW allocated for this function.
11446          * The HWRM will translate this value into byte counter and
11447          * time interval used for the scheduler inside the device.
11448          * A value of 0 indicates the minimum bandwidth is not
11449          * configured.
11450          */
11451         uint32_t        min_bw;
11452         /* The bandwidth value. */
11453         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_MASK \
11454                 UINT32_C(0xfffffff)
11455         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_SFT              0
11456         /* The granularity of the value (bits or bytes). */
11457         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE \
11458                 UINT32_C(0x10000000)
11459         /* Value is in bits. */
11460         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_BITS \
11461                 (UINT32_C(0x0) << 28)
11462         /* Value is in bytes. */
11463         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_BYTES \
11464                 (UINT32_C(0x1) << 28)
11465         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_LAST \
11466                 HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_BYTES
11467         /* bw_value_unit is 3 b */
11468         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_MASK \
11469                 UINT32_C(0xe0000000)
11470         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_SFT         29
11471         /* Value is in Mb or MB (base 10). */
11472         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_MEGA \
11473                 (UINT32_C(0x0) << 29)
11474         /* Value is in Kb or KB (base 10). */
11475         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_KILO \
11476                 (UINT32_C(0x2) << 29)
11477         /* Value is in bits or bytes. */
11478         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_BASE \
11479                 (UINT32_C(0x4) << 29)
11480         /* Value is in Gb or GB (base 10). */
11481         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_GIGA \
11482                 (UINT32_C(0x6) << 29)
11483         /* Value is in 1/100th of a percentage of total bandwidth. */
11484         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
11485                 (UINT32_C(0x1) << 29)
11486         /* Invalid unit */
11487         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_INVALID \
11488                 (UINT32_C(0x7) << 29)
11489         #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_LAST \
11490                 HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_INVALID
11491         /*
11492          * Maximum BW allocated for this function.
11493          * The HWRM will translate this value into byte counter and
11494          * time interval used for the scheduler inside the device.
11495          * A value of 0 indicates that the maximum bandwidth is not
11496          * configured.
11497          */
11498         uint32_t        max_bw;
11499         /* The bandwidth value. */
11500         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_MASK \
11501                 UINT32_C(0xfffffff)
11502         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_SFT              0
11503         /* The granularity of the value (bits or bytes). */
11504         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE \
11505                 UINT32_C(0x10000000)
11506         /* Value is in bits. */
11507         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_BITS \
11508                 (UINT32_C(0x0) << 28)
11509         /* Value is in bytes. */
11510         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_BYTES \
11511                 (UINT32_C(0x1) << 28)
11512         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_LAST \
11513                 HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_BYTES
11514         /* bw_value_unit is 3 b */
11515         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_MASK \
11516                 UINT32_C(0xe0000000)
11517         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_SFT         29
11518         /* Value is in Mb or MB (base 10). */
11519         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_MEGA \
11520                 (UINT32_C(0x0) << 29)
11521         /* Value is in Kb or KB (base 10). */
11522         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_KILO \
11523                 (UINT32_C(0x2) << 29)
11524         /* Value is in bits or bytes. */
11525         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_BASE \
11526                 (UINT32_C(0x4) << 29)
11527         /* Value is in Gb or GB (base 10). */
11528         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_GIGA \
11529                 (UINT32_C(0x6) << 29)
11530         /* Value is in 1/100th of a percentage of total bandwidth. */
11531         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
11532                 (UINT32_C(0x1) << 29)
11533         /* Invalid unit */
11534         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_INVALID \
11535                 (UINT32_C(0x7) << 29)
11536         #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_LAST \
11537                 HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_INVALID
11538         /*
11539          * This value indicates the Edge virtual bridge mode for the
11540          * domain that this function belongs to.
11541          */
11542         uint8_t evb_mode;
11543         /* No Edge Virtual Bridging (EVB) */
11544         #define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_NO_EVB UINT32_C(0x0)
11545         /* Virtual Ethernet Bridge (VEB) */
11546         #define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_VEB    UINT32_C(0x1)
11547         /* Virtual Ethernet Port Aggregator (VEPA) */
11548         #define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_VEPA   UINT32_C(0x2)
11549         #define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_LAST \
11550                 HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_VEPA
11551         uint8_t options;
11552         /*
11553          * This value indicates the PCIE device cache line size.
11554          * The cache line size allows the DMA writes to terminate and
11555          * start at the cache boundary.
11556          */
11557         #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_MASK \
11558                 UINT32_C(0x3)
11559         #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SFT          0
11560         /* Cache Line Size 64 bytes */
11561         #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SIZE_64 \
11562                 UINT32_C(0x0)
11563         /* Cache Line Size 128 bytes */
11564         #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SIZE_128 \
11565                 UINT32_C(0x1)
11566         #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_LAST \
11567                 HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SIZE_128
11568         /* This value is the virtual link admin state setting. */
11569         #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_MASK \
11570                 UINT32_C(0xc)
11571         #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_SFT        2
11572         /* Admin link state is in forced down mode. */
11573         #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_DOWN \
11574                 (UINT32_C(0x0) << 2)
11575         /* Admin link state is in forced up mode. */
11576         #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_UP \
11577                 (UINT32_C(0x1) << 2)
11578         /* Admin link state is in auto mode  - follows the physical link state. */
11579         #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_AUTO \
11580                 (UINT32_C(0x2) << 2)
11581         #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_LAST \
11582                 HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_AUTO
11583         /* Reserved for future. */
11584         #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_RSVD_MASK \
11585                 UINT32_C(0xf0)
11586         #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_RSVD_SFT                    4
11587         /*
11588          * The number of VFs that are allocated to the function.
11589          * This is valid only on the PF with SR-IOV enabled.
11590          * 0xFF... (All Fs) if this command is called on a PF with
11591          * SR-IOV disabled or on a VF.
11592          */
11593         uint16_t        alloc_vfs;
11594         /*
11595          * The number of allocated multicast filters for this
11596          * function on the RX side.
11597          */
11598         uint32_t        alloc_mcast_filters;
11599         /*
11600          * The number of allocated HW ring groups for this
11601          * function.
11602          */
11603         uint32_t        alloc_hw_ring_grps;
11604         /*
11605          * The number of strict priority transmit rings out of
11606          * currently allocated TX rings to the function
11607          * (alloc_tx_rings).
11608          */
11609         uint16_t        alloc_sp_tx_rings;
11610         /*
11611          * The number of statistics contexts
11612          * currently reserved for the function.
11613          */
11614         uint16_t        alloc_stat_ctx;
11615         /*
11616          * This field specifies how many NQs are reserved for the PF.
11617          * Remaining NQs that belong to the PF are available for VFs.
11618          * Once a PF has created VFs, it cannot change how many NQs are
11619          * reserved for itself (since the NQs must be contiguous in HW).
11620          */
11621         uint16_t        alloc_msix;
11622         /*
11623          * The number of registered VF’s associated with the PF. This field
11624          * should be ignored when the request received on the VF interface.
11625          * This field will be updated on the PF interface to initiate
11626          * the unregister request on PF in the HOT Reset Process.
11627          */
11628         uint16_t        registered_vfs;
11629         /*
11630          * The size of the doorbell BAR in KBytes reserved for L2 including
11631          * any area that is shared between L2 and RoCE.  The L2 driver
11632          * should only map the L2 portion of the doorbell BAR.  Any rounding
11633          * of the BAR size to the native CPU page size should be performed
11634          * by the driver.  If the value is zero, no special partitioning
11635          * of the doorbell BAR between L2 and RoCE is required.
11636          */
11637         uint16_t        l2_doorbell_bar_size_kb;
11638         uint8_t unused_1;
11639         /*
11640          * For backward compatibility this field must be set to 1.
11641          * Older drivers might look for this field to be 1 before
11642          * processing the message.
11643          */
11644         uint8_t always_1;
11645         /*
11646          * This GRC address location is used by the Host driver interfaces to poll
11647          * the adapter ready state to re-initiate the registration process again
11648          * after receiving the RESET Notify event.
11649          */
11650         uint32_t        reset_addr_poll;
11651         /*
11652          * This field specifies legacy L2 doorbell size in KBytes. Drivers should use
11653          * this value to find out the doorbell page offset from the BAR.
11654          */
11655         uint16_t        legacy_l2_db_size_kb;
11656         uint16_t        svif_info;
11657         /*
11658          * This field specifies the source virtual interface of the function being
11659          * queried. Drivers can use this to program svif field in the L2 context
11660          * table
11661          */
11662         #define HWRM_FUNC_QCFG_OUTPUT_SVIF_INFO_SVIF_MASK      UINT32_C(0x7fff)
11663         #define HWRM_FUNC_QCFG_OUTPUT_SVIF_INFO_SVIF_SFT       0
11664         /* This field specifies whether svif is valid or not */
11665         #define HWRM_FUNC_QCFG_OUTPUT_SVIF_INFO_SVIF_VALID     UINT32_C(0x8000)
11666         uint8_t mpc_chnls;
11667         /*
11668          * When this bit is '1', it indicates that a MPC channel with
11669          * destination set to the TX crypto engine block is enabled.
11670          */
11671         #define HWRM_FUNC_QCFG_OUTPUT_MPC_CHNLS_TCE_ENABLED \
11672                 UINT32_C(0x1)
11673         /*
11674          * When this bit is '1', it indicates that a MPC channel with
11675          * destination set to the RX crypto engine block is enabled.
11676          */
11677         #define HWRM_FUNC_QCFG_OUTPUT_MPC_CHNLS_RCE_ENABLED \
11678                 UINT32_C(0x2)
11679         /*
11680          * When this bit is '1', it indicates that a MPC channel with
11681          * destination set to the TX configurable flow processing block is
11682          * enabled.
11683          */
11684         #define HWRM_FUNC_QCFG_OUTPUT_MPC_CHNLS_TE_CFA_ENABLED \
11685                 UINT32_C(0x4)
11686         /*
11687          * When this bit is '1', it indicates that a MPC channel with
11688          * destination set to the RX configurable flow processing block is
11689          * enabled.
11690          */
11691         #define HWRM_FUNC_QCFG_OUTPUT_MPC_CHNLS_RE_CFA_ENABLED \
11692                 UINT32_C(0x8)
11693         /*
11694          * When this bit is '1', it indicates that a MPC channel with
11695          * destination set to the primate processor block is enabled.
11696          */
11697         #define HWRM_FUNC_QCFG_OUTPUT_MPC_CHNLS_PRIMATE_ENABLED \
11698                 UINT32_C(0x10)
11699         uint8_t unused_2[6];
11700         /*
11701          * This field is used in Output records to indicate that the output
11702          * is completely written to RAM.  This field should be read as '1'
11703          * to indicate that the output has been completely written.
11704          * When writing a command completion or response to an internal processor,
11705          * the order of writes has to be such that this field is written last.
11706          */
11707         uint8_t valid;
11708 } __rte_packed;
11709
11710 /*****************
11711  * hwrm_func_cfg *
11712  *****************/
11713
11714
11715 /* hwrm_func_cfg_input (size:768b/96B) */
11716 struct hwrm_func_cfg_input {
11717         /* The HWRM command request type. */
11718         uint16_t        req_type;
11719         /*
11720          * The completion ring to send the completion event on. This should
11721          * be the NQ ID returned from the `nq_alloc` HWRM command.
11722          */
11723         uint16_t        cmpl_ring;
11724         /*
11725          * The sequence ID is used by the driver for tracking multiple
11726          * commands. This ID is treated as opaque data by the firmware and
11727          * the value is returned in the `hwrm_resp_hdr` upon completion.
11728          */
11729         uint16_t        seq_id;
11730         /*
11731          * The target ID of the command:
11732          * * 0x0-0xFFF8 - The function ID
11733          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
11734          * * 0xFFFD - Reserved for user-space HWRM interface
11735          * * 0xFFFF - HWRM
11736          */
11737         uint16_t        target_id;
11738         /*
11739          * A physical address pointer pointing to a host buffer that the
11740          * command's response data will be written. This can be either a host
11741          * physical address (HPA) or a guest physical address (GPA) and must
11742          * point to a physically contiguous block of memory.
11743          */
11744         uint64_t        resp_addr;
11745         /*
11746          * Function ID of the function that is being
11747          * configured.
11748          * If set to 0xFF... (All Fs), then the configuration is
11749          * for the requesting function.
11750          */
11751         uint16_t        fid;
11752         /*
11753          * This field specifies how many NQs will be reserved for the PF.
11754          * Remaining NQs that belong to the PF become available for VFs.
11755          * Once a PF has created VFs, it cannot change how many NQs are
11756          * reserved for itself (since the NQs must be contiguous in HW).
11757          */
11758         uint16_t        num_msix;
11759         uint32_t        flags;
11760         /*
11761          * When this bit is '1', the function is disabled with
11762          * source MAC address check.
11763          * This is an anti-spoofing check. If this flag is set,
11764          * then the function shall be configured to disallow
11765          * transmission of frames with the source MAC address that
11766          * is configured for this function.
11767          */
11768         #define HWRM_FUNC_CFG_INPUT_FLAGS_SRC_MAC_ADDR_CHECK_DISABLE \
11769                 UINT32_C(0x1)
11770         /*
11771          * When this bit is '1', the function is enabled with
11772          * source MAC address check.
11773          * This is an anti-spoofing check. If this flag is set,
11774          * then the function shall be configured to allow
11775          * transmission of frames with the source MAC address that
11776          * is configured for this function.
11777          */
11778         #define HWRM_FUNC_CFG_INPUT_FLAGS_SRC_MAC_ADDR_CHECK_ENABLE \
11779                 UINT32_C(0x2)
11780         /* reserved. */
11781         #define HWRM_FUNC_CFG_INPUT_FLAGS_RSVD_MASK \
11782                 UINT32_C(0x1fc)
11783         #define HWRM_FUNC_CFG_INPUT_FLAGS_RSVD_SFT                       2
11784         /*
11785          * Standard TX Ring mode is used for the allocation of TX ring
11786          * and underlying scheduling resources that allow bandwidth
11787          * reservation and limit settings on the queried function.
11788          * If set to 1, then standard TX ring mode is requested to be
11789          * enabled on the function being configured.
11790          */
11791         #define HWRM_FUNC_CFG_INPUT_FLAGS_STD_TX_RING_MODE_ENABLE \
11792                 UINT32_C(0x200)
11793         /*
11794          * Standard TX Ring mode is used for the allocation of TX ring
11795          * and underlying scheduling resources that allow bandwidth
11796          * reservation and limit settings on the queried function.
11797          * If set to 1, then the standard TX ring mode is requested to
11798          * be disabled on the function being configured. In this extended
11799          * TX ring resource mode, the minimum and maximum bandwidth settings
11800          * are not supported to allow the allocation of TX rings to
11801          * span multiple scheduler nodes.
11802          */
11803         #define HWRM_FUNC_CFG_INPUT_FLAGS_STD_TX_RING_MODE_DISABLE \
11804                 UINT32_C(0x400)
11805         /*
11806          * If this bit is set, virtual mac address configured
11807          * in this command will be persistent over warm boot.
11808          */
11809         #define HWRM_FUNC_CFG_INPUT_FLAGS_VIRT_MAC_PERSIST \
11810                 UINT32_C(0x800)
11811         /*
11812          * This bit only applies to the VF. If this bit is set, the statistic
11813          * context counters will not be cleared when the statistic context is freed
11814          * or a function reset is called on VF. This bit will be cleared when the PF
11815          * is unloaded or a function reset is called on the PF.
11816          */
11817         #define HWRM_FUNC_CFG_INPUT_FLAGS_NO_AUTOCLEAR_STATISTIC \
11818                 UINT32_C(0x1000)
11819         /*
11820          * This bit requests that the firmware test to see if all the assets
11821          * requested in this command (i.e. number of TX rings) are available.
11822          * The firmware will return an error if the requested assets are
11823          * not available. The firwmare will NOT reserve the assets if they
11824          * are available.
11825          */
11826         #define HWRM_FUNC_CFG_INPUT_FLAGS_TX_ASSETS_TEST \
11827                 UINT32_C(0x2000)
11828         /*
11829          * This bit requests that the firmware test to see if all the assets
11830          * requested in this command (i.e. number of RX rings) are available.
11831          * The firmware will return an error if the requested assets are
11832          * not available. The firwmare will NOT reserve the assets if they
11833          * are available.
11834          */
11835         #define HWRM_FUNC_CFG_INPUT_FLAGS_RX_ASSETS_TEST \
11836                 UINT32_C(0x4000)
11837         /*
11838          * This bit requests that the firmware test to see if all the assets
11839          * requested in this command (i.e. number of CMPL rings) are available.
11840          * The firmware will return an error if the requested assets are
11841          * not available. The firwmare will NOT reserve the assets if they
11842          * are available.
11843          */
11844         #define HWRM_FUNC_CFG_INPUT_FLAGS_CMPL_ASSETS_TEST \
11845                 UINT32_C(0x8000)
11846         /*
11847          * This bit requests that the firmware test to see if all the assets
11848          * requested in this command (i.e. number of RSS ctx) are available.
11849          * The firmware will return an error if the requested assets are
11850          * not available. The firwmare will NOT reserve the assets if they
11851          * are available.
11852          */
11853         #define HWRM_FUNC_CFG_INPUT_FLAGS_RSSCOS_CTX_ASSETS_TEST \
11854                 UINT32_C(0x10000)
11855         /*
11856          * This bit requests that the firmware test to see if all the assets
11857          * requested in this command (i.e. number of ring groups) are available.
11858          * The firmware will return an error if the requested assets are
11859          * not available. The firwmare will NOT reserve the assets if they
11860          * are available.
11861          */
11862         #define HWRM_FUNC_CFG_INPUT_FLAGS_RING_GRP_ASSETS_TEST \
11863                 UINT32_C(0x20000)
11864         /*
11865          * This bit requests that the firmware test to see if all the assets
11866          * requested in this command (i.e. number of stat ctx) are available.
11867          * The firmware will return an error if the requested assets are
11868          * not available. The firwmare will NOT reserve the assets if they
11869          * are available.
11870          */
11871         #define HWRM_FUNC_CFG_INPUT_FLAGS_STAT_CTX_ASSETS_TEST \
11872                 UINT32_C(0x40000)
11873         /*
11874          * This bit requests that the firmware test to see if all the assets
11875          * requested in this command (i.e. number of VNICs) are available.
11876          * The firmware will return an error if the requested assets are
11877          * not available. The firwmare will NOT reserve the assets if they
11878          * are available.
11879          */
11880         #define HWRM_FUNC_CFG_INPUT_FLAGS_VNIC_ASSETS_TEST \
11881                 UINT32_C(0x80000)
11882         /*
11883          * This bit requests that the firmware test to see if all the assets
11884          * requested in this command (i.e. number of L2 ctx) are available.
11885          * The firmware will return an error if the requested assets are
11886          * not available. The firwmare will NOT reserve the assets if they
11887          * are available.
11888          */
11889         #define HWRM_FUNC_CFG_INPUT_FLAGS_L2_CTX_ASSETS_TEST \
11890                 UINT32_C(0x100000)
11891         /*
11892          * This configuration change can be initiated by a PF driver. This
11893          * configuration request shall be targeted to a VF. From local host
11894          * resident HWRM clients, only the parent PF driver shall be allowed
11895          * to initiate this change on one of its children VFs. If this bit is
11896          * set to 1, then the VF that is being configured is requested to be
11897          * trusted.
11898          */
11899         #define HWRM_FUNC_CFG_INPUT_FLAGS_TRUSTED_VF_ENABLE \
11900                 UINT32_C(0x200000)
11901         /*
11902          * When this bit it set, even if PF reserved pool size is zero,
11903          * FW will allow driver to create TX rings in ring alloc,
11904          * by reserving TX ring, S3 node dynamically.
11905          */
11906         #define HWRM_FUNC_CFG_INPUT_FLAGS_DYNAMIC_TX_RING_ALLOC \
11907                 UINT32_C(0x400000)
11908         /*
11909          * This bit requests that the firmware test to see if all the assets
11910          * requested in this command (i.e. number of NQ rings) are available.
11911          * The firmware will return an error if the requested assets are
11912          * not available. The firwmare will NOT reserve the assets if they
11913          * are available.
11914          */
11915         #define HWRM_FUNC_CFG_INPUT_FLAGS_NQ_ASSETS_TEST \
11916                 UINT32_C(0x800000)
11917         /*
11918          * This configuration change can be initiated by a PF driver. This
11919          * configuration request shall be targeted to a VF. From local host
11920          * resident HWRM clients, only the parent PF driver shall be allowed
11921          * to initiate this change on one of its children VFs. If this bit is
11922          * set to 1, then the VF that is being configured is requested to be
11923          * untrusted.
11924          */
11925         #define HWRM_FUNC_CFG_INPUT_FLAGS_TRUSTED_VF_DISABLE \
11926                 UINT32_C(0x1000000)
11927         /*
11928          * This bit is used by preboot drivers on a PF that require access
11929          * to the legacy L2 ring model and legacy 32b doorbells. This
11930          * feature is not allowed on VFs and is only relevant for devices
11931          * that require a context backing store.
11932          */
11933         #define HWRM_FUNC_CFG_INPUT_FLAGS_PREBOOT_LEGACY_L2_RINGS \
11934                 UINT32_C(0x2000000)
11935         /*
11936          * If this bit is set to 0, then the interface does not support hot
11937          * reset capability which it advertised with the hot_reset_support
11938          * flag in HWRM_FUNC_DRV_RGTR. If any of the function has set this
11939          * flag to 0, adapter cannot do the hot reset. In this state, if the
11940          * firmware receives a hot reset request, firmware must fail the
11941          * request. If this bit is set to 1, then interface is renabling the
11942          * hot reset capability.
11943          */
11944         #define HWRM_FUNC_CFG_INPUT_FLAGS_HOT_RESET_IF_EN_DIS \
11945                 UINT32_C(0x4000000)
11946         /*
11947          * If this bit is set to 1, the PF driver is requesting FW
11948          * to enable PPP TX PUSH feature on all the TX rings specified in
11949          * the num_tx_rings field. By default, the PPP TX push feature is
11950          * disabled for all the TX rings of the function. This flag is
11951          * ignored if num_tx_rings field is not specified or the function
11952          * doesn't support PPP tx push feature.
11953          */
11954         #define HWRM_FUNC_CFG_INPUT_FLAGS_PPP_PUSH_MODE_ENABLE \
11955                 UINT32_C(0x8000000)
11956         /*
11957          * If this bit is set to 1, the PF driver is requesting FW
11958          * to disable PPP TX PUSH feature on all the TX rings specified in
11959          * the num_tx_rings field. This flag is ignored if num_tx_rings
11960          * field is not specified or the function doesn't support PPP tx
11961          * push feature.
11962          */
11963         #define HWRM_FUNC_CFG_INPUT_FLAGS_PPP_PUSH_MODE_DISABLE \
11964                 UINT32_C(0x10000000)
11965         uint32_t        enables;
11966         /*
11967          * This bit must be '1' for the mtu field to be
11968          * configured.
11969          */
11970         #define HWRM_FUNC_CFG_INPUT_ENABLES_MTU \
11971                 UINT32_C(0x1)
11972         /*
11973          * This bit must be '1' for the mru field to be
11974          * configured.
11975          */
11976         #define HWRM_FUNC_CFG_INPUT_ENABLES_MRU \
11977                 UINT32_C(0x2)
11978         /*
11979          * This bit must be '1' for the num_rsscos_ctxs field to be
11980          * configured.
11981          */
11982         #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_RSSCOS_CTXS \
11983                 UINT32_C(0x4)
11984         /*
11985          * This bit must be '1' for the num_cmpl_rings field to be
11986          * configured.
11987          */
11988         #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_CMPL_RINGS \
11989                 UINT32_C(0x8)
11990         /*
11991          * This bit must be '1' for the num_tx_rings field to be
11992          * configured.
11993          */
11994         #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_TX_RINGS \
11995                 UINT32_C(0x10)
11996         /*
11997          * This bit must be '1' for the num_rx_rings field to be
11998          * configured.
11999          */
12000         #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_RX_RINGS \
12001                 UINT32_C(0x20)
12002         /*
12003          * This bit must be '1' for the num_l2_ctxs field to be
12004          * configured.
12005          */
12006         #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_L2_CTXS \
12007                 UINT32_C(0x40)
12008         /*
12009          * This bit must be '1' for the num_vnics field to be
12010          * configured.
12011          */
12012         #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_VNICS \
12013                 UINT32_C(0x80)
12014         /*
12015          * This bit must be '1' for the num_stat_ctxs field to be
12016          * configured.
12017          */
12018         #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_STAT_CTXS \
12019                 UINT32_C(0x100)
12020         /*
12021          * This bit must be '1' for the dflt_mac_addr field to be
12022          * configured.
12023          */
12024         #define HWRM_FUNC_CFG_INPUT_ENABLES_DFLT_MAC_ADDR \
12025                 UINT32_C(0x200)
12026         /*
12027          * This bit must be '1' for the dflt_vlan field to be
12028          * configured.
12029          */
12030         #define HWRM_FUNC_CFG_INPUT_ENABLES_DFLT_VLAN \
12031                 UINT32_C(0x400)
12032         /*
12033          * This bit must be '1' for the dflt_ip_addr field to be
12034          * configured.
12035          */
12036         #define HWRM_FUNC_CFG_INPUT_ENABLES_DFLT_IP_ADDR \
12037                 UINT32_C(0x800)
12038         /*
12039          * This bit must be '1' for the min_bw field to be
12040          * configured.
12041          */
12042         #define HWRM_FUNC_CFG_INPUT_ENABLES_MIN_BW \
12043                 UINT32_C(0x1000)
12044         /*
12045          * This bit must be '1' for the max_bw field to be
12046          * configured.
12047          */
12048         #define HWRM_FUNC_CFG_INPUT_ENABLES_MAX_BW \
12049                 UINT32_C(0x2000)
12050         /*
12051          * This bit must be '1' for the async_event_cr field to be
12052          * configured.
12053          */
12054         #define HWRM_FUNC_CFG_INPUT_ENABLES_ASYNC_EVENT_CR \
12055                 UINT32_C(0x4000)
12056         /*
12057          * This bit must be '1' for the vlan_antispoof_mode field to be
12058          * configured.
12059          */
12060         #define HWRM_FUNC_CFG_INPUT_ENABLES_VLAN_ANTISPOOF_MODE \
12061                 UINT32_C(0x8000)
12062         /*
12063          * This bit must be '1' for the allowed_vlan_pris field to be
12064          * configured.
12065          */
12066         #define HWRM_FUNC_CFG_INPUT_ENABLES_ALLOWED_VLAN_PRIS \
12067                 UINT32_C(0x10000)
12068         /*
12069          * This bit must be '1' for the evb_mode field to be
12070          * configured.
12071          */
12072         #define HWRM_FUNC_CFG_INPUT_ENABLES_EVB_MODE \
12073                 UINT32_C(0x20000)
12074         /*
12075          * This bit must be '1' for the num_mcast_filters field to be
12076          * configured.
12077          */
12078         #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_MCAST_FILTERS \
12079                 UINT32_C(0x40000)
12080         /*
12081          * This bit must be '1' for the num_hw_ring_grps field to be
12082          * configured.
12083          */
12084         #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_HW_RING_GRPS \
12085                 UINT32_C(0x80000)
12086         /*
12087          * This bit must be '1' for the cache_linesize field to be
12088          * configured.
12089          */
12090         #define HWRM_FUNC_CFG_INPUT_ENABLES_CACHE_LINESIZE \
12091                 UINT32_C(0x100000)
12092         /*
12093          * This bit must be '1' for the num_msix field to be
12094          * configured.
12095          */
12096         #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_MSIX \
12097                 UINT32_C(0x200000)
12098         /*
12099          * This bit must be '1' for the link admin state field to be
12100          * configured.
12101          */
12102         #define HWRM_FUNC_CFG_INPUT_ENABLES_ADMIN_LINK_STATE \
12103                 UINT32_C(0x400000)
12104         /*
12105          * This bit must be '1' for the hot_reset_if_en_dis field to be
12106          * configured.
12107          */
12108         #define HWRM_FUNC_CFG_INPUT_ENABLES_HOT_RESET_IF_SUPPORT \
12109                 UINT32_C(0x800000)
12110         /*
12111          * This bit must be '1' for the schq_id field to be
12112          * configured.
12113          */
12114         #define HWRM_FUNC_CFG_INPUT_ENABLES_SCHQ_ID \
12115                 UINT32_C(0x1000000)
12116         /*
12117          * This bit must be '1' for the mpc_chnls field to be
12118          * configured.
12119          */
12120         #define HWRM_FUNC_CFG_INPUT_ENABLES_MPC_CHNLS \
12121                 UINT32_C(0x2000000)
12122         /*
12123          * The maximum transmission unit of the function.
12124          * The HWRM should make sure that the mtu of
12125          * the function does not exceed the mtu of the physical
12126          * port that this function is associated with.
12127          *
12128          * In addition to configuring mtu per function, it is
12129          * possible to configure mtu per transmit ring.
12130          * By default, the mtu of each transmit ring associated
12131          * with a function is equal to the mtu of the function.
12132          * The HWRM should make sure that the mtu of each transmit
12133          * ring that is assigned to a function has a valid mtu.
12134          */
12135         uint16_t        mtu;
12136         /*
12137          * The maximum receive unit of the function.
12138          * The HWRM should make sure that the mru of
12139          * the function does not exceed the mru of the physical
12140          * port that this function is associated with.
12141          *
12142          * In addition to configuring mru per function, it is
12143          * possible to configure mru per vnic.
12144          * By default, the mru of each vnic associated
12145          * with a function is equal to the mru of the function.
12146          * The HWRM should make sure that the mru of each vnic
12147          * that is assigned to a function has a valid mru.
12148          */
12149         uint16_t        mru;
12150         /*
12151          * The number of RSS/COS contexts requested for the
12152          * function.
12153          */
12154         uint16_t        num_rsscos_ctxs;
12155         /*
12156          * The number of completion rings requested for the
12157          * function. This does not include the rings allocated
12158          * to any children functions if any.
12159          */
12160         uint16_t        num_cmpl_rings;
12161         /*
12162          * The number of transmit rings requested for the function.
12163          * This does not include the rings allocated to any
12164          * children functions if any.
12165          */
12166         uint16_t        num_tx_rings;
12167         /*
12168          * The number of receive rings requested for the function.
12169          * This does not include the rings allocated
12170          * to any children functions if any.
12171          */
12172         uint16_t        num_rx_rings;
12173         /* The requested number of L2 contexts for the function. */
12174         uint16_t        num_l2_ctxs;
12175         /* The requested number of vnics for the function. */
12176         uint16_t        num_vnics;
12177         /* The requested number of statistic contexts for the function. */
12178         uint16_t        num_stat_ctxs;
12179         /*
12180          * The number of HW ring groups that should
12181          * be reserved for this function.
12182          */
12183         uint16_t        num_hw_ring_grps;
12184         /* The default MAC address for the function being configured. */
12185         uint8_t dflt_mac_addr[6];
12186         /*
12187          * The default VLAN for the function being configured.
12188          * This field's format is same as 802.1Q Tag's
12189          * Tag Control Information (TCI) format that includes both
12190          * Priority Code Point (PCP) and VLAN Identifier (VID).
12191          */
12192         uint16_t        dflt_vlan;
12193         /*
12194          * The default IP address for the function being configured.
12195          * This address is only used in enabling source property check.
12196          */
12197         uint32_t        dflt_ip_addr[4];
12198         /*
12199          * Minimum BW allocated for this function.
12200          * The HWRM will translate this value into byte counter and
12201          * time interval used for the scheduler inside the device.
12202          */
12203         uint32_t        min_bw;
12204         /* The bandwidth value. */
12205         #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_MASK \
12206                 UINT32_C(0xfffffff)
12207         #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_SFT              0
12208         /* The granularity of the value (bits or bytes). */
12209         #define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE \
12210                 UINT32_C(0x10000000)
12211         /* Value is in bits. */
12212         #define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_BITS \
12213                 (UINT32_C(0x0) << 28)
12214         /* Value is in bytes. */
12215         #define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_BYTES \
12216                 (UINT32_C(0x1) << 28)
12217         #define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_LAST \
12218                 HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_BYTES
12219         /* bw_value_unit is 3 b */
12220         #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_MASK \
12221                 UINT32_C(0xe0000000)
12222         #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_SFT         29
12223         /* Value is in Mb or MB (base 10). */
12224         #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_MEGA \
12225                 (UINT32_C(0x0) << 29)
12226         /* Value is in Kb or KB (base 10). */
12227         #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_KILO \
12228                 (UINT32_C(0x2) << 29)
12229         /* Value is in bits or bytes. */
12230         #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_BASE \
12231                 (UINT32_C(0x4) << 29)
12232         /* Value is in Gb or GB (base 10). */
12233         #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_GIGA \
12234                 (UINT32_C(0x6) << 29)
12235         /* Value is in 1/100th of a percentage of total bandwidth. */
12236         #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
12237                 (UINT32_C(0x1) << 29)
12238         /* Invalid unit */
12239         #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_INVALID \
12240                 (UINT32_C(0x7) << 29)
12241         #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_LAST \
12242                 HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_INVALID
12243         /*
12244          * Maximum BW allocated for this function.
12245          * The HWRM will translate this value into byte counter and
12246          * time interval used for the scheduler inside the device.
12247          */
12248         uint32_t        max_bw;
12249         /* The bandwidth value. */
12250         #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_MASK \
12251                 UINT32_C(0xfffffff)
12252         #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_SFT              0
12253         /* The granularity of the value (bits or bytes). */
12254         #define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE \
12255                 UINT32_C(0x10000000)
12256         /* Value is in bits. */
12257         #define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_BITS \
12258                 (UINT32_C(0x0) << 28)
12259         /* Value is in bytes. */
12260         #define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_BYTES \
12261                 (UINT32_C(0x1) << 28)
12262         #define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_LAST \
12263                 HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_BYTES
12264         /* bw_value_unit is 3 b */
12265         #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_MASK \
12266                 UINT32_C(0xe0000000)
12267         #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_SFT         29
12268         /* Value is in Mb or MB (base 10). */
12269         #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_MEGA \
12270                 (UINT32_C(0x0) << 29)
12271         /* Value is in Kb or KB (base 10). */
12272         #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_KILO \
12273                 (UINT32_C(0x2) << 29)
12274         /* Value is in bits or bytes. */
12275         #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_BASE \
12276                 (UINT32_C(0x4) << 29)
12277         /* Value is in Gb or GB (base 10). */
12278         #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_GIGA \
12279                 (UINT32_C(0x6) << 29)
12280         /* Value is in 1/100th of a percentage of total bandwidth. */
12281         #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
12282                 (UINT32_C(0x1) << 29)
12283         /* Invalid unit */
12284         #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID \
12285                 (UINT32_C(0x7) << 29)
12286         #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_LAST \
12287                 HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID
12288         /*
12289          * ID of the target completion ring for receiving asynchronous
12290          * event completions. If this field is not valid, then the
12291          * HWRM shall use the default completion ring of the function
12292          * that is being configured as the target completion ring for
12293          * providing any asynchronous event completions for that
12294          * function.
12295          * If this field is valid, then the HWRM shall use the
12296          * completion ring identified by this ID as the target
12297          * completion ring for providing any asynchronous event
12298          * completions for the function that is being configured.
12299          */
12300         uint16_t        async_event_cr;
12301         /* VLAN Anti-spoofing mode. */
12302         uint8_t vlan_antispoof_mode;
12303         /* No VLAN anti-spoofing checks are enabled */
12304         #define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_NOCHECK \
12305                 UINT32_C(0x0)
12306         /* Validate VLAN against the configured VLAN(s) */
12307         #define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_VALIDATE_VLAN \
12308                 UINT32_C(0x1)
12309         /* Insert VLAN if it does not exist, otherwise discard */
12310         #define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_INSERT_IF_VLANDNE \
12311                 UINT32_C(0x2)
12312         /* Insert VLAN if it does not exist, override VLAN if it exists */
12313         #define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_INSERT_OR_OVERRIDE_VLAN \
12314                 UINT32_C(0x3)
12315         #define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_LAST \
12316                 HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_INSERT_OR_OVERRIDE_VLAN
12317         /*
12318          * This bit field defines VLAN PRIs that are allowed on
12319          * this function.
12320          * If nth bit is set, then VLAN PRI n is allowed on this
12321          * function.
12322          */
12323         uint8_t allowed_vlan_pris;
12324         /*
12325          * The HWRM shall allow a PF driver to change EVB mode for the
12326          * partition it belongs to.
12327          * The HWRM shall not allow a VF driver to change the EVB mode.
12328          * The HWRM shall take into account the switching of EVB mode
12329          * from one to another and reconfigure hardware resources as
12330          * appropriately.
12331          * The switching from VEB to VEPA mode requires
12332          * the disabling of the loopback traffic. Additionally,
12333          * source knock outs are handled differently in VEB and VEPA
12334          * modes.
12335          */
12336         uint8_t evb_mode;
12337         /* No Edge Virtual Bridging (EVB) */
12338         #define HWRM_FUNC_CFG_INPUT_EVB_MODE_NO_EVB UINT32_C(0x0)
12339         /* Virtual Ethernet Bridge (VEB) */
12340         #define HWRM_FUNC_CFG_INPUT_EVB_MODE_VEB    UINT32_C(0x1)
12341         /* Virtual Ethernet Port Aggregator (VEPA) */
12342         #define HWRM_FUNC_CFG_INPUT_EVB_MODE_VEPA   UINT32_C(0x2)
12343         #define HWRM_FUNC_CFG_INPUT_EVB_MODE_LAST \
12344                 HWRM_FUNC_CFG_INPUT_EVB_MODE_VEPA
12345         uint8_t options;
12346         /*
12347          * This value indicates the PCIE device cache line size.
12348          * The cache line size allows the DMA writes to terminate and
12349          * start at the cache boundary.
12350          */
12351         #define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_MASK \
12352                 UINT32_C(0x3)
12353         #define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SFT          0
12354         /* Cache Line Size 64 bytes */
12355         #define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SIZE_64 \
12356                 UINT32_C(0x0)
12357         /* Cache Line Size 128 bytes */
12358         #define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SIZE_128 \
12359                 UINT32_C(0x1)
12360         #define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_LAST \
12361                 HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SIZE_128
12362         /* This value is the virtual link admin state setting. */
12363         #define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_MASK \
12364                 UINT32_C(0xc)
12365         #define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_SFT        2
12366         /* Admin state is forced down. */
12367         #define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_DOWN \
12368                 (UINT32_C(0x0) << 2)
12369         /* Admin state is forced up. */
12370         #define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_UP \
12371                 (UINT32_C(0x1) << 2)
12372         /* Admin state is in auto mode - is to follow the physical link state. */
12373         #define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_AUTO \
12374                 (UINT32_C(0x2) << 2)
12375         #define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_LAST \
12376                 HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_AUTO
12377         /* Reserved for future. */
12378         #define HWRM_FUNC_CFG_INPUT_OPTIONS_RSVD_MASK \
12379                 UINT32_C(0xf0)
12380         #define HWRM_FUNC_CFG_INPUT_OPTIONS_RSVD_SFT                    4
12381         /*
12382          * The number of multicast filters that should
12383          * be reserved for this function on the RX side.
12384          */
12385         uint16_t        num_mcast_filters;
12386         /* Used by a PF driver to associate a SCHQ with a VF. */
12387         uint16_t        schq_id;
12388         uint16_t        mpc_chnls;
12389         /*
12390          * When this bit is '1', the caller requests to enable a MPC
12391          * channel with destination to the TX crypto engine block.
12392          * When this bit is ‘0’, this flag has no effect.
12393          */
12394         #define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_TCE_ENABLE          UINT32_C(0x1)
12395         /*
12396          * When this bit is '1', the caller requests to disable a MPC
12397          * channel with destination to the TX crypto engine block.
12398          * When this bit is ‘0’, this flag has no effect.
12399          */
12400         #define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_TCE_DISABLE         UINT32_C(0x2)
12401         /*
12402          * When this bit is '1', the caller requests to enable a MPC
12403          * channel with destination to the RX crypto engine block.
12404          * When this bit is ‘0’, this flag has no effect.
12405          */
12406         #define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_RCE_ENABLE          UINT32_C(0x4)
12407         /*
12408          * When this bit is '1', the caller requests to disable a MPC
12409          * channel with destination to the RX crypto engine block.
12410          * When this bit is ‘0’, this flag has no effect.
12411          */
12412         #define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_RCE_DISABLE         UINT32_C(0x8)
12413         /*
12414          * When this bit is '1', the caller requests to enable a MPC
12415          * channel with destination to the TX configurable flow processing
12416          * block. When this bit is ‘0’, this flag has no effect.
12417          */
12418         #define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_TE_CFA_ENABLE \
12419                 UINT32_C(0x10)
12420         /*
12421          * When this bit is '1', the caller requests to disable a MPC
12422          * channel with destination to the TX configurable flow processing
12423          * block. When this bit is ‘0’, this flag has no effect.
12424          */
12425         #define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_TE_CFA_DISABLE \
12426                 UINT32_C(0x20)
12427         /*
12428          * When this bit is '1', the caller requests to enable a MPC
12429          * channel with destination to the RX configurable flow processing
12430          * block. When this bit is ‘0’, this flag has no effect.
12431          */
12432         #define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_RE_CFA_ENABLE \
12433                 UINT32_C(0x40)
12434         /*
12435          * When this bit is '1', the caller requests to disable a MPC
12436          * channel with destination to the RX configurable flow processing
12437          * block. When this bit is ‘0’, this flag has no effect.
12438          */
12439         #define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_RE_CFA_DISABLE \
12440                 UINT32_C(0x80)
12441         /*
12442          * When this bit is '1', the caller requests to enable a MPC
12443          * channel with destination to the primate processor block.
12444          * When this bit is ‘0’, this flag has no effect.
12445          */
12446         #define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_PRIMATE_ENABLE \
12447                 UINT32_C(0x100)
12448         /*
12449          * When this bit is '1', the caller requests to disable a MPC
12450          * channel with destination to the primate processor block.
12451          * When this bit is ‘0’, this flag has no effect.
12452          */
12453         #define HWRM_FUNC_CFG_INPUT_MPC_CHNLS_PRIMATE_DISABLE \
12454                 UINT32_C(0x200)
12455         uint8_t unused_0[4];
12456 } __rte_packed;
12457
12458 /* hwrm_func_cfg_output (size:128b/16B) */
12459 struct hwrm_func_cfg_output {
12460         /* The specific error status for the command. */
12461         uint16_t        error_code;
12462         /* The HWRM command request type. */
12463         uint16_t        req_type;
12464         /* The sequence ID from the original command. */
12465         uint16_t        seq_id;
12466         /* The length of the response data in number of bytes. */
12467         uint16_t        resp_len;
12468         uint8_t unused_0[7];
12469         /*
12470          * This field is used in Output records to indicate that the output
12471          * is completely written to RAM.  This field should be read as '1'
12472          * to indicate that the output has been completely written.
12473          * When writing a command completion or response to an internal processor,
12474          * the order of writes has to be such that this field is written last.
12475          */
12476         uint8_t valid;
12477 } __rte_packed;
12478
12479 /********************
12480  * hwrm_func_qstats *
12481  ********************/
12482
12483
12484 /* hwrm_func_qstats_input (size:192b/24B) */
12485 struct hwrm_func_qstats_input {
12486         /* The HWRM command request type. */
12487         uint16_t        req_type;
12488         /*
12489          * The completion ring to send the completion event on. This should
12490          * be the NQ ID returned from the `nq_alloc` HWRM command.
12491          */
12492         uint16_t        cmpl_ring;
12493         /*
12494          * The sequence ID is used by the driver for tracking multiple
12495          * commands. This ID is treated as opaque data by the firmware and
12496          * the value is returned in the `hwrm_resp_hdr` upon completion.
12497          */
12498         uint16_t        seq_id;
12499         /*
12500          * The target ID of the command:
12501          * * 0x0-0xFFF8 - The function ID
12502          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
12503          * * 0xFFFD - Reserved for user-space HWRM interface
12504          * * 0xFFFF - HWRM
12505          */
12506         uint16_t        target_id;
12507         /*
12508          * A physical address pointer pointing to a host buffer that the
12509          * command's response data will be written. This can be either a host
12510          * physical address (HPA) or a guest physical address (GPA) and must
12511          * point to a physically contiguous block of memory.
12512          */
12513         uint64_t        resp_addr;
12514         /*
12515          * Function ID of the function that is being queried.
12516          * 0xFF... (All Fs) if the query is for the requesting
12517          * function.
12518          * A privileged PF can query for other function's statistics.
12519          */
12520         uint16_t        fid;
12521         /* This flags indicates the type of statistics request. */
12522         uint8_t flags;
12523         /* This value is not used to avoid backward compatibility issues. */
12524         #define HWRM_FUNC_QSTATS_INPUT_FLAGS_UNUSED       UINT32_C(0x0)
12525         /*
12526          * flags should be set to 1 when request is for only RoCE statistics.
12527          * This will be honored only if the caller_fid is a privileged PF.
12528          * In all other cases FID and caller_fid should be the same.
12529          */
12530         #define HWRM_FUNC_QSTATS_INPUT_FLAGS_ROCE_ONLY    UINT32_C(0x1)
12531         /*
12532          * flags should be set to 2 when request is for the counter mask,
12533          * representing the width of each of the stats counters, rather
12534          * than counters themselves.
12535          */
12536         #define HWRM_FUNC_QSTATS_INPUT_FLAGS_COUNTER_MASK UINT32_C(0x2)
12537         #define HWRM_FUNC_QSTATS_INPUT_FLAGS_LAST \
12538                 HWRM_FUNC_QSTATS_INPUT_FLAGS_COUNTER_MASK
12539         uint8_t unused_0[5];
12540 } __rte_packed;
12541
12542 /* hwrm_func_qstats_output (size:1408b/176B) */
12543 struct hwrm_func_qstats_output {
12544         /* The specific error status for the command. */
12545         uint16_t        error_code;
12546         /* The HWRM command request type. */
12547         uint16_t        req_type;
12548         /* The sequence ID from the original command. */
12549         uint16_t        seq_id;
12550         /* The length of the response data in number of bytes. */
12551         uint16_t        resp_len;
12552         /* Number of transmitted unicast packets on the function. */
12553         uint64_t        tx_ucast_pkts;
12554         /* Number of transmitted multicast packets on the function. */
12555         uint64_t        tx_mcast_pkts;
12556         /* Number of transmitted broadcast packets on the function. */
12557         uint64_t        tx_bcast_pkts;
12558         /*
12559          * Number of transmitted packets that were discarded due to
12560          * internal NIC resource problems.  For transmit, this
12561          * can only happen if TMP is configured to allow dropping
12562          * in HOL blocking conditions, which is not a normal
12563          * configuration.
12564          */
12565         uint64_t        tx_discard_pkts;
12566         /*
12567          * Number of dropped packets on transmit path on the function.
12568          * These are packets that have been marked for drop by
12569          * the TE CFA block or are packets that exceeded the
12570          * transmit MTU limit for the function.
12571          */
12572         uint64_t        tx_drop_pkts;
12573         /* Number of transmitted bytes for unicast traffic on the function. */
12574         uint64_t        tx_ucast_bytes;
12575         /* Number of transmitted bytes for multicast traffic on the function. */
12576         uint64_t        tx_mcast_bytes;
12577         /* Number of transmitted bytes for broadcast traffic on the function. */
12578         uint64_t        tx_bcast_bytes;
12579         /* Number of received unicast packets on the function. */
12580         uint64_t        rx_ucast_pkts;
12581         /* Number of received multicast packets on the function. */
12582         uint64_t        rx_mcast_pkts;
12583         /* Number of received broadcast packets on the function. */
12584         uint64_t        rx_bcast_pkts;
12585         /*
12586          * Number of received packets that were discarded on the function
12587          * due to resource limitations.  This can happen for 3 reasons.
12588          * # The BD used for the packet has a bad format.
12589          * # There were no BDs available in the ring for the packet.
12590          * # There were no BDs available on-chip for the packet.
12591          */
12592         uint64_t        rx_discard_pkts;
12593         /*
12594          * Number of dropped packets on received path on the function.
12595          * These are packets that have been marked for drop by the
12596          * RE CFA.
12597          */
12598         uint64_t        rx_drop_pkts;
12599         /* Number of received bytes for unicast traffic on the function. */
12600         uint64_t        rx_ucast_bytes;
12601         /* Number of received bytes for multicast traffic on the function. */
12602         uint64_t        rx_mcast_bytes;
12603         /* Number of received bytes for broadcast traffic on the function. */
12604         uint64_t        rx_bcast_bytes;
12605         /* Number of aggregated unicast packets on the function. */
12606         uint64_t        rx_agg_pkts;
12607         /* Number of aggregated unicast bytes on the function. */
12608         uint64_t        rx_agg_bytes;
12609         /* Number of aggregation events on the function. */
12610         uint64_t        rx_agg_events;
12611         /* Number of aborted aggregations on the function. */
12612         uint64_t        rx_agg_aborts;
12613         uint8_t unused_0[7];
12614         /*
12615          * This field is used in Output records to indicate that the output
12616          * is completely written to RAM.  This field should be read as '1'
12617          * to indicate that the output has been completely written.
12618          * When writing a command completion or response to an internal processor,
12619          * the order of writes has to be such that this field is written last.
12620          */
12621         uint8_t valid;
12622 } __rte_packed;
12623
12624 /************************
12625  * hwrm_func_qstats_ext *
12626  ************************/
12627
12628
12629 /* hwrm_func_qstats_ext_input (size:256b/32B) */
12630 struct hwrm_func_qstats_ext_input {
12631         /* The HWRM command request type. */
12632         uint16_t        req_type;
12633         /*
12634          * The completion ring to send the completion event on. This should
12635          * be the NQ ID returned from the `nq_alloc` HWRM command.
12636          */
12637         uint16_t        cmpl_ring;
12638         /*
12639          * The sequence ID is used by the driver for tracking multiple
12640          * commands. This ID is treated as opaque data by the firmware and
12641          * the value is returned in the `hwrm_resp_hdr` upon completion.
12642          */
12643         uint16_t        seq_id;
12644         /*
12645          * The target ID of the command:
12646          * * 0x0-0xFFF8 - The function ID
12647          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
12648          * * 0xFFFD - Reserved for user-space HWRM interface
12649          * * 0xFFFF - HWRM
12650          */
12651         uint16_t        target_id;
12652         /*
12653          * A physical address pointer pointing to a host buffer that the
12654          * command's response data will be written. This can be either a host
12655          * physical address (HPA) or a guest physical address (GPA) and must
12656          * point to a physically contiguous block of memory.
12657          */
12658         uint64_t        resp_addr;
12659         /*
12660          * Function ID of the function that is being queried.
12661          * 0xFF... (All Fs) if the query is for the requesting
12662          * function.
12663          * A privileged PF can query for other function's statistics.
12664          */
12665         uint16_t        fid;
12666         /* This flags indicates the type of statistics request. */
12667         uint8_t flags;
12668         /* This value is not used to avoid backward compatibility issues. */
12669         #define HWRM_FUNC_QSTATS_EXT_INPUT_FLAGS_UNUSED       UINT32_C(0x0)
12670         /*
12671          * flags should be set to 1 when request is for only RoCE statistics.
12672          * This will be honored only if the caller_fid is a privileged PF.
12673          * In all other cases FID and caller_fid should be the same.
12674          */
12675         #define HWRM_FUNC_QSTATS_EXT_INPUT_FLAGS_ROCE_ONLY    UINT32_C(0x1)
12676         /*
12677          * flags should be set to 2 when request is for the counter mask
12678          * representing the width of each of the stats counters, rather
12679          * than counters themselves.
12680          */
12681         #define HWRM_FUNC_QSTATS_EXT_INPUT_FLAGS_COUNTER_MASK UINT32_C(0x2)
12682         #define HWRM_FUNC_QSTATS_EXT_INPUT_FLAGS_LAST \
12683                 HWRM_FUNC_QSTATS_EXT_INPUT_FLAGS_COUNTER_MASK
12684         uint8_t unused_0[1];
12685         uint32_t        enables;
12686         /*
12687          * This bit must be '1' for the schq_id and traffic_class fields to
12688          * be configured.
12689          */
12690         #define HWRM_FUNC_QSTATS_EXT_INPUT_ENABLES_SCHQ_ID     UINT32_C(0x1)
12691         /* Specifies the SCHQ for which to gather statistics */
12692         uint16_t        schq_id;
12693         /*
12694          * Specifies the traffic class for which to gather statistics. Valid
12695          * values are 0 through (max_configurable_queues - 1), where
12696          * max_configurable_queues is in the response of HWRM_QUEUE_QPORTCFG
12697          */
12698         uint16_t        traffic_class;
12699         uint8_t unused_1[4];
12700 } __rte_packed;
12701
12702 /* hwrm_func_qstats_ext_output (size:1536b/192B) */
12703 struct hwrm_func_qstats_ext_output {
12704         /* The specific error status for the command. */
12705         uint16_t        error_code;
12706         /* The HWRM command request type. */
12707         uint16_t        req_type;
12708         /* The sequence ID from the original command. */
12709         uint16_t        seq_id;
12710         /* The length of the response data in number of bytes. */
12711         uint16_t        resp_len;
12712         /* Number of received unicast packets */
12713         uint64_t        rx_ucast_pkts;
12714         /* Number of received multicast packets */
12715         uint64_t        rx_mcast_pkts;
12716         /* Number of received broadcast packets */
12717         uint64_t        rx_bcast_pkts;
12718         /* Number of discarded packets on received path */
12719         uint64_t        rx_discard_pkts;
12720         /* Number of packets on receive path with error */
12721         uint64_t        rx_error_pkts;
12722         /* Number of received bytes for unicast traffic */
12723         uint64_t        rx_ucast_bytes;
12724         /* Number of received bytes for multicast traffic */
12725         uint64_t        rx_mcast_bytes;
12726         /* Number of received bytes for broadcast traffic */
12727         uint64_t        rx_bcast_bytes;
12728         /* Number of transmitted unicast packets */
12729         uint64_t        tx_ucast_pkts;
12730         /* Number of transmitted multicast packets */
12731         uint64_t        tx_mcast_pkts;
12732         /* Number of transmitted broadcast packets */
12733         uint64_t        tx_bcast_pkts;
12734         /* Number of packets on transmit path with error */
12735         uint64_t        tx_error_pkts;
12736         /* Number of discarded packets on transmit path */
12737         uint64_t        tx_discard_pkts;
12738         /* Number of transmitted bytes for unicast traffic */
12739         uint64_t        tx_ucast_bytes;
12740         /* Number of transmitted bytes for multicast traffic */
12741         uint64_t        tx_mcast_bytes;
12742         /* Number of transmitted bytes for broadcast traffic */
12743         uint64_t        tx_bcast_bytes;
12744         /* Number of TPA eligible packets */
12745         uint64_t        rx_tpa_eligible_pkt;
12746         /* Number of TPA eligible bytes */
12747         uint64_t        rx_tpa_eligible_bytes;
12748         /* Number of TPA packets */
12749         uint64_t        rx_tpa_pkt;
12750         /* Number of TPA bytes */
12751         uint64_t        rx_tpa_bytes;
12752         /* Number of TPA errors */
12753         uint64_t        rx_tpa_errors;
12754         /* Number of TPA errors */
12755         uint64_t        rx_tpa_events;
12756         uint8_t unused_0[7];
12757         /*
12758          * This field is used in Output records to indicate that the output
12759          * is completely written to RAM.  This field should be read as '1'
12760          * to indicate that the output has been completely written.
12761          * When writing a command completion or response to an internal processor,
12762          * the order of writes has to be such that this field is written last.
12763          */
12764         uint8_t valid;
12765 } __rte_packed;
12766
12767 /***********************
12768  * hwrm_func_clr_stats *
12769  ***********************/
12770
12771
12772 /* hwrm_func_clr_stats_input (size:192b/24B) */
12773 struct hwrm_func_clr_stats_input {
12774         /* The HWRM command request type. */
12775         uint16_t        req_type;
12776         /*
12777          * The completion ring to send the completion event on. This should
12778          * be the NQ ID returned from the `nq_alloc` HWRM command.
12779          */
12780         uint16_t        cmpl_ring;
12781         /*
12782          * The sequence ID is used by the driver for tracking multiple
12783          * commands. This ID is treated as opaque data by the firmware and
12784          * the value is returned in the `hwrm_resp_hdr` upon completion.
12785          */
12786         uint16_t        seq_id;
12787         /*
12788          * The target ID of the command:
12789          * * 0x0-0xFFF8 - The function ID
12790          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
12791          * * 0xFFFD - Reserved for user-space HWRM interface
12792          * * 0xFFFF - HWRM
12793          */
12794         uint16_t        target_id;
12795         /*
12796          * A physical address pointer pointing to a host buffer that the
12797          * command's response data will be written. This can be either a host
12798          * physical address (HPA) or a guest physical address (GPA) and must
12799          * point to a physically contiguous block of memory.
12800          */
12801         uint64_t        resp_addr;
12802         /*
12803          * Function ID of the function.
12804          * 0xFF... (All Fs) if the query is for the requesting
12805          * function.
12806          */
12807         uint16_t        fid;
12808         uint8_t unused_0[6];
12809 } __rte_packed;
12810
12811 /* hwrm_func_clr_stats_output (size:128b/16B) */
12812 struct hwrm_func_clr_stats_output {
12813         /* The specific error status for the command. */
12814         uint16_t        error_code;
12815         /* The HWRM command request type. */
12816         uint16_t        req_type;
12817         /* The sequence ID from the original command. */
12818         uint16_t        seq_id;
12819         /* The length of the response data in number of bytes. */
12820         uint16_t        resp_len;
12821         uint8_t unused_0[7];
12822         /*
12823          * This field is used in Output records to indicate that the output
12824          * is completely written to RAM.  This field should be read as '1'
12825          * to indicate that the output has been completely written.
12826          * When writing a command completion or response to an internal processor,
12827          * the order of writes has to be such that this field is written last.
12828          */
12829         uint8_t valid;
12830 } __rte_packed;
12831
12832 /**************************
12833  * hwrm_func_vf_resc_free *
12834  **************************/
12835
12836
12837 /* hwrm_func_vf_resc_free_input (size:192b/24B) */
12838 struct hwrm_func_vf_resc_free_input {
12839         /* The HWRM command request type. */
12840         uint16_t        req_type;
12841         /*
12842          * The completion ring to send the completion event on. This should
12843          * be the NQ ID returned from the `nq_alloc` HWRM command.
12844          */
12845         uint16_t        cmpl_ring;
12846         /*
12847          * The sequence ID is used by the driver for tracking multiple
12848          * commands. This ID is treated as opaque data by the firmware and
12849          * the value is returned in the `hwrm_resp_hdr` upon completion.
12850          */
12851         uint16_t        seq_id;
12852         /*
12853          * The target ID of the command:
12854          * * 0x0-0xFFF8 - The function ID
12855          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
12856          * * 0xFFFD - Reserved for user-space HWRM interface
12857          * * 0xFFFF - HWRM
12858          */
12859         uint16_t        target_id;
12860         /*
12861          * A physical address pointer pointing to a host buffer that the
12862          * command's response data will be written. This can be either a host
12863          * physical address (HPA) or a guest physical address (GPA) and must
12864          * point to a physically contiguous block of memory.
12865          */
12866         uint64_t        resp_addr;
12867         /*
12868          * This value is used to identify a Virtual Function (VF).
12869          * The scope of VF ID is local within a PF.
12870          */
12871         uint16_t        vf_id;
12872         uint8_t unused_0[6];
12873 } __rte_packed;
12874
12875 /* hwrm_func_vf_resc_free_output (size:128b/16B) */
12876 struct hwrm_func_vf_resc_free_output {
12877         /* The specific error status for the command. */
12878         uint16_t        error_code;
12879         /* The HWRM command request type. */
12880         uint16_t        req_type;
12881         /* The sequence ID from the original command. */
12882         uint16_t        seq_id;
12883         /* The length of the response data in number of bytes. */
12884         uint16_t        resp_len;
12885         uint8_t unused_0[7];
12886         /*
12887          * This field is used in Output records to indicate that the output
12888          * is completely written to RAM.  This field should be read as '1'
12889          * to indicate that the output has been completely written.
12890          * When writing a command completion or response to an internal processor,
12891          * the order of writes has to be such that this field is written last.
12892          */
12893         uint8_t valid;
12894 } __rte_packed;
12895
12896 /**********************
12897  * hwrm_func_drv_rgtr *
12898  **********************/
12899
12900
12901 /* hwrm_func_drv_rgtr_input (size:896b/112B) */
12902 struct hwrm_func_drv_rgtr_input {
12903         /* The HWRM command request type. */
12904         uint16_t        req_type;
12905         /*
12906          * The completion ring to send the completion event on. This should
12907          * be the NQ ID returned from the `nq_alloc` HWRM command.
12908          */
12909         uint16_t        cmpl_ring;
12910         /*
12911          * The sequence ID is used by the driver for tracking multiple
12912          * commands. This ID is treated as opaque data by the firmware and
12913          * the value is returned in the `hwrm_resp_hdr` upon completion.
12914          */
12915         uint16_t        seq_id;
12916         /*
12917          * The target ID of the command:
12918          * * 0x0-0xFFF8 - The function ID
12919          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
12920          * * 0xFFFD - Reserved for user-space HWRM interface
12921          * * 0xFFFF - HWRM
12922          */
12923         uint16_t        target_id;
12924         /*
12925          * A physical address pointer pointing to a host buffer that the
12926          * command's response data will be written. This can be either a host
12927          * physical address (HPA) or a guest physical address (GPA) and must
12928          * point to a physically contiguous block of memory.
12929          */
12930         uint64_t        resp_addr;
12931         uint32_t        flags;
12932         /*
12933          * When this bit is '1', the function driver is requesting
12934          * all requests from its children VF drivers to be
12935          * forwarded to itself.
12936          * This flag can only be set by the PF driver.
12937          * If a VF driver sets this flag, it should be ignored
12938          * by the HWRM.
12939          */
12940         #define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FWD_ALL_MODE \
12941                 UINT32_C(0x1)
12942         /*
12943          * When this bit is '1', the function is requesting none of
12944          * the requests from its children VF drivers to be
12945          * forwarded to itself.
12946          * This flag can only be set by the PF driver.
12947          * If a VF driver sets this flag, it should be ignored
12948          * by the HWRM.
12949          */
12950         #define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FWD_NONE_MODE \
12951                 UINT32_C(0x2)
12952         /*
12953          * When this bit is '1', then ver_maj_8b, ver_min_8b, ver_upd_8b
12954          * fields shall be ignored and ver_maj, ver_min, ver_upd
12955          * and ver_patch shall be used for the driver version information.
12956          * When this bit is '0', then ver_maj_8b, ver_min_8b, ver_upd_8b
12957          * fields shall be used for the driver version information and
12958          * ver_maj, ver_min, ver_upd and ver_patch shall be ignored.
12959          */
12960         #define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_16BIT_VER_MODE \
12961                 UINT32_C(0x4)
12962         /*
12963          * When this bit is '1', the function is indicating support of
12964          * 64bit flow handle.  The firmware that only supports 64bit flow
12965          * handle should check this bit before allowing processing of
12966          * HWRM_CFA_FLOW_XXX commands from the requesting function as firmware
12967          * with 64bit flow handle support can only be compatible with drivers
12968          * that support 64bit flow handle. The legacy drivers that don't support
12969          * 64bit flow handle won't be able to use HWRM_CFA_FLOW_XXX commands when
12970          * running with new firmware that only supports 64bit flow handle. The new
12971          * firmware support 64bit flow handle returns HWRM_ERR_CODE_CMD_NOT_SUPPORTED
12972          * status to the legacy driver when encounters these commands.
12973          */
12974         #define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FLOW_HANDLE_64BIT_MODE \
12975                 UINT32_C(0x8)
12976         /*
12977          * When this bit is '1', the function is indicating support of
12978          * Hot Reset. The driver interface will destroy the resources,
12979          * unregister the function and register again up on receiving
12980          * the RESET_NOTIFY Async notification from the core firmware.
12981          * The core firmware will this use flag and trigger the Hot Reset
12982          * process only if all the registered driver instances are capable
12983          * of this support.
12984          */
12985         #define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_HOT_RESET_SUPPORT \
12986                 UINT32_C(0x10)
12987         /*
12988          * When this bit is 1, the function is indicating the support of the
12989          * error recovery capability. Error recovery support will be used by
12990          * firmware only if all the driver instances support error recovery
12991          * process. By setting this bit, driver is indicating support for
12992          * corresponding async event completion message. These will be
12993          * delivered to the driver even if they did not register for it.
12994          * If supported, after receiving reset notify async event with fatal
12995          * flag set in event data1, then all the drivers have to tear down
12996          * their resources without sending any HWRM commands to FW.
12997          */
12998         #define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_ERROR_RECOVERY_SUPPORT \
12999                 UINT32_C(0x20)
13000         /*
13001          * When this bit is 1, the function is indicating the support of the
13002          * Master capability. The Firmware will use this capability to select the
13003          * Master function. The master function will be used to initiate
13004          * designated functionality like error recovery etc… If none of the
13005          * registered PF’s or trusted VF’s indicate this support, then
13006          * firmware will select the 1st registered PF as Master capable instance.
13007          */
13008         #define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_MASTER_SUPPORT \
13009                 UINT32_C(0x40)
13010         uint32_t        enables;
13011         /*
13012          * This bit must be '1' for the os_type field to be
13013          * configured.
13014          */
13015         #define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_OS_TYPE \
13016                 UINT32_C(0x1)
13017         /*
13018          * This bit must be '1' for the ver field to be
13019          * configured.
13020          */
13021         #define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_VER \
13022                 UINT32_C(0x2)
13023         /*
13024          * This bit must be '1' for the timestamp field to be
13025          * configured.
13026          */
13027         #define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_TIMESTAMP \
13028                 UINT32_C(0x4)
13029         /*
13030          * This bit must be '1' for the vf_req_fwd field to be
13031          * configured.
13032          */
13033         #define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_VF_REQ_FWD \
13034                 UINT32_C(0x8)
13035         /*
13036          * This bit must be '1' for the async_event_fwd field to be
13037          * configured.
13038          */
13039         #define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_ASYNC_EVENT_FWD \
13040                 UINT32_C(0x10)
13041         /* This value indicates the type of OS.  The values are based on CIM_OperatingSystem.mof file as published by the DMTF. */
13042         uint16_t        os_type;
13043         /* Unknown */
13044         #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_UNKNOWN   UINT32_C(0x0)
13045         /* Other OS not listed below. */
13046         #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_OTHER     UINT32_C(0x1)
13047         /* MSDOS OS. */
13048         #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_MSDOS     UINT32_C(0xe)
13049         /* Windows OS. */
13050         #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_WINDOWS   UINT32_C(0x12)
13051         /* Solaris OS. */
13052         #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_SOLARIS   UINT32_C(0x1d)
13053         /* Linux OS. */
13054         #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_LINUX     UINT32_C(0x24)
13055         /* FreeBSD OS. */
13056         #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_FREEBSD   UINT32_C(0x2a)
13057         /* VMware ESXi OS. */
13058         #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_ESXI      UINT32_C(0x68)
13059         /* Microsoft Windows 8 64-bit OS. */
13060         #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_WIN864    UINT32_C(0x73)
13061         /* Microsoft Windows Server 2012 R2 OS. */
13062         #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_WIN2012R2 UINT32_C(0x74)
13063         /* UEFI driver. */
13064         #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_UEFI      UINT32_C(0x8000)
13065         #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_LAST \
13066                 HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_UEFI
13067         /* This is the 8bit major version of the driver. */
13068         uint8_t ver_maj_8b;
13069         /* This is the 8bit minor version of the driver. */
13070         uint8_t ver_min_8b;
13071         /* This is the 8bit update version of the driver. */
13072         uint8_t ver_upd_8b;
13073         uint8_t unused_0[3];
13074         /*
13075          * This is a 32-bit timestamp provided by the driver for
13076          * keep alive.
13077          * The timestamp is in multiples of 1ms.
13078          */
13079         uint32_t        timestamp;
13080         uint8_t unused_1[4];
13081         /*
13082          * This is a 256-bit bit mask provided by the PF driver for
13083          * letting the HWRM know what commands issued by the VF driver
13084          * to the HWRM should be forwarded to the PF driver.
13085          * Nth bit refers to the Nth req_type.
13086          *
13087          * Setting Nth bit to 1 indicates that requests from the
13088          * VF driver with req_type equal to N shall be forwarded to
13089          * the parent PF driver.
13090          *
13091          * This field is not valid for the VF driver.
13092          */
13093         uint32_t        vf_req_fwd[8];
13094         /*
13095          * This is a 256-bit bit mask provided by the function driver
13096          * (PF or VF driver) to indicate the list of asynchronous event
13097          * completions to be forwarded.
13098          *
13099          * Nth bit refers to the Nth event_id.
13100          *
13101          * Setting Nth bit to 1 by the function driver shall result in
13102          * the HWRM forwarding asynchronous event completion with
13103          * event_id equal to N.
13104          *
13105          * If all bits are set to 0 (value of 0), then the HWRM shall
13106          * not forward any asynchronous event completion to this
13107          * function driver.
13108          */
13109         uint32_t        async_event_fwd[8];
13110         /* This is the 16bit major version of the driver. */
13111         uint16_t        ver_maj;
13112         /* This is the 16bit minor version of the driver. */
13113         uint16_t        ver_min;
13114         /* This is the 16bit update version of the driver. */
13115         uint16_t        ver_upd;
13116         /* This is the 16bit patch version of the driver. */
13117         uint16_t        ver_patch;
13118 } __rte_packed;
13119
13120 /* hwrm_func_drv_rgtr_output (size:128b/16B) */
13121 struct hwrm_func_drv_rgtr_output {
13122         /* The specific error status for the command. */
13123         uint16_t        error_code;
13124         /* The HWRM command request type. */
13125         uint16_t        req_type;
13126         /* The sequence ID from the original command. */
13127         uint16_t        seq_id;
13128         /* The length of the response data in number of bytes. */
13129         uint16_t        resp_len;
13130         uint32_t        flags;
13131         /*
13132          * When this bit is '1', it indicates that the
13133          * HWRM_FUNC_DRV_IF_CHANGE call is supported.
13134          */
13135         #define HWRM_FUNC_DRV_RGTR_OUTPUT_FLAGS_IF_CHANGE_SUPPORTED \
13136                 UINT32_C(0x1)
13137         uint8_t unused_0[3];
13138         /*
13139          * This field is used in Output records to indicate that the output
13140          * is completely written to RAM.  This field should be read as '1'
13141          * to indicate that the output has been completely written.
13142          * When writing a command completion or response to an internal processor,
13143          * the order of writes has to be such that this field is written last.
13144          */
13145         uint8_t valid;
13146 } __rte_packed;
13147
13148 /************************
13149  * hwrm_func_drv_unrgtr *
13150  ************************/
13151
13152
13153 /* hwrm_func_drv_unrgtr_input (size:192b/24B) */
13154 struct hwrm_func_drv_unrgtr_input {
13155         /* The HWRM command request type. */
13156         uint16_t        req_type;
13157         /*
13158          * The completion ring to send the completion event on. This should
13159          * be the NQ ID returned from the `nq_alloc` HWRM command.
13160          */
13161         uint16_t        cmpl_ring;
13162         /*
13163          * The sequence ID is used by the driver for tracking multiple
13164          * commands. This ID is treated as opaque data by the firmware and
13165          * the value is returned in the `hwrm_resp_hdr` upon completion.
13166          */
13167         uint16_t        seq_id;
13168         /*
13169          * The target ID of the command:
13170          * * 0x0-0xFFF8 - The function ID
13171          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
13172          * * 0xFFFD - Reserved for user-space HWRM interface
13173          * * 0xFFFF - HWRM
13174          */
13175         uint16_t        target_id;
13176         /*
13177          * A physical address pointer pointing to a host buffer that the
13178          * command's response data will be written. This can be either a host
13179          * physical address (HPA) or a guest physical address (GPA) and must
13180          * point to a physically contiguous block of memory.
13181          */
13182         uint64_t        resp_addr;
13183         uint32_t        flags;
13184         /*
13185          * When this bit is '1', the function driver is notifying
13186          * the HWRM to prepare for the shutdown.
13187          */
13188         #define HWRM_FUNC_DRV_UNRGTR_INPUT_FLAGS_PREPARE_FOR_SHUTDOWN \
13189                 UINT32_C(0x1)
13190         uint8_t unused_0[4];
13191 } __rte_packed;
13192
13193 /* hwrm_func_drv_unrgtr_output (size:128b/16B) */
13194 struct hwrm_func_drv_unrgtr_output {
13195         /* The specific error status for the command. */
13196         uint16_t        error_code;
13197         /* The HWRM command request type. */
13198         uint16_t        req_type;
13199         /* The sequence ID from the original command. */
13200         uint16_t        seq_id;
13201         /* The length of the response data in number of bytes. */
13202         uint16_t        resp_len;
13203         uint8_t unused_0[7];
13204         /*
13205          * This field is used in Output records to indicate that the output
13206          * is completely written to RAM.  This field should be read as '1'
13207          * to indicate that the output has been completely written.
13208          * When writing a command completion or response to an internal processor,
13209          * the order of writes has to be such that this field is written last.
13210          */
13211         uint8_t valid;
13212 } __rte_packed;
13213
13214 /**********************
13215  * hwrm_func_buf_rgtr *
13216  **********************/
13217
13218
13219 /* hwrm_func_buf_rgtr_input (size:1024b/128B) */
13220 struct hwrm_func_buf_rgtr_input {
13221         /* The HWRM command request type. */
13222         uint16_t        req_type;
13223         /*
13224          * The completion ring to send the completion event on. This should
13225          * be the NQ ID returned from the `nq_alloc` HWRM command.
13226          */
13227         uint16_t        cmpl_ring;
13228         /*
13229          * The sequence ID is used by the driver for tracking multiple
13230          * commands. This ID is treated as opaque data by the firmware and
13231          * the value is returned in the `hwrm_resp_hdr` upon completion.
13232          */
13233         uint16_t        seq_id;
13234         /*
13235          * The target ID of the command:
13236          * * 0x0-0xFFF8 - The function ID
13237          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
13238          * * 0xFFFD - Reserved for user-space HWRM interface
13239          * * 0xFFFF - HWRM
13240          */
13241         uint16_t        target_id;
13242         /*
13243          * A physical address pointer pointing to a host buffer that the
13244          * command's response data will be written. This can be either a host
13245          * physical address (HPA) or a guest physical address (GPA) and must
13246          * point to a physically contiguous block of memory.
13247          */
13248         uint64_t        resp_addr;
13249         uint32_t        enables;
13250         /*
13251          * This bit must be '1' for the vf_id field to be
13252          * configured.
13253          */
13254         #define HWRM_FUNC_BUF_RGTR_INPUT_ENABLES_VF_ID            UINT32_C(0x1)
13255         /*
13256          * This bit must be '1' for the err_buf_addr field to be
13257          * configured.
13258          */
13259         #define HWRM_FUNC_BUF_RGTR_INPUT_ENABLES_ERR_BUF_ADDR     UINT32_C(0x2)
13260         /*
13261          * This value is used to identify a Virtual Function (VF).
13262          * The scope of VF ID is local within a PF.
13263          */
13264         uint16_t        vf_id;
13265         /*
13266          * This field represents the number of pages used for request
13267          * buffer(s).
13268          */
13269         uint16_t        req_buf_num_pages;
13270         /*
13271          * This field represents the page size used for request
13272          * buffer(s).
13273          */
13274         uint16_t        req_buf_page_size;
13275         /* 16 bytes */
13276         #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_16B UINT32_C(0x4)
13277         /* 4 Kbytes */
13278         #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_4K  UINT32_C(0xc)
13279         /* 8 Kbytes */
13280         #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_8K  UINT32_C(0xd)
13281         /* 64 Kbytes */
13282         #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_64K UINT32_C(0x10)
13283         /* 2 Mbytes */
13284         #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_2M  UINT32_C(0x15)
13285         /* 4 Mbytes */
13286         #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_4M  UINT32_C(0x16)
13287         /* 1 Gbytes */
13288         #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_1G  UINT32_C(0x1e)
13289         #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_LAST \
13290                 HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_1G
13291         /* The length of the request buffer per VF in bytes. */
13292         uint16_t        req_buf_len;
13293         /* The length of the response buffer in bytes. */
13294         uint16_t        resp_buf_len;
13295         uint8_t unused_0[2];
13296         /* This field represents the page address of page #0. */
13297         uint64_t        req_buf_page_addr0;
13298         /* This field represents the page address of page #1. */
13299         uint64_t        req_buf_page_addr1;
13300         /* This field represents the page address of page #2. */
13301         uint64_t        req_buf_page_addr2;
13302         /* This field represents the page address of page #3. */
13303         uint64_t        req_buf_page_addr3;
13304         /* This field represents the page address of page #4. */
13305         uint64_t        req_buf_page_addr4;
13306         /* This field represents the page address of page #5. */
13307         uint64_t        req_buf_page_addr5;
13308         /* This field represents the page address of page #6. */
13309         uint64_t        req_buf_page_addr6;
13310         /* This field represents the page address of page #7. */
13311         uint64_t        req_buf_page_addr7;
13312         /* This field represents the page address of page #8. */
13313         uint64_t        req_buf_page_addr8;
13314         /* This field represents the page address of page #9. */
13315         uint64_t        req_buf_page_addr9;
13316         /*
13317          * This field is used to receive the error reporting from
13318          * the chipset. Only applicable for PFs.
13319          */
13320         uint64_t        error_buf_addr;
13321         /*
13322          * This field is used to receive the response forwarded by the
13323          * HWRM.
13324          */
13325         uint64_t        resp_buf_addr;
13326 } __rte_packed;
13327
13328 /* hwrm_func_buf_rgtr_output (size:128b/16B) */
13329 struct hwrm_func_buf_rgtr_output {
13330         /* The specific error status for the command. */
13331         uint16_t        error_code;
13332         /* The HWRM command request type. */
13333         uint16_t        req_type;
13334         /* The sequence ID from the original command. */
13335         uint16_t        seq_id;
13336         /* The length of the response data in number of bytes. */
13337         uint16_t        resp_len;
13338         uint8_t unused_0[7];
13339         /*
13340          * This field is used in Output records to indicate that the output
13341          * is completely written to RAM.  This field should be read as '1'
13342          * to indicate that the output has been completely written.
13343          * When writing a command completion or response to an internal processor,
13344          * the order of writes has to be such that this field is written last.
13345          */
13346         uint8_t valid;
13347 } __rte_packed;
13348
13349 /************************
13350  * hwrm_func_buf_unrgtr *
13351  ************************/
13352
13353
13354 /* hwrm_func_buf_unrgtr_input (size:192b/24B) */
13355 struct hwrm_func_buf_unrgtr_input {
13356         /* The HWRM command request type. */
13357         uint16_t        req_type;
13358         /*
13359          * The completion ring to send the completion event on. This should
13360          * be the NQ ID returned from the `nq_alloc` HWRM command.
13361          */
13362         uint16_t        cmpl_ring;
13363         /*
13364          * The sequence ID is used by the driver for tracking multiple
13365          * commands. This ID is treated as opaque data by the firmware and
13366          * the value is returned in the `hwrm_resp_hdr` upon completion.
13367          */
13368         uint16_t        seq_id;
13369         /*
13370          * The target ID of the command:
13371          * * 0x0-0xFFF8 - The function ID
13372          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
13373          * * 0xFFFD - Reserved for user-space HWRM interface
13374          * * 0xFFFF - HWRM
13375          */
13376         uint16_t        target_id;
13377         /*
13378          * A physical address pointer pointing to a host buffer that the
13379          * command's response data will be written. This can be either a host
13380          * physical address (HPA) or a guest physical address (GPA) and must
13381          * point to a physically contiguous block of memory.
13382          */
13383         uint64_t        resp_addr;
13384         uint32_t        enables;
13385         /*
13386          * This bit must be '1' for the vf_id field to be
13387          * configured.
13388          */
13389         #define HWRM_FUNC_BUF_UNRGTR_INPUT_ENABLES_VF_ID     UINT32_C(0x1)
13390         /*
13391          * This value is used to identify a Virtual Function (VF).
13392          * The scope of VF ID is local within a PF.
13393          */
13394         uint16_t        vf_id;
13395         uint8_t unused_0[2];
13396 } __rte_packed;
13397
13398 /* hwrm_func_buf_unrgtr_output (size:128b/16B) */
13399 struct hwrm_func_buf_unrgtr_output {
13400         /* The specific error status for the command. */
13401         uint16_t        error_code;
13402         /* The HWRM command request type. */
13403         uint16_t        req_type;
13404         /* The sequence ID from the original command. */
13405         uint16_t        seq_id;
13406         /* The length of the response data in number of bytes. */
13407         uint16_t        resp_len;
13408         uint8_t unused_0[7];
13409         /*
13410          * This field is used in Output records to indicate that the output
13411          * is completely written to RAM.  This field should be read as '1'
13412          * to indicate that the output has been completely written.
13413          * When writing a command completion or response to an internal processor,
13414          * the order of writes has to be such that this field is written last.
13415          */
13416         uint8_t valid;
13417 } __rte_packed;
13418
13419 /**********************
13420  * hwrm_func_drv_qver *
13421  **********************/
13422
13423
13424 /* hwrm_func_drv_qver_input (size:192b/24B) */
13425 struct hwrm_func_drv_qver_input {
13426         /* The HWRM command request type. */
13427         uint16_t        req_type;
13428         /*
13429          * The completion ring to send the completion event on. This should
13430          * be the NQ ID returned from the `nq_alloc` HWRM command.
13431          */
13432         uint16_t        cmpl_ring;
13433         /*
13434          * The sequence ID is used by the driver for tracking multiple
13435          * commands. This ID is treated as opaque data by the firmware and
13436          * the value is returned in the `hwrm_resp_hdr` upon completion.
13437          */
13438         uint16_t        seq_id;
13439         /*
13440          * The target ID of the command:
13441          * * 0x0-0xFFF8 - The function ID
13442          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
13443          * * 0xFFFD - Reserved for user-space HWRM interface
13444          * * 0xFFFF - HWRM
13445          */
13446         uint16_t        target_id;
13447         /*
13448          * A physical address pointer pointing to a host buffer that the
13449          * command's response data will be written. This can be either a host
13450          * physical address (HPA) or a guest physical address (GPA) and must
13451          * point to a physically contiguous block of memory.
13452          */
13453         uint64_t        resp_addr;
13454         /* Reserved for future use. */
13455         uint32_t        reserved;
13456         /*
13457          * Function ID of the function that is being queried.
13458          * 0xFF... (All Fs) if the query is for the requesting
13459          * function.
13460          */
13461         uint16_t        fid;
13462         uint8_t unused_0[2];
13463 } __rte_packed;
13464
13465 /* hwrm_func_drv_qver_output (size:256b/32B) */
13466 struct hwrm_func_drv_qver_output {
13467         /* The specific error status for the command. */
13468         uint16_t        error_code;
13469         /* The HWRM command request type. */
13470         uint16_t        req_type;
13471         /* The sequence ID from the original command. */
13472         uint16_t        seq_id;
13473         /* The length of the response data in number of bytes. */
13474         uint16_t        resp_len;
13475         /* This value indicates the type of OS.  The values are based on CIM_OperatingSystem.mof file as published by the DMTF. */
13476         uint16_t        os_type;
13477         /* Unknown */
13478         #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_UNKNOWN   UINT32_C(0x0)
13479         /* Other OS not listed below. */
13480         #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_OTHER     UINT32_C(0x1)
13481         /* MSDOS OS. */
13482         #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_MSDOS     UINT32_C(0xe)
13483         /* Windows OS. */
13484         #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_WINDOWS   UINT32_C(0x12)
13485         /* Solaris OS. */
13486         #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_SOLARIS   UINT32_C(0x1d)
13487         /* Linux OS. */
13488         #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_LINUX     UINT32_C(0x24)
13489         /* FreeBSD OS. */
13490         #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_FREEBSD   UINT32_C(0x2a)
13491         /* VMware ESXi OS. */
13492         #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_ESXI      UINT32_C(0x68)
13493         /* Microsoft Windows 8 64-bit OS. */
13494         #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_WIN864    UINT32_C(0x73)
13495         /* Microsoft Windows Server 2012 R2 OS. */
13496         #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_WIN2012R2 UINT32_C(0x74)
13497         /* UEFI driver. */
13498         #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_UEFI      UINT32_C(0x8000)
13499         #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_LAST \
13500                 HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_UEFI
13501         /* This is the 8bit major version of the driver. */
13502         uint8_t ver_maj_8b;
13503         /* This is the 8bit minor version of the driver. */
13504         uint8_t ver_min_8b;
13505         /* This is the 8bit update version of the driver. */
13506         uint8_t ver_upd_8b;
13507         uint8_t unused_0[3];
13508         /* This is the 16bit major version of the driver. */
13509         uint16_t        ver_maj;
13510         /* This is the 16bit minor version of the driver. */
13511         uint16_t        ver_min;
13512         /* This is the 16bit update version of the driver. */
13513         uint16_t        ver_upd;
13514         /* This is the 16bit patch version of the driver. */
13515         uint16_t        ver_patch;
13516         uint8_t unused_1[7];
13517         /*
13518          * This field is used in Output records to indicate that the output
13519          * is completely written to RAM.  This field should be read as '1'
13520          * to indicate that the output has been completely written.
13521          * When writing a command completion or response to an internal processor,
13522          * the order of writes has to be such that this field is written last.
13523          */
13524         uint8_t valid;
13525 } __rte_packed;
13526
13527 /****************************
13528  * hwrm_func_resource_qcaps *
13529  ****************************/
13530
13531
13532 /* hwrm_func_resource_qcaps_input (size:192b/24B) */
13533 struct hwrm_func_resource_qcaps_input {
13534         /* The HWRM command request type. */
13535         uint16_t        req_type;
13536         /*
13537          * The completion ring to send the completion event on. This should
13538          * be the NQ ID returned from the `nq_alloc` HWRM command.
13539          */
13540         uint16_t        cmpl_ring;
13541         /*
13542          * The sequence ID is used by the driver for tracking multiple
13543          * commands. This ID is treated as opaque data by the firmware and
13544          * the value is returned in the `hwrm_resp_hdr` upon completion.
13545          */
13546         uint16_t        seq_id;
13547         /*
13548          * The target ID of the command:
13549          * * 0x0-0xFFF8 - The function ID
13550          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
13551          * * 0xFFFD - Reserved for user-space HWRM interface
13552          * * 0xFFFF - HWRM
13553          */
13554         uint16_t        target_id;
13555         /*
13556          * A physical address pointer pointing to a host buffer that the
13557          * command's response data will be written. This can be either a host
13558          * physical address (HPA) or a guest physical address (GPA) and must
13559          * point to a physically contiguous block of memory.
13560          */
13561         uint64_t        resp_addr;
13562         /*
13563          * Function ID of the function that is being queried.
13564          * 0xFF... (All Fs) if the query is for the requesting
13565          * function.
13566          */
13567         uint16_t        fid;
13568         uint8_t unused_0[6];
13569 } __rte_packed;
13570
13571 /* hwrm_func_resource_qcaps_output (size:448b/56B) */
13572 struct hwrm_func_resource_qcaps_output {
13573         /* The specific error status for the command. */
13574         uint16_t        error_code;
13575         /* The HWRM command request type. */
13576         uint16_t        req_type;
13577         /* The sequence ID from the original command. */
13578         uint16_t        seq_id;
13579         /* The length of the response data in number of bytes. */
13580         uint16_t        resp_len;
13581         /* Maximum guaranteed number of VFs supported by PF. Not applicable for VFs. */
13582         uint16_t        max_vfs;
13583         /* Maximum guaranteed number of MSI-X vectors supported by function */
13584         uint16_t        max_msix;
13585         /* Hint of strategy to be used by PF driver to reserve resources for its VF */
13586         uint16_t        vf_reservation_strategy;
13587         /* The PF driver should evenly divide its remaining resources among all VFs. */
13588         #define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_MAXIMAL \
13589                 UINT32_C(0x0)
13590         /* The PF driver should only reserve minimal resources for each VF. */
13591         #define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_MINIMAL \
13592                 UINT32_C(0x1)
13593         /*
13594          * The PF driver should not reserve any resources for each VF until the
13595          * the VF interface is brought up.
13596          */
13597         #define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_MINIMAL_STATIC \
13598                 UINT32_C(0x2)
13599         #define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_LAST \
13600                 HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_MINIMAL_STATIC
13601         /* Minimum guaranteed number of RSS/COS contexts */
13602         uint16_t        min_rsscos_ctx;
13603         /* Maximum non-guaranteed number of RSS/COS contexts */
13604         uint16_t        max_rsscos_ctx;
13605         /* Minimum guaranteed number of completion rings */
13606         uint16_t        min_cmpl_rings;
13607         /* Maximum non-guaranteed number of completion rings */
13608         uint16_t        max_cmpl_rings;
13609         /* Minimum guaranteed number of transmit rings */
13610         uint16_t        min_tx_rings;
13611         /* Maximum non-guaranteed number of transmit rings */
13612         uint16_t        max_tx_rings;
13613         /* Minimum guaranteed number of receive rings */
13614         uint16_t        min_rx_rings;
13615         /* Maximum non-guaranteed number of receive rings */
13616         uint16_t        max_rx_rings;
13617         /* Minimum guaranteed number of L2 contexts */
13618         uint16_t        min_l2_ctxs;
13619         /* Maximum non-guaranteed number of L2 contexts */
13620         uint16_t        max_l2_ctxs;
13621         /* Minimum guaranteed number of VNICs */
13622         uint16_t        min_vnics;
13623         /* Maximum non-guaranteed number of VNICs */
13624         uint16_t        max_vnics;
13625         /* Minimum guaranteed number of statistic contexts */
13626         uint16_t        min_stat_ctx;
13627         /* Maximum non-guaranteed number of statistic contexts */
13628         uint16_t        max_stat_ctx;
13629         /* Minimum guaranteed number of ring groups */
13630         uint16_t        min_hw_ring_grps;
13631         /* Maximum non-guaranteed number of ring groups */
13632         uint16_t        max_hw_ring_grps;
13633         /*
13634          * Maximum number of inputs into the transmit scheduler for this function.
13635          * The number of TX rings assigned to the function cannot exceed this value.
13636          */
13637         uint16_t        max_tx_scheduler_inputs;
13638         uint16_t        flags;
13639         /*
13640          * When this bit is '1', it indicates that VF_RESOURCE_CFG supports
13641          * feature to reserve all minimum resources when minimum >= 1, otherwise
13642          * returns an error.
13643          */
13644         #define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_FLAGS_MIN_GUARANTEED \
13645                 UINT32_C(0x1)
13646         uint8_t unused_0[5];
13647         /*
13648          * This field is used in Output records to indicate that the output
13649          * is completely written to RAM.  This field should be read as '1'
13650          * to indicate that the output has been completely written.
13651          * When writing a command completion or response to an internal processor,
13652          * the order of writes has to be such that this field is written last.
13653          */
13654         uint8_t valid;
13655 } __rte_packed;
13656
13657 /*****************************
13658  * hwrm_func_vf_resource_cfg *
13659  *****************************/
13660
13661
13662 /* hwrm_func_vf_resource_cfg_input (size:448b/56B) */
13663 struct hwrm_func_vf_resource_cfg_input {
13664         /* The HWRM command request type. */
13665         uint16_t        req_type;
13666         /*
13667          * The completion ring to send the completion event on. This should
13668          * be the NQ ID returned from the `nq_alloc` HWRM command.
13669          */
13670         uint16_t        cmpl_ring;
13671         /*
13672          * The sequence ID is used by the driver for tracking multiple
13673          * commands. This ID is treated as opaque data by the firmware and
13674          * the value is returned in the `hwrm_resp_hdr` upon completion.
13675          */
13676         uint16_t        seq_id;
13677         /*
13678          * The target ID of the command:
13679          * * 0x0-0xFFF8 - The function ID
13680          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
13681          * * 0xFFFD - Reserved for user-space HWRM interface
13682          * * 0xFFFF - HWRM
13683          */
13684         uint16_t        target_id;
13685         /*
13686          * A physical address pointer pointing to a host buffer that the
13687          * command's response data will be written. This can be either a host
13688          * physical address (HPA) or a guest physical address (GPA) and must
13689          * point to a physically contiguous block of memory.
13690          */
13691         uint64_t        resp_addr;
13692         /* VF ID that is being configured by PF */
13693         uint16_t        vf_id;
13694         /* Maximum guaranteed number of MSI-X vectors for the function */
13695         uint16_t        max_msix;
13696         /* Minimum guaranteed number of RSS/COS contexts */
13697         uint16_t        min_rsscos_ctx;
13698         /* Maximum non-guaranteed number of RSS/COS contexts */
13699         uint16_t        max_rsscos_ctx;
13700         /* Minimum guaranteed number of completion rings */
13701         uint16_t        min_cmpl_rings;
13702         /* Maximum non-guaranteed number of completion rings */
13703         uint16_t        max_cmpl_rings;
13704         /* Minimum guaranteed number of transmit rings */
13705         uint16_t        min_tx_rings;
13706         /* Maximum non-guaranteed number of transmit rings */
13707         uint16_t        max_tx_rings;
13708         /* Minimum guaranteed number of receive rings */
13709         uint16_t        min_rx_rings;
13710         /* Maximum non-guaranteed number of receive rings */
13711         uint16_t        max_rx_rings;
13712         /* Minimum guaranteed number of L2 contexts */
13713         uint16_t        min_l2_ctxs;
13714         /* Maximum non-guaranteed number of L2 contexts */
13715         uint16_t        max_l2_ctxs;
13716         /* Minimum guaranteed number of VNICs */
13717         uint16_t        min_vnics;
13718         /* Maximum non-guaranteed number of VNICs */
13719         uint16_t        max_vnics;
13720         /* Minimum guaranteed number of statistic contexts */
13721         uint16_t        min_stat_ctx;
13722         /* Maximum non-guaranteed number of statistic contexts */
13723         uint16_t        max_stat_ctx;
13724         /* Minimum guaranteed number of ring groups */
13725         uint16_t        min_hw_ring_grps;
13726         /* Maximum non-guaranteed number of ring groups */
13727         uint16_t        max_hw_ring_grps;
13728         uint16_t        flags;
13729         /*
13730          * If this bit is set, all minimum resources requested should be
13731          * reserved if minimum >= 1, otherwise return error. In case of
13732          * error, keep all existing reservations before the call.
13733          */
13734         #define HWRM_FUNC_VF_RESOURCE_CFG_INPUT_FLAGS_MIN_GUARANTEED \
13735                 UINT32_C(0x1)
13736         uint8_t unused_0[2];
13737 } __rte_packed;
13738
13739 /* hwrm_func_vf_resource_cfg_output (size:256b/32B) */
13740 struct hwrm_func_vf_resource_cfg_output {
13741         /* The specific error status for the command. */
13742         uint16_t        error_code;
13743         /* The HWRM command request type. */
13744         uint16_t        req_type;
13745         /* The sequence ID from the original command. */
13746         uint16_t        seq_id;
13747         /* The length of the response data in number of bytes. */
13748         uint16_t        resp_len;
13749         /* Reserved number of RSS/COS contexts */
13750         uint16_t        reserved_rsscos_ctx;
13751         /* Reserved number of completion rings */
13752         uint16_t        reserved_cmpl_rings;
13753         /* Reserved number of transmit rings */
13754         uint16_t        reserved_tx_rings;
13755         /* Reserved number of receive rings */
13756         uint16_t        reserved_rx_rings;
13757         /* Reserved number of L2 contexts */
13758         uint16_t        reserved_l2_ctxs;
13759         /* Reserved number of VNICs */
13760         uint16_t        reserved_vnics;
13761         /* Reserved number of statistic contexts */
13762         uint16_t        reserved_stat_ctx;
13763         /* Reserved number of ring groups */
13764         uint16_t        reserved_hw_ring_grps;
13765         uint8_t unused_0[7];
13766         /*
13767          * This field is used in Output records to indicate that the output
13768          * is completely written to RAM.  This field should be read as '1'
13769          * to indicate that the output has been completely written.
13770          * When writing a command completion or response to an internal processor,
13771          * the order of writes has to be such that this field is written last.
13772          */
13773         uint8_t valid;
13774 } __rte_packed;
13775
13776 /*********************************
13777  * hwrm_func_backing_store_qcaps *
13778  *********************************/
13779
13780
13781 /* hwrm_func_backing_store_qcaps_input (size:128b/16B) */
13782 struct hwrm_func_backing_store_qcaps_input {
13783         /* The HWRM command request type. */
13784         uint16_t        req_type;
13785         /*
13786          * The completion ring to send the completion event on. This should
13787          * be the NQ ID returned from the `nq_alloc` HWRM command.
13788          */
13789         uint16_t        cmpl_ring;
13790         /*
13791          * The sequence ID is used by the driver for tracking multiple
13792          * commands. This ID is treated as opaque data by the firmware and
13793          * the value is returned in the `hwrm_resp_hdr` upon completion.
13794          */
13795         uint16_t        seq_id;
13796         /*
13797          * The target ID of the command:
13798          * * 0x0-0xFFF8 - The function ID
13799          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
13800          * * 0xFFFD - Reserved for user-space HWRM interface
13801          * * 0xFFFF - HWRM
13802          */
13803         uint16_t        target_id;
13804         /*
13805          * A physical address pointer pointing to a host buffer that the
13806          * command's response data will be written. This can be either a host
13807          * physical address (HPA) or a guest physical address (GPA) and must
13808          * point to a physically contiguous block of memory.
13809          */
13810         uint64_t        resp_addr;
13811 } __rte_packed;
13812
13813 /* hwrm_func_backing_store_qcaps_output (size:640b/80B) */
13814 struct hwrm_func_backing_store_qcaps_output {
13815         /* The specific error status for the command. */
13816         uint16_t        error_code;
13817         /* The HWRM command request type. */
13818         uint16_t        req_type;
13819         /* The sequence ID from the original command. */
13820         uint16_t        seq_id;
13821         /* The length of the response data in number of bytes. */
13822         uint16_t        resp_len;
13823         /* Maximum number of QP context entries supported for this function. */
13824         uint32_t        qp_max_entries;
13825         /*
13826          * Minimum number of QP context entries that are needed to be reserved
13827          * for QP1 for the PF and its VFs. PF drivers must allocate at least
13828          * this many QP context entries, even if RoCE will not be used.
13829          */
13830         uint16_t        qp_min_qp1_entries;
13831         /* Maximum number of QP context entries that can be used for L2. */
13832         uint16_t        qp_max_l2_entries;
13833         /* Number of bytes that must be allocated for each context entry. */
13834         uint16_t        qp_entry_size;
13835         /* Maximum number of SRQ context entries that can be used for L2. */
13836         uint16_t        srq_max_l2_entries;
13837         /* Maximum number of SRQ context entries supported for this function. */
13838         uint32_t        srq_max_entries;
13839         /* Number of bytes that must be allocated for each context entry. */
13840         uint16_t        srq_entry_size;
13841         /* Maximum number of CQ context entries that can be used for L2. */
13842         uint16_t        cq_max_l2_entries;
13843         /* Maximum number of CQ context entries supported for this function. */
13844         uint32_t        cq_max_entries;
13845         /* Number of bytes that must be allocated for each context entry. */
13846         uint16_t        cq_entry_size;
13847         /* Maximum number of VNIC context entries supported for this function. */
13848         uint16_t        vnic_max_vnic_entries;
13849         /* Maximum number of Ring table context entries supported for this function. */
13850         uint16_t        vnic_max_ring_table_entries;
13851         /* Number of bytes that must be allocated for each context entry. */
13852         uint16_t        vnic_entry_size;
13853         /* Maximum number of statistic context entries supported for this function. */
13854         uint32_t        stat_max_entries;
13855         /* Number of bytes that must be allocated for each context entry. */
13856         uint16_t        stat_entry_size;
13857         /* Number of bytes that must be allocated for each context entry. */
13858         uint16_t        tqm_entry_size;
13859         /* Minimum number of TQM context entries required per ring. */
13860         uint32_t        tqm_min_entries_per_ring;
13861         /*
13862          * Maximum number of TQM context entries supported per ring. This is
13863          * actually a recommended TQM queue size based on worst case usage of
13864          * the TQM queue.
13865          *
13866          * TQM fastpath rings should be sized large enough to accommodate the
13867          * maximum number of QPs (either L2 or RoCE, or both if shared)
13868          * that can be enqueued to the TQM ring.
13869          *
13870          * TQM slowpath rings should be sized as follows:
13871          *
13872          * num_entries = num_vnics + num_l2_tx_rings + 2 * num_roce_qps + tqm_min_size
13873          *
13874          * Where:
13875          *   num_vnics is the number of VNICs allocated in the VNIC backing store
13876          *   num_l2_tx_rings is the number of L2 rings in the QP backing store
13877          *   num_roce_qps is the number of RoCE QPs in the QP backing store
13878          *   tqm_min_size is tqm_min_entries_per_ring reported by
13879          *     HWRM_FUNC_BACKING_STORE_QCAPS
13880          *
13881          * Note that TQM ring sizes cannot be extended while the system is
13882          * operational. If a PF driver needs to extend a TQM ring, it needs
13883          * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
13884          * the backing store.
13885          */
13886         uint32_t        tqm_max_entries_per_ring;
13887         /*
13888          * Maximum number of MR plus AV context entries supported for this
13889          * function.
13890          */
13891         uint32_t        mrav_max_entries;
13892         /* Number of bytes that must be allocated for each context entry. */
13893         uint16_t        mrav_entry_size;
13894         /* Number of bytes that must be allocated for each context entry. */
13895         uint16_t        tim_entry_size;
13896         /* Maximum number of Timer context entries supported for this function. */
13897         uint32_t        tim_max_entries;
13898         /*
13899          * When this field is zero, the 32b `mrav_num_entries` field in the
13900          * `backing_store_cfg` and `backing_store_qcfg` commands represents
13901          * the total number of MR plus AV entries allowed in the MR/AV backing
13902          * store PBL.
13903          *
13904          * When this field is non-zero, the 32b `mrav_num_entries` field in
13905          * the `backing_store_cfg` and `backing_store_qcfg` commands is
13906          * logically divided into two 16b fields. Bits `[31:16]` represents
13907          * the `mr_num_entries` and bits `[15:0]` represents `av_num_entries`.
13908          * Both of these values are represented in a unit granularity
13909          * specified by this field. For example, if this field is 16 and
13910          * `mrav_num_entries` is `0x02000100`, then the number of MR entries
13911          * is 8192 and the number of AV entries is 4096.
13912          */
13913         uint16_t        mrav_num_entries_units;
13914         /*
13915          * The number of entries specified for any TQM ring must be a
13916          * multiple of this value to prevent any resource allocation
13917          * limitations.
13918          */
13919         uint8_t tqm_entries_multiple;
13920         /*
13921          * Initializer to be used by drivers
13922          * to initialize context memory to ensure
13923          * context subsystem flags an error for an attack
13924          * before the first time context load.
13925          */
13926         uint8_t ctx_kind_initializer;
13927         /* Reserved for future. */
13928         uint32_t        rsvd;
13929         /* Reserved for future. */
13930         uint16_t        rsvd1;
13931         /*
13932          * Count of TQM fastpath rings to be used for allocating backing store.
13933          * Backing store configuration must be specified for each TQM ring from
13934          * this count in `backing_store_cfg`.
13935          */
13936         uint8_t tqm_fp_rings_count;
13937         /*
13938          * This field is used in Output records to indicate that the output
13939          * is completely written to RAM.  This field should be read as '1'
13940          * to indicate that the output has been completely written.
13941          * When writing a command completion or response to an internal processor,
13942          * the order of writes has to be such that this field is written last.
13943          */
13944         uint8_t valid;
13945 } __rte_packed;
13946
13947 /*******************************
13948  * hwrm_func_backing_store_cfg *
13949  *******************************/
13950
13951
13952 /* hwrm_func_backing_store_cfg_input (size:2048b/256B) */
13953 struct hwrm_func_backing_store_cfg_input {
13954         /* The HWRM command request type. */
13955         uint16_t        req_type;
13956         /*
13957          * The completion ring to send the completion event on. This should
13958          * be the NQ ID returned from the `nq_alloc` HWRM command.
13959          */
13960         uint16_t        cmpl_ring;
13961         /*
13962          * The sequence ID is used by the driver for tracking multiple
13963          * commands. This ID is treated as opaque data by the firmware and
13964          * the value is returned in the `hwrm_resp_hdr` upon completion.
13965          */
13966         uint16_t        seq_id;
13967         /*
13968          * The target ID of the command:
13969          * * 0x0-0xFFF8 - The function ID
13970          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
13971          * * 0xFFFD - Reserved for user-space HWRM interface
13972          * * 0xFFFF - HWRM
13973          */
13974         uint16_t        target_id;
13975         /*
13976          * A physical address pointer pointing to a host buffer that the
13977          * command's response data will be written. This can be either a host
13978          * physical address (HPA) or a guest physical address (GPA) and must
13979          * point to a physically contiguous block of memory.
13980          */
13981         uint64_t        resp_addr;
13982         uint32_t        flags;
13983         /*
13984          * When set, the firmware only uses on-chip resources and does not
13985          * expect any backing store to be provided by the host driver. This
13986          * mode provides minimal L2 functionality (e.g. limited L2 resources,
13987          * no RoCE).
13988          */
13989         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_FLAGS_PREBOOT_MODE \
13990                 UINT32_C(0x1)
13991         /*
13992          * When set, the 32b `mrav_num_entries` field is logically divided
13993          * into two 16b fields, `mr_num_entries` and `av_num_entries`.
13994          */
13995         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_FLAGS_MRAV_RESERVATION_SPLIT \
13996                 UINT32_C(0x2)
13997         uint32_t        enables;
13998         /*
13999          * This bit must be '1' for the qp fields to be
14000          * configured.
14001          */
14002         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_QP \
14003                 UINT32_C(0x1)
14004         /*
14005          * This bit must be '1' for the srq fields to be
14006          * configured.
14007          */
14008         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_SRQ \
14009                 UINT32_C(0x2)
14010         /*
14011          * This bit must be '1' for the cq fields to be
14012          * configured.
14013          */
14014         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_CQ \
14015                 UINT32_C(0x4)
14016         /*
14017          * This bit must be '1' for the vnic fields to be
14018          * configured.
14019          */
14020         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_VNIC \
14021                 UINT32_C(0x8)
14022         /*
14023          * This bit must be '1' for the stat fields to be
14024          * configured.
14025          */
14026         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_STAT \
14027                 UINT32_C(0x10)
14028         /*
14029          * This bit must be '1' for the tqm_sp fields to be
14030          * configured.
14031          */
14032         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_SP \
14033                 UINT32_C(0x20)
14034         /*
14035          * This bit must be '1' for the tqm_ring0 fields to be
14036          * configured.
14037          */
14038         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING0 \
14039                 UINT32_C(0x40)
14040         /*
14041          * This bit must be '1' for the tqm_ring1 fields to be
14042          * configured.
14043          */
14044         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING1 \
14045                 UINT32_C(0x80)
14046         /*
14047          * This bit must be '1' for the tqm_ring2 fields to be
14048          * configured.
14049          */
14050         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING2 \
14051                 UINT32_C(0x100)
14052         /*
14053          * This bit must be '1' for the tqm_ring3 fields to be
14054          * configured.
14055          */
14056         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING3 \
14057                 UINT32_C(0x200)
14058         /*
14059          * This bit must be '1' for the tqm_ring4 fields to be
14060          * configured.
14061          */
14062         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING4 \
14063                 UINT32_C(0x400)
14064         /*
14065          * This bit must be '1' for the tqm_ring5 fields to be
14066          * configured.
14067          */
14068         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING5 \
14069                 UINT32_C(0x800)
14070         /*
14071          * This bit must be '1' for the tqm_ring6 fields to be
14072          * configured.
14073          */
14074         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING6 \
14075                 UINT32_C(0x1000)
14076         /*
14077          * This bit must be '1' for the tqm_ring7 fields to be
14078          * configured.
14079          */
14080         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING7 \
14081                 UINT32_C(0x2000)
14082         /*
14083          * This bit must be '1' for the mrav fields to be
14084          * configured.
14085          */
14086         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_MRAV \
14087                 UINT32_C(0x4000)
14088         /*
14089          * This bit must be '1' for the tim fields to be
14090          * configured.
14091          */
14092         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TIM \
14093                 UINT32_C(0x8000)
14094         /* QPC page size and level. */
14095         uint8_t qpc_pg_size_qpc_lvl;
14096         /* QPC PBL indirect levels. */
14097         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_MASK \
14098                 UINT32_C(0xf)
14099         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_SFT       0
14100         /* PBL pointer is physical start address. */
14101         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_0 \
14102                 UINT32_C(0x0)
14103         /* PBL pointer points to PTE table. */
14104         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_1 \
14105                 UINT32_C(0x1)
14106         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14107         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_2 \
14108                 UINT32_C(0x2)
14109         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LAST \
14110                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_2
14111         /* QPC page size. */
14112         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_MASK \
14113                 UINT32_C(0xf0)
14114         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_SFT   4
14115         /* 4KB. */
14116         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_4K \
14117                 (UINT32_C(0x0) << 4)
14118         /* 8KB. */
14119         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_8K \
14120                 (UINT32_C(0x1) << 4)
14121         /* 64KB. */
14122         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_64K \
14123                 (UINT32_C(0x2) << 4)
14124         /* 2MB. */
14125         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_2M \
14126                 (UINT32_C(0x3) << 4)
14127         /* 8MB. */
14128         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_8M \
14129                 (UINT32_C(0x4) << 4)
14130         /* 1GB. */
14131         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_1G \
14132                 (UINT32_C(0x5) << 4)
14133         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_LAST \
14134                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_1G
14135         /* SRQ page size and level. */
14136         uint8_t srq_pg_size_srq_lvl;
14137         /* SRQ PBL indirect levels. */
14138         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_MASK \
14139                 UINT32_C(0xf)
14140         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_SFT       0
14141         /* PBL pointer is physical start address. */
14142         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_0 \
14143                 UINT32_C(0x0)
14144         /* PBL pointer points to PTE table. */
14145         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_1 \
14146                 UINT32_C(0x1)
14147         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14148         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_2 \
14149                 UINT32_C(0x2)
14150         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LAST \
14151                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_2
14152         /* SRQ page size. */
14153         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_MASK \
14154                 UINT32_C(0xf0)
14155         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_SFT   4
14156         /* 4KB. */
14157         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_4K \
14158                 (UINT32_C(0x0) << 4)
14159         /* 8KB. */
14160         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_8K \
14161                 (UINT32_C(0x1) << 4)
14162         /* 64KB. */
14163         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_64K \
14164                 (UINT32_C(0x2) << 4)
14165         /* 2MB. */
14166         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_2M \
14167                 (UINT32_C(0x3) << 4)
14168         /* 8MB. */
14169         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_8M \
14170                 (UINT32_C(0x4) << 4)
14171         /* 1GB. */
14172         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_1G \
14173                 (UINT32_C(0x5) << 4)
14174         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_LAST \
14175                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_1G
14176         /* CQ page size and level. */
14177         uint8_t cq_pg_size_cq_lvl;
14178         /* CQ PBL indirect levels. */
14179         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_MASK \
14180                 UINT32_C(0xf)
14181         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_SFT       0
14182         /* PBL pointer is physical start address. */
14183         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_0 \
14184                 UINT32_C(0x0)
14185         /* PBL pointer points to PTE table. */
14186         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_1 \
14187                 UINT32_C(0x1)
14188         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14189         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_2 \
14190                 UINT32_C(0x2)
14191         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LAST \
14192                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_2
14193         /* CQ page size. */
14194         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_MASK \
14195                 UINT32_C(0xf0)
14196         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_SFT   4
14197         /* 4KB. */
14198         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_4K \
14199                 (UINT32_C(0x0) << 4)
14200         /* 8KB. */
14201         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_8K \
14202                 (UINT32_C(0x1) << 4)
14203         /* 64KB. */
14204         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_64K \
14205                 (UINT32_C(0x2) << 4)
14206         /* 2MB. */
14207         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_2M \
14208                 (UINT32_C(0x3) << 4)
14209         /* 8MB. */
14210         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_8M \
14211                 (UINT32_C(0x4) << 4)
14212         /* 1GB. */
14213         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_1G \
14214                 (UINT32_C(0x5) << 4)
14215         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_LAST \
14216                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_1G
14217         /* VNIC page size and level. */
14218         uint8_t vnic_pg_size_vnic_lvl;
14219         /* VNIC PBL indirect levels. */
14220         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_MASK \
14221                 UINT32_C(0xf)
14222         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_SFT       0
14223         /* PBL pointer is physical start address. */
14224         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_0 \
14225                 UINT32_C(0x0)
14226         /* PBL pointer points to PTE table. */
14227         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_1 \
14228                 UINT32_C(0x1)
14229         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14230         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_2 \
14231                 UINT32_C(0x2)
14232         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LAST \
14233                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_2
14234         /* VNIC page size. */
14235         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_MASK \
14236                 UINT32_C(0xf0)
14237         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_SFT   4
14238         /* 4KB. */
14239         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_4K \
14240                 (UINT32_C(0x0) << 4)
14241         /* 8KB. */
14242         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_8K \
14243                 (UINT32_C(0x1) << 4)
14244         /* 64KB. */
14245         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_64K \
14246                 (UINT32_C(0x2) << 4)
14247         /* 2MB. */
14248         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_2M \
14249                 (UINT32_C(0x3) << 4)
14250         /* 8MB. */
14251         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_8M \
14252                 (UINT32_C(0x4) << 4)
14253         /* 1GB. */
14254         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_1G \
14255                 (UINT32_C(0x5) << 4)
14256         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_LAST \
14257                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_1G
14258         /* Stat page size and level. */
14259         uint8_t stat_pg_size_stat_lvl;
14260         /* Stat PBL indirect levels. */
14261         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_MASK \
14262                 UINT32_C(0xf)
14263         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_SFT       0
14264         /* PBL pointer is physical start address. */
14265         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_0 \
14266                 UINT32_C(0x0)
14267         /* PBL pointer points to PTE table. */
14268         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_1 \
14269                 UINT32_C(0x1)
14270         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14271         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_2 \
14272                 UINT32_C(0x2)
14273         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LAST \
14274                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_2
14275         /* Stat page size. */
14276         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_MASK \
14277                 UINT32_C(0xf0)
14278         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_SFT   4
14279         /* 4KB. */
14280         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_4K \
14281                 (UINT32_C(0x0) << 4)
14282         /* 8KB. */
14283         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_8K \
14284                 (UINT32_C(0x1) << 4)
14285         /* 64KB. */
14286         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_64K \
14287                 (UINT32_C(0x2) << 4)
14288         /* 2MB. */
14289         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_2M \
14290                 (UINT32_C(0x3) << 4)
14291         /* 8MB. */
14292         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_8M \
14293                 (UINT32_C(0x4) << 4)
14294         /* 1GB. */
14295         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_1G \
14296                 (UINT32_C(0x5) << 4)
14297         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_LAST \
14298                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_1G
14299         /* TQM slow path page size and level. */
14300         uint8_t tqm_sp_pg_size_tqm_sp_lvl;
14301         /* TQM slow path PBL indirect levels. */
14302         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_MASK \
14303                 UINT32_C(0xf)
14304         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_SFT       0
14305         /* PBL pointer is physical start address. */
14306         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_0 \
14307                 UINT32_C(0x0)
14308         /* PBL pointer points to PTE table. */
14309         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_1 \
14310                 UINT32_C(0x1)
14311         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14312         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_2 \
14313                 UINT32_C(0x2)
14314         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LAST \
14315                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_2
14316         /* TQM slow path page size. */
14317         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_MASK \
14318                 UINT32_C(0xf0)
14319         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_SFT   4
14320         /* 4KB. */
14321         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_4K \
14322                 (UINT32_C(0x0) << 4)
14323         /* 8KB. */
14324         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_8K \
14325                 (UINT32_C(0x1) << 4)
14326         /* 64KB. */
14327         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_64K \
14328                 (UINT32_C(0x2) << 4)
14329         /* 2MB. */
14330         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_2M \
14331                 (UINT32_C(0x3) << 4)
14332         /* 8MB. */
14333         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_8M \
14334                 (UINT32_C(0x4) << 4)
14335         /* 1GB. */
14336         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_1G \
14337                 (UINT32_C(0x5) << 4)
14338         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_LAST \
14339                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_1G
14340         /* TQM ring 0 page size and level. */
14341         uint8_t tqm_ring0_pg_size_tqm_ring0_lvl;
14342         /* TQM ring 0 PBL indirect levels. */
14343         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_MASK \
14344                 UINT32_C(0xf)
14345         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_SFT       0
14346         /* PBL pointer is physical start address. */
14347         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_0 \
14348                 UINT32_C(0x0)
14349         /* PBL pointer points to PTE table. */
14350         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_1 \
14351                 UINT32_C(0x1)
14352         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14353         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_2 \
14354                 UINT32_C(0x2)
14355         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LAST \
14356                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_2
14357         /* TQM ring 0 page size. */
14358         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_MASK \
14359                 UINT32_C(0xf0)
14360         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_SFT   4
14361         /* 4KB. */
14362         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_4K \
14363                 (UINT32_C(0x0) << 4)
14364         /* 8KB. */
14365         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_8K \
14366                 (UINT32_C(0x1) << 4)
14367         /* 64KB. */
14368         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_64K \
14369                 (UINT32_C(0x2) << 4)
14370         /* 2MB. */
14371         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_2M \
14372                 (UINT32_C(0x3) << 4)
14373         /* 8MB. */
14374         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_8M \
14375                 (UINT32_C(0x4) << 4)
14376         /* 1GB. */
14377         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_1G \
14378                 (UINT32_C(0x5) << 4)
14379         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_LAST \
14380                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_1G
14381         /* TQM ring 1 page size and level. */
14382         uint8_t tqm_ring1_pg_size_tqm_ring1_lvl;
14383         /* TQM ring 1 PBL indirect levels. */
14384         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_MASK \
14385                 UINT32_C(0xf)
14386         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_SFT       0
14387         /* PBL pointer is physical start address. */
14388         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_0 \
14389                 UINT32_C(0x0)
14390         /* PBL pointer points to PTE table. */
14391         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_1 \
14392                 UINT32_C(0x1)
14393         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14394         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_2 \
14395                 UINT32_C(0x2)
14396         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LAST \
14397                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_2
14398         /* TQM ring 1 page size. */
14399         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_MASK \
14400                 UINT32_C(0xf0)
14401         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_SFT   4
14402         /* 4KB. */
14403         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_4K \
14404                 (UINT32_C(0x0) << 4)
14405         /* 8KB. */
14406         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_8K \
14407                 (UINT32_C(0x1) << 4)
14408         /* 64KB. */
14409         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_64K \
14410                 (UINT32_C(0x2) << 4)
14411         /* 2MB. */
14412         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_2M \
14413                 (UINT32_C(0x3) << 4)
14414         /* 8MB. */
14415         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_8M \
14416                 (UINT32_C(0x4) << 4)
14417         /* 1GB. */
14418         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_1G \
14419                 (UINT32_C(0x5) << 4)
14420         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_LAST \
14421                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_1G
14422         /* TQM ring 2 page size and level. */
14423         uint8_t tqm_ring2_pg_size_tqm_ring2_lvl;
14424         /* TQM ring 2 PBL indirect levels. */
14425         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_MASK \
14426                 UINT32_C(0xf)
14427         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_SFT       0
14428         /* PBL pointer is physical start address. */
14429         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_0 \
14430                 UINT32_C(0x0)
14431         /* PBL pointer points to PTE table. */
14432         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_1 \
14433                 UINT32_C(0x1)
14434         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14435         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_2 \
14436                 UINT32_C(0x2)
14437         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LAST \
14438                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_2
14439         /* TQM ring 2 page size. */
14440         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_MASK \
14441                 UINT32_C(0xf0)
14442         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_SFT   4
14443         /* 4KB. */
14444         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_4K \
14445                 (UINT32_C(0x0) << 4)
14446         /* 8KB. */
14447         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_8K \
14448                 (UINT32_C(0x1) << 4)
14449         /* 64KB. */
14450         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_64K \
14451                 (UINT32_C(0x2) << 4)
14452         /* 2MB. */
14453         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_2M \
14454                 (UINT32_C(0x3) << 4)
14455         /* 8MB. */
14456         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_8M \
14457                 (UINT32_C(0x4) << 4)
14458         /* 1GB. */
14459         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_1G \
14460                 (UINT32_C(0x5) << 4)
14461         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_LAST \
14462                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_1G
14463         /* TQM ring 3 page size and level. */
14464         uint8_t tqm_ring3_pg_size_tqm_ring3_lvl;
14465         /* TQM ring 3 PBL indirect levels. */
14466         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_MASK \
14467                 UINT32_C(0xf)
14468         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_SFT       0
14469         /* PBL pointer is physical start address. */
14470         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_0 \
14471                 UINT32_C(0x0)
14472         /* PBL pointer points to PTE table. */
14473         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_1 \
14474                 UINT32_C(0x1)
14475         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14476         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_2 \
14477                 UINT32_C(0x2)
14478         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LAST \
14479                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_2
14480         /* TQM ring 3 page size. */
14481         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_MASK \
14482                 UINT32_C(0xf0)
14483         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_SFT   4
14484         /* 4KB. */
14485         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_4K \
14486                 (UINT32_C(0x0) << 4)
14487         /* 8KB. */
14488         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_8K \
14489                 (UINT32_C(0x1) << 4)
14490         /* 64KB. */
14491         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_64K \
14492                 (UINT32_C(0x2) << 4)
14493         /* 2MB. */
14494         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_2M \
14495                 (UINT32_C(0x3) << 4)
14496         /* 8MB. */
14497         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_8M \
14498                 (UINT32_C(0x4) << 4)
14499         /* 1GB. */
14500         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_1G \
14501                 (UINT32_C(0x5) << 4)
14502         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_LAST \
14503                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_1G
14504         /* TQM ring 4 page size and level. */
14505         uint8_t tqm_ring4_pg_size_tqm_ring4_lvl;
14506         /* TQM ring 4 PBL indirect levels. */
14507         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_MASK \
14508                 UINT32_C(0xf)
14509         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_SFT       0
14510         /* PBL pointer is physical start address. */
14511         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_0 \
14512                 UINT32_C(0x0)
14513         /* PBL pointer points to PTE table. */
14514         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_1 \
14515                 UINT32_C(0x1)
14516         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14517         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_2 \
14518                 UINT32_C(0x2)
14519         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LAST \
14520                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_2
14521         /* TQM ring 4 page size. */
14522         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_MASK \
14523                 UINT32_C(0xf0)
14524         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_SFT   4
14525         /* 4KB. */
14526         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_4K \
14527                 (UINT32_C(0x0) << 4)
14528         /* 8KB. */
14529         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_8K \
14530                 (UINT32_C(0x1) << 4)
14531         /* 64KB. */
14532         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_64K \
14533                 (UINT32_C(0x2) << 4)
14534         /* 2MB. */
14535         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_2M \
14536                 (UINT32_C(0x3) << 4)
14537         /* 8MB. */
14538         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_8M \
14539                 (UINT32_C(0x4) << 4)
14540         /* 1GB. */
14541         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_1G \
14542                 (UINT32_C(0x5) << 4)
14543         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_LAST \
14544                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_1G
14545         /* TQM ring 5 page size and level. */
14546         uint8_t tqm_ring5_pg_size_tqm_ring5_lvl;
14547         /* TQM ring 5 PBL indirect levels. */
14548         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_MASK \
14549                 UINT32_C(0xf)
14550         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_SFT       0
14551         /* PBL pointer is physical start address. */
14552         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_0 \
14553                 UINT32_C(0x0)
14554         /* PBL pointer points to PTE table. */
14555         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_1 \
14556                 UINT32_C(0x1)
14557         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14558         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_2 \
14559                 UINT32_C(0x2)
14560         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LAST \
14561                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_2
14562         /* TQM ring 5 page size. */
14563         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_MASK \
14564                 UINT32_C(0xf0)
14565         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_SFT   4
14566         /* 4KB. */
14567         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_4K \
14568                 (UINT32_C(0x0) << 4)
14569         /* 8KB. */
14570         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_8K \
14571                 (UINT32_C(0x1) << 4)
14572         /* 64KB. */
14573         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_64K \
14574                 (UINT32_C(0x2) << 4)
14575         /* 2MB. */
14576         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_2M \
14577                 (UINT32_C(0x3) << 4)
14578         /* 8MB. */
14579         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_8M \
14580                 (UINT32_C(0x4) << 4)
14581         /* 1GB. */
14582         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_1G \
14583                 (UINT32_C(0x5) << 4)
14584         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_LAST \
14585                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_1G
14586         /* TQM ring 6 page size and level. */
14587         uint8_t tqm_ring6_pg_size_tqm_ring6_lvl;
14588         /* TQM ring 6 PBL indirect levels. */
14589         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_MASK \
14590                 UINT32_C(0xf)
14591         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_SFT       0
14592         /* PBL pointer is physical start address. */
14593         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_0 \
14594                 UINT32_C(0x0)
14595         /* PBL pointer points to PTE table. */
14596         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_1 \
14597                 UINT32_C(0x1)
14598         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14599         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_2 \
14600                 UINT32_C(0x2)
14601         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LAST \
14602                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_2
14603         /* TQM ring 6 page size. */
14604         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_MASK \
14605                 UINT32_C(0xf0)
14606         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_SFT   4
14607         /* 4KB. */
14608         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_4K \
14609                 (UINT32_C(0x0) << 4)
14610         /* 8KB. */
14611         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_8K \
14612                 (UINT32_C(0x1) << 4)
14613         /* 64KB. */
14614         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_64K \
14615                 (UINT32_C(0x2) << 4)
14616         /* 2MB. */
14617         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_2M \
14618                 (UINT32_C(0x3) << 4)
14619         /* 8MB. */
14620         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_8M \
14621                 (UINT32_C(0x4) << 4)
14622         /* 1GB. */
14623         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_1G \
14624                 (UINT32_C(0x5) << 4)
14625         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_LAST \
14626                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_1G
14627         /* TQM ring 7 page size and level. */
14628         uint8_t tqm_ring7_pg_size_tqm_ring7_lvl;
14629         /* TQM ring 7 PBL indirect levels. */
14630         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_MASK \
14631                 UINT32_C(0xf)
14632         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_SFT       0
14633         /* PBL pointer is physical start address. */
14634         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_0 \
14635                 UINT32_C(0x0)
14636         /* PBL pointer points to PTE table. */
14637         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_1 \
14638                 UINT32_C(0x1)
14639         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14640         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_2 \
14641                 UINT32_C(0x2)
14642         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LAST \
14643                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_2
14644         /* TQM ring 7 page size. */
14645         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_MASK \
14646                 UINT32_C(0xf0)
14647         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_SFT   4
14648         /* 4KB. */
14649         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_4K \
14650                 (UINT32_C(0x0) << 4)
14651         /* 8KB. */
14652         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_8K \
14653                 (UINT32_C(0x1) << 4)
14654         /* 64KB. */
14655         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_64K \
14656                 (UINT32_C(0x2) << 4)
14657         /* 2MB. */
14658         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_2M \
14659                 (UINT32_C(0x3) << 4)
14660         /* 8MB. */
14661         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_8M \
14662                 (UINT32_C(0x4) << 4)
14663         /* 1GB. */
14664         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_1G \
14665                 (UINT32_C(0x5) << 4)
14666         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_LAST \
14667                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_1G
14668         /* MR/AV page size and level. */
14669         uint8_t mrav_pg_size_mrav_lvl;
14670         /* MR/AV PBL indirect levels. */
14671         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_MASK \
14672                 UINT32_C(0xf)
14673         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_SFT       0
14674         /* PBL pointer is physical start address. */
14675         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_0 \
14676                 UINT32_C(0x0)
14677         /* PBL pointer points to PTE table. */
14678         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_1 \
14679                 UINT32_C(0x1)
14680         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14681         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_2 \
14682                 UINT32_C(0x2)
14683         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LAST \
14684                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_2
14685         /* MR/AV page size. */
14686         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_MASK \
14687                 UINT32_C(0xf0)
14688         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_SFT   4
14689         /* 4KB. */
14690         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_4K \
14691                 (UINT32_C(0x0) << 4)
14692         /* 8KB. */
14693         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_8K \
14694                 (UINT32_C(0x1) << 4)
14695         /* 64KB. */
14696         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_64K \
14697                 (UINT32_C(0x2) << 4)
14698         /* 2MB. */
14699         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_2M \
14700                 (UINT32_C(0x3) << 4)
14701         /* 8MB. */
14702         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_8M \
14703                 (UINT32_C(0x4) << 4)
14704         /* 1GB. */
14705         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_1G \
14706                 (UINT32_C(0x5) << 4)
14707         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_LAST \
14708                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_1G
14709         /* Timer page size and level. */
14710         uint8_t tim_pg_size_tim_lvl;
14711         /* Timer PBL indirect levels. */
14712         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_MASK \
14713                 UINT32_C(0xf)
14714         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_SFT       0
14715         /* PBL pointer is physical start address. */
14716         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_0 \
14717                 UINT32_C(0x0)
14718         /* PBL pointer points to PTE table. */
14719         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_1 \
14720                 UINT32_C(0x1)
14721         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
14722         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_2 \
14723                 UINT32_C(0x2)
14724         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LAST \
14725                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_2
14726         /* Timer page size. */
14727         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_MASK \
14728                 UINT32_C(0xf0)
14729         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_SFT   4
14730         /* 4KB. */
14731         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_4K \
14732                 (UINT32_C(0x0) << 4)
14733         /* 8KB. */
14734         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_8K \
14735                 (UINT32_C(0x1) << 4)
14736         /* 64KB. */
14737         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_64K \
14738                 (UINT32_C(0x2) << 4)
14739         /* 2MB. */
14740         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_2M \
14741                 (UINT32_C(0x3) << 4)
14742         /* 8MB. */
14743         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_8M \
14744                 (UINT32_C(0x4) << 4)
14745         /* 1GB. */
14746         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_1G \
14747                 (UINT32_C(0x5) << 4)
14748         #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_LAST \
14749                 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_1G
14750         /* QP page directory. */
14751         uint64_t        qpc_page_dir;
14752         /* SRQ page directory. */
14753         uint64_t        srq_page_dir;
14754         /* CQ page directory. */
14755         uint64_t        cq_page_dir;
14756         /* VNIC page directory. */
14757         uint64_t        vnic_page_dir;
14758         /* Stat page directory. */
14759         uint64_t        stat_page_dir;
14760         /* TQM slowpath page directory. */
14761         uint64_t        tqm_sp_page_dir;
14762         /* TQM ring 0 page directory. */
14763         uint64_t        tqm_ring0_page_dir;
14764         /* TQM ring 1 page directory. */
14765         uint64_t        tqm_ring1_page_dir;
14766         /* TQM ring 2 page directory. */
14767         uint64_t        tqm_ring2_page_dir;
14768         /* TQM ring 3 page directory. */
14769         uint64_t        tqm_ring3_page_dir;
14770         /* TQM ring 4 page directory. */
14771         uint64_t        tqm_ring4_page_dir;
14772         /* TQM ring 5 page directory. */
14773         uint64_t        tqm_ring5_page_dir;
14774         /* TQM ring 6 page directory. */
14775         uint64_t        tqm_ring6_page_dir;
14776         /* TQM ring 7 page directory. */
14777         uint64_t        tqm_ring7_page_dir;
14778         /* MR/AV page directory. */
14779         uint64_t        mrav_page_dir;
14780         /* Timer page directory. */
14781         uint64_t        tim_page_dir;
14782         /* Number of QPs. */
14783         uint32_t        qp_num_entries;
14784         /* Number of SRQs. */
14785         uint32_t        srq_num_entries;
14786         /* Number of CQs. */
14787         uint32_t        cq_num_entries;
14788         /* Number of Stats. */
14789         uint32_t        stat_num_entries;
14790         /*
14791          * Number of TQM slowpath entries.
14792          *
14793          * TQM slowpath rings should be sized as follows:
14794          *
14795          * num_entries = num_vnics + num_l2_tx_rings + 2 * num_roce_qps + tqm_min_size
14796          *
14797          * Where:
14798          *   num_vnics is the number of VNICs allocated in the VNIC backing store
14799          *   num_l2_tx_rings is the number of L2 rings in the QP backing store
14800          *   num_roce_qps is the number of RoCE QPs in the QP backing store
14801          *   tqm_min_size is tqm_min_entries_per_ring reported by
14802          *     HWRM_FUNC_BACKING_STORE_QCAPS
14803          *
14804          * Note that TQM ring sizes cannot be extended while the system is
14805          * operational. If a PF driver needs to extend a TQM ring, it needs
14806          * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
14807          * the backing store.
14808          */
14809         uint32_t        tqm_sp_num_entries;
14810         /*
14811          * Number of TQM ring 0 entries.
14812          *
14813          * TQM fastpath rings should be sized large enough to accommodate the
14814          * maximum number of QPs (either L2 or RoCE, or both if shared)
14815          * that can be enqueued to the TQM ring.
14816          *
14817          * Note that TQM ring sizes cannot be extended while the system is
14818          * operational. If a PF driver needs to extend a TQM ring, it needs
14819          * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
14820          * the backing store.
14821          */
14822         uint32_t        tqm_ring0_num_entries;
14823         /*
14824          * Number of TQM ring 1 entries.
14825          *
14826          * TQM fastpath rings should be sized large enough to accommodate the
14827          * maximum number of QPs (either L2 or RoCE, or both if shared)
14828          * that can be enqueued to the TQM ring.
14829          *
14830          * Note that TQM ring sizes cannot be extended while the system is
14831          * operational. If a PF driver needs to extend a TQM ring, it needs
14832          * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
14833          * the backing store.
14834          */
14835         uint32_t        tqm_ring1_num_entries;
14836         /*
14837          * Number of TQM ring 2 entries.
14838          *
14839          * TQM fastpath rings should be sized large enough to accommodate the
14840          * maximum number of QPs (either L2 or RoCE, or both if shared)
14841          * that can be enqueued to the TQM ring.
14842          *
14843          * Note that TQM ring sizes cannot be extended while the system is
14844          * operational. If a PF driver needs to extend a TQM ring, it needs
14845          * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
14846          * the backing store.
14847          */
14848         uint32_t        tqm_ring2_num_entries;
14849         /*
14850          * Number of TQM ring 3 entries.
14851          *
14852          * TQM fastpath rings should be sized large enough to accommodate the
14853          * maximum number of QPs (either L2 or RoCE, or both if shared)
14854          * that can be enqueued to the TQM ring.
14855          *
14856          * Note that TQM ring sizes cannot be extended while the system is
14857          * operational. If a PF driver needs to extend a TQM ring, it needs
14858          * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
14859          * the backing store.
14860          */
14861         uint32_t        tqm_ring3_num_entries;
14862         /*
14863          * Number of TQM ring 4 entries.
14864          *
14865          * TQM fastpath rings should be sized large enough to accommodate the
14866          * maximum number of QPs (either L2 or RoCE, or both if shared)
14867          * that can be enqueued to the TQM ring.
14868          *
14869          * Note that TQM ring sizes cannot be extended while the system is
14870          * operational. If a PF driver needs to extend a TQM ring, it needs
14871          * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
14872          * the backing store.
14873          */
14874         uint32_t        tqm_ring4_num_entries;
14875         /*
14876          * Number of TQM ring 5 entries.
14877          *
14878          * TQM fastpath rings should be sized large enough to accommodate the
14879          * maximum number of QPs (either L2 or RoCE, or both if shared)
14880          * that can be enqueued to the TQM ring.
14881          *
14882          * Note that TQM ring sizes cannot be extended while the system is
14883          * operational. If a PF driver needs to extend a TQM ring, it needs
14884          * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
14885          * the backing store.
14886          */
14887         uint32_t        tqm_ring5_num_entries;
14888         /*
14889          * Number of TQM ring 6 entries.
14890          *
14891          * TQM fastpath rings should be sized large enough to accommodate the
14892          * maximum number of QPs (either L2 or RoCE, or both if shared)
14893          * that can be enqueued to the TQM ring.
14894          *
14895          * Note that TQM ring sizes cannot be extended while the system is
14896          * operational. If a PF driver needs to extend a TQM ring, it needs
14897          * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
14898          * the backing store.
14899          */
14900         uint32_t        tqm_ring6_num_entries;
14901         /*
14902          * Number of TQM ring 7 entries.
14903          *
14904          * TQM fastpath rings should be sized large enough to accommodate the
14905          * maximum number of QPs (either L2 or RoCE, or both if shared)
14906          * that can be enqueued to the TQM ring.
14907          *
14908          * Note that TQM ring sizes cannot be extended while the system is
14909          * operational. If a PF driver needs to extend a TQM ring, it needs
14910          * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
14911          * the backing store.
14912          */
14913         uint32_t        tqm_ring7_num_entries;
14914         /*
14915          * If the MR/AV split reservation flag is not set, then this field
14916          * represents the total number of MR plus AV entries. For versions
14917          * of firmware that support the split reservation, when it is not
14918          * specified half of the entries will be reserved for MRs and the
14919          * other half for AVs.
14920          *
14921          * If the MR/AV split reservation flag is set, then this
14922          * field is logically divided into two 16b fields. Bits `[31:16]`
14923          * represents the `mr_num_entries` and bits `[15:0]` represents
14924          * `av_num_entries`. The granularity of these values is defined by
14925          * the `mrav_num_entries_unit` field returned by the
14926          * `backing_store_qcaps` command.
14927          */
14928         uint32_t        mrav_num_entries;
14929         /* Number of Timer entries. */
14930         uint32_t        tim_num_entries;
14931         /* Number of entries to reserve for QP1 */
14932         uint16_t        qp_num_qp1_entries;
14933         /* Number of entries to reserve for L2 */
14934         uint16_t        qp_num_l2_entries;
14935         /* Number of bytes that have been allocated for each context entry. */
14936         uint16_t        qp_entry_size;
14937         /* Number of entries to reserve for L2 */
14938         uint16_t        srq_num_l2_entries;
14939         /* Number of bytes that have been allocated for each context entry. */
14940         uint16_t        srq_entry_size;
14941         /* Number of entries to reserve for L2 */
14942         uint16_t        cq_num_l2_entries;
14943         /* Number of bytes that have been allocated for each context entry. */
14944         uint16_t        cq_entry_size;
14945         /* Number of entries to reserve for VNIC entries */
14946         uint16_t        vnic_num_vnic_entries;
14947         /* Number of entries to reserve for Ring table entries */
14948         uint16_t        vnic_num_ring_table_entries;
14949         /* Number of bytes that have been allocated for each context entry. */
14950         uint16_t        vnic_entry_size;
14951         /* Number of bytes that have been allocated for each context entry. */
14952         uint16_t        stat_entry_size;
14953         /* Number of bytes that have been allocated for each context entry. */
14954         uint16_t        tqm_entry_size;
14955         /* Number of bytes that have been allocated for each context entry. */
14956         uint16_t        mrav_entry_size;
14957         /* Number of bytes that have been allocated for each context entry. */
14958         uint16_t        tim_entry_size;
14959 } __rte_packed;
14960
14961 /* hwrm_func_backing_store_cfg_output (size:128b/16B) */
14962 struct hwrm_func_backing_store_cfg_output {
14963         /* The specific error status for the command. */
14964         uint16_t        error_code;
14965         /* The HWRM command request type. */
14966         uint16_t        req_type;
14967         /* The sequence ID from the original command. */
14968         uint16_t        seq_id;
14969         /* The length of the response data in number of bytes. */
14970         uint16_t        resp_len;
14971         uint8_t unused_0[7];
14972         /*
14973          * This field is used in Output records to indicate that the output
14974          * is completely written to RAM.  This field should be read as '1'
14975          * to indicate that the output has been completely written.
14976          * When writing a command completion or response to an internal processor,
14977          * the order of writes has to be such that this field is written last.
14978          */
14979         uint8_t valid;
14980 } __rte_packed;
14981
14982 /********************************
14983  * hwrm_func_backing_store_qcfg *
14984  ********************************/
14985
14986
14987 /* hwrm_func_backing_store_qcfg_input (size:128b/16B) */
14988 struct hwrm_func_backing_store_qcfg_input {
14989         /* The HWRM command request type. */
14990         uint16_t        req_type;
14991         /*
14992          * The completion ring to send the completion event on. This should
14993          * be the NQ ID returned from the `nq_alloc` HWRM command.
14994          */
14995         uint16_t        cmpl_ring;
14996         /*
14997          * The sequence ID is used by the driver for tracking multiple
14998          * commands. This ID is treated as opaque data by the firmware and
14999          * the value is returned in the `hwrm_resp_hdr` upon completion.
15000          */
15001         uint16_t        seq_id;
15002         /*
15003          * The target ID of the command:
15004          * * 0x0-0xFFF8 - The function ID
15005          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
15006          * * 0xFFFD - Reserved for user-space HWRM interface
15007          * * 0xFFFF - HWRM
15008          */
15009         uint16_t        target_id;
15010         /*
15011          * A physical address pointer pointing to a host buffer that the
15012          * command's response data will be written. This can be either a host
15013          * physical address (HPA) or a guest physical address (GPA) and must
15014          * point to a physically contiguous block of memory.
15015          */
15016         uint64_t        resp_addr;
15017 } __rte_packed;
15018
15019 /* hwrm_func_backing_store_qcfg_output (size:1920b/240B) */
15020 struct hwrm_func_backing_store_qcfg_output {
15021         /* The specific error status for the command. */
15022         uint16_t        error_code;
15023         /* The HWRM command request type. */
15024         uint16_t        req_type;
15025         /* The sequence ID from the original command. */
15026         uint16_t        seq_id;
15027         /* The length of the response data in number of bytes. */
15028         uint16_t        resp_len;
15029         uint32_t        flags;
15030         /*
15031          * When set, the firmware only uses on-chip resources and does not
15032          * expect any backing store to be provided by the host driver. This
15033          * mode provides minimal L2 functionality (e.g. limited L2 resources,
15034          * no RoCE).
15035          */
15036         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_FLAGS_PREBOOT_MODE \
15037                 UINT32_C(0x1)
15038         /*
15039          * When set, the 32b `mrav_num_entries` field is logically divided
15040          * into two 16b fields, `mr_num_entries` and `av_num_entries`.
15041          */
15042         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_FLAGS_MRAV_RESERVATION_SPLIT \
15043                 UINT32_C(0x2)
15044         uint8_t unused_0[4];
15045         /*
15046          * This bit must be '1' for the qp fields to be
15047          * configured.
15048          */
15049         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_QP \
15050                 UINT32_C(0x1)
15051         /*
15052          * This bit must be '1' for the srq fields to be
15053          * configured.
15054          */
15055         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_SRQ \
15056                 UINT32_C(0x2)
15057         /*
15058          * This bit must be '1' for the cq fields to be
15059          * configured.
15060          */
15061         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_CQ \
15062                 UINT32_C(0x4)
15063         /*
15064          * This bit must be '1' for the vnic fields to be
15065          * configured.
15066          */
15067         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_VNIC \
15068                 UINT32_C(0x8)
15069         /*
15070          * This bit must be '1' for the stat fields to be
15071          * configured.
15072          */
15073         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_STAT \
15074                 UINT32_C(0x10)
15075         /*
15076          * This bit must be '1' for the tqm_sp fields to be
15077          * configured.
15078          */
15079         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_SP \
15080                 UINT32_C(0x20)
15081         /*
15082          * This bit must be '1' for the tqm_ring0 fields to be
15083          * configured.
15084          */
15085         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING0 \
15086                 UINT32_C(0x40)
15087         /*
15088          * This bit must be '1' for the tqm_ring1 fields to be
15089          * configured.
15090          */
15091         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING1 \
15092                 UINT32_C(0x80)
15093         /*
15094          * This bit must be '1' for the tqm_ring2 fields to be
15095          * configured.
15096          */
15097         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING2 \
15098                 UINT32_C(0x100)
15099         /*
15100          * This bit must be '1' for the tqm_ring3 fields to be
15101          * configured.
15102          */
15103         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING3 \
15104                 UINT32_C(0x200)
15105         /*
15106          * This bit must be '1' for the tqm_ring4 fields to be
15107          * configured.
15108          */
15109         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING4 \
15110                 UINT32_C(0x400)
15111         /*
15112          * This bit must be '1' for the tqm_ring5 fields to be
15113          * configured.
15114          */
15115         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING5 \
15116                 UINT32_C(0x800)
15117         /*
15118          * This bit must be '1' for the tqm_ring6 fields to be
15119          * configured.
15120          */
15121         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING6 \
15122                 UINT32_C(0x1000)
15123         /*
15124          * This bit must be '1' for the tqm_ring7 fields to be
15125          * configured.
15126          */
15127         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING7 \
15128                 UINT32_C(0x2000)
15129         /*
15130          * This bit must be '1' for the mrav fields to be
15131          * configured.
15132          */
15133         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_MRAV \
15134                 UINT32_C(0x4000)
15135         /*
15136          * This bit must be '1' for the tim fields to be
15137          * configured.
15138          */
15139         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TIM \
15140                 UINT32_C(0x8000)
15141         /* QPC page size and level. */
15142         uint8_t qpc_pg_size_qpc_lvl;
15143         /* QPC PBL indirect levels. */
15144         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_MASK \
15145                 UINT32_C(0xf)
15146         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_SFT       0
15147         /* PBL pointer is physical start address. */
15148         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_0 \
15149                 UINT32_C(0x0)
15150         /* PBL pointer points to PTE table. */
15151         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_1 \
15152                 UINT32_C(0x1)
15153         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15154         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_2 \
15155                 UINT32_C(0x2)
15156         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LAST \
15157                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_2
15158         /* QPC page size. */
15159         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_MASK \
15160                 UINT32_C(0xf0)
15161         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_SFT   4
15162         /* 4KB. */
15163         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_4K \
15164                 (UINT32_C(0x0) << 4)
15165         /* 8KB. */
15166         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_8K \
15167                 (UINT32_C(0x1) << 4)
15168         /* 64KB. */
15169         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_64K \
15170                 (UINT32_C(0x2) << 4)
15171         /* 2MB. */
15172         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_2M \
15173                 (UINT32_C(0x3) << 4)
15174         /* 8MB. */
15175         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_8M \
15176                 (UINT32_C(0x4) << 4)
15177         /* 1GB. */
15178         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_1G \
15179                 (UINT32_C(0x5) << 4)
15180         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_LAST \
15181                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_1G
15182         /* SRQ page size and level. */
15183         uint8_t srq_pg_size_srq_lvl;
15184         /* SRQ PBL indirect levels. */
15185         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_MASK \
15186                 UINT32_C(0xf)
15187         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_SFT       0
15188         /* PBL pointer is physical start address. */
15189         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_0 \
15190                 UINT32_C(0x0)
15191         /* PBL pointer points to PTE table. */
15192         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_1 \
15193                 UINT32_C(0x1)
15194         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15195         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_2 \
15196                 UINT32_C(0x2)
15197         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LAST \
15198                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_2
15199         /* SRQ page size. */
15200         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_MASK \
15201                 UINT32_C(0xf0)
15202         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_SFT   4
15203         /* 4KB. */
15204         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_4K \
15205                 (UINT32_C(0x0) << 4)
15206         /* 8KB. */
15207         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_8K \
15208                 (UINT32_C(0x1) << 4)
15209         /* 64KB. */
15210         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_64K \
15211                 (UINT32_C(0x2) << 4)
15212         /* 2MB. */
15213         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_2M \
15214                 (UINT32_C(0x3) << 4)
15215         /* 8MB. */
15216         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_8M \
15217                 (UINT32_C(0x4) << 4)
15218         /* 1GB. */
15219         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_1G \
15220                 (UINT32_C(0x5) << 4)
15221         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_LAST \
15222                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_1G
15223         /* CQ page size and level. */
15224         uint8_t cq_pg_size_cq_lvl;
15225         /* CQ PBL indirect levels. */
15226         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_MASK \
15227                 UINT32_C(0xf)
15228         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_SFT       0
15229         /* PBL pointer is physical start address. */
15230         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_0 \
15231                 UINT32_C(0x0)
15232         /* PBL pointer points to PTE table. */
15233         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_1 \
15234                 UINT32_C(0x1)
15235         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15236         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_2 \
15237                 UINT32_C(0x2)
15238         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LAST \
15239                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_2
15240         /* CQ page size. */
15241         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_MASK \
15242                 UINT32_C(0xf0)
15243         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_SFT   4
15244         /* 4KB. */
15245         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_4K \
15246                 (UINT32_C(0x0) << 4)
15247         /* 8KB. */
15248         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_8K \
15249                 (UINT32_C(0x1) << 4)
15250         /* 64KB. */
15251         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_64K \
15252                 (UINT32_C(0x2) << 4)
15253         /* 2MB. */
15254         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_2M \
15255                 (UINT32_C(0x3) << 4)
15256         /* 8MB. */
15257         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_8M \
15258                 (UINT32_C(0x4) << 4)
15259         /* 1GB. */
15260         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_1G \
15261                 (UINT32_C(0x5) << 4)
15262         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_LAST \
15263                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_1G
15264         /* VNIC page size and level. */
15265         uint8_t vnic_pg_size_vnic_lvl;
15266         /* VNIC PBL indirect levels. */
15267         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_MASK \
15268                 UINT32_C(0xf)
15269         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_SFT       0
15270         /* PBL pointer is physical start address. */
15271         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_0 \
15272                 UINT32_C(0x0)
15273         /* PBL pointer points to PTE table. */
15274         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_1 \
15275                 UINT32_C(0x1)
15276         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15277         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_2 \
15278                 UINT32_C(0x2)
15279         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LAST \
15280                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_2
15281         /* VNIC page size. */
15282         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_MASK \
15283                 UINT32_C(0xf0)
15284         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_SFT   4
15285         /* 4KB. */
15286         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_4K \
15287                 (UINT32_C(0x0) << 4)
15288         /* 8KB. */
15289         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_8K \
15290                 (UINT32_C(0x1) << 4)
15291         /* 64KB. */
15292         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_64K \
15293                 (UINT32_C(0x2) << 4)
15294         /* 2MB. */
15295         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_2M \
15296                 (UINT32_C(0x3) << 4)
15297         /* 8MB. */
15298         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_8M \
15299                 (UINT32_C(0x4) << 4)
15300         /* 1GB. */
15301         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_1G \
15302                 (UINT32_C(0x5) << 4)
15303         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_LAST \
15304                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_1G
15305         /* Stat page size and level. */
15306         uint8_t stat_pg_size_stat_lvl;
15307         /* Stat PBL indirect levels. */
15308         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_MASK \
15309                 UINT32_C(0xf)
15310         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_SFT       0
15311         /* PBL pointer is physical start address. */
15312         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_0 \
15313                 UINT32_C(0x0)
15314         /* PBL pointer points to PTE table. */
15315         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_1 \
15316                 UINT32_C(0x1)
15317         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15318         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_2 \
15319                 UINT32_C(0x2)
15320         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LAST \
15321                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_2
15322         /* Stat page size. */
15323         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_MASK \
15324                 UINT32_C(0xf0)
15325         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_SFT   4
15326         /* 4KB. */
15327         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_4K \
15328                 (UINT32_C(0x0) << 4)
15329         /* 8KB. */
15330         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_8K \
15331                 (UINT32_C(0x1) << 4)
15332         /* 64KB. */
15333         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_64K \
15334                 (UINT32_C(0x2) << 4)
15335         /* 2MB. */
15336         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_2M \
15337                 (UINT32_C(0x3) << 4)
15338         /* 8MB. */
15339         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_8M \
15340                 (UINT32_C(0x4) << 4)
15341         /* 1GB. */
15342         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_1G \
15343                 (UINT32_C(0x5) << 4)
15344         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_LAST \
15345                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_1G
15346         /* TQM slow path page size and level. */
15347         uint8_t tqm_sp_pg_size_tqm_sp_lvl;
15348         /* TQM slow path PBL indirect levels. */
15349         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_MASK \
15350                 UINT32_C(0xf)
15351         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_SFT       0
15352         /* PBL pointer is physical start address. */
15353         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_0 \
15354                 UINT32_C(0x0)
15355         /* PBL pointer points to PTE table. */
15356         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_1 \
15357                 UINT32_C(0x1)
15358         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15359         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_2 \
15360                 UINT32_C(0x2)
15361         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LAST \
15362                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_2
15363         /* TQM slow path page size. */
15364         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_MASK \
15365                 UINT32_C(0xf0)
15366         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_SFT   4
15367         /* 4KB. */
15368         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_4K \
15369                 (UINT32_C(0x0) << 4)
15370         /* 8KB. */
15371         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_8K \
15372                 (UINT32_C(0x1) << 4)
15373         /* 64KB. */
15374         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_64K \
15375                 (UINT32_C(0x2) << 4)
15376         /* 2MB. */
15377         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_2M \
15378                 (UINT32_C(0x3) << 4)
15379         /* 8MB. */
15380         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_8M \
15381                 (UINT32_C(0x4) << 4)
15382         /* 1GB. */
15383         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_1G \
15384                 (UINT32_C(0x5) << 4)
15385         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_LAST \
15386                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_1G
15387         /* TQM ring 0 page size and level. */
15388         uint8_t tqm_ring0_pg_size_tqm_ring0_lvl;
15389         /* TQM ring 0 PBL indirect levels. */
15390         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_MASK \
15391                 UINT32_C(0xf)
15392         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_SFT       0
15393         /* PBL pointer is physical start address. */
15394         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_0 \
15395                 UINT32_C(0x0)
15396         /* PBL pointer points to PTE table. */
15397         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_1 \
15398                 UINT32_C(0x1)
15399         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15400         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_2 \
15401                 UINT32_C(0x2)
15402         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LAST \
15403                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_2
15404         /* TQM ring 0 page size. */
15405         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_MASK \
15406                 UINT32_C(0xf0)
15407         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_SFT   4
15408         /* 4KB. */
15409         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_4K \
15410                 (UINT32_C(0x0) << 4)
15411         /* 8KB. */
15412         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_8K \
15413                 (UINT32_C(0x1) << 4)
15414         /* 64KB. */
15415         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_64K \
15416                 (UINT32_C(0x2) << 4)
15417         /* 2MB. */
15418         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_2M \
15419                 (UINT32_C(0x3) << 4)
15420         /* 8MB. */
15421         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_8M \
15422                 (UINT32_C(0x4) << 4)
15423         /* 1GB. */
15424         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_1G \
15425                 (UINT32_C(0x5) << 4)
15426         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_LAST \
15427                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_1G
15428         /* TQM ring 1 page size and level. */
15429         uint8_t tqm_ring1_pg_size_tqm_ring1_lvl;
15430         /* TQM ring 1 PBL indirect levels. */
15431         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_MASK \
15432                 UINT32_C(0xf)
15433         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_SFT       0
15434         /* PBL pointer is physical start address. */
15435         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_0 \
15436                 UINT32_C(0x0)
15437         /* PBL pointer points to PTE table. */
15438         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_1 \
15439                 UINT32_C(0x1)
15440         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15441         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_2 \
15442                 UINT32_C(0x2)
15443         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LAST \
15444                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_2
15445         /* TQM ring 1 page size. */
15446         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_MASK \
15447                 UINT32_C(0xf0)
15448         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_SFT   4
15449         /* 4KB. */
15450         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_4K \
15451                 (UINT32_C(0x0) << 4)
15452         /* 8KB. */
15453         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_8K \
15454                 (UINT32_C(0x1) << 4)
15455         /* 64KB. */
15456         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_64K \
15457                 (UINT32_C(0x2) << 4)
15458         /* 2MB. */
15459         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_2M \
15460                 (UINT32_C(0x3) << 4)
15461         /* 8MB. */
15462         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_8M \
15463                 (UINT32_C(0x4) << 4)
15464         /* 1GB. */
15465         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_1G \
15466                 (UINT32_C(0x5) << 4)
15467         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_LAST \
15468                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_1G
15469         /* TQM ring 2 page size and level. */
15470         uint8_t tqm_ring2_pg_size_tqm_ring2_lvl;
15471         /* TQM ring 2 PBL indirect levels. */
15472         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_MASK \
15473                 UINT32_C(0xf)
15474         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_SFT       0
15475         /* PBL pointer is physical start address. */
15476         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_0 \
15477                 UINT32_C(0x0)
15478         /* PBL pointer points to PTE table. */
15479         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_1 \
15480                 UINT32_C(0x1)
15481         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15482         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_2 \
15483                 UINT32_C(0x2)
15484         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LAST \
15485                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_2
15486         /* TQM ring 2 page size. */
15487         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_MASK \
15488                 UINT32_C(0xf0)
15489         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_SFT   4
15490         /* 4KB. */
15491         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_4K \
15492                 (UINT32_C(0x0) << 4)
15493         /* 8KB. */
15494         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_8K \
15495                 (UINT32_C(0x1) << 4)
15496         /* 64KB. */
15497         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_64K \
15498                 (UINT32_C(0x2) << 4)
15499         /* 2MB. */
15500         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_2M \
15501                 (UINT32_C(0x3) << 4)
15502         /* 8MB. */
15503         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_8M \
15504                 (UINT32_C(0x4) << 4)
15505         /* 1GB. */
15506         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_1G \
15507                 (UINT32_C(0x5) << 4)
15508         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_LAST \
15509                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_1G
15510         /* TQM ring 3 page size and level. */
15511         uint8_t tqm_ring3_pg_size_tqm_ring3_lvl;
15512         /* TQM ring 3 PBL indirect levels. */
15513         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_MASK \
15514                 UINT32_C(0xf)
15515         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_SFT       0
15516         /* PBL pointer is physical start address. */
15517         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_0 \
15518                 UINT32_C(0x0)
15519         /* PBL pointer points to PTE table. */
15520         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_1 \
15521                 UINT32_C(0x1)
15522         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15523         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_2 \
15524                 UINT32_C(0x2)
15525         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LAST \
15526                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_2
15527         /* TQM ring 3 page size. */
15528         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_MASK \
15529                 UINT32_C(0xf0)
15530         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_SFT   4
15531         /* 4KB. */
15532         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_4K \
15533                 (UINT32_C(0x0) << 4)
15534         /* 8KB. */
15535         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_8K \
15536                 (UINT32_C(0x1) << 4)
15537         /* 64KB. */
15538         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_64K \
15539                 (UINT32_C(0x2) << 4)
15540         /* 2MB. */
15541         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_2M \
15542                 (UINT32_C(0x3) << 4)
15543         /* 8MB. */
15544         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_8M \
15545                 (UINT32_C(0x4) << 4)
15546         /* 1GB. */
15547         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_1G \
15548                 (UINT32_C(0x5) << 4)
15549         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_LAST \
15550                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_1G
15551         /* TQM ring 4 page size and level. */
15552         uint8_t tqm_ring4_pg_size_tqm_ring4_lvl;
15553         /* TQM ring 4 PBL indirect levels. */
15554         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_MASK \
15555                 UINT32_C(0xf)
15556         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_SFT       0
15557         /* PBL pointer is physical start address. */
15558         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_0 \
15559                 UINT32_C(0x0)
15560         /* PBL pointer points to PTE table. */
15561         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_1 \
15562                 UINT32_C(0x1)
15563         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15564         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_2 \
15565                 UINT32_C(0x2)
15566         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LAST \
15567                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_2
15568         /* TQM ring 4 page size. */
15569         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_MASK \
15570                 UINT32_C(0xf0)
15571         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_SFT   4
15572         /* 4KB. */
15573         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_4K \
15574                 (UINT32_C(0x0) << 4)
15575         /* 8KB. */
15576         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_8K \
15577                 (UINT32_C(0x1) << 4)
15578         /* 64KB. */
15579         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_64K \
15580                 (UINT32_C(0x2) << 4)
15581         /* 2MB. */
15582         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_2M \
15583                 (UINT32_C(0x3) << 4)
15584         /* 8MB. */
15585         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_8M \
15586                 (UINT32_C(0x4) << 4)
15587         /* 1GB. */
15588         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_1G \
15589                 (UINT32_C(0x5) << 4)
15590         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_LAST \
15591                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_1G
15592         /* TQM ring 5 page size and level. */
15593         uint8_t tqm_ring5_pg_size_tqm_ring5_lvl;
15594         /* TQM ring 5 PBL indirect levels. */
15595         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_MASK \
15596                 UINT32_C(0xf)
15597         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_SFT       0
15598         /* PBL pointer is physical start address. */
15599         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_0 \
15600                 UINT32_C(0x0)
15601         /* PBL pointer points to PTE table. */
15602         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_1 \
15603                 UINT32_C(0x1)
15604         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15605         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_2 \
15606                 UINT32_C(0x2)
15607         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LAST \
15608                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_2
15609         /* TQM ring 5 page size. */
15610         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_MASK \
15611                 UINT32_C(0xf0)
15612         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_SFT   4
15613         /* 4KB. */
15614         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_4K \
15615                 (UINT32_C(0x0) << 4)
15616         /* 8KB. */
15617         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_8K \
15618                 (UINT32_C(0x1) << 4)
15619         /* 64KB. */
15620         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_64K \
15621                 (UINT32_C(0x2) << 4)
15622         /* 2MB. */
15623         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_2M \
15624                 (UINT32_C(0x3) << 4)
15625         /* 8MB. */
15626         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_8M \
15627                 (UINT32_C(0x4) << 4)
15628         /* 1GB. */
15629         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_1G \
15630                 (UINT32_C(0x5) << 4)
15631         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_LAST \
15632                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_1G
15633         /* TQM ring 6 page size and level. */
15634         uint8_t tqm_ring6_pg_size_tqm_ring6_lvl;
15635         /* TQM ring 6 PBL indirect levels. */
15636         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_MASK \
15637                 UINT32_C(0xf)
15638         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_SFT       0
15639         /* PBL pointer is physical start address. */
15640         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_0 \
15641                 UINT32_C(0x0)
15642         /* PBL pointer points to PTE table. */
15643         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_1 \
15644                 UINT32_C(0x1)
15645         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15646         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_2 \
15647                 UINT32_C(0x2)
15648         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LAST \
15649                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_2
15650         /* TQM ring 6 page size. */
15651         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_MASK \
15652                 UINT32_C(0xf0)
15653         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_SFT   4
15654         /* 4KB. */
15655         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_4K \
15656                 (UINT32_C(0x0) << 4)
15657         /* 8KB. */
15658         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_8K \
15659                 (UINT32_C(0x1) << 4)
15660         /* 64KB. */
15661         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_64K \
15662                 (UINT32_C(0x2) << 4)
15663         /* 2MB. */
15664         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_2M \
15665                 (UINT32_C(0x3) << 4)
15666         /* 8MB. */
15667         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_8M \
15668                 (UINT32_C(0x4) << 4)
15669         /* 1GB. */
15670         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_1G \
15671                 (UINT32_C(0x5) << 4)
15672         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_LAST \
15673                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_1G
15674         /* TQM ring 7 page size and level. */
15675         uint8_t tqm_ring7_pg_size_tqm_ring7_lvl;
15676         /* TQM ring 7 PBL indirect levels. */
15677         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_MASK \
15678                 UINT32_C(0xf)
15679         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_SFT       0
15680         /* PBL pointer is physical start address. */
15681         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_0 \
15682                 UINT32_C(0x0)
15683         /* PBL pointer points to PTE table. */
15684         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_1 \
15685                 UINT32_C(0x1)
15686         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15687         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_2 \
15688                 UINT32_C(0x2)
15689         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LAST \
15690                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_2
15691         /* TQM ring 7 page size. */
15692         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_MASK \
15693                 UINT32_C(0xf0)
15694         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_SFT   4
15695         /* 4KB. */
15696         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_4K \
15697                 (UINT32_C(0x0) << 4)
15698         /* 8KB. */
15699         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_8K \
15700                 (UINT32_C(0x1) << 4)
15701         /* 64KB. */
15702         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_64K \
15703                 (UINT32_C(0x2) << 4)
15704         /* 2MB. */
15705         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_2M \
15706                 (UINT32_C(0x3) << 4)
15707         /* 8MB. */
15708         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_8M \
15709                 (UINT32_C(0x4) << 4)
15710         /* 1GB. */
15711         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_1G \
15712                 (UINT32_C(0x5) << 4)
15713         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_LAST \
15714                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_1G
15715         /* MR/AV page size and level. */
15716         uint8_t mrav_pg_size_mrav_lvl;
15717         /* MR/AV PBL indirect levels. */
15718         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_MASK \
15719                 UINT32_C(0xf)
15720         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_SFT       0
15721         /* PBL pointer is physical start address. */
15722         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_0 \
15723                 UINT32_C(0x0)
15724         /* PBL pointer points to PTE table. */
15725         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_1 \
15726                 UINT32_C(0x1)
15727         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15728         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_2 \
15729                 UINT32_C(0x2)
15730         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LAST \
15731                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_2
15732         /* MR/AV page size. */
15733         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_MASK \
15734                 UINT32_C(0xf0)
15735         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_SFT   4
15736         /* 4KB. */
15737         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_4K \
15738                 (UINT32_C(0x0) << 4)
15739         /* 8KB. */
15740         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_8K \
15741                 (UINT32_C(0x1) << 4)
15742         /* 64KB. */
15743         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_64K \
15744                 (UINT32_C(0x2) << 4)
15745         /* 2MB. */
15746         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_2M \
15747                 (UINT32_C(0x3) << 4)
15748         /* 8MB. */
15749         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_8M \
15750                 (UINT32_C(0x4) << 4)
15751         /* 1GB. */
15752         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_1G \
15753                 (UINT32_C(0x5) << 4)
15754         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_LAST \
15755                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_1G
15756         /* Timer page size and level. */
15757         uint8_t tim_pg_size_tim_lvl;
15758         /* Timer PBL indirect levels. */
15759         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_MASK \
15760                 UINT32_C(0xf)
15761         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_SFT       0
15762         /* PBL pointer is physical start address. */
15763         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_0 \
15764                 UINT32_C(0x0)
15765         /* PBL pointer points to PTE table. */
15766         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_1 \
15767                 UINT32_C(0x1)
15768         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
15769         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_2 \
15770                 UINT32_C(0x2)
15771         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LAST \
15772                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_2
15773         /* Timer page size. */
15774         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_MASK \
15775                 UINT32_C(0xf0)
15776         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_SFT   4
15777         /* 4KB. */
15778         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_4K \
15779                 (UINT32_C(0x0) << 4)
15780         /* 8KB. */
15781         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_8K \
15782                 (UINT32_C(0x1) << 4)
15783         /* 64KB. */
15784         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_64K \
15785                 (UINT32_C(0x2) << 4)
15786         /* 2MB. */
15787         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_2M \
15788                 (UINT32_C(0x3) << 4)
15789         /* 8MB. */
15790         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_8M \
15791                 (UINT32_C(0x4) << 4)
15792         /* 1GB. */
15793         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_1G \
15794                 (UINT32_C(0x5) << 4)
15795         #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_LAST \
15796                 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_1G
15797         /* QP page directory. */
15798         uint64_t        qpc_page_dir;
15799         /* SRQ page directory. */
15800         uint64_t        srq_page_dir;
15801         /* CQ page directory. */
15802         uint64_t        cq_page_dir;
15803         /* VNIC page directory. */
15804         uint64_t        vnic_page_dir;
15805         /* Stat page directory. */
15806         uint64_t        stat_page_dir;
15807         /* TQM slowpath page directory. */
15808         uint64_t        tqm_sp_page_dir;
15809         /* TQM ring 0 page directory. */
15810         uint64_t        tqm_ring0_page_dir;
15811         /* TQM ring 1 page directory. */
15812         uint64_t        tqm_ring1_page_dir;
15813         /* TQM ring 2 page directory. */
15814         uint64_t        tqm_ring2_page_dir;
15815         /* TQM ring 3 page directory. */
15816         uint64_t        tqm_ring3_page_dir;
15817         /* TQM ring 4 page directory. */
15818         uint64_t        tqm_ring4_page_dir;
15819         /* TQM ring 5 page directory. */
15820         uint64_t        tqm_ring5_page_dir;
15821         /* TQM ring 6 page directory. */
15822         uint64_t        tqm_ring6_page_dir;
15823         /* TQM ring 7 page directory. */
15824         uint64_t        tqm_ring7_page_dir;
15825         /* MR/AV page directory. */
15826         uint64_t        mrav_page_dir;
15827         /* Timer page directory. */
15828         uint64_t        tim_page_dir;
15829         /* Number of entries to reserve for QP1 */
15830         uint16_t        qp_num_qp1_entries;
15831         /* Number of entries to reserve for L2 */
15832         uint16_t        qp_num_l2_entries;
15833         /* Number of QPs. */
15834         uint32_t        qp_num_entries;
15835         /* Number of SRQs. */
15836         uint32_t        srq_num_entries;
15837         /* Number of entries to reserve for L2 */
15838         uint16_t        srq_num_l2_entries;
15839         /* Number of entries to reserve for L2 */
15840         uint16_t        cq_num_l2_entries;
15841         /* Number of CQs. */
15842         uint32_t        cq_num_entries;
15843         /* Number of entries to reserve for VNIC entries */
15844         uint16_t        vnic_num_vnic_entries;
15845         /* Number of entries to reserve for Ring table entries */
15846         uint16_t        vnic_num_ring_table_entries;
15847         /* Number of Stats. */
15848         uint32_t        stat_num_entries;
15849         /* Number of TQM slowpath entries. */
15850         uint32_t        tqm_sp_num_entries;
15851         /* Number of TQM ring 0 entries. */
15852         uint32_t        tqm_ring0_num_entries;
15853         /* Number of TQM ring 1 entries. */
15854         uint32_t        tqm_ring1_num_entries;
15855         /* Number of TQM ring 2 entries. */
15856         uint32_t        tqm_ring2_num_entries;
15857         /* Number of TQM ring 3 entries. */
15858         uint32_t        tqm_ring3_num_entries;
15859         /* Number of TQM ring 4 entries. */
15860         uint32_t        tqm_ring4_num_entries;
15861         /* Number of TQM ring 5 entries. */
15862         uint32_t        tqm_ring5_num_entries;
15863         /* Number of TQM ring 6 entries. */
15864         uint32_t        tqm_ring6_num_entries;
15865         /* Number of TQM ring 7 entries. */
15866         uint32_t        tqm_ring7_num_entries;
15867         /*
15868          * If the MR/AV split reservation flag is not set, then this field
15869          * represents the total number of MR plus AV entries. For versions
15870          * of firmware that support the split reservation, when it is not
15871          * specified half of the entries will be reserved for MRs and the
15872          * other half for AVs.
15873          *
15874          * If the MR/AV split reservation flag is set, then this
15875          * field is logically divided into two 16b fields. Bits `[31:16]`
15876          * represents the `mr_num_entries` and bits `[15:0]` represents
15877          * `av_num_entries`. The granularity of these values is defined by
15878          * the `mrav_num_entries_unit` field returned by the
15879          * `backing_store_qcaps` command.
15880          */
15881         uint32_t        mrav_num_entries;
15882         /* Number of Timer entries. */
15883         uint32_t        tim_num_entries;
15884         uint8_t unused_1[7];
15885         /*
15886          * This field is used in Output records to indicate that the output
15887          * is completely written to RAM.  This field should be read as 1
15888          * to indicate that the output has been completely written.
15889          * When writing a command completion or response to an internal
15890          * processor, the order of writes has to be such that this field
15891          * is written last.
15892          */
15893         uint8_t valid;
15894 } __rte_packed;
15895
15896 /****************************
15897  * hwrm_error_recovery_qcfg *
15898  ****************************/
15899
15900
15901 /* hwrm_error_recovery_qcfg_input (size:192b/24B) */
15902 struct hwrm_error_recovery_qcfg_input {
15903         /* The HWRM command request type. */
15904         uint16_t        req_type;
15905         /*
15906          * The completion ring to send the completion event on. This should
15907          * be the NQ ID returned from the `nq_alloc` HWRM command.
15908          */
15909         uint16_t        cmpl_ring;
15910         /*
15911          * The sequence ID is used by the driver for tracking multiple
15912          * commands. This ID is treated as opaque data by the firmware and
15913          * the value is returned in the `hwrm_resp_hdr` upon completion.
15914          */
15915         uint16_t        seq_id;
15916         /*
15917          * The target ID of the command:
15918          * * 0x0-0xFFF8 - The function ID
15919          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
15920          * * 0xFFFD - Reserved for user-space HWRM interface
15921          * * 0xFFFF - HWRM
15922          */
15923         uint16_t        target_id;
15924         /*
15925          * A physical address pointer pointing to a host buffer that the
15926          * command's response data will be written. This can be either a host
15927          * physical address (HPA) or a guest physical address (GPA) and must
15928          * point to a physically contiguous block of memory.
15929          */
15930         uint64_t        resp_addr;
15931         uint8_t unused_0[8];
15932 } __rte_packed;
15933
15934 /* hwrm_error_recovery_qcfg_output (size:1664b/208B) */
15935 struct hwrm_error_recovery_qcfg_output {
15936         /* The specific error status for the command. */
15937         uint16_t        error_code;
15938         /* The HWRM command request type. */
15939         uint16_t        req_type;
15940         /* The sequence ID from the original command. */
15941         uint16_t        seq_id;
15942         /* The length of the response data in number of bytes. */
15943         uint16_t        resp_len;
15944         uint32_t        flags;
15945         /*
15946          * When this flag is set to 1, error recovery will be initiated
15947          * through master function driver.
15948          */
15949         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FLAGS_HOST       UINT32_C(0x1)
15950         /*
15951          * When this flag is set to 1, error recovery will be performed
15952          * through Co processor.
15953          */
15954         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FLAGS_CO_CPU     UINT32_C(0x2)
15955         /*
15956          * Driver Polling frequency. This value is in units of 100msec.
15957          * Typical value would be 10 to indicate 1sec.
15958          * Drivers can poll FW health status, Heartbeat, reset_counter with
15959          * this frequency.
15960          */
15961         uint32_t        driver_polling_freq;
15962         /*
15963          * This value is in units of 100msec.
15964          * Typical value would be 30 to indicate 3sec.
15965          * Master function wait period from detecting a fatal error to
15966          * initiating reset. In this time period Master PF expects every
15967          * active driver will detect fatal error.
15968          */
15969         uint32_t        master_func_wait_period;
15970         /*
15971          * This value is in units of 100msec.
15972          * Typical value would be 50 to indicate 5sec.
15973          * Normal function wait period from fatal error detection to
15974          * polling FW health status. In this time period, drivers should not
15975          * do any PCIe MMIO transaction and should not send any HWRM commands.
15976          */
15977         uint32_t        normal_func_wait_period;
15978         /*
15979          * This value is in units of 100msec.
15980          * Typical value would be 20 to indicate 2sec.
15981          * This field indicates that, master function wait period after chip
15982          * reset. After this time, master function should reinitialize with
15983          * FW.
15984          */
15985         uint32_t        master_func_wait_period_after_reset;
15986         /*
15987          * This value is in units of 100msec.
15988          * Typical value would be 60 to indicate 6sec.
15989          * This field is applicable to both master and normal functions.
15990          * Even after chip reset, if FW status not changed to ready,
15991          * then all the functions can poll for this much time and bailout.
15992          */
15993         uint32_t        max_bailout_time_after_reset;
15994         /*
15995          * FW health status register.
15996          * Lower 2 bits indicates address space location and upper 30 bits
15997          * indicates upper 30bits of the register address.
15998          * A value of 0xFFFF-FFFF indicates this register does not exist.
15999          */
16000         uint32_t        fw_health_status_reg;
16001         /* Lower 2 bits indicates address space location. */
16002         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_MASK \
16003                 UINT32_C(0x3)
16004         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_SFT \
16005                 0
16006         /*
16007          * If value is 0, this register is located in PCIe config space.
16008          * Drivers have to map appropriate window to access this
16009          * register.
16010          */
16011         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_PCIE_CFG \
16012                 UINT32_C(0x0)
16013         /*
16014          * If value is 1, this register is located in GRC address space.
16015          * Drivers have to map appropriate window to access this
16016          * register.
16017          */
16018         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_GRC \
16019                 UINT32_C(0x1)
16020         /*
16021          * If value is 2, this register is located in first BAR address
16022          * space. Drivers have to map appropriate window to access this
16023          * register.
16024          */
16025         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_BAR0 \
16026                 UINT32_C(0x2)
16027         /*
16028          * If value is 3, this register is located in second BAR address
16029          * space. Drivers have to map appropriate window to access this
16030          * Drivers have to map appropriate window to access this
16031          * register.
16032          */
16033         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_BAR1 \
16034                 UINT32_C(0x3)
16035         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_LAST \
16036                 HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SPACE_BAR1
16037         /* Upper 30bits of the register address. */
16038         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_MASK \
16039                 UINT32_C(0xfffffffc)
16040         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEALTH_STATUS_REG_ADDR_SFT \
16041                 2
16042         /*
16043          * FW HeartBeat register.
16044          * Lower 2 bits indicates address space location and upper 30 bits
16045          * indicates actual address.
16046          * A value of 0xFFFF-FFFF indicates this register does not exist.
16047          */
16048         uint32_t        fw_heartbeat_reg;
16049         /* Lower 2 bits indicates address space location. */
16050         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_MASK \
16051                 UINT32_C(0x3)
16052         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_SFT \
16053                 0
16054         /*
16055          * If value is 0, this register is located in PCIe config space.
16056          * Drivers have to map appropriate window to access this
16057          * register.
16058          */
16059         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_PCIE_CFG \
16060                 UINT32_C(0x0)
16061         /*
16062          * If value is 1, this register is located in GRC address space.
16063          * Drivers have to map appropriate window to access this
16064          * register.
16065          */
16066         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_GRC \
16067                 UINT32_C(0x1)
16068         /*
16069          * If value is 2, this register is located in first BAR address
16070          * space. Drivers have to map appropriate window to access this
16071          * register.
16072          */
16073         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_BAR0 \
16074                 UINT32_C(0x2)
16075         /*
16076          * If value is 3, this register is located in second BAR address
16077          * space. Drivers have to map appropriate window to access this
16078          * register.
16079          */
16080         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_BAR1 \
16081                 UINT32_C(0x3)
16082         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_LAST \
16083                 HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SPACE_BAR1
16084         /* Upper 30bits of the register address. */
16085         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_MASK \
16086                 UINT32_C(0xfffffffc)
16087         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_HEARTBEAT_REG_ADDR_SFT \
16088                 2
16089         /*
16090          * FW reset counter.
16091          * Lower 2 bits indicates address space location and upper 30 bits
16092          * indicates actual address.
16093          * A value of 0xFFFF-FFFF indicates this register does not exist.
16094          */
16095         uint32_t        fw_reset_cnt_reg;
16096         /* Lower 2 bits indicates address space location. */
16097         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_MASK \
16098                 UINT32_C(0x3)
16099         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_SFT \
16100                 0
16101         /*
16102          * If value is 0, this register is located in PCIe config space.
16103          * Drivers have to map appropriate window to access this
16104          * register.
16105          */
16106         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_PCIE_CFG \
16107                 UINT32_C(0x0)
16108         /*
16109          * If value is 1, this register is located in GRC address space.
16110          * Drivers have to map appropriate window to access this
16111          * register.
16112          */
16113         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_GRC \
16114                 UINT32_C(0x1)
16115         /*
16116          * If value is 2, this register is located in first BAR address
16117          * space. Drivers have to map appropriate window to access this
16118          * register.
16119          */
16120         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_BAR0 \
16121                 UINT32_C(0x2)
16122         /*
16123          * If value is 3, this register is located in second BAR address
16124          * space. Drivers have to map appropriate window to access this
16125          * register.
16126          */
16127         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_BAR1 \
16128                 UINT32_C(0x3)
16129         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_LAST \
16130                 HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SPACE_BAR1
16131         /* Upper 30bits of the register address. */
16132         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_MASK \
16133                 UINT32_C(0xfffffffc)
16134         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_FW_RESET_CNT_REG_ADDR_SFT \
16135                 2
16136         /*
16137          * Reset Inprogress Register address for PFs.
16138          * Lower 2 bits indicates address space location and upper 30 bits
16139          * indicates actual address.
16140          * A value of 0xFFFF-FFFF indicates this register does not exist.
16141          */
16142         uint32_t        reset_inprogress_reg;
16143         /* Lower 2 bits indicates address space location. */
16144         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_MASK \
16145                 UINT32_C(0x3)
16146         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_SFT \
16147                 0
16148         /*
16149          * If value is 0, this register is located in PCIe config space.
16150          * Drivers have to map appropriate window to access this
16151          * register.
16152          */
16153         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_PCIE_CFG \
16154                 UINT32_C(0x0)
16155         /*
16156          * If value is 1, this register is located in GRC address space.
16157          * Drivers have to map appropriate window to access this
16158          * register.
16159          */
16160         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_GRC \
16161                 UINT32_C(0x1)
16162         /*
16163          * If value is 2, this register is located in first BAR address
16164          * space. Drivers have to map appropriate window to access this
16165          * register.
16166          */
16167         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_BAR0 \
16168                 UINT32_C(0x2)
16169         /*
16170          * If value is 3, this register is located in second BAR address
16171          * space. Drivers have to map appropriate window to access this
16172          * register.
16173          */
16174         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_BAR1 \
16175                 UINT32_C(0x3)
16176         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_LAST \
16177                 HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SPACE_BAR1
16178         /* Upper 30bits of the register address. */
16179         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_MASK \
16180                 UINT32_C(0xfffffffc)
16181         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_INPROGRESS_REG_ADDR_SFT \
16182                 2
16183         /* This field indicates the mask value for reset_inprogress_reg. */
16184         uint32_t        reset_inprogress_reg_mask;
16185         uint8_t unused_0[3];
16186         /*
16187          * Array of registers and value count to reset the Chip
16188          * Each array count has reset_reg, reset_reg_val, delay_after_reset
16189          * in TLV format. Depending upon Chip type, number of reset registers
16190          * will vary. Drivers have to write reset_reg_val in the reset_reg
16191          * location in the same sequence in order to recover from a fatal
16192          * error.
16193          */
16194         uint8_t reg_array_cnt;
16195         /*
16196          * Reset register.
16197          * Lower 2 bits indicates address space location and upper 30 bits
16198          * indicates actual address.
16199          * A value of 0xFFFF-FFFF indicates this register does not exist.
16200          */
16201         uint32_t        reset_reg[16];
16202         /* Lower 2 bits indicates address space location. */
16203         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_MASK \
16204                 UINT32_C(0x3)
16205         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_SFT     0
16206         /*
16207          * If value is 0, this register is located in PCIe config space.
16208          * Drivers have to map appropriate window to access this
16209          * register.
16210          */
16211         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_PCIE_CFG \
16212                 UINT32_C(0x0)
16213         /*
16214          * If value is 1, this register is located in GRC address space.
16215          * Drivers have to map appropriate window to access this
16216          * register.
16217          */
16218         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_GRC \
16219                 UINT32_C(0x1)
16220         /*
16221          * If value is 2, this register is located in first BAR address
16222          * space. Drivers have to map appropriate window to access this
16223          * register.
16224          */
16225         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_BAR0 \
16226                 UINT32_C(0x2)
16227         /*
16228          * If value is 3, this register is located in second BAR address
16229          * space. Drivers have to map appropriate window to access this
16230          * register.
16231          */
16232         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_BAR1 \
16233                 UINT32_C(0x3)
16234         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_LAST \
16235                 HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SPACE_BAR1
16236         /* Upper 30bits of the register address. */
16237         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_MASK \
16238                 UINT32_C(0xfffffffc)
16239         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_RESET_REG_ADDR_SFT           2
16240         /* Value to be written in reset_reg to reset the controller. */
16241         uint32_t        reset_reg_val[16];
16242         /*
16243          * This value is in units of 1msec.
16244          * Typical value would be 10 to indicate 10msec.
16245          * Some of the operations like Core reset require delay before
16246          * accessing PCIE MMIO register space.
16247          * If this value is non-zero, drivers have to wait for
16248          * this much time after writing reset_reg_val in reset_reg.
16249          */
16250         uint8_t delay_after_reset[16];
16251         /*
16252          * Error recovery counter.
16253          * Lower 2 bits indicates address space location and upper 30 bits
16254          * indicates actual address.
16255          * A value of 0xFFFF-FFFF indicates this register does not exist.
16256          */
16257         uint32_t        err_recovery_cnt_reg;
16258         /* Lower 2 bits indicates address space location. */
16259         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_MASK \
16260                 UINT32_C(0x3)
16261         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_SFT \
16262                 0
16263         /*
16264          * If value is 0, this register is located in PCIe config space.
16265          * Drivers have to map appropriate window to access this
16266          * register.
16267          */
16268         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_PCIE_CFG \
16269                 UINT32_C(0x0)
16270         /*
16271          * If value is 1, this register is located in GRC address space.
16272          * Drivers have to map appropriate window to access this
16273          * register.
16274          */
16275         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_GRC \
16276                 UINT32_C(0x1)
16277         /*
16278          * If value is 2, this register is located in first BAR address
16279          * space. Drivers have to map appropriate window to access this
16280          * register.
16281          */
16282         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_BAR0 \
16283                 UINT32_C(0x2)
16284         /*
16285          * If value is 3, this register is located in second BAR address
16286          * space. Drivers have to map appropriate window to access this
16287          * register.
16288          */
16289         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_BAR1 \
16290                 UINT32_C(0x3)
16291         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_LAST \
16292                 HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SPACE_BAR1
16293         /* Upper 30bits of the register address. */
16294         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_MASK \
16295                 UINT32_C(0xfffffffc)
16296         #define HWRM_ERROR_RECOVERY_QCFG_OUTPUT_ERR_RECOVERY_CNT_REG_ADDR_SFT \
16297                 2
16298         uint8_t unused_1[3];
16299         /*
16300          * This field is used in Output records to indicate that the output
16301          * is completely written to RAM.  This field should be read as '1'
16302          * to indicate that the output has been completely written.
16303          * When writing a command completion or response to an internal
16304          * processor, the order of writes has to be such that this field
16305          * is written last.
16306          */
16307         uint8_t valid;
16308 } __rte_packed;
16309
16310 /***********************
16311  * hwrm_func_vlan_qcfg *
16312  ***********************/
16313
16314
16315 /* hwrm_func_vlan_qcfg_input (size:192b/24B) */
16316 struct hwrm_func_vlan_qcfg_input {
16317         /* The HWRM command request type. */
16318         uint16_t        req_type;
16319         /*
16320          * The completion ring to send the completion event on. This should
16321          * be the NQ ID returned from the `nq_alloc` HWRM command.
16322          */
16323         uint16_t        cmpl_ring;
16324         /*
16325          * The sequence ID is used by the driver for tracking multiple
16326          * commands. This ID is treated as opaque data by the firmware and
16327          * the value is returned in the `hwrm_resp_hdr` upon completion.
16328          */
16329         uint16_t        seq_id;
16330         /*
16331          * The target ID of the command:
16332          * * 0x0-0xFFF8 - The function ID
16333          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16334          * * 0xFFFD - Reserved for user-space HWRM interface
16335          * * 0xFFFF - HWRM
16336          */
16337         uint16_t        target_id;
16338         /*
16339          * A physical address pointer pointing to a host buffer that the
16340          * command's response data will be written. This can be either a host
16341          * physical address (HPA) or a guest physical address (GPA) and must
16342          * point to a physically contiguous block of memory.
16343          */
16344         uint64_t        resp_addr;
16345         /*
16346          * Function ID of the function that is being
16347          * configured.
16348          * If set to 0xFF... (All Fs), then the configuration is
16349          * for the requesting function.
16350          */
16351         uint16_t        fid;
16352         uint8_t unused_0[6];
16353 } __rte_packed;
16354
16355 /* hwrm_func_vlan_qcfg_output (size:320b/40B) */
16356 struct hwrm_func_vlan_qcfg_output {
16357         /* The specific error status for the command. */
16358         uint16_t        error_code;
16359         /* The HWRM command request type. */
16360         uint16_t        req_type;
16361         /* The sequence ID from the original command. */
16362         uint16_t        seq_id;
16363         /* The length of the response data in number of bytes. */
16364         uint16_t        resp_len;
16365         uint64_t        unused_0;
16366         /* S-TAG VLAN identifier configured for the function. */
16367         uint16_t        stag_vid;
16368         /* S-TAG PCP value configured for the function. */
16369         uint8_t stag_pcp;
16370         uint8_t unused_1;
16371         /*
16372          * S-TAG TPID value configured for the function. This field is specified in
16373          * network byte order.
16374          */
16375         uint16_t        stag_tpid;
16376         /* C-TAG VLAN identifier configured for the function. */
16377         uint16_t        ctag_vid;
16378         /* C-TAG PCP value configured for the function. */
16379         uint8_t ctag_pcp;
16380         uint8_t unused_2;
16381         /*
16382          * C-TAG TPID value configured for the function. This field is specified in
16383          * network byte order.
16384          */
16385         uint16_t        ctag_tpid;
16386         /* Future use. */
16387         uint32_t        rsvd2;
16388         /* Future use. */
16389         uint32_t        rsvd3;
16390         uint8_t unused_3[3];
16391         /*
16392          * This field is used in Output records to indicate that the output
16393          * is completely written to RAM.  This field should be read as '1'
16394          * to indicate that the output has been completely written.
16395          * When writing a command completion or response to an internal processor,
16396          * the order of writes has to be such that this field is written last.
16397          */
16398         uint8_t valid;
16399 } __rte_packed;
16400
16401 /**********************
16402  * hwrm_func_vlan_cfg *
16403  **********************/
16404
16405
16406 /* hwrm_func_vlan_cfg_input (size:384b/48B) */
16407 struct hwrm_func_vlan_cfg_input {
16408         /* The HWRM command request type. */
16409         uint16_t        req_type;
16410         /*
16411          * The completion ring to send the completion event on. This should
16412          * be the NQ ID returned from the `nq_alloc` HWRM command.
16413          */
16414         uint16_t        cmpl_ring;
16415         /*
16416          * The sequence ID is used by the driver for tracking multiple
16417          * commands. This ID is treated as opaque data by the firmware and
16418          * the value is returned in the `hwrm_resp_hdr` upon completion.
16419          */
16420         uint16_t        seq_id;
16421         /*
16422          * The target ID of the command:
16423          * * 0x0-0xFFF8 - The function ID
16424          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16425          * * 0xFFFD - Reserved for user-space HWRM interface
16426          * * 0xFFFF - HWRM
16427          */
16428         uint16_t        target_id;
16429         /*
16430          * A physical address pointer pointing to a host buffer that the
16431          * command's response data will be written. This can be either a host
16432          * physical address (HPA) or a guest physical address (GPA) and must
16433          * point to a physically contiguous block of memory.
16434          */
16435         uint64_t        resp_addr;
16436         /*
16437          * Function ID of the function that is being
16438          * configured.
16439          * If set to 0xFF... (All Fs), then the configuration is
16440          * for the requesting function.
16441          */
16442         uint16_t        fid;
16443         uint8_t unused_0[2];
16444         uint32_t        enables;
16445         /*
16446          * This bit must be '1' for the stag_vid field to be
16447          * configured.
16448          */
16449         #define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_VID      UINT32_C(0x1)
16450         /*
16451          * This bit must be '1' for the ctag_vid field to be
16452          * configured.
16453          */
16454         #define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_VID      UINT32_C(0x2)
16455         /*
16456          * This bit must be '1' for the stag_pcp field to be
16457          * configured.
16458          */
16459         #define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_PCP      UINT32_C(0x4)
16460         /*
16461          * This bit must be '1' for the ctag_pcp field to be
16462          * configured.
16463          */
16464         #define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_PCP      UINT32_C(0x8)
16465         /*
16466          * This bit must be '1' for the stag_tpid field to be
16467          * configured.
16468          */
16469         #define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_TPID     UINT32_C(0x10)
16470         /*
16471          * This bit must be '1' for the ctag_tpid field to be
16472          * configured.
16473          */
16474         #define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_TPID     UINT32_C(0x20)
16475         /* S-TAG VLAN identifier configured for the function. */
16476         uint16_t        stag_vid;
16477         /* S-TAG PCP value configured for the function. */
16478         uint8_t stag_pcp;
16479         uint8_t unused_1;
16480         /*
16481          * S-TAG TPID value configured for the function. This field is specified in
16482          * network byte order.
16483          */
16484         uint16_t        stag_tpid;
16485         /* C-TAG VLAN identifier configured for the function. */
16486         uint16_t        ctag_vid;
16487         /* C-TAG PCP value configured for the function. */
16488         uint8_t ctag_pcp;
16489         uint8_t unused_2;
16490         /*
16491          * C-TAG TPID value configured for the function. This field is specified in
16492          * network byte order.
16493          */
16494         uint16_t        ctag_tpid;
16495         /* Future use. */
16496         uint32_t        rsvd1;
16497         /* Future use. */
16498         uint32_t        rsvd2;
16499         uint8_t unused_3[4];
16500 } __rte_packed;
16501
16502 /* hwrm_func_vlan_cfg_output (size:128b/16B) */
16503 struct hwrm_func_vlan_cfg_output {
16504         /* The specific error status for the command. */
16505         uint16_t        error_code;
16506         /* The HWRM command request type. */
16507         uint16_t        req_type;
16508         /* The sequence ID from the original command. */
16509         uint16_t        seq_id;
16510         /* The length of the response data in number of bytes. */
16511         uint16_t        resp_len;
16512         uint8_t unused_0[7];
16513         /*
16514          * This field is used in Output records to indicate that the output
16515          * is completely written to RAM.  This field should be read as '1'
16516          * to indicate that the output has been completely written.
16517          * When writing a command completion or response to an internal processor,
16518          * the order of writes has to be such that this field is written last.
16519          */
16520         uint8_t valid;
16521 } __rte_packed;
16522
16523 /*******************************
16524  * hwrm_func_vf_vnic_ids_query *
16525  *******************************/
16526
16527
16528 /* hwrm_func_vf_vnic_ids_query_input (size:256b/32B) */
16529 struct hwrm_func_vf_vnic_ids_query_input {
16530         /* The HWRM command request type. */
16531         uint16_t        req_type;
16532         /*
16533          * The completion ring to send the completion event on. This should
16534          * be the NQ ID returned from the `nq_alloc` HWRM command.
16535          */
16536         uint16_t        cmpl_ring;
16537         /*
16538          * The sequence ID is used by the driver for tracking multiple
16539          * commands. This ID is treated as opaque data by the firmware and
16540          * the value is returned in the `hwrm_resp_hdr` upon completion.
16541          */
16542         uint16_t        seq_id;
16543         /*
16544          * The target ID of the command:
16545          * * 0x0-0xFFF8 - The function ID
16546          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16547          * * 0xFFFD - Reserved for user-space HWRM interface
16548          * * 0xFFFF - HWRM
16549          */
16550         uint16_t        target_id;
16551         /*
16552          * A physical address pointer pointing to a host buffer that the
16553          * command's response data will be written. This can be either a host
16554          * physical address (HPA) or a guest physical address (GPA) and must
16555          * point to a physically contiguous block of memory.
16556          */
16557         uint64_t        resp_addr;
16558         /*
16559          * This value is used to identify a Virtual Function (VF).
16560          * The scope of VF ID is local within a PF.
16561          */
16562         uint16_t        vf_id;
16563         uint8_t unused_0[2];
16564         /* Max number of vnic ids in vnic id table */
16565         uint32_t        max_vnic_id_cnt;
16566         /* This is the address for VF VNIC ID table */
16567         uint64_t        vnic_id_tbl_addr;
16568 } __rte_packed;
16569
16570 /* hwrm_func_vf_vnic_ids_query_output (size:128b/16B) */
16571 struct hwrm_func_vf_vnic_ids_query_output {
16572         /* The specific error status for the command. */
16573         uint16_t        error_code;
16574         /* The HWRM command request type. */
16575         uint16_t        req_type;
16576         /* The sequence ID from the original command. */
16577         uint16_t        seq_id;
16578         /* The length of the response data in number of bytes. */
16579         uint16_t        resp_len;
16580         /*
16581          * Actual number of vnic ids
16582          *
16583          * Each VNIC ID is written as a 32-bit number.
16584          */
16585         uint32_t        vnic_id_cnt;
16586         uint8_t unused_0[3];
16587         /*
16588          * This field is used in Output records to indicate that the output
16589          * is completely written to RAM.  This field should be read as '1'
16590          * to indicate that the output has been completely written.
16591          * When writing a command completion or response to an internal processor,
16592          * the order of writes has to be such that this field is written last.
16593          */
16594         uint8_t valid;
16595 } __rte_packed;
16596
16597 /***********************
16598  * hwrm_func_vf_bw_cfg *
16599  ***********************/
16600
16601
16602 /* hwrm_func_vf_bw_cfg_input (size:960b/120B) */
16603 struct hwrm_func_vf_bw_cfg_input {
16604         /* The HWRM command request type. */
16605         uint16_t        req_type;
16606         /*
16607          * The completion ring to send the completion event on. This should
16608          * be the NQ ID returned from the `nq_alloc` HWRM command.
16609          */
16610         uint16_t        cmpl_ring;
16611         /*
16612          * The sequence ID is used by the driver for tracking multiple
16613          * commands. This ID is treated as opaque data by the firmware and
16614          * the value is returned in the `hwrm_resp_hdr` upon completion.
16615          */
16616         uint16_t        seq_id;
16617         /*
16618          * The target ID of the command:
16619          * * 0x0-0xFFF8 - The function ID
16620          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16621          * * 0xFFFD - Reserved for user-space HWRM interface
16622          * * 0xFFFF - HWRM
16623          */
16624         uint16_t        target_id;
16625         /*
16626          * A physical address pointer pointing to a host buffer that the
16627          * command's response data will be written. This can be either a host
16628          * physical address (HPA) or a guest physical address (GPA) and must
16629          * point to a physically contiguous block of memory.
16630          */
16631         uint64_t        resp_addr;
16632         /*
16633          * The number of VF functions that are being configured.
16634          * The cmd space allows up to 50 VFs' BW to be configured with one cmd.
16635          */
16636         uint16_t        num_vfs;
16637         uint16_t        unused[3];
16638         /* These 16-bit fields contain the VF fid and the rate scale percentage. */
16639         uint16_t        vfn[48];
16640         /* The physical VF id the adjustment will be made to. */
16641         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_VFID_MASK     UINT32_C(0xfff)
16642         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_VFID_SFT      0
16643         /*
16644          * This field configures the rate scale percentage of the VF as specified
16645          * by the physical VF id.
16646          */
16647         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_MASK     UINT32_C(0xf000)
16648         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_SFT      12
16649         /* 0% of the max tx rate */
16650         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_0 \
16651                 (UINT32_C(0x0) << 12)
16652         /* 6.66% of the max tx rate */
16653         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_6_66 \
16654                 (UINT32_C(0x1) << 12)
16655         /* 13.33% of the max tx rate */
16656         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_13_33 \
16657                 (UINT32_C(0x2) << 12)
16658         /* 20% of the max tx rate */
16659         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_20 \
16660                 (UINT32_C(0x3) << 12)
16661         /* 26.66% of the max tx rate */
16662         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_26_66 \
16663                 (UINT32_C(0x4) << 12)
16664         /* 33% of the max tx rate */
16665         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_33_33 \
16666                 (UINT32_C(0x5) << 12)
16667         /* 40% of the max tx rate */
16668         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_40 \
16669                 (UINT32_C(0x6) << 12)
16670         /* 46.66% of the max tx rate */
16671         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_46_66 \
16672                 (UINT32_C(0x7) << 12)
16673         /* 53.33% of the max tx rate */
16674         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_53_33 \
16675                 (UINT32_C(0x8) << 12)
16676         /* 60% of the max tx rate */
16677         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_60 \
16678                 (UINT32_C(0x9) << 12)
16679         /* 66.66% of the max tx rate */
16680         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_66_66 \
16681                 (UINT32_C(0xa) << 12)
16682         /* 53.33% of the max tx rate */
16683         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_73_33 \
16684                 (UINT32_C(0xb) << 12)
16685         /* 80% of the max tx rate */
16686         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_80 \
16687                 (UINT32_C(0xc) << 12)
16688         /* 86.66% of the max tx rate */
16689         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_86_66 \
16690                 (UINT32_C(0xd) << 12)
16691         /* 93.33% of the max tx rate */
16692         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_93_33 \
16693                 (UINT32_C(0xe) << 12)
16694         /* 100% of the max tx rate */
16695         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_100 \
16696                 (UINT32_C(0xf) << 12)
16697         #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_LAST \
16698                 HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_100
16699 } __rte_packed;
16700
16701 /* hwrm_func_vf_bw_cfg_output (size:128b/16B) */
16702 struct hwrm_func_vf_bw_cfg_output {
16703         /* The specific error status for the command. */
16704         uint16_t        error_code;
16705         /* The HWRM command request type. */
16706         uint16_t        req_type;
16707         /* The sequence ID from the original command. */
16708         uint16_t        seq_id;
16709         /* The length of the response data in number of bytes. */
16710         uint16_t        resp_len;
16711         uint8_t unused_0[7];
16712         /*
16713          * This field is used in Output records to indicate that the output
16714          * is completely written to RAM.  This field should be read as '1'
16715          * to indicate that the output has been completely written.
16716          * When writing a command completion or response to an internal processor,
16717          * the order of writes has to be such that this field is written last.
16718          */
16719         uint8_t valid;
16720 } __rte_packed;
16721
16722 /************************
16723  * hwrm_func_vf_bw_qcfg *
16724  ************************/
16725
16726
16727 /* hwrm_func_vf_bw_qcfg_input (size:960b/120B) */
16728 struct hwrm_func_vf_bw_qcfg_input {
16729         /* The HWRM command request type. */
16730         uint16_t        req_type;
16731         /*
16732          * The completion ring to send the completion event on. This should
16733          * be the NQ ID returned from the `nq_alloc` HWRM command.
16734          */
16735         uint16_t        cmpl_ring;
16736         /*
16737          * The sequence ID is used by the driver for tracking multiple
16738          * commands. This ID is treated as opaque data by the firmware and
16739          * the value is returned in the `hwrm_resp_hdr` upon completion.
16740          */
16741         uint16_t        seq_id;
16742         /*
16743          * The target ID of the command:
16744          * * 0x0-0xFFF8 - The function ID
16745          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16746          * * 0xFFFD - Reserved for user-space HWRM interface
16747          * * 0xFFFF - HWRM
16748          */
16749         uint16_t        target_id;
16750         /*
16751          * A physical address pointer pointing to a host buffer that the
16752          * command's response data will be written. This can be either a host
16753          * physical address (HPA) or a guest physical address (GPA) and must
16754          * point to a physically contiguous block of memory.
16755          */
16756         uint64_t        resp_addr;
16757         /*
16758          * The number of VF functions that are being queried.
16759          * The inline response space allows the host to query up to 50 VFs'
16760          * rate scale percentage
16761          */
16762         uint16_t        num_vfs;
16763         uint16_t        unused[3];
16764         /* These 16-bit fields contain the VF fid */
16765         uint16_t        vfn[48];
16766         /* The physical VF id of interest */
16767         #define HWRM_FUNC_VF_BW_QCFG_INPUT_VFN_VFID_MASK UINT32_C(0xfff)
16768         #define HWRM_FUNC_VF_BW_QCFG_INPUT_VFN_VFID_SFT 0
16769 } __rte_packed;
16770
16771 /* hwrm_func_vf_bw_qcfg_output (size:960b/120B) */
16772 struct hwrm_func_vf_bw_qcfg_output {
16773         /* The specific error status for the command. */
16774         uint16_t        error_code;
16775         /* The HWRM command request type. */
16776         uint16_t        req_type;
16777         /* The sequence ID from the original command. */
16778         uint16_t        seq_id;
16779         /* The length of the response data in number of bytes. */
16780         uint16_t        resp_len;
16781         /*
16782          * The number of VF functions that are being queried.
16783          * The inline response space allows the host to query up to 50 VFs' rate
16784          * scale percentage
16785          */
16786         uint16_t        num_vfs;
16787         uint16_t        unused[3];
16788         /* These 16-bit fields contain the VF fid and the rate scale percentage. */
16789         uint16_t        vfn[48];
16790         /* The physical VF id the adjustment will be made to. */
16791         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_VFID_MASK     UINT32_C(0xfff)
16792         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_VFID_SFT      0
16793         /*
16794          * This field configures the rate scale percentage of the VF as specified
16795          * by the physical VF id.
16796          */
16797         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_MASK     UINT32_C(0xf000)
16798         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_SFT      12
16799         /* 0% of the max tx rate */
16800         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_0 \
16801                 (UINT32_C(0x0) << 12)
16802         /* 6.66% of the max tx rate */
16803         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_6_66 \
16804                 (UINT32_C(0x1) << 12)
16805         /* 13.33% of the max tx rate */
16806         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_13_33 \
16807                 (UINT32_C(0x2) << 12)
16808         /* 20% of the max tx rate */
16809         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_20 \
16810                 (UINT32_C(0x3) << 12)
16811         /* 26.66% of the max tx rate */
16812         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_26_66 \
16813                 (UINT32_C(0x4) << 12)
16814         /* 33% of the max tx rate */
16815         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_33_33 \
16816                 (UINT32_C(0x5) << 12)
16817         /* 40% of the max tx rate */
16818         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_40 \
16819                 (UINT32_C(0x6) << 12)
16820         /* 46.66% of the max tx rate */
16821         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_46_66 \
16822                 (UINT32_C(0x7) << 12)
16823         /* 53.33% of the max tx rate */
16824         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_53_33 \
16825                 (UINT32_C(0x8) << 12)
16826         /* 60% of the max tx rate */
16827         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_60 \
16828                 (UINT32_C(0x9) << 12)
16829         /* 66.66% of the max tx rate */
16830         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_66_66 \
16831                 (UINT32_C(0xa) << 12)
16832         /* 53.33% of the max tx rate */
16833         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_73_33 \
16834                 (UINT32_C(0xb) << 12)
16835         /* 80% of the max tx rate */
16836         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_80 \
16837                 (UINT32_C(0xc) << 12)
16838         /* 86.66% of the max tx rate */
16839         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_86_66 \
16840                 (UINT32_C(0xd) << 12)
16841         /* 93.33% of the max tx rate */
16842         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_93_33 \
16843                 (UINT32_C(0xe) << 12)
16844         /* 100% of the max tx rate */
16845         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_100 \
16846                 (UINT32_C(0xf) << 12)
16847         #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_LAST \
16848                 HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_100
16849         uint8_t unused_0[7];
16850         /*
16851          * This field is used in Output records to indicate that the output
16852          * is completely written to RAM.  This field should be read as '1'
16853          * to indicate that the output has been completely written.
16854          * When writing a command completion or response to an internal processor,
16855          * the order of writes has to be such that this field is written last.
16856          */
16857         uint8_t valid;
16858 } __rte_packed;
16859
16860 /***************************
16861  * hwrm_func_drv_if_change *
16862  ***************************/
16863
16864
16865 /* hwrm_func_drv_if_change_input (size:192b/24B) */
16866 struct hwrm_func_drv_if_change_input {
16867         /* The HWRM command request type. */
16868         uint16_t        req_type;
16869         /*
16870          * The completion ring to send the completion event on. This should
16871          * be the NQ ID returned from the `nq_alloc` HWRM command.
16872          */
16873         uint16_t        cmpl_ring;
16874         /*
16875          * The sequence ID is used by the driver for tracking multiple
16876          * commands. This ID is treated as opaque data by the firmware and
16877          * the value is returned in the `hwrm_resp_hdr` upon completion.
16878          */
16879         uint16_t        seq_id;
16880         /*
16881          * The target ID of the command:
16882          * * 0x0-0xFFF8 - The function ID
16883          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16884          * * 0xFFFD - Reserved for user-space HWRM interface
16885          * * 0xFFFF - HWRM
16886          */
16887         uint16_t        target_id;
16888         /*
16889          * A physical address pointer pointing to a host buffer that the
16890          * command's response data will be written. This can be either a host
16891          * physical address (HPA) or a guest physical address (GPA) and must
16892          * point to a physically contiguous block of memory.
16893          */
16894         uint64_t        resp_addr;
16895         uint32_t        flags;
16896         /*
16897          * When this bit is '1', the function driver is indicating
16898          * that the IF state is changing to UP state.  The call should
16899          * be made at the beginning of the driver's open call before
16900          * resources are allocated.  After making the call, the driver
16901          * should check the response to see if any resources may have
16902          * changed (see the response below).  If the driver fails
16903          * the open call, the driver should make this call again with
16904          * this bit cleared to indicate that the IF state is not UP.
16905          * During the driver's close call when the IF state is changing
16906          * to DOWN, the driver should make this call with the bit cleared
16907          * after all resources have been freed.
16908          */
16909         #define HWRM_FUNC_DRV_IF_CHANGE_INPUT_FLAGS_UP     UINT32_C(0x1)
16910         uint32_t        unused;
16911 } __rte_packed;
16912
16913 /* hwrm_func_drv_if_change_output (size:128b/16B) */
16914 struct hwrm_func_drv_if_change_output {
16915         /* The specific error status for the command. */
16916         uint16_t        error_code;
16917         /* The HWRM command request type. */
16918         uint16_t        req_type;
16919         /* The sequence ID from the original command. */
16920         uint16_t        seq_id;
16921         /* The length of the response data in number of bytes. */
16922         uint16_t        resp_len;
16923         uint32_t        flags;
16924         /*
16925          * When this bit is '1', it indicates that the resources reserved
16926          * for this function may have changed.  The driver should check
16927          * resource capabilities and reserve resources again before
16928          * allocating resources.
16929          */
16930         #define HWRM_FUNC_DRV_IF_CHANGE_OUTPUT_FLAGS_RESC_CHANGE \
16931                 UINT32_C(0x1)
16932         /*
16933          * When this bit is '1', it indicates that the firmware got changed / reset.
16934          * The driver should do complete re-initialization when that bit is set.
16935          */
16936         #define HWRM_FUNC_DRV_IF_CHANGE_OUTPUT_FLAGS_HOT_FW_RESET_DONE \
16937                 UINT32_C(0x2)
16938         uint8_t unused_0[3];
16939         /*
16940          * This field is used in Output records to indicate that the output
16941          * is completely written to RAM.  This field should be read as '1'
16942          * to indicate that the output has been completely written.
16943          * When writing a command completion or response to an internal processor,
16944          * the order of writes has to be such that this field is written last.
16945          */
16946         uint8_t valid;
16947 } __rte_packed;
16948
16949 /*******************************
16950  * hwrm_func_host_pf_ids_query *
16951  *******************************/
16952
16953
16954 /* hwrm_func_host_pf_ids_query_input (size:192b/24B) */
16955 struct hwrm_func_host_pf_ids_query_input {
16956         /* The HWRM command request type. */
16957         uint16_t        req_type;
16958         /*
16959          * The completion ring to send the completion event on. This should
16960          * be the NQ ID returned from the `nq_alloc` HWRM command.
16961          */
16962         uint16_t        cmpl_ring;
16963         /*
16964          * The sequence ID is used by the driver for tracking multiple
16965          * commands. This ID is treated as opaque data by the firmware and
16966          * the value is returned in the `hwrm_resp_hdr` upon completion.
16967          */
16968         uint16_t        seq_id;
16969         /*
16970          * The target ID of the command:
16971          * * 0x0-0xFFF8 - The function ID
16972          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
16973          * * 0xFFFD - Reserved for user-space HWRM interface
16974          * * 0xFFFF - HWRM
16975          */
16976         uint16_t        target_id;
16977         /*
16978          * A physical address pointer pointing to a host buffer that the
16979          * command's response data will be written. This can be either a host
16980          * physical address (HPA) or a guest physical address (GPA) and must
16981          * point to a physically contiguous block of memory.
16982          */
16983         uint64_t        resp_addr;
16984         uint8_t host;
16985         /*
16986          * # If this bit is set to '1', the query will contain PF(s)
16987          * belongs to SOC host.
16988          */
16989         #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_SOC      UINT32_C(0x1)
16990         /*
16991          * # If this bit is set to '1', the query will contain PF(s)
16992          * belongs to EP0 host.
16993          */
16994         #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_EP_0     UINT32_C(0x2)
16995         /*
16996          * # If this bit is set to '1', the query will contain PF(s)
16997          * belongs to EP1 host.
16998          */
16999         #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_EP_1     UINT32_C(0x4)
17000         /*
17001          * # If this bit is set to '1', the query will contain PF(s)
17002          * belongs to EP2 host.
17003          */
17004         #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_EP_2     UINT32_C(0x8)
17005         /*
17006          * # If this bit is set to '1', the query will contain PF(s)
17007          * belongs to EP3 host.
17008          */
17009         #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_EP_3     UINT32_C(0x10)
17010         /*
17011          * This provides a filter of what PF(s) will be returned in the
17012          * query..
17013          */
17014         uint8_t filter;
17015         /*
17016          * all available PF(s) belong to the host(s) (defined in the
17017          * host field). This includes the hidden PFs.
17018          */
17019         #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_ALL  UINT32_C(0x0)
17020         /*
17021          * all available PF(s) belong to the host(s) (defined in the
17022          * host field) that is available for L2 traffic.
17023          */
17024         #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_L2   UINT32_C(0x1)
17025         /*
17026          * all available PF(s) belong to the host(s) (defined in the
17027          * host field) that is available for ROCE traffic.
17028          */
17029         #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_ROCE UINT32_C(0x2)
17030         #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_LAST \
17031                 HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_ROCE
17032         uint8_t unused_1[6];
17033 } __rte_packed;
17034
17035 /* hwrm_func_host_pf_ids_query_output (size:128b/16B) */
17036 struct hwrm_func_host_pf_ids_query_output {
17037         /* The specific error status for the command. */
17038         uint16_t        error_code;
17039         /* The HWRM command request type. */
17040         uint16_t        req_type;
17041         /* The sequence ID from the original command. */
17042         uint16_t        seq_id;
17043         /* The length of the response data in number of bytes. */
17044         uint16_t        resp_len;
17045         /* This provides the first PF ID of the device. */
17046         uint16_t        first_pf_id;
17047         uint16_t        pf_ordinal_mask;
17048         /*
17049          * When this bit is '1', it indicates first PF belongs to one of
17050          * the hosts defined in the input request.
17051          */
17052         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_0 \
17053                 UINT32_C(0x1)
17054         /*
17055          * When this bit is '1', it indicates 2nd PF belongs to one of the
17056          * hosts defined in the input request.
17057          */
17058         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_1 \
17059                 UINT32_C(0x2)
17060         /*
17061          * When this bit is '1', it indicates 3rd PF belongs to one of the
17062          * hosts defined in the input request.
17063          */
17064         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_2 \
17065                 UINT32_C(0x4)
17066         /*
17067          * When this bit is '1', it indicates 4th PF belongs to one of the
17068          * hosts defined in the input request.
17069          */
17070         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_3 \
17071                 UINT32_C(0x8)
17072         /*
17073          * When this bit is '1', it indicates 5th PF belongs to one of the
17074          * hosts defined in the input request.
17075          */
17076         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_4 \
17077                 UINT32_C(0x10)
17078         /*
17079          * When this bit is '1', it indicates 6th PF belongs to one of the
17080          * hosts defined in the input request.
17081          */
17082         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_5 \
17083                 UINT32_C(0x20)
17084         /*
17085          * When this bit is '1', it indicates 7th PF belongs to one of the
17086          * hosts defined in the input request.
17087          */
17088         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_6 \
17089                 UINT32_C(0x40)
17090         /*
17091          * When this bit is '1', it indicates 8th PF belongs to one of the
17092          * hosts defined in the input request.
17093          */
17094         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_7 \
17095                 UINT32_C(0x80)
17096         /*
17097          * When this bit is '1', it indicates 9th PF belongs to one of the
17098          * hosts defined in the input request.
17099          */
17100         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_8 \
17101                 UINT32_C(0x100)
17102         /*
17103          * When this bit is '1', it indicates 10th PF belongs to one of the
17104          * hosts defined in the input request.
17105          */
17106         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_9 \
17107                 UINT32_C(0x200)
17108         /*
17109          * When this bit is '1', it indicates 11th PF belongs to one of the
17110          * hosts defined in the input request.
17111          */
17112         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_10 \
17113                 UINT32_C(0x400)
17114         /*
17115          * When this bit is '1', it indicates 12th PF belongs to one of the
17116          * hosts defined in the input request.
17117          */
17118         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_11 \
17119                 UINT32_C(0x800)
17120         /*
17121          * When this bit is '1', it indicates 13th PF belongs to one of the
17122          * hosts defined in the input request.
17123          */
17124         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_12 \
17125                 UINT32_C(0x1000)
17126         /*
17127          * When this bit is '1', it indicates 14th PF belongs to one of the
17128          * hosts defined in the input request.
17129          */
17130         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_13 \
17131                 UINT32_C(0x2000)
17132         /*
17133          * When this bit is '1', it indicates 15th PF belongs to one of the
17134          * hosts defined in the input request.
17135          */
17136         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_14 \
17137                 UINT32_C(0x4000)
17138         /*
17139          * When this bit is '1', it indicates 16th PF belongs to one of the
17140          * hosts defined in the input request.
17141          */
17142         #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_15 \
17143                 UINT32_C(0x8000)
17144         uint8_t unused_1[3];
17145         /*
17146          * This field is used in Output records to indicate that the output
17147          * is completely written to RAM.  This field should be read as '1'
17148          * to indicate that the output has been completely written.
17149          * When writing a command completion or response to an internal processor,
17150          * the order of writes has to be such that this field is written last.
17151          */
17152         uint8_t valid;
17153 } __rte_packed;
17154
17155 /*********************
17156  * hwrm_port_phy_cfg *
17157  *********************/
17158
17159
17160 /* hwrm_port_phy_cfg_input (size:448b/56B) */
17161 struct hwrm_port_phy_cfg_input {
17162         /* The HWRM command request type. */
17163         uint16_t        req_type;
17164         /*
17165          * The completion ring to send the completion event on. This should
17166          * be the NQ ID returned from the `nq_alloc` HWRM command.
17167          */
17168         uint16_t        cmpl_ring;
17169         /*
17170          * The sequence ID is used by the driver for tracking multiple
17171          * commands. This ID is treated as opaque data by the firmware and
17172          * the value is returned in the `hwrm_resp_hdr` upon completion.
17173          */
17174         uint16_t        seq_id;
17175         /*
17176          * The target ID of the command:
17177          * * 0x0-0xFFF8 - The function ID
17178          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
17179          * * 0xFFFD - Reserved for user-space HWRM interface
17180          * * 0xFFFF - HWRM
17181          */
17182         uint16_t        target_id;
17183         /*
17184          * A physical address pointer pointing to a host buffer that the
17185          * command's response data will be written. This can be either a host
17186          * physical address (HPA) or a guest physical address (GPA) and must
17187          * point to a physically contiguous block of memory.
17188          */
17189         uint64_t        resp_addr;
17190         uint32_t        flags;
17191         /*
17192          * When this bit is set to '1', the PHY for the port shall
17193          * be reset.
17194          *
17195          * # If this bit is set to 1, then the HWRM shall reset the
17196          * PHY after applying PHY configuration changes specified
17197          * in this command.
17198          * # In order to guarantee that PHY configuration changes
17199          * specified in this command take effect, the HWRM
17200          * client should set this flag to 1.
17201          * # If this bit is not set to 1, then the HWRM may reset
17202          * the PHY depending on the current PHY configuration and
17203          * settings specified in this command.
17204          */
17205         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_RESET_PHY \
17206                 UINT32_C(0x1)
17207         /* deprecated bit.  Do not use!!! */
17208         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_DEPRECATED \
17209                 UINT32_C(0x2)
17210         /*
17211          * When this bit is set to '1', and the force_pam4_link_speed
17212          * bit in the 'enables' field is '0', the link shall be forced
17213          * to the force_link_speed value.
17214          *
17215          * When this bit is set to '1', and the force_pam4_link_speed
17216          * bit in the 'enables' field is '1', the link shall be forced
17217          * to the force_pam4_link_speed value.
17218          *
17219          * When this bit is set to '1', the HWRM client should
17220          * not enable any of the auto negotiation related
17221          * fields represented by auto_XXX fields in this command.
17222          * When this bit is set to '1' and the HWRM client has
17223          * enabled a auto_XXX field in this command, then the
17224          * HWRM shall ignore the enabled auto_XXX field.
17225          *
17226          * When this bit is set to zero, the link
17227          * shall be allowed to autoneg.
17228          */
17229         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FORCE \
17230                 UINT32_C(0x4)
17231         /*
17232          * When this bit is set to '1', the auto-negotiation process
17233          * shall be restarted on the link.
17234          */
17235         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_RESTART_AUTONEG \
17236                 UINT32_C(0x8)
17237         /*
17238          * When this bit is set to '1', Energy Efficient Ethernet
17239          * (EEE) is requested to be enabled on this link.
17240          * If EEE is not supported on this port, then this flag
17241          * shall be ignored by the HWRM.
17242          */
17243         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_ENABLE \
17244                 UINT32_C(0x10)
17245         /*
17246          * When this bit is set to '1', Energy Efficient Ethernet
17247          * (EEE) is requested to be disabled on this link.
17248          * If EEE is not supported on this port, then this flag
17249          * shall be ignored by the HWRM.
17250          */
17251         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_DISABLE \
17252                 UINT32_C(0x20)
17253         /*
17254          * When this bit is set to '1' and EEE is enabled on this
17255          * link, then TX LPI is requested to be enabled on the link.
17256          * If EEE is not supported on this port, then this flag
17257          * shall be ignored by the HWRM.
17258          * If EEE is disabled on this port, then this flag shall be
17259          * ignored by the HWRM.
17260          */
17261         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_TX_LPI_ENABLE \
17262                 UINT32_C(0x40)
17263         /*
17264          * When this bit is set to '1' and EEE is enabled on this
17265          * link, then TX LPI is requested to be disabled on the link.
17266          * If EEE is not supported on this port, then this flag
17267          * shall be ignored by the HWRM.
17268          * If EEE is disabled on this port, then this flag shall be
17269          * ignored by the HWRM.
17270          */
17271         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_TX_LPI_DISABLE \
17272                 UINT32_C(0x80)
17273         /*
17274          * When set to 1, then the HWRM shall enable FEC autonegotitation
17275          * on this port if supported.  When enabled, at least one of the
17276          * FEC modes must be advertised by enabling the fec_clause_74_enable,
17277          * fec_clause_91_enable, fec_rs544_1xn_enable, fec_rs544_ieee_enable,
17278          * fec_rs272_1xn_enable, or fec_rs272_ieee_enable flag.  If none
17279          * of the FEC mode is currently enabled, the HWRM shall choose
17280          * a default advertisement setting.
17281          * The default advertisement setting can be queried by calling
17282          * hwrm_port_phy_qcfg.  Note that the link speed must be
17283          * in autonegotiation mode for FEC autonegotiation to take effect.
17284          * When set to 0, then this flag shall be ignored.
17285          * If FEC autonegotiation is not supported, then the HWRM shall ignore this
17286          * flag.
17287          */
17288         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_AUTONEG_ENABLE \
17289                 UINT32_C(0x100)
17290         /*
17291          * When set to 1, then the HWRM shall disable FEC autonegotiation
17292          * on this port and use forced FEC mode.  In forced FEC mode, one
17293          * or more FEC forced settings under the same clause can be set.
17294          * When set to 0, then this flag shall be ignored.
17295          * If FEC autonegotiation is not supported, then the HWRM shall ignore this
17296          * flag.
17297          */
17298         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_AUTONEG_DISABLE \
17299                 UINT32_C(0x200)
17300         /*
17301          * When set to 1, then the HWRM shall enable FEC CLAUSE 74 (Fire Code)
17302          * on this port if supported, by advertising FEC CLAUSE 74 if
17303          * FEC autonegotiation is enabled or force enabled otherwise.
17304          * When set to 0, then this flag shall be ignored.
17305          * If FEC CLAUSE 74 is not supported, then the HWRM shall ignore this
17306          * flag.
17307          */
17308         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE74_ENABLE \
17309                 UINT32_C(0x400)
17310         /*
17311          * When set to 1, then the HWRM shall disable FEC CLAUSE 74 (Fire Code)
17312          * on this port if supported, by not advertising FEC CLAUSE 74 if
17313          * FEC autonegotiation is enabled or force disabled otherwise.
17314          * When set to 0, then this flag shall be ignored.
17315          * If FEC CLAUSE 74 is not supported, then the HWRM shall ignore this
17316          * flag.
17317          */
17318         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE74_DISABLE \
17319                 UINT32_C(0x800)
17320         /*
17321          * When set to 1, then the HWRM shall enable FEC CLAUSE 91
17322          * (Reed Solomon RS(528,514) for NRZ) on this port if supported,
17323          * by advertising FEC RS(528,514) if FEC autonegotiation is enabled
17324          * or force enabled otherwise.  In forced FEC mode, this flag
17325          * will only take effect if the speed is NRZ.  Additional
17326          * RS544 or RS272 flags (also under clause 91) may be set for PAM4
17327          * in forced FEC mode.
17328          * When set to 0, then this flag shall be ignored.
17329          * If FEC RS(528,514) is not supported, then the HWRM shall ignore
17330          * this flag.
17331          */
17332         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE91_ENABLE \
17333                 UINT32_C(0x1000)
17334         /*
17335          * When set to 1, then the HWRM shall disable FEC CLAUSE 91
17336          * (Reed Solomon RS(528,514) for NRZ) on this port if supported, by
17337          * not advertising RS(528,514) if FEC autonegotiation is enabled or
17338          * force disabled otherwise.  When set to 0, then this flag shall be
17339          * ignored.  If FEC RS(528,514) is not supported, then the HWRM
17340          * shall ignore this flag.
17341          */
17342         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE91_DISABLE \
17343                 UINT32_C(0x2000)
17344         /*
17345          * When this bit is set to '1', the link shall be forced to
17346          * be taken down.
17347          *
17348          * # When this bit is set to '1", all other
17349          * command input settings related to the link speed shall
17350          * be ignored.
17351          * Once the link state is forced down, it can be
17352          * explicitly cleared from that state by setting this flag
17353          * to '0'.
17354          * # If this flag is set to '0', then the link shall be
17355          * cleared from forced down state if the link is in forced
17356          * down state.
17357          * There may be conditions (e.g. out-of-band or sideband
17358          * configuration changes for the link) outside the scope
17359          * of the HWRM implementation that may clear forced down
17360          * link state.
17361          */
17362         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FORCE_LINK_DWN \
17363                 UINT32_C(0x4000)
17364         /*
17365          * When set to 1, then the HWRM shall enable FEC RS544_1XN
17366          * on this port if supported, by advertising FEC RS544_1XN if
17367          * FEC autonegotiation is enabled or force enabled otherwise.
17368          * In forced mode, this flag will only take effect if the speed is
17369          * PAM4.  If this flag and fec_rs544_ieee_enable are set, the
17370          * HWRM shall choose one of the RS544 modes.
17371          * When set to 0, then this flag shall be ignored.
17372          * If FEC RS544_1XN is not supported, then the HWRM shall ignore this
17373          * flag.
17374          */
17375         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS544_1XN_ENABLE \
17376                 UINT32_C(0x8000)
17377         /*
17378          * When set to 1, then the HWRM shall disable FEC RS544_1XN
17379          * on this port if supported, by not advertising FEC RS544_1XN if
17380          * FEC autonegotiation is enabled or force disabled otherwise.
17381          * When set to 0, then this flag shall be ignored.
17382          * If FEC RS544_1XN  is not supported, then the HWRM shall ignore this
17383          * flag.
17384          */
17385         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS544_1XN_DISABLE \
17386                 UINT32_C(0x10000)
17387         /*
17388          * When set to 1, then the HWRM shall enable FEC RS(544,514)
17389          * on this port if supported, by advertising FEC RS(544,514) if
17390          * FEC autonegotiation is enabled or force enabled otherwise.
17391          * In forced mode, this flag will only take effect if the speed is
17392          * PAM4.  If this flag and fec_rs544_1xn_enable are set, the
17393          * HWRM shall choose one of the RS544 modes.
17394          * When set to 0, then this flag shall be ignored.
17395          * If FEC RS(544,514) is not supported, then the HWRM shall ignore
17396          * this flag.
17397          */
17398         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS544_IEEE_ENABLE \
17399                 UINT32_C(0x20000)
17400         /*
17401          * When set to 1, then the HWRM shall disable FEC RS(544,514)
17402          * on this port if supported, by not advertising FEC RS(544,514) if
17403          * FEC autonegotiation is enabled or force disabled otherwise.
17404          * When set to 0, then this flag shall be ignored.
17405          * If FEC RS(544,514) is not supported, then the HWRM shall ignore
17406          * this flag.
17407          */
17408         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS544_IEEE_DISABLE \
17409                 UINT32_C(0x40000)
17410         /*
17411          * When set to 1, then the HWRM shall enable FEC RS272_1XN
17412          * on this port if supported, by advertising FEC RS272_1XN if
17413          * FEC autonegotiation is enabled or force enabled otherwise.
17414          * In forced mode, this flag will only take effect if the speed is
17415          * PAM4.  If this flag and fec_rs272_ieee_enable are set, the
17416          * HWRM shall choose one of the RS272 modes.  Note that RS272
17417          * and RS544 modes cannot be set at the same time in forced FEC mode.
17418          * When set to 0, then this flag shall be ignored.
17419          * If FEC RS272_1XN is not supported, then the HWRM shall ignore this
17420          * flag.
17421          */
17422         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS272_1XN_ENABLE \
17423                 UINT32_C(0x80000)
17424         /*
17425          * When set to 1, then the HWRM shall disable FEC RS272_1XN
17426          * on this port if supported, by not advertising FEC RS272_1XN if
17427          * FEC autonegotiation is enabled or force disabled otherwise.
17428          * When set to 0, then this flag shall be ignored.
17429          * If FEC RS272_1XN is not supported, then the HWRM shall ignore
17430          * this flag.
17431          */
17432         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS272_1XN_DISABLE \
17433                 UINT32_C(0x100000)
17434         /*
17435          * When set to 1, then the HWRM shall enable FEC RS(272,257)
17436          * on this port if supported, by advertising FEC RS(272,257) if
17437          * FEC autonegotiation is enabled or force enabled otherwise.
17438          * In forced mode, this flag will only take effect if the speed is
17439          * PAM4.  If this flag and fec_rs272_1xn_enable are set, the
17440          * HWRM shall choose one of the RS272 modes.  Note that RS272
17441          * and RS544 modes cannot be set at the same time in forced FEC mode.
17442          * When set to 0, then this flag shall be ignored.
17443          * If FEC RS(272,257) is not supported, then the HWRM shall ignore
17444          * this flag.
17445          */
17446         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS272_IEEE_ENABLE \
17447                 UINT32_C(0x200000)
17448         /*
17449          * When set to 1, then the HWRM shall disable FEC RS(272,257)
17450          * on this port if supported, by not advertising FEC RS(272,257) if
17451          * FEC autonegotiation is enabled or force disabled otherwise.
17452          * When set to 0, then this flag shall be ignored.
17453          * If FEC RS(272,257) is not supported, then the HWRM shall ignore
17454          * this flag.
17455          */
17456         #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_RS272_IEEE_DISABLE \
17457                 UINT32_C(0x400000)
17458         uint32_t        enables;
17459         /*
17460          * This bit must be '1' for the auto_mode field to be
17461          * configured.
17462          */
17463         #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_MODE \
17464                 UINT32_C(0x1)
17465         /*
17466          * This bit must be '1' for the auto_duplex field to be
17467          * configured.
17468          */
17469         #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_DUPLEX \
17470                 UINT32_C(0x2)
17471         /*
17472          * This bit must be '1' for the auto_pause field to be
17473          * configured.
17474          */
17475         #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_PAUSE \
17476                 UINT32_C(0x4)
17477         /*
17478          * This bit must be '1' for the auto_link_speed field to be
17479          * configured.
17480          */
17481         #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_LINK_SPEED \
17482                 UINT32_C(0x8)
17483         /*
17484          * This bit must be '1' for the auto_link_speed_mask field to be
17485          * configured.
17486          */
17487         #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_LINK_SPEED_MASK \
17488                 UINT32_C(0x10)
17489         /*
17490          * This bit must be '1' for the wirespeed field to be
17491          * configured.
17492          */
17493         #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_WIRESPEED \
17494                 UINT32_C(0x20)
17495         /*
17496          * This bit must be '1' for the lpbk field to be
17497          * configured.
17498          */
17499         #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_LPBK \
17500                 UINT32_C(0x40)
17501         /*
17502          * This bit must be '1' for the preemphasis field to be
17503          * configured.
17504          */
17505         #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_PREEMPHASIS \
17506                 UINT32_C(0x80)
17507         /*
17508          * This bit must be '1' for the force_pause field to be
17509          * configured.
17510          */
17511         #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_FORCE_PAUSE \
17512                 UINT32_C(0x100)
17513         /*
17514          * This bit must be '1' for the eee_link_speed_mask field to be
17515          * configured.
17516          */
17517         #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_EEE_LINK_SPEED_MASK \
17518                 UINT32_C(0x200)
17519         /*
17520          * This bit must be '1' for the tx_lpi_timer field to be
17521          * configured.
17522          */
17523         #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_TX_LPI_TIMER \
17524                 UINT32_C(0x400)
17525         /*
17526          * This bit must be '1' for the force_pam4_link_speed field to be
17527          * configured.
17528          */
17529         #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_FORCE_PAM4_LINK_SPEED \
17530                 UINT32_C(0x800)
17531         /*
17532          * This bit must be '1' for the auto_pam4_link_speed_mask field to
17533          * be configured.
17534          */
17535         #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_PAM4_LINK_SPEED_MASK \
17536                 UINT32_C(0x1000)
17537         /* Port ID of port that is to be configured. */
17538         uint16_t        port_id;
17539         /*
17540          * This is the speed that will be used if the force
17541          * bit is '1'.  If unsupported speed is selected, an error
17542          * will be generated.
17543          */
17544         uint16_t        force_link_speed;
17545         /* 100Mb link speed */
17546         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_100MB UINT32_C(0x1)
17547         /* 1Gb link speed */
17548         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_1GB   UINT32_C(0xa)
17549         /* 2Gb link speed */
17550         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_2GB   UINT32_C(0x14)
17551         /* 25Gb link speed */
17552         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_2_5GB UINT32_C(0x19)
17553         /* 10Gb link speed */
17554         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_10GB  UINT32_C(0x64)
17555         /* 20Mb link speed */
17556         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_20GB  UINT32_C(0xc8)
17557         /* 25Gb link speed */
17558         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_25GB  UINT32_C(0xfa)
17559         /* 40Gb link speed */
17560         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_40GB  UINT32_C(0x190)
17561         /* 50Gb link speed */
17562         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_50GB  UINT32_C(0x1f4)
17563         /* 100Gb link speed */
17564         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_100GB UINT32_C(0x3e8)
17565         /* 10Mb link speed */
17566         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_10MB  UINT32_C(0xffff)
17567         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_LAST \
17568                 HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_10MB
17569         /*
17570          * This value is used to identify what autoneg mode is
17571          * used when the link speed is not being forced.
17572          */
17573         uint8_t auto_mode;
17574         /* Disable autoneg or autoneg disabled. No speeds are selected. */
17575         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_NONE         UINT32_C(0x0)
17576         /* Select all possible speeds for autoneg mode. */
17577         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_ALL_SPEEDS   UINT32_C(0x1)
17578         /*
17579          * Select only the auto_link_speed speed for autoneg mode. This mode has
17580          * been DEPRECATED. An HWRM client should not use this mode.
17581          */
17582         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_ONE_SPEED    UINT32_C(0x2)
17583         /*
17584          * Select the auto_link_speed or any speed below that speed for autoneg.
17585          * This mode has been DEPRECATED. An HWRM client should not use this mode.
17586          */
17587         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_ONE_OR_BELOW UINT32_C(0x3)
17588         /*
17589          * Select the speeds based on the corresponding link speed mask values
17590          * that are provided. The included speeds are specified in the
17591          * auto_link_speed and auto_pam4_link_speed fields.
17592          */
17593         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_SPEED_MASK   UINT32_C(0x4)
17594         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_LAST \
17595                 HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_SPEED_MASK
17596         /*
17597          * This is the duplex setting that will be used if the autoneg_mode
17598          * is "one_speed" or "one_or_below".
17599          */
17600         uint8_t auto_duplex;
17601         /* Half Duplex will be requested. */
17602         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_HALF UINT32_C(0x0)
17603         /* Full duplex will be requested. */
17604         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_FULL UINT32_C(0x1)
17605         /* Both Half and Full dupex will be requested. */
17606         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_BOTH UINT32_C(0x2)
17607         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_LAST \
17608                 HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_BOTH
17609         /*
17610          * This value is used to configure the pause that will be
17611          * used for autonegotiation.
17612          * Add text on the usage of auto_pause and force_pause.
17613          */
17614         uint8_t auto_pause;
17615         /*
17616          * When this bit is '1', Generation of tx pause messages
17617          * has been requested. Disabled otherwise.
17618          */
17619         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_PAUSE_TX \
17620                 UINT32_C(0x1)
17621         /*
17622          * When this bit is '1', Reception of rx pause messages
17623          * has been requested. Disabled otherwise.
17624          */
17625         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_PAUSE_RX \
17626                 UINT32_C(0x2)
17627         /*
17628          * When set to 1, the advertisement of pause is enabled.
17629          *
17630          * # When the auto_mode is not set to none and this flag is
17631          * set to 1, then the auto_pause bits on this port are being
17632          * advertised and autoneg pause results are being interpreted.
17633          * # When the auto_mode is not set to none and this
17634          * flag is set to 0, the pause is forced as indicated in
17635          * force_pause, and also advertised as auto_pause bits, but
17636          * the autoneg results are not interpreted since the pause
17637          * configuration is being forced.
17638          * # When the auto_mode is set to none and this flag is set to
17639          * 1, auto_pause bits should be ignored and should be set to 0.
17640          */
17641         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_PAUSE_AUTONEG_PAUSE \
17642                 UINT32_C(0x4)
17643         uint8_t unused_0;
17644         /*
17645          * This is the speed that will be used if the autoneg_mode
17646          * is "one_speed" or "one_or_below".  If an unsupported speed
17647          * is selected, an error will be generated.
17648          */
17649         uint16_t        auto_link_speed;
17650         /* 100Mb link speed */
17651         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_100MB UINT32_C(0x1)
17652         /* 1Gb link speed */
17653         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_1GB   UINT32_C(0xa)
17654         /* 2Gb link speed */
17655         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_2GB   UINT32_C(0x14)
17656         /* 25Gb link speed */
17657         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_2_5GB UINT32_C(0x19)
17658         /* 10Gb link speed */
17659         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_10GB  UINT32_C(0x64)
17660         /* 20Mb link speed */
17661         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_20GB  UINT32_C(0xc8)
17662         /* 25Gb link speed */
17663         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_25GB  UINT32_C(0xfa)
17664         /* 40Gb link speed */
17665         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_40GB  UINT32_C(0x190)
17666         /* 50Gb link speed */
17667         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_50GB  UINT32_C(0x1f4)
17668         /* 100Gb link speed */
17669         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_100GB UINT32_C(0x3e8)
17670         /* 10Mb link speed */
17671         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_10MB  UINT32_C(0xffff)
17672         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_LAST \
17673                 HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_10MB
17674         /*
17675          * This is a mask of link speeds that will be used if
17676          * autoneg_mode is "mask".  If unsupported speed is enabled
17677          * an error will be generated.
17678          */
17679         uint16_t        auto_link_speed_mask;
17680         /* 100Mb link speed (Half-duplex) */
17681         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_100MBHD \
17682                 UINT32_C(0x1)
17683         /* 100Mb link speed (Full-duplex) */
17684         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_100MB \
17685                 UINT32_C(0x2)
17686         /* 1Gb link speed (Half-duplex) */
17687         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_1GBHD \
17688                 UINT32_C(0x4)
17689         /* 1Gb link speed (Full-duplex) */
17690         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_1GB \
17691                 UINT32_C(0x8)
17692         /* 2Gb link speed */
17693         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_2GB \
17694                 UINT32_C(0x10)
17695         /* 25Gb link speed */
17696         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_2_5GB \
17697                 UINT32_C(0x20)
17698         /* 10Gb link speed */
17699         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_10GB \
17700                 UINT32_C(0x40)
17701         /* 20Gb link speed */
17702         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_20GB \
17703                 UINT32_C(0x80)
17704         /* 25Gb link speed */
17705         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_25GB \
17706                 UINT32_C(0x100)
17707         /* 40Gb link speed */
17708         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_40GB \
17709                 UINT32_C(0x200)
17710         /* 50Gb link speed */
17711         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_50GB \
17712                 UINT32_C(0x400)
17713         /* 100Gb link speed */
17714         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_100GB \
17715                 UINT32_C(0x800)
17716         /* 10Mb link speed (Half-duplex) */
17717         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_10MBHD \
17718                 UINT32_C(0x1000)
17719         /* 10Mb link speed (Full-duplex) */
17720         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_10MB \
17721                 UINT32_C(0x2000)
17722         /* This value controls the wirespeed feature. */
17723         uint8_t wirespeed;
17724         /* Wirespeed feature is disabled. */
17725         #define HWRM_PORT_PHY_CFG_INPUT_WIRESPEED_OFF UINT32_C(0x0)
17726         /* Wirespeed feature is enabled. */
17727         #define HWRM_PORT_PHY_CFG_INPUT_WIRESPEED_ON  UINT32_C(0x1)
17728         #define HWRM_PORT_PHY_CFG_INPUT_WIRESPEED_LAST \
17729                 HWRM_PORT_PHY_CFG_INPUT_WIRESPEED_ON
17730         /* This value controls the loopback setting for the PHY. */
17731         uint8_t lpbk;
17732         /* No loopback is selected.  Normal operation. */
17733         #define HWRM_PORT_PHY_CFG_INPUT_LPBK_NONE     UINT32_C(0x0)
17734         /*
17735          * The HW will be configured with local loopback such that
17736          * host data is sent back to the host without modification.
17737          */
17738         #define HWRM_PORT_PHY_CFG_INPUT_LPBK_LOCAL    UINT32_C(0x1)
17739         /*
17740          * The HW will be configured with remote loopback such that
17741          * port logic will send packets back out the transmitter that
17742          * are received.
17743          */
17744         #define HWRM_PORT_PHY_CFG_INPUT_LPBK_REMOTE   UINT32_C(0x2)
17745         /*
17746          * The HW will be configured with external loopback such that
17747          * host data is sent on the transmitter and based on the external
17748          * loopback connection the data will be received without modification.
17749          */
17750         #define HWRM_PORT_PHY_CFG_INPUT_LPBK_EXTERNAL UINT32_C(0x3)
17751         #define HWRM_PORT_PHY_CFG_INPUT_LPBK_LAST \
17752                 HWRM_PORT_PHY_CFG_INPUT_LPBK_EXTERNAL
17753         /*
17754          * This value is used to configure the pause that will be
17755          * used for force mode.
17756          */
17757         uint8_t force_pause;
17758         /*
17759          * When this bit is '1', Generation of tx pause messages
17760          * is supported. Disabled otherwise.
17761          */
17762         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAUSE_TX     UINT32_C(0x1)
17763         /*
17764          * When this bit is '1', Reception of rx pause messages
17765          * is supported. Disabled otherwise.
17766          */
17767         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAUSE_RX     UINT32_C(0x2)
17768         uint8_t unused_1;
17769         /*
17770          * This value controls the pre-emphasis to be used for the
17771          * link.  Driver should not set this value (use
17772          * enable.preemphasis = 0) unless driver is sure of setting.
17773          * Normally HWRM FW will determine proper pre-emphasis.
17774          */
17775         uint32_t        preemphasis;
17776         /*
17777          * Setting for link speed mask that is used to
17778          * advertise speeds during autonegotiation when EEE is enabled.
17779          * This field is valid only when EEE is enabled.
17780          * The speeds specified in this field shall be a subset of
17781          * speeds specified in auto_link_speed_mask.
17782          * If EEE is enabled,then at least one speed shall be provided
17783          * in this mask.
17784          */
17785         uint16_t        eee_link_speed_mask;
17786         /* Reserved */
17787         #define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD1 \
17788                 UINT32_C(0x1)
17789         /* 100Mb link speed (Full-duplex) */
17790         #define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_100MB \
17791                 UINT32_C(0x2)
17792         /* Reserved */
17793         #define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD2 \
17794                 UINT32_C(0x4)
17795         /* 1Gb link speed (Full-duplex) */
17796         #define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_1GB \
17797                 UINT32_C(0x8)
17798         /* Reserved */
17799         #define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD3 \
17800                 UINT32_C(0x10)
17801         /* Reserved */
17802         #define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD4 \
17803                 UINT32_C(0x20)
17804         /* 10Gb link speed */
17805         #define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_10GB \
17806                 UINT32_C(0x40)
17807         /*
17808          * This is the speed that will be used if the force and force_pam4
17809          * bits are '1'.  If unsupported speed is selected, an error
17810          * will be generated.
17811          */
17812         uint16_t        force_pam4_link_speed;
17813         /* 50Gb link speed */
17814         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAM4_LINK_SPEED_50GB \
17815                 UINT32_C(0x1f4)
17816         /* 100Gb link speed */
17817         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAM4_LINK_SPEED_100GB \
17818                 UINT32_C(0x3e8)
17819         /* 200Gb link speed */
17820         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAM4_LINK_SPEED_200GB \
17821                 UINT32_C(0x7d0)
17822         #define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAM4_LINK_SPEED_LAST \
17823                 HWRM_PORT_PHY_CFG_INPUT_FORCE_PAM4_LINK_SPEED_200GB
17824         /*
17825          * Requested setting of TX LPI timer in microseconds.
17826          * This field is valid only when EEE is enabled and TX LPI is
17827          * enabled.
17828          */
17829         uint32_t        tx_lpi_timer;
17830         #define HWRM_PORT_PHY_CFG_INPUT_TX_LPI_TIMER_MASK UINT32_C(0xffffff)
17831         #define HWRM_PORT_PHY_CFG_INPUT_TX_LPI_TIMER_SFT 0
17832         /* This field specifies which PAM4 speeds are enabled for auto mode. */
17833         uint16_t        auto_link_pam4_speed_mask;
17834         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_PAM4_SPEED_MASK_50G \
17835                 UINT32_C(0x1)
17836         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_PAM4_SPEED_MASK_100G \
17837                 UINT32_C(0x2)
17838         #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_PAM4_SPEED_MASK_200G \
17839                 UINT32_C(0x4)
17840         uint8_t unused_2[2];
17841 } __rte_packed;
17842
17843 /* hwrm_port_phy_cfg_output (size:128b/16B) */
17844 struct hwrm_port_phy_cfg_output {
17845         /* The specific error status for the command. */
17846         uint16_t        error_code;
17847         /* The HWRM command request type. */
17848         uint16_t        req_type;
17849         /* The sequence ID from the original command. */
17850         uint16_t        seq_id;
17851         /* The length of the response data in number of bytes. */
17852         uint16_t        resp_len;
17853         uint8_t unused_0[7];
17854         /*
17855          * This field is used in Output records to indicate that the output
17856          * is completely written to RAM.  This field should be read as '1'
17857          * to indicate that the output has been completely written.
17858          * When writing a command completion or response to an internal processor,
17859          * the order of writes has to be such that this field is written last.
17860          */
17861         uint8_t valid;
17862 } __rte_packed;
17863
17864 /* hwrm_port_phy_cfg_cmd_err (size:64b/8B) */
17865 struct hwrm_port_phy_cfg_cmd_err {
17866         /*
17867          * command specific error codes that goes to
17868          * the cmd_err field in Common HWRM Error Response.
17869          */
17870         uint8_t code;
17871         /* Unknown error */
17872         #define HWRM_PORT_PHY_CFG_CMD_ERR_CODE_UNKNOWN       UINT32_C(0x0)
17873         /* Unable to complete operation due to invalid speed */
17874         #define HWRM_PORT_PHY_CFG_CMD_ERR_CODE_ILLEGAL_SPEED UINT32_C(0x1)
17875         /*
17876          * retry the command since the phy is not ready.
17877          * retry count is returned in opaque_0.
17878          * This is only valid for the first command and
17879          * this value will not change for successive calls.
17880          * but if a 0 is returned at any time then this should
17881          * be treated as an un recoverable failure,
17882          *
17883          * retry interval in milli seconds is returned in opaque_1.
17884          * This specifies the time that user should wait before
17885          * issuing the next port_phy_cfg command.
17886          */
17887         #define HWRM_PORT_PHY_CFG_CMD_ERR_CODE_RETRY         UINT32_C(0x2)
17888         #define HWRM_PORT_PHY_CFG_CMD_ERR_CODE_LAST \
17889                 HWRM_PORT_PHY_CFG_CMD_ERR_CODE_RETRY
17890         uint8_t unused_0[7];
17891 } __rte_packed;
17892
17893 /**********************
17894  * hwrm_port_phy_qcfg *
17895  **********************/
17896
17897
17898 /* hwrm_port_phy_qcfg_input (size:192b/24B) */
17899 struct hwrm_port_phy_qcfg_input {
17900         /* The HWRM command request type. */
17901         uint16_t        req_type;
17902         /*
17903          * The completion ring to send the completion event on. This should
17904          * be the NQ ID returned from the `nq_alloc` HWRM command.
17905          */
17906         uint16_t        cmpl_ring;
17907         /*
17908          * The sequence ID is used by the driver for tracking multiple
17909          * commands. This ID is treated as opaque data by the firmware and
17910          * the value is returned in the `hwrm_resp_hdr` upon completion.
17911          */
17912         uint16_t        seq_id;
17913         /*
17914          * The target ID of the command:
17915          * * 0x0-0xFFF8 - The function ID
17916          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
17917          * * 0xFFFD - Reserved for user-space HWRM interface
17918          * * 0xFFFF - HWRM
17919          */
17920         uint16_t        target_id;
17921         /*
17922          * A physical address pointer pointing to a host buffer that the
17923          * command's response data will be written. This can be either a host
17924          * physical address (HPA) or a guest physical address (GPA) and must
17925          * point to a physically contiguous block of memory.
17926          */
17927         uint64_t        resp_addr;
17928         /* Port ID of port that is to be queried. */
17929         uint16_t        port_id;
17930         uint8_t unused_0[6];
17931 } __rte_packed;
17932
17933 /* hwrm_port_phy_qcfg_output (size:768b/96B) */
17934 struct hwrm_port_phy_qcfg_output {
17935         /* The specific error status for the command. */
17936         uint16_t        error_code;
17937         /* The HWRM command request type. */
17938         uint16_t        req_type;
17939         /* The sequence ID from the original command. */
17940         uint16_t        seq_id;
17941         /* The length of the response data in number of bytes. */
17942         uint16_t        resp_len;
17943         /* This value indicates the current link status. */
17944         uint8_t link;
17945         /* There is no link or cable detected. */
17946         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_NO_LINK UINT32_C(0x0)
17947         /* There is no link, but a cable has been detected. */
17948         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SIGNAL  UINT32_C(0x1)
17949         /* There is a link. */
17950         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_LINK    UINT32_C(0x2)
17951         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_LAST \
17952                 HWRM_PORT_PHY_QCFG_OUTPUT_LINK_LINK
17953         uint8_t active_fec_signal_mode;
17954         /*
17955          * This value indicates the current link signaling mode of the
17956          * connection.
17957          */
17958         #define HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_MASK \
17959                 UINT32_C(0xf)
17960         #define HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_SFT                 0
17961         /* NRZ signaling */
17962         #define HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_NRZ \
17963                 UINT32_C(0x0)
17964         /* PAM4 signaling */
17965         #define HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_PAM4 \
17966                 UINT32_C(0x1)
17967         #define HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_LAST \
17968                 HWRM_PORT_PHY_QCFG_OUTPUT_SIGNAL_MODE_PAM4
17969         /* This value indicates the current active FEC mode. */
17970         #define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_MASK \
17971                 UINT32_C(0xf0)
17972         #define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_SFT                  4
17973         /* No active FEC */
17974         #define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_NONE_ACTIVE \
17975                 (UINT32_C(0x0) << 4)
17976         /* FEC CLAUSE 74 (Fire Code) active, autonegotiated or forced. */
17977         #define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_CLAUSE74_ACTIVE \
17978                 (UINT32_C(0x1) << 4)
17979         /* FEC CLAUSE 91 RS(528,514) active, autonegoatiated or forced. */
17980         #define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_CLAUSE91_ACTIVE \
17981                 (UINT32_C(0x2) << 4)
17982         /* FEC RS544_1XN active, autonegoatiated or forced. */
17983         #define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_RS544_1XN_ACTIVE \
17984                 (UINT32_C(0x3) << 4)
17985         /* FEC RS(544,528) active, autonegoatiated or forced. */
17986         #define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_RS544_IEEE_ACTIVE \
17987                 (UINT32_C(0x4) << 4)
17988         /* FEC RS272_1XN active, autonegotiated or forced. */
17989         #define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_RS272_1XN_ACTIVE \
17990                 (UINT32_C(0x5) << 4)
17991         /* FEC RS(272,257) active, autonegoatiated or forced. */
17992         #define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_RS272_IEEE_ACTIVE \
17993                 (UINT32_C(0x6) << 4)
17994         #define HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_LAST \
17995                 HWRM_PORT_PHY_QCFG_OUTPUT_ACTIVE_FEC_FEC_RS272_IEEE_ACTIVE
17996         /*
17997          * This value indicates the current link speed of the connection.
17998          * The signal_mode field indicates if the link is using
17999          * NRZ or PAM4 signaling.
18000          */
18001         uint16_t        link_speed;
18002         /* 100Mb link speed */
18003         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_100MB UINT32_C(0x1)
18004         /* 1Gb link speed */
18005         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_1GB   UINT32_C(0xa)
18006         /* 2Gb link speed */
18007         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_2GB   UINT32_C(0x14)
18008         /* 25Gb link speed */
18009         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_2_5GB UINT32_C(0x19)
18010         /* 10Gb link speed */
18011         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_10GB  UINT32_C(0x64)
18012         /* 20Mb link speed */
18013         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_20GB  UINT32_C(0xc8)
18014         /* 25Gb link speed */
18015         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_25GB  UINT32_C(0xfa)
18016         /* 40Gb link speed */
18017         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_40GB  UINT32_C(0x190)
18018         /* 50Gb link speed */
18019         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_50GB  UINT32_C(0x1f4)
18020         /* 100Gb link speed */
18021         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_100GB UINT32_C(0x3e8)
18022         /* 200Gb link speed */
18023         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_200GB UINT32_C(0x7d0)
18024         /* 10Mb link speed */
18025         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_10MB  UINT32_C(0xffff)
18026         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_LAST \
18027                 HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_10MB
18028         /*
18029          * This value is indicates the duplex of the current
18030          * configuration.
18031          */
18032         uint8_t duplex_cfg;
18033         /* Half Duplex connection. */
18034         #define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_CFG_HALF UINT32_C(0x0)
18035         /* Full duplex connection. */
18036         #define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_CFG_FULL UINT32_C(0x1)
18037         #define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_CFG_LAST \
18038                 HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_CFG_FULL
18039         /*
18040          * This value is used to indicate the current
18041          * pause configuration. When autoneg is enabled, this value
18042          * represents the autoneg results of pause configuration.
18043          */
18044         uint8_t pause;
18045         /*
18046          * When this bit is '1', Generation of tx pause messages
18047          * is supported. Disabled otherwise.
18048          */
18049         #define HWRM_PORT_PHY_QCFG_OUTPUT_PAUSE_TX     UINT32_C(0x1)
18050         /*
18051          * When this bit is '1', Reception of rx pause messages
18052          * is supported. Disabled otherwise.
18053          */
18054         #define HWRM_PORT_PHY_QCFG_OUTPUT_PAUSE_RX     UINT32_C(0x2)
18055         /*
18056          * The supported speeds for the port. This is a bit mask.
18057          * For each speed that is supported, the corresponding
18058          * bit will be set to '1'.
18059          */
18060         uint16_t        support_speeds;
18061         /* 100Mb link speed (Half-duplex) */
18062         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_100MBHD \
18063                 UINT32_C(0x1)
18064         /* 100Mb link speed (Full-duplex) */
18065         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_100MB \
18066                 UINT32_C(0x2)
18067         /* 1Gb link speed (Half-duplex) */
18068         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_1GBHD \
18069                 UINT32_C(0x4)
18070         /* 1Gb link speed (Full-duplex) */
18071         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_1GB \
18072                 UINT32_C(0x8)
18073         /* 2Gb link speed */
18074         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_2GB \
18075                 UINT32_C(0x10)
18076         /* 25Gb link speed */
18077         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_2_5GB \
18078                 UINT32_C(0x20)
18079         /* 10Gb link speed */
18080         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_10GB \
18081                 UINT32_C(0x40)
18082         /* 20Gb link speed */
18083         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_20GB \
18084                 UINT32_C(0x80)
18085         /* 25Gb link speed */
18086         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_25GB \
18087                 UINT32_C(0x100)
18088         /* 40Gb link speed */
18089         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_40GB \
18090                 UINT32_C(0x200)
18091         /* 50Gb link speed */
18092         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_50GB \
18093                 UINT32_C(0x400)
18094         /* 100Gb link speed */
18095         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_100GB \
18096                 UINT32_C(0x800)
18097         /* 10Mb link speed (Half-duplex) */
18098         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_10MBHD \
18099                 UINT32_C(0x1000)
18100         /* 10Mb link speed (Full-duplex) */
18101         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_10MB \
18102                 UINT32_C(0x2000)
18103         /*
18104          * Current setting of forced link speed.
18105          * When the link speed is not being forced, this
18106          * value shall be set to 0.
18107          */
18108         uint16_t        force_link_speed;
18109         /* 100Mb link speed */
18110         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_100MB UINT32_C(0x1)
18111         /* 1Gb link speed */
18112         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_1GB   UINT32_C(0xa)
18113         /* 2Gb link speed */
18114         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_2GB   UINT32_C(0x14)
18115         /* 25Gb link speed */
18116         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_2_5GB UINT32_C(0x19)
18117         /* 10Gb link speed */
18118         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_10GB  UINT32_C(0x64)
18119         /* 20Mb link speed */
18120         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_20GB  UINT32_C(0xc8)
18121         /* 25Gb link speed */
18122         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_25GB  UINT32_C(0xfa)
18123         /* 40Gb link speed */
18124         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_40GB \
18125                 UINT32_C(0x190)
18126         /* 50Gb link speed */
18127         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_50GB \
18128                 UINT32_C(0x1f4)
18129         /* 100Gb link speed */
18130         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_100GB \
18131                 UINT32_C(0x3e8)
18132         /* 10Mb link speed */
18133         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_10MB \
18134                 UINT32_C(0xffff)
18135         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_LAST \
18136                 HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_10MB
18137         /* Current setting of auto negotiation mode. */
18138         uint8_t auto_mode;
18139         /* Disable autoneg or autoneg disabled. No speeds are selected. */
18140         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_NONE         UINT32_C(0x0)
18141         /* Select all possible speeds for autoneg mode. */
18142         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_ALL_SPEEDS   UINT32_C(0x1)
18143         /*
18144          * Select only the auto_link_speed speed for autoneg mode. This mode has
18145          * been DEPRECATED. An HWRM client should not use this mode.
18146          */
18147         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_ONE_SPEED    UINT32_C(0x2)
18148         /*
18149          * Select the auto_link_speed or any speed below that speed for autoneg.
18150          * This mode has been DEPRECATED. An HWRM client should not use this mode.
18151          */
18152         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_ONE_OR_BELOW UINT32_C(0x3)
18153         /*
18154          * Select the speeds based on the corresponding link speed mask value
18155          * that is provided.
18156          */
18157         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_SPEED_MASK   UINT32_C(0x4)
18158         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_LAST \
18159                 HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_SPEED_MASK
18160         /*
18161          * Current setting of pause autonegotiation.
18162          * Move autoneg_pause flag here.
18163          */
18164         uint8_t auto_pause;
18165         /*
18166          * When this bit is '1', Generation of tx pause messages
18167          * has been requested. Disabled otherwise.
18168          */
18169         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAUSE_TX \
18170                 UINT32_C(0x1)
18171         /*
18172          * When this bit is '1', Reception of rx pause messages
18173          * has been requested. Disabled otherwise.
18174          */
18175         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAUSE_RX \
18176                 UINT32_C(0x2)
18177         /*
18178          * When set to 1, the advertisement of pause is enabled.
18179          *
18180          * # When the auto_mode is not set to none and this flag is
18181          * set to 1, then the auto_pause bits on this port are being
18182          * advertised and autoneg pause results are being interpreted.
18183          * # When the auto_mode is not set to none and this
18184          * flag is set to 0, the pause is forced as indicated in
18185          * force_pause, and also advertised as auto_pause bits, but
18186          * the autoneg results are not interpreted since the pause
18187          * configuration is being forced.
18188          * # When the auto_mode is set to none and this flag is set to
18189          * 1, auto_pause bits should be ignored and should be set to 0.
18190          */
18191         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAUSE_AUTONEG_PAUSE \
18192                 UINT32_C(0x4)
18193         /*
18194          * Current setting for auto_link_speed. This field is only
18195          * valid when auto_mode is set to "one_speed" or "one_or_below".
18196          */
18197         uint16_t        auto_link_speed;
18198         /* 100Mb link speed */
18199         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_100MB UINT32_C(0x1)
18200         /* 1Gb link speed */
18201         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_1GB   UINT32_C(0xa)
18202         /* 2Gb link speed */
18203         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_2GB   UINT32_C(0x14)
18204         /* 25Gb link speed */
18205         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_2_5GB UINT32_C(0x19)
18206         /* 10Gb link speed */
18207         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_10GB  UINT32_C(0x64)
18208         /* 20Mb link speed */
18209         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_20GB  UINT32_C(0xc8)
18210         /* 25Gb link speed */
18211         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_25GB  UINT32_C(0xfa)
18212         /* 40Gb link speed */
18213         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_40GB  UINT32_C(0x190)
18214         /* 50Gb link speed */
18215         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_50GB  UINT32_C(0x1f4)
18216         /* 100Gb link speed */
18217         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_100GB UINT32_C(0x3e8)
18218         /* 10Mb link speed */
18219         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_10MB \
18220                 UINT32_C(0xffff)
18221         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_LAST \
18222                 HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_10MB
18223         /*
18224          * Current setting for auto_link_speed_mask that is used to
18225          * advertise speeds during autonegotiation.
18226          * This field is only valid when auto_mode is set to "mask".
18227          * The speeds specified in this field shall be a subset of
18228          * supported speeds on this port.
18229          */
18230         uint16_t        auto_link_speed_mask;
18231         /* 100Mb link speed (Half-duplex) */
18232         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_100MBHD \
18233                 UINT32_C(0x1)
18234         /* 100Mb link speed (Full-duplex) */
18235         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_100MB \
18236                 UINT32_C(0x2)
18237         /* 1Gb link speed (Half-duplex) */
18238         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_1GBHD \
18239                 UINT32_C(0x4)
18240         /* 1Gb link speed (Full-duplex) */
18241         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_1GB \
18242                 UINT32_C(0x8)
18243         /* 2Gb link speed */
18244         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_2GB \
18245                 UINT32_C(0x10)
18246         /* 25Gb link speed */
18247         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_2_5GB \
18248                 UINT32_C(0x20)
18249         /* 10Gb link speed */
18250         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_10GB \
18251                 UINT32_C(0x40)
18252         /* 20Gb link speed */
18253         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_20GB \
18254                 UINT32_C(0x80)
18255         /* 25Gb link speed */
18256         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_25GB \
18257                 UINT32_C(0x100)
18258         /* 40Gb link speed */
18259         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_40GB \
18260                 UINT32_C(0x200)
18261         /* 50Gb link speed */
18262         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_50GB \
18263                 UINT32_C(0x400)
18264         /* 100Gb link speed */
18265         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_100GB \
18266                 UINT32_C(0x800)
18267         /* 10Mb link speed (Half-duplex) */
18268         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_10MBHD \
18269                 UINT32_C(0x1000)
18270         /* 10Mb link speed (Full-duplex) */
18271         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_10MB \
18272                 UINT32_C(0x2000)
18273         /* Current setting for wirespeed. */
18274         uint8_t wirespeed;
18275         /* Wirespeed feature is disabled. */
18276         #define HWRM_PORT_PHY_QCFG_OUTPUT_WIRESPEED_OFF UINT32_C(0x0)
18277         /* Wirespeed feature is enabled. */
18278         #define HWRM_PORT_PHY_QCFG_OUTPUT_WIRESPEED_ON  UINT32_C(0x1)
18279         #define HWRM_PORT_PHY_QCFG_OUTPUT_WIRESPEED_LAST \
18280                 HWRM_PORT_PHY_QCFG_OUTPUT_WIRESPEED_ON
18281         /* Current setting for loopback. */
18282         uint8_t lpbk;
18283         /* No loopback is selected.  Normal operation. */
18284         #define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_NONE     UINT32_C(0x0)
18285         /*
18286          * The HW will be configured with local loopback such that
18287          * host data is sent back to the host without modification.
18288          */
18289         #define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_LOCAL    UINT32_C(0x1)
18290         /*
18291          * The HW will be configured with remote loopback such that
18292          * port logic will send packets back out the transmitter that
18293          * are received.
18294          */
18295         #define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_REMOTE   UINT32_C(0x2)
18296         /*
18297          * The HW will be configured with external loopback such that
18298          * host data is sent on the transmitter and based on the external
18299          * loopback connection the data will be received without modification.
18300          */
18301         #define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_EXTERNAL UINT32_C(0x3)
18302         #define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_LAST \
18303                 HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_EXTERNAL
18304         /*
18305          * Current setting of forced pause.
18306          * When the pause configuration is not being forced, then
18307          * this value shall be set to 0.
18308          */
18309         uint8_t force_pause;
18310         /*
18311          * When this bit is '1', Generation of tx pause messages
18312          * is supported. Disabled otherwise.
18313          */
18314         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAUSE_TX     UINT32_C(0x1)
18315         /*
18316          * When this bit is '1', Reception of rx pause messages
18317          * is supported. Disabled otherwise.
18318          */
18319         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAUSE_RX     UINT32_C(0x2)
18320         /*
18321          * This value indicates the current status of the optics module on
18322          * this port.
18323          */
18324         uint8_t module_status;
18325         /* Module is inserted and accepted */
18326         #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NONE \
18327                 UINT32_C(0x0)
18328         /* Module is rejected and transmit side Laser is disabled. */
18329         #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_DISABLETX \
18330                 UINT32_C(0x1)
18331         /* Module mismatch warning. */
18332         #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_WARNINGMSG \
18333                 UINT32_C(0x2)
18334         /* Module is rejected and powered down. */
18335         #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_PWRDOWN \
18336                 UINT32_C(0x3)
18337         /* Module is not inserted. */
18338         #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NOTINSERTED \
18339                 UINT32_C(0x4)
18340         /* Module is powered down because of over current fault. */
18341         #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_CURRENTFAULT \
18342                 UINT32_C(0x5)
18343         /* Module status is not applicable. */
18344         #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NOTAPPLICABLE \
18345                 UINT32_C(0xff)
18346         #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_LAST \
18347                 HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NOTAPPLICABLE
18348         /* Current setting for preemphasis. */
18349         uint32_t        preemphasis;
18350         /* This field represents the major version of the PHY. */
18351         uint8_t phy_maj;
18352         /* This field represents the minor version of the PHY. */
18353         uint8_t phy_min;
18354         /* This field represents the build version of the PHY. */
18355         uint8_t phy_bld;
18356         /* This value represents a PHY type. */
18357         uint8_t phy_type;
18358         /* Unknown */
18359         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_UNKNOWN \
18360                 UINT32_C(0x0)
18361         /* BASE-CR */
18362         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASECR \
18363                 UINT32_C(0x1)
18364         /* BASE-KR4 (Deprecated) */
18365         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR4 \
18366                 UINT32_C(0x2)
18367         /* BASE-LR */
18368         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASELR \
18369                 UINT32_C(0x3)
18370         /* BASE-SR */
18371         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASESR \
18372                 UINT32_C(0x4)
18373         /* BASE-KR2 (Deprecated) */
18374         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR2 \
18375                 UINT32_C(0x5)
18376         /* BASE-KX */
18377         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKX \
18378                 UINT32_C(0x6)
18379         /* BASE-KR */
18380         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR \
18381                 UINT32_C(0x7)
18382         /* BASE-T */
18383         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASET \
18384                 UINT32_C(0x8)
18385         /* EEE capable BASE-T */
18386         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASETE \
18387                 UINT32_C(0x9)
18388         /* SGMII connected external PHY */
18389         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_SGMIIEXTPHY \
18390                 UINT32_C(0xa)
18391         /* 25G_BASECR_CA_L */
18392         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASECR_CA_L \
18393                 UINT32_C(0xb)
18394         /* 25G_BASECR_CA_S */
18395         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASECR_CA_S \
18396                 UINT32_C(0xc)
18397         /* 25G_BASECR_CA_N */
18398         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASECR_CA_N \
18399                 UINT32_C(0xd)
18400         /* 25G_BASESR */
18401         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASESR \
18402                 UINT32_C(0xe)
18403         /* 100G_BASECR4 */
18404         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASECR4 \
18405                 UINT32_C(0xf)
18406         /* 100G_BASESR4 */
18407         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASESR4 \
18408                 UINT32_C(0x10)
18409         /* 100G_BASELR4 */
18410         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASELR4 \
18411                 UINT32_C(0x11)
18412         /* 100G_BASEER4 */
18413         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASEER4 \
18414                 UINT32_C(0x12)
18415         /* 100G_BASESR10 */
18416         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASESR10 \
18417                 UINT32_C(0x13)
18418         /* 40G_BASECR4 */
18419         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASECR4 \
18420                 UINT32_C(0x14)
18421         /* 40G_BASESR4 */
18422         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASESR4 \
18423                 UINT32_C(0x15)
18424         /* 40G_BASELR4 */
18425         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASELR4 \
18426                 UINT32_C(0x16)
18427         /* 40G_BASEER4 */
18428         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASEER4 \
18429                 UINT32_C(0x17)
18430         /* 40G_ACTIVE_CABLE */
18431         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_ACTIVE_CABLE \
18432                 UINT32_C(0x18)
18433         /* 1G_baseT */
18434         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_1G_BASET \
18435                 UINT32_C(0x19)
18436         /* 1G_baseSX */
18437         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_1G_BASESX \
18438                 UINT32_C(0x1a)
18439         /* 1G_baseCX */
18440         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_1G_BASECX \
18441                 UINT32_C(0x1b)
18442         /* 100G_BASECR4 */
18443         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_200G_BASECR4 \
18444                 UINT32_C(0x1c)
18445         /* 100G_BASESR4 */
18446         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_200G_BASESR4 \
18447                 UINT32_C(0x1d)
18448         /* 100G_BASELR4 */
18449         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_200G_BASELR4 \
18450                 UINT32_C(0x1e)
18451         /* 100G_BASEER4 */
18452         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_200G_BASEER4 \
18453                 UINT32_C(0x1f)
18454         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_LAST \
18455                 HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_200G_BASEER4
18456         /* This value represents a media type. */
18457         uint8_t media_type;
18458         /* Unknown */
18459         #define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_UNKNOWN UINT32_C(0x0)
18460         /* Twisted Pair */
18461         #define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_TP      UINT32_C(0x1)
18462         /* Direct Attached Copper */
18463         #define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_DAC     UINT32_C(0x2)
18464         /* Fiber */
18465         #define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_FIBRE   UINT32_C(0x3)
18466         #define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_LAST \
18467                 HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_FIBRE
18468         /* This value represents a transceiver type. */
18469         uint8_t xcvr_pkg_type;
18470         /* PHY and MAC are in the same package */
18471         #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_PKG_TYPE_XCVR_INTERNAL \
18472                 UINT32_C(0x1)
18473         /* PHY and MAC are in different packages */
18474         #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_PKG_TYPE_XCVR_EXTERNAL \
18475                 UINT32_C(0x2)
18476         #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_PKG_TYPE_LAST \
18477                 HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_PKG_TYPE_XCVR_EXTERNAL
18478         uint8_t eee_config_phy_addr;
18479         /* This field represents PHY address. */
18480         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_ADDR_MASK \
18481                 UINT32_C(0x1f)
18482         #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_ADDR_SFT               0
18483         /*
18484          * This field represents flags related to EEE configuration.
18485          * These EEE configuration flags are valid only when the
18486          * auto_mode is not set to none (in other words autonegotiation
18487          * is enabled).
18488          */
18489         #define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_MASK \
18490                 UINT32_C(0xe0)
18491         #define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_SFT             5
18492         /*
18493          * When set to 1, Energy Efficient Ethernet (EEE) mode is enabled.
18494          * Speeds for autoneg with EEE mode enabled
18495          * are based on eee_link_speed_mask.
18496          */
18497         #define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_EEE_ENABLED \
18498                 UINT32_C(0x20)
18499         /*
18500          * This flag is valid only when eee_enabled is set to 1.
18501          *
18502          * # If eee_enabled is set to 0, then EEE mode is disabled
18503          * and this flag shall be ignored.
18504          * # If eee_enabled is set to 1 and this flag is set to 1,
18505          * then Energy Efficient Ethernet (EEE) mode is enabled
18506          * and in use.
18507          * # If eee_enabled is set to 1 and this flag is set to 0,
18508          * then Energy Efficient Ethernet (EEE) mode is enabled
18509          * but is currently not in use.
18510          */
18511         #define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_EEE_ACTIVE \
18512                 UINT32_C(0x40)
18513         /*
18514          * This flag is valid only when eee_enabled is set to 1.
18515          *
18516          * # If eee_enabled is set to 0, then EEE mode is disabled
18517          * and this flag shall be ignored.
18518          * # If eee_enabled is set to 1 and this flag is set to 1,
18519          * then Energy Efficient Ethernet (EEE) mode is enabled
18520          * and TX LPI is enabled.
18521          * # If eee_enabled is set to 1 and this flag is set to 0,
18522          * then Energy Efficient Ethernet (EEE) mode is enabled
18523          * but TX LPI is disabled.
18524          */
18525         #define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_EEE_TX_LPI \
18526                 UINT32_C(0x80)
18527         /*
18528          * When set to 1, the parallel detection is used to determine
18529          * the speed of the link partner.
18530          *
18531          * Parallel detection is used when a autonegotiation capable
18532          * device is connected to a link parter that is not capable
18533          * of autonegotiation.
18534          */
18535         uint8_t parallel_detect;
18536         /*
18537          * When set to 1, the parallel detection is used to determine
18538          * the speed of the link partner.
18539          *
18540          * Parallel detection is used when a autonegotiation capable
18541          * device is connected to a link parter that is not capable
18542          * of autonegotiation.
18543          */
18544         #define HWRM_PORT_PHY_QCFG_OUTPUT_PARALLEL_DETECT     UINT32_C(0x1)
18545         /*
18546          * The advertised speeds for the port by the link partner.
18547          * Each advertised speed will be set to '1'.
18548          */
18549         uint16_t        link_partner_adv_speeds;
18550         /* 100Mb link speed (Half-duplex) */
18551         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_100MBHD \
18552                 UINT32_C(0x1)
18553         /* 100Mb link speed (Full-duplex) */
18554         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_100MB \
18555                 UINT32_C(0x2)
18556         /* 1Gb link speed (Half-duplex) */
18557         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_1GBHD \
18558                 UINT32_C(0x4)
18559         /* 1Gb link speed (Full-duplex) */
18560         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_1GB \
18561                 UINT32_C(0x8)
18562         /* 2Gb link speed */
18563         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_2GB \
18564                 UINT32_C(0x10)
18565         /* 25Gb link speed */
18566         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_2_5GB \
18567                 UINT32_C(0x20)
18568         /* 10Gb link speed */
18569         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_10GB \
18570                 UINT32_C(0x40)
18571         /* 20Gb link speed */
18572         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_20GB \
18573                 UINT32_C(0x80)
18574         /* 25Gb link speed */
18575         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_25GB \
18576                 UINT32_C(0x100)
18577         /* 40Gb link speed */
18578         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_40GB \
18579                 UINT32_C(0x200)
18580         /* 50Gb link speed */
18581         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_50GB \
18582                 UINT32_C(0x400)
18583         /* 100Gb link speed */
18584         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_100GB \
18585                 UINT32_C(0x800)
18586         /* 10Mb link speed (Half-duplex) */
18587         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_10MBHD \
18588                 UINT32_C(0x1000)
18589         /* 10Mb link speed (Full-duplex) */
18590         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_10MB \
18591                 UINT32_C(0x2000)
18592         /*
18593          * The advertised autoneg for the port by the link partner.
18594          * This field is deprecated and should be set to 0.
18595          */
18596         uint8_t link_partner_adv_auto_mode;
18597         /* Disable autoneg or autoneg disabled. No speeds are selected. */
18598         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_NONE \
18599                 UINT32_C(0x0)
18600         /* Select all possible speeds for autoneg mode. */
18601         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_ALL_SPEEDS \
18602                 UINT32_C(0x1)
18603         /*
18604          * Select only the auto_link_speed speed for autoneg mode. This mode has
18605          * been DEPRECATED. An HWRM client should not use this mode.
18606          */
18607         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_ONE_SPEED \
18608                 UINT32_C(0x2)
18609         /*
18610          * Select the auto_link_speed or any speed below that speed for autoneg.
18611          * This mode has been DEPRECATED. An HWRM client should not use this mode.
18612          */
18613         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_ONE_OR_BELOW \
18614                 UINT32_C(0x3)
18615         /*
18616          * Select the speeds based on the corresponding link speed mask value
18617          * that is provided.
18618          */
18619         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_SPEED_MASK \
18620                 UINT32_C(0x4)
18621         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_LAST \
18622                 HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_SPEED_MASK
18623         /* The advertised pause settings on the port by the link partner. */
18624         uint8_t link_partner_adv_pause;
18625         /*
18626          * When this bit is '1', Generation of tx pause messages
18627          * is supported. Disabled otherwise.
18628          */
18629         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_PAUSE_TX \
18630                 UINT32_C(0x1)
18631         /*
18632          * When this bit is '1', Reception of rx pause messages
18633          * is supported. Disabled otherwise.
18634          */
18635         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_PAUSE_RX \
18636                 UINT32_C(0x2)
18637         /*
18638          * Current setting for link speed mask that is used to
18639          * advertise speeds during autonegotiation when EEE is enabled.
18640          * This field is valid only when eee_enabled flags is set to 1.
18641          * The speeds specified in this field shall be a subset of
18642          * speeds specified in auto_link_speed_mask.
18643          */
18644         uint16_t        adv_eee_link_speed_mask;
18645         /* Reserved */
18646         #define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD1 \
18647                 UINT32_C(0x1)
18648         /* 100Mb link speed (Full-duplex) */
18649         #define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_100MB \
18650                 UINT32_C(0x2)
18651         /* Reserved */
18652         #define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD2 \
18653                 UINT32_C(0x4)
18654         /* 1Gb link speed (Full-duplex) */
18655         #define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_1GB \
18656                 UINT32_C(0x8)
18657         /* Reserved */
18658         #define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD3 \
18659                 UINT32_C(0x10)
18660         /* Reserved */
18661         #define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD4 \
18662                 UINT32_C(0x20)
18663         /* 10Gb link speed */
18664         #define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_10GB \
18665                 UINT32_C(0x40)
18666         /*
18667          * Current setting for link speed mask that is advertised by
18668          * the link partner when EEE is enabled.
18669          * This field is valid only when eee_enabled flags is set to 1.
18670          */
18671         uint16_t        link_partner_adv_eee_link_speed_mask;
18672         /* Reserved */
18673         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD1 \
18674                 UINT32_C(0x1)
18675         /* 100Mb link speed (Full-duplex) */
18676         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_100MB \
18677                 UINT32_C(0x2)
18678         /* Reserved */
18679         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD2 \
18680                 UINT32_C(0x4)
18681         /* 1Gb link speed (Full-duplex) */
18682         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_1GB \
18683                 UINT32_C(0x8)
18684         /* Reserved */
18685         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD3 \
18686                 UINT32_C(0x10)
18687         /* Reserved */
18688         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD4 \
18689                 UINT32_C(0x20)
18690         /* 10Gb link speed */
18691         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_10GB \
18692                 UINT32_C(0x40)
18693         uint32_t        xcvr_identifier_type_tx_lpi_timer;
18694         /*
18695          * Current setting of TX LPI timer in microseconds.
18696          * This field is valid only when_eee_enabled flag is set to 1
18697          * and tx_lpi_enabled is set to 1.
18698          */
18699         #define HWRM_PORT_PHY_QCFG_OUTPUT_TX_LPI_TIMER_MASK \
18700                 UINT32_C(0xffffff)
18701         #define HWRM_PORT_PHY_QCFG_OUTPUT_TX_LPI_TIMER_SFT             0
18702         /* This value represents transceiver identifier type. */
18703         #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_MASK \
18704                 UINT32_C(0xff000000)
18705         #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_SFT     24
18706         /* Unknown */
18707         #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_UNKNOWN \
18708                 (UINT32_C(0x0) << 24)
18709         /* SFP/SFP+/SFP28 */
18710         #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_SFP \
18711                 (UINT32_C(0x3) << 24)
18712         /* QSFP+ */
18713         #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFP \
18714                 (UINT32_C(0xc) << 24)
18715         /* QSFP+ */
18716         #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFPPLUS \
18717                 (UINT32_C(0xd) << 24)
18718         /* QSFP28 */
18719         #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFP28 \
18720                 (UINT32_C(0x11) << 24)
18721         #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_LAST \
18722                 HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFP28
18723         /*
18724          * This value represents the current configuration of
18725          * Forward Error Correction (FEC) on the port.
18726          */
18727         uint16_t        fec_cfg;
18728         /*
18729          * When set to 1, then FEC is not supported on this port. If this flag
18730          * is set to 1, then all other FEC configuration flags shall be ignored.
18731          * When set to 0, then FEC is supported as indicated by other
18732          * configuration flags.
18733          */
18734         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_NONE_SUPPORTED \
18735                 UINT32_C(0x1)
18736         /*
18737          * When set to 1, then FEC autonegotiation is supported on this port.
18738          * When set to 0, then FEC autonegotiation is not supported on this port.
18739          */
18740         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_AUTONEG_SUPPORTED \
18741                 UINT32_C(0x2)
18742         /*
18743          * When set to 1, then FEC autonegotiation is enabled on this port.
18744          * When set to 0, then FEC autonegotiation is disabled if supported.
18745          * This flag should be ignored if FEC autonegotiation is not supported on this port.
18746          */
18747         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_AUTONEG_ENABLED \
18748                 UINT32_C(0x4)
18749         /*
18750          * When set to 1, then FEC CLAUSE 74 (Fire Code) is supported on this port.
18751          * When set to 0, then FEC CLAUSE 74 (Fire Code) is not supported on this port.
18752          */
18753         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE74_SUPPORTED \
18754                 UINT32_C(0x8)
18755         /*
18756          * When set to 1, then FEC CLAUSE 74 (Fire Code) is enabled on this
18757          * port. This means that FEC CLAUSE 74 is either advertised if
18758          * FEC autonegotiation is enabled or FEC CLAUSE 74 is force enabled.
18759          * When set to 0, then FEC CLAUSE 74 (Fire Code) is disabled if supported.
18760          * This flag should be ignored if FEC CLAUSE 74 is not supported on this port.
18761          */
18762         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE74_ENABLED \
18763                 UINT32_C(0x10)
18764         /*
18765          * When set to 1, then FEC CLAUSE 91 (Reed Solomon RS(528,514) for
18766          * NRZ) is supported on this port.
18767          * When set to 0, then FEC RS(528,418) is not supported on this port.
18768          */
18769         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE91_SUPPORTED \
18770                 UINT32_C(0x20)
18771         /*
18772          * When set to 1, then FEC CLAUSE 91 (Reed Solomon RS(528,514) for
18773          * NRZ) is enabled on this port. This means that FEC RS(528,514) is
18774          * either advertised if FEC autonegotiation is enabled or FEC
18775          * RS(528,514) is force enabled.  When set to 0, then FEC RS(528,514)
18776          * is disabled if supported.
18777          * This flag should be ignored if FEC CLAUSE 91 is not supported on this port.
18778          */
18779         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE91_ENABLED \
18780                 UINT32_C(0x40)
18781         /*
18782          * When set to 1, then FEC RS544_1XN is supported on this port.
18783          * When set to 0, then FEC RS544_1XN is not supported on this port.
18784          */
18785         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS544_1XN_SUPPORTED \
18786                 UINT32_C(0x80)
18787         /*
18788          * When set to 1, then RS544_1XN is enabled on this
18789          * port. This means that FEC RS544_1XN is either advertised if
18790          * FEC autonegotiation is enabled or FEC RS544_1XN is force enabled.
18791          * When set to 0, then FEC RS544_1XN is disabled if supported.
18792          * This flag should be ignored if FEC RS544_1XN is not supported on this port.
18793          */
18794         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS544_1XN_ENABLED \
18795                 UINT32_C(0x100)
18796         /*
18797          * When set to 1, then FEC RS(544,514) is supported on this port.
18798          * When set to 0, then FEC RS(544,514) is not supported on this port.
18799          */
18800         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS544_IEEE_SUPPORTED \
18801                 UINT32_C(0x200)
18802         /*
18803          * When set to 1, then RS(544,514) is enabled on this
18804          * port. This means that FEC RS(544,514) is either advertised if
18805          * FEC autonegotiation is enabled or FEC RS(544,514) is force
18806          * enabled.  When set to 0, then FEC RS(544,514) is disabled if supported.
18807          * This flag should be ignored if FEC RS(544,514) is not supported on this port.
18808          */
18809         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS544_IEEE_ENABLED \
18810                 UINT32_C(0x400)
18811         /*
18812          * When set to 1, then FEC RS272_1XN is supported on this port.
18813          * When set to 0, then FEC RS272_1XN is not supported on this port.
18814          */
18815         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS272_1XN_SUPPORTED \
18816                 UINT32_C(0x800)
18817         /*
18818          * When set to 1, then RS272_1XN is enabled on this
18819          * port. This means that FEC RS272_1XN is either advertised if
18820          * FEC autonegotiation is enabled or FEC RS272_1XN is force
18821          * enabled.  When set to 0, then FEC RS272_1XN is disabled if supported.
18822          * This flag should be ignored if FEC RS272_1XN is not supported on this port.
18823          */
18824         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS272_1XN_ENABLED \
18825                 UINT32_C(0x1000)
18826         /*
18827          * When set to 1, then FEC RS(272,514) is supported on this port.
18828          * When set to 0, then FEC RS(272,514) is not supported on this port.
18829          */
18830         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS272_IEEE_SUPPORTED \
18831                 UINT32_C(0x2000)
18832         /*
18833          * When set to 1, then RS(272,257) is enabled on this
18834          * port. This means that FEC RS(272,257) is either advertised if
18835          * FEC autonegotiation is enabled or FEC RS(272,257) is force
18836          * enabled.  When set to 0, then FEC RS(272,257) is disabled if supported.
18837          * This flag should be ignored if FEC RS(272,257) is not supported on this port.
18838          */
18839         #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_RS272_IEEE_ENABLED \
18840                 UINT32_C(0x4000)
18841         /*
18842          * This value is indicates the duplex of the current
18843          * connection state.
18844          */
18845         uint8_t duplex_state;
18846         /* Half Duplex connection. */
18847         #define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_STATE_HALF UINT32_C(0x0)
18848         /* Full duplex connection. */
18849         #define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_STATE_FULL UINT32_C(0x1)
18850         #define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_STATE_LAST \
18851                 HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_STATE_FULL
18852         /* Option flags fields. */
18853         uint8_t option_flags;
18854         /* When this bit is '1', Media auto detect is enabled. */
18855         #define HWRM_PORT_PHY_QCFG_OUTPUT_OPTION_FLAGS_MEDIA_AUTO_DETECT \
18856                 UINT32_C(0x1)
18857         /*
18858          * Up to 16 bytes of null padded ASCII string representing
18859          * PHY vendor.
18860          * If the string is set to null, then the vendor name is not
18861          * available.
18862          */
18863         char    phy_vendor_name[16];
18864         /*
18865          * Up to 16 bytes of null padded ASCII string that
18866          * identifies vendor specific part number of the PHY.
18867          * If the string is set to null, then the vendor specific
18868          * part number is not available.
18869          */
18870         char    phy_vendor_partnumber[16];
18871         /*
18872          * The supported PAM4 speeds for the port. This is a bit mask.
18873          * For each speed that is supported, the corresponding
18874          * bit will be set to '1'.
18875          */
18876         uint16_t        support_pam4_speeds;
18877         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_PAM4_SPEEDS_50G \
18878                 UINT32_C(0x1)
18879         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_PAM4_SPEEDS_100G \
18880                 UINT32_C(0x2)
18881         #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_PAM4_SPEEDS_200G \
18882                 UINT32_C(0x4)
18883         /*
18884          * Current setting of forced PAM4 link speed.
18885          * When the link speed is not being forced, this
18886          * value shall be set to 0.
18887          */
18888         uint16_t        force_pam4_link_speed;
18889         /* 50Gb link speed */
18890         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAM4_LINK_SPEED_50GB \
18891                 UINT32_C(0x1f4)
18892         /* 100Gb link speed */
18893         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAM4_LINK_SPEED_100GB \
18894                 UINT32_C(0x3e8)
18895         /* 200Gb link speed */
18896         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAM4_LINK_SPEED_200GB \
18897                 UINT32_C(0x7d0)
18898         #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAM4_LINK_SPEED_LAST \
18899                 HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAM4_LINK_SPEED_200GB
18900         /*
18901          * Current setting for auto_pam4_link_speed_mask that is used to
18902          * advertise speeds during autonegotiation.
18903          * This field is only valid when auto_mode is set to "mask".
18904          * The speeds specified in this field shall be a subset of
18905          * supported speeds on this port.
18906          */
18907         uint16_t        auto_pam4_link_speed_mask;
18908         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAM4_LINK_SPEED_MASK_50G \
18909                 UINT32_C(0x1)
18910         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAM4_LINK_SPEED_MASK_100G \
18911                 UINT32_C(0x2)
18912         #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAM4_LINK_SPEED_MASK_200G \
18913                 UINT32_C(0x4)
18914         /*
18915          * The advertised PAM4 speeds for the port by the link partner.
18916          * Each advertised speed will be set to '1'.
18917          */
18918         uint8_t link_partner_pam4_adv_speeds;
18919         /* 50Gb link speed */
18920         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_PAM4_ADV_SPEEDS_50GB \
18921                 UINT32_C(0x1)
18922         /* 100Gb link speed */
18923         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_PAM4_ADV_SPEEDS_100GB \
18924                 UINT32_C(0x2)
18925         /* 200Gb link speed */
18926         #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_PAM4_ADV_SPEEDS_200GB \
18927                 UINT32_C(0x4)
18928         /*
18929          * This field is used in Output records to indicate that the output
18930          * is completely written to RAM.  This field should be read as '1'
18931          * to indicate that the output has been completely written.
18932          * When writing a command completion or response to an internal processor,
18933          * the order of writes has to be such that this field is written last.
18934          */
18935         uint8_t valid;
18936 } __rte_packed;
18937
18938 /*********************
18939  * hwrm_port_mac_cfg *
18940  *********************/
18941
18942
18943 /* hwrm_port_mac_cfg_input (size:384b/48B) */
18944 struct hwrm_port_mac_cfg_input {
18945         /* The HWRM command request type. */
18946         uint16_t        req_type;
18947         /*
18948          * The completion ring to send the completion event on. This should
18949          * be the NQ ID returned from the `nq_alloc` HWRM command.
18950          */
18951         uint16_t        cmpl_ring;
18952         /*
18953          * The sequence ID is used by the driver for tracking multiple
18954          * commands. This ID is treated as opaque data by the firmware and
18955          * the value is returned in the `hwrm_resp_hdr` upon completion.
18956          */
18957         uint16_t        seq_id;
18958         /*
18959          * The target ID of the command:
18960          * * 0x0-0xFFF8 - The function ID
18961          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
18962          * * 0xFFFD - Reserved for user-space HWRM interface
18963          * * 0xFFFF - HWRM
18964          */
18965         uint16_t        target_id;
18966         /*
18967          * A physical address pointer pointing to a host buffer that the
18968          * command's response data will be written. This can be either a host
18969          * physical address (HPA) or a guest physical address (GPA) and must
18970          * point to a physically contiguous block of memory.
18971          */
18972         uint64_t        resp_addr;
18973         /*
18974          * In this field, there are a number of CoS mappings related flags
18975          * that are used to configure CoS mappings and their corresponding
18976          * priorities in the hardware.
18977          * For the priorities of CoS mappings, the HWRM uses the following
18978          * priority order (high to low) by default:
18979          * # vlan pri
18980          * # ip_dscp
18981          * # tunnel_vlan_pri
18982          * # default cos
18983          *
18984          * A subset of CoS mappings can be enabled.
18985          * If a priority is not specified for an enabled CoS mapping, the
18986          * priority will be assigned in the above order for the enabled CoS
18987          * mappings. For example, if vlan_pri and ip_dscp CoS mappings are
18988          * enabled and their priorities are not specified, the following
18989          * priority order (high to low) will be used by the HWRM:
18990          * # vlan_pri
18991          * # ip_dscp
18992          * # default cos
18993          *
18994          * vlan_pri CoS mapping together with default CoS with lower priority
18995          * are enabled by default by the HWRM.
18996          */
18997         uint32_t        flags;
18998         /*
18999          * When this bit is '1', this command will configure
19000          * the MAC to match the current link state of the PHY.
19001          * If the link is not established on the PHY, then this
19002          * bit has no effect.
19003          */
19004         #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_MATCH_LINK \
19005                 UINT32_C(0x1)
19006         /*
19007          * When this bit is set to '1', the inner VLAN PRI to CoS mapping
19008          * is requested to be enabled.
19009          */
19010         #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_VLAN_PRI2COS_ENABLE \
19011                 UINT32_C(0x2)
19012         /*
19013          * When this bit is set to '1', tunnel VLAN PRI field to
19014          * CoS mapping is requested to be enabled.
19015          */
19016         #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_TUNNEL_PRI2COS_ENABLE \
19017                 UINT32_C(0x4)
19018         /*
19019          * When this bit is set to '1', the IP DSCP to CoS mapping is
19020          * requested to be enabled.
19021          */
19022         #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_IP_DSCP2COS_ENABLE \
19023                 UINT32_C(0x8)
19024         /*
19025          * When this bit is '1', the HWRM is requested to
19026          * enable timestamp capture capability on the receive side
19027          * of this port.
19028          */
19029         #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_RX_TS_CAPTURE_ENABLE \
19030                 UINT32_C(0x10)
19031         /*
19032          * When this bit is '1', the HWRM is requested to
19033          * disable timestamp capture capability on the receive side
19034          * of this port.
19035          */
19036         #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_RX_TS_CAPTURE_DISABLE \
19037                 UINT32_C(0x20)
19038         /*
19039          * When this bit is '1', the HWRM is requested to
19040          * enable timestamp capture capability on the transmit side
19041          * of this port.
19042          */
19043         #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_TX_TS_CAPTURE_ENABLE \
19044                 UINT32_C(0x40)
19045         /*
19046          * When this bit is '1', the HWRM is requested to
19047          * disable timestamp capture capability on the transmit side
19048          * of this port.
19049          */
19050         #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_TX_TS_CAPTURE_DISABLE \
19051                 UINT32_C(0x80)
19052         /*
19053          * When this bit is '1', the Out-Of-Box WoL is requested to
19054          * be enabled on this port.
19055          */
19056         #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_OOB_WOL_ENABLE \
19057                 UINT32_C(0x100)
19058         /*
19059          * When this bit is '1', the Out-Of-Box WoL is requested to
19060          * be disabled on this port.
19061          */
19062         #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_OOB_WOL_DISABLE \
19063                 UINT32_C(0x200)
19064         /*
19065          * When this bit is set to '1', the inner VLAN PRI to CoS mapping
19066          * is requested to be disabled.
19067          */
19068         #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_VLAN_PRI2COS_DISABLE \
19069                 UINT32_C(0x400)
19070         /*
19071          * When this bit is set to '1', tunnel VLAN PRI field to
19072          * CoS mapping is requested to be disabled.
19073          */
19074         #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_TUNNEL_PRI2COS_DISABLE \
19075                 UINT32_C(0x800)
19076         /*
19077          * When this bit is set to '1', the IP DSCP to CoS mapping is
19078          * requested to be disabled.
19079          */
19080         #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_IP_DSCP2COS_DISABLE \
19081                 UINT32_C(0x1000)
19082         /*
19083          * When this bit is set to '1', and the ptp_tx_ts_capture_enable
19084          * bit is set, then the device uses one step Tx timestamping.
19085          * This bit is temporary and used for experimental purposes.
19086          */
19087         #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_ONE_STEP_TX_TS \
19088                 UINT32_C(0x2000)
19089         uint32_t        enables;
19090         /*
19091          * This bit must be '1' for the ipg field to be
19092          * configured.
19093          */
19094         #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_IPG \
19095                 UINT32_C(0x1)
19096         /*
19097          * This bit must be '1' for the lpbk field to be
19098          * configured.
19099          */
19100         #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_LPBK \
19101                 UINT32_C(0x2)
19102         /*
19103          * This bit must be '1' for the vlan_pri2cos_map_pri field to be
19104          * configured.
19105          */
19106         #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_VLAN_PRI2COS_MAP_PRI \
19107                 UINT32_C(0x4)
19108         /*
19109          * This bit must be '1' for the tunnel_pri2cos_map_pri field to be
19110          * configured.
19111          */
19112         #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_TUNNEL_PRI2COS_MAP_PRI \
19113                 UINT32_C(0x10)
19114         /*
19115          * This bit must be '1' for the dscp2cos_map_pri field to be
19116          * configured.
19117          */
19118         #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_DSCP2COS_MAP_PRI \
19119                 UINT32_C(0x20)
19120         /*
19121          * This bit must be '1' for the rx_ts_capture_ptp_msg_type field to be
19122          * configured.
19123          */
19124         #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_RX_TS_CAPTURE_PTP_MSG_TYPE \
19125                 UINT32_C(0x40)
19126         /*
19127          * This bit must be '1' for the tx_ts_capture_ptp_msg_type field to be
19128          * configured.
19129          */
19130         #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_TX_TS_CAPTURE_PTP_MSG_TYPE \
19131                 UINT32_C(0x80)
19132         /*
19133          * This bit must be '1' for the cos_field_cfg field to be
19134          * configured.
19135          */
19136         #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_COS_FIELD_CFG \
19137                 UINT32_C(0x100)
19138         /*
19139          * This bit must be '1' for the ptp_freq_adj_ppb field to be
19140          * configured.
19141          */
19142         #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_PTP_FREQ_ADJ_PPB \
19143                 UINT32_C(0x200)
19144         /* Port ID of port that is to be configured. */
19145         uint16_t        port_id;
19146         /*
19147          * This value is used to configure the minimum IPG that will
19148          * be sent between packets by this port.
19149          */
19150         uint8_t ipg;
19151         /* This value controls the loopback setting for the MAC. */
19152         uint8_t lpbk;
19153         /* No loopback is selected.  Normal operation. */
19154         #define HWRM_PORT_MAC_CFG_INPUT_LPBK_NONE   UINT32_C(0x0)
19155         /*
19156          * The HW will be configured with local loopback such that
19157          * host data is sent back to the host without modification.
19158          */
19159         #define HWRM_PORT_MAC_CFG_INPUT_LPBK_LOCAL  UINT32_C(0x1)
19160         /*
19161          * The HW will be configured with remote loopback such that
19162          * port logic will send packets back out the transmitter that
19163          * are received.
19164          */
19165         #define HWRM_PORT_MAC_CFG_INPUT_LPBK_REMOTE UINT32_C(0x2)
19166         #define HWRM_PORT_MAC_CFG_INPUT_LPBK_LAST \
19167                 HWRM_PORT_MAC_CFG_INPUT_LPBK_REMOTE
19168         /*
19169          * This value controls the priority setting of VLAN PRI to CoS
19170          * mapping based on VLAN Tags of inner packet headers of
19171          * tunneled packets or packet headers of non-tunneled packets.
19172          *
19173          * # Each XXX_pri variable shall have a unique priority value
19174          * when it is being specified.
19175          * # When comparing priorities of mappings, higher value
19176          * indicates higher priority.
19177          * For example, a value of 0-3 is returned where 0 is being
19178          * the lowest priority and 3 is being the highest priority.
19179          */
19180         uint8_t vlan_pri2cos_map_pri;
19181         /* Reserved field. */
19182         uint8_t reserved1;
19183         /*
19184          * This value controls the priority setting of VLAN PRI to CoS
19185          * mapping based on VLAN Tags of tunneled header.
19186          * This mapping only applies when tunneled headers
19187          * are present.
19188          *
19189          * # Each XXX_pri variable shall have a unique priority value
19190          * when it is being specified.
19191          * # When comparing priorities of mappings, higher value
19192          * indicates higher priority.
19193          * For example, a value of 0-3 is returned where 0 is being
19194          * the lowest priority and 3 is being the highest priority.
19195          */
19196         uint8_t tunnel_pri2cos_map_pri;
19197         /*
19198          * This value controls the priority setting of IP DSCP to CoS
19199          * mapping based on inner IP header of tunneled packets or
19200          * IP header of non-tunneled packets.
19201          *
19202          * # Each XXX_pri variable shall have a unique priority value
19203          * when it is being specified.
19204          * # When comparing priorities of mappings, higher value
19205          * indicates higher priority.
19206          * For example, a value of 0-3 is returned where 0 is being
19207          * the lowest priority and 3 is being the highest priority.
19208          */
19209         uint8_t dscp2pri_map_pri;
19210         /*
19211          * This is a 16-bit bit mask that is used to request a
19212          * specific configuration of time stamp capture of PTP messages
19213          * on the receive side of this port.
19214          * This field shall be ignored if the ptp_rx_ts_capture_enable
19215          * flag is not set in this command.
19216          * Otherwise, if bit 'i' is set, then the HWRM is being
19217          * requested to configure the receive side of the port to
19218          * capture the time stamp of every received PTP message
19219          * with messageType field value set to i.
19220          */
19221         uint16_t        rx_ts_capture_ptp_msg_type;
19222         /*
19223          * This is a 16-bit bit mask that is used to request a
19224          * specific configuration of time stamp capture of PTP messages
19225          * on the transmit side of this port.
19226          * This field shall be ignored if the ptp_tx_ts_capture_enable
19227          * flag is not set in this command.
19228          * Otherwise, if bit 'i' is set, then the HWRM is being
19229          * requested to configure the transmit side of the port to
19230          * capture the time stamp of every transmitted PTP message
19231          * with messageType field value set to i.
19232          */
19233         uint16_t        tx_ts_capture_ptp_msg_type;
19234         /* Configuration of CoS fields. */
19235         uint8_t cos_field_cfg;
19236         /* Reserved */
19237         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_RSVD1 \
19238                 UINT32_C(0x1)
19239         /*
19240          * This field is used to specify selection of VLAN PRI value
19241          * based on whether one or two VLAN Tags are present in
19242          * the inner packet headers of tunneled packets or
19243          * non-tunneled packets.
19244          * This field is valid only if inner VLAN PRI to CoS mapping
19245          * is enabled.
19246          * If VLAN PRI to CoS mapping is not enabled, then this
19247          * field shall be ignored.
19248          */
19249         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_MASK \
19250                 UINT32_C(0x6)
19251         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_SFT \
19252                 1
19253         /*
19254          * Select inner VLAN PRI when 1 or 2 VLAN Tags are
19255          * present in the inner packet headers
19256          */
19257         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_INNERMOST \
19258                 (UINT32_C(0x0) << 1)
19259         /*
19260          * Select outer VLAN Tag PRI when 2 VLAN Tags are
19261          * present in the inner packet headers.
19262          * No VLAN PRI shall be selected for this configuration
19263          * if only one VLAN Tag is present in the inner
19264          * packet headers.
19265          */
19266         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_OUTER \
19267                 (UINT32_C(0x1) << 1)
19268         /*
19269          * Select outermost VLAN PRI when 1 or 2 VLAN Tags
19270          * are present in the inner packet headers
19271          */
19272         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_OUTERMOST \
19273                 (UINT32_C(0x2) << 1)
19274         /* Unspecified */
19275         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_UNSPECIFIED \
19276                 (UINT32_C(0x3) << 1)
19277         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_LAST \
19278                 HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_UNSPECIFIED
19279         /*
19280          * This field is used to specify selection of tunnel VLAN
19281          * PRI value based on whether one or two VLAN Tags are
19282          * present in tunnel headers.
19283          * This field is valid only if tunnel VLAN PRI to CoS mapping
19284          * is enabled.
19285          * If tunnel VLAN PRI to CoS mapping is not enabled, then this
19286          * field shall be ignored.
19287          */
19288         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_MASK \
19289                 UINT32_C(0x18)
19290         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_SFT \
19291                 3
19292         /*
19293          * Select inner VLAN PRI when 1 or 2 VLAN Tags are
19294          * present in the tunnel packet headers
19295          */
19296         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_INNERMOST \
19297                 (UINT32_C(0x0) << 3)
19298         /*
19299          * Select outer VLAN Tag PRI when 2 VLAN Tags are
19300          * present in the tunnel packet headers.
19301          * No tunnel VLAN PRI shall be selected for this
19302          * configuration if only one VLAN Tag is present in
19303          * the tunnel packet headers.
19304          */
19305         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_OUTER \
19306                 (UINT32_C(0x1) << 3)
19307         /*
19308          * Select outermost VLAN PRI when 1 or 2 VLAN Tags
19309          * are present in the tunnel packet headers
19310          */
19311         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_OUTERMOST \
19312                 (UINT32_C(0x2) << 3)
19313         /* Unspecified */
19314         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_UNSPECIFIED \
19315                 (UINT32_C(0x3) << 3)
19316         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_LAST \
19317                 HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_UNSPECIFIED
19318         /*
19319          * This field shall be used to provide default CoS value
19320          * that has been configured on this port.
19321          * This field is valid only if default CoS mapping
19322          * is enabled.
19323          * If default CoS mapping is not enabled, then this
19324          * field shall be ignored.
19325          */
19326         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_DEFAULT_COS_MASK \
19327                 UINT32_C(0xe0)
19328         #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_DEFAULT_COS_SFT \
19329                 5
19330         uint8_t unused_0[3];
19331         /*
19332          * This signed field specifies by how much to adjust the frequency
19333          * of sync timer updates (measured in parts per billion).
19334          */
19335         int32_t ptp_freq_adj_ppb;
19336         uint8_t unused_1[4];
19337 } __rte_packed;
19338
19339 /* hwrm_port_mac_cfg_output (size:128b/16B) */
19340 struct hwrm_port_mac_cfg_output {
19341         /* The specific error status for the command. */
19342         uint16_t        error_code;
19343         /* The HWRM command request type. */
19344         uint16_t        req_type;
19345         /* The sequence ID from the original command. */
19346         uint16_t        seq_id;
19347         /* The length of the response data in number of bytes. */
19348         uint16_t        resp_len;
19349         /*
19350          * This is the configured maximum length of Ethernet packet
19351          * payload that is allowed to be received on the port.
19352          * This value does not include the number of bytes used by
19353          * Ethernet header and trailer (CRC).
19354          */
19355         uint16_t        mru;
19356         /*
19357          * This is the configured maximum length of Ethernet packet
19358          * payload that is allowed to be transmitted on the port.
19359          * This value does not include the number of bytes used by
19360          * Ethernet header and trailer (CRC).
19361          */
19362         uint16_t        mtu;
19363         /* Current configuration of the IPG value. */
19364         uint8_t ipg;
19365         /* Current value of the loopback value. */
19366         uint8_t lpbk;
19367         /* No loopback is selected.  Normal operation. */
19368         #define HWRM_PORT_MAC_CFG_OUTPUT_LPBK_NONE   UINT32_C(0x0)
19369         /*
19370          * The HW will be configured with local loopback such that
19371          * host data is sent back to the host without modification.
19372          */
19373         #define HWRM_PORT_MAC_CFG_OUTPUT_LPBK_LOCAL  UINT32_C(0x1)
19374         /*
19375          * The HW will be configured with remote loopback such that
19376          * port logic will send packets back out the transmitter that
19377          * are received.
19378          */
19379         #define HWRM_PORT_MAC_CFG_OUTPUT_LPBK_REMOTE UINT32_C(0x2)
19380         #define HWRM_PORT_MAC_CFG_OUTPUT_LPBK_LAST \
19381                 HWRM_PORT_MAC_CFG_OUTPUT_LPBK_REMOTE
19382         uint8_t unused_0;
19383         /*
19384          * This field is used in Output records to indicate that the output
19385          * is completely written to RAM.  This field should be read as '1'
19386          * to indicate that the output has been completely written.
19387          * When writing a command completion or response to an internal processor,
19388          * the order of writes has to be such that this field is written last.
19389          */
19390         uint8_t valid;
19391 } __rte_packed;
19392
19393 /**********************
19394  * hwrm_port_mac_qcfg *
19395  **********************/
19396
19397
19398 /* hwrm_port_mac_qcfg_input (size:192b/24B) */
19399 struct hwrm_port_mac_qcfg_input {
19400         /* The HWRM command request type. */
19401         uint16_t        req_type;
19402         /*
19403          * The completion ring to send the completion event on. This should
19404          * be the NQ ID returned from the `nq_alloc` HWRM command.
19405          */
19406         uint16_t        cmpl_ring;
19407         /*
19408          * The sequence ID is used by the driver for tracking multiple
19409          * commands. This ID is treated as opaque data by the firmware and
19410          * the value is returned in the `hwrm_resp_hdr` upon completion.
19411          */
19412         uint16_t        seq_id;
19413         /*
19414          * The target ID of the command:
19415          * * 0x0-0xFFF8 - The function ID
19416          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
19417          * * 0xFFFD - Reserved for user-space HWRM interface
19418          * * 0xFFFF - HWRM
19419          */
19420         uint16_t        target_id;
19421         /*
19422          * A physical address pointer pointing to a host buffer that the
19423          * command's response data will be written. This can be either a host
19424          * physical address (HPA) or a guest physical address (GPA) and must
19425          * point to a physically contiguous block of memory.
19426          */
19427         uint64_t        resp_addr;
19428         /* Port ID of port that is to be configured. */
19429         uint16_t        port_id;
19430         uint8_t unused_0[6];
19431 } __rte_packed;
19432
19433 /* hwrm_port_mac_qcfg_output (size:256b/32B) */
19434 struct hwrm_port_mac_qcfg_output {
19435         /* The specific error status for the command. */
19436         uint16_t        error_code;
19437         /* The HWRM command request type. */
19438         uint16_t        req_type;
19439         /* The sequence ID from the original command. */
19440         uint16_t        seq_id;
19441         /* The length of the response data in number of bytes. */
19442         uint16_t        resp_len;
19443         /*
19444          * This is the configured maximum length of Ethernet packet
19445          * payload that is allowed to be received on the port.
19446          * This value does not include the number of bytes used by the
19447          * Ethernet header and trailer (CRC).
19448          */
19449         uint16_t        mru;
19450         /*
19451          * This is the configured maximum length of Ethernet packet
19452          * payload that is allowed to be transmitted on the port.
19453          * This value does not include the number of bytes used by the
19454          * Ethernet header and trailer (CRC).
19455          */
19456         uint16_t        mtu;
19457         /*
19458          * The minimum IPG that will
19459          * be sent between packets by this port.
19460          */
19461         uint8_t ipg;
19462         /* The loopback setting for the MAC. */
19463         uint8_t lpbk;
19464         /* No loopback is selected.  Normal operation. */
19465         #define HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_NONE   UINT32_C(0x0)
19466         /*
19467          * The HW will be configured with local loopback such that
19468          * host data is sent back to the host without modification.
19469          */
19470         #define HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_LOCAL  UINT32_C(0x1)
19471         /*
19472          * The HW will be configured with remote loopback such that
19473          * port logic will send packets back out the transmitter that
19474          * are received.
19475          */
19476         #define HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_REMOTE UINT32_C(0x2)
19477         #define HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_LAST \
19478                 HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_REMOTE
19479         /*
19480          * Priority setting for VLAN PRI to CoS mapping.
19481          * # Each XXX_pri variable shall have a unique priority value
19482          * when it is being used.
19483          * # When comparing priorities of mappings, higher value
19484          * indicates higher priority.
19485          * For example, a value of 0-3 is returned where 0 is being
19486          * the lowest priority and 3 is being the highest priority.
19487          * # If the correspoding CoS mapping is not enabled, then this
19488          * field should be ignored.
19489          * # This value indicates the normalized priority value retained
19490          * in the HWRM.
19491          */
19492         uint8_t vlan_pri2cos_map_pri;
19493         /*
19494          * In this field, a number of CoS mappings related flags
19495          * are used to indicate configured CoS mappings.
19496          */
19497         uint8_t flags;
19498         /*
19499          * When this bit is set to '1', the inner VLAN PRI to CoS mapping
19500          * is enabled.
19501          */
19502         #define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_VLAN_PRI2COS_ENABLE \
19503                 UINT32_C(0x1)
19504         /*
19505          * When this bit is set to '1', tunnel VLAN PRI field to
19506          * CoS mapping is enabled.
19507          */
19508         #define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_TUNNEL_PRI2COS_ENABLE \
19509                 UINT32_C(0x2)
19510         /*
19511          * When this bit is set to '1', the IP DSCP to CoS mapping is
19512          * enabled.
19513          */
19514         #define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_IP_DSCP2COS_ENABLE \
19515                 UINT32_C(0x4)
19516         /*
19517          * When this bit is '1', the Out-Of-Box WoL is enabled on this
19518          * port.
19519          */
19520         #define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_OOB_WOL_ENABLE \
19521                 UINT32_C(0x8)
19522         /* When this bit is '1', PTP is enabled for RX on this port. */
19523         #define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_PTP_RX_TS_CAPTURE_ENABLE \
19524                 UINT32_C(0x10)
19525         /* When this bit is '1', PTP is enabled for TX on this port. */
19526         #define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_PTP_TX_TS_CAPTURE_ENABLE \
19527                 UINT32_C(0x20)
19528         /*
19529          * Priority setting for tunnel VLAN PRI to CoS mapping.
19530          * # Each XXX_pri variable shall have a unique priority value
19531          * when it is being used.
19532          * # When comparing priorities of mappings, higher value
19533          * indicates higher priority.
19534          * For example, a value of 0-3 is returned where 0 is being
19535          * the lowest priority and 3 is being the highest priority.
19536          * # If the correspoding CoS mapping is not enabled, then this
19537          * field should be ignored.
19538          * # This value indicates the normalized priority value retained
19539          * in the HWRM.
19540          */
19541         uint8_t tunnel_pri2cos_map_pri;
19542         /*
19543          * Priority setting for DSCP to PRI mapping.
19544          * # Each XXX_pri variable shall have a unique priority value
19545          * when it is being used.
19546          * # When comparing priorities of mappings, higher value
19547          * indicates higher priority.
19548          * For example, a value of 0-3 is returned where 0 is being
19549          * the lowest priority and 3 is being the highest priority.
19550          * # If the correspoding CoS mapping is not enabled, then this
19551          * field should be ignored.
19552          * # This value indicates the normalized priority value retained
19553          * in the HWRM.
19554          */
19555         uint8_t dscp2pri_map_pri;
19556         /*
19557          * This is a 16-bit bit mask that represents the
19558          * current configuration of time stamp capture of PTP messages
19559          * on the receive side of this port.
19560          * If bit 'i' is set, then the receive side of the port
19561          * is configured to capture the time stamp of every
19562          * received PTP message with messageType field value set
19563          * to i.
19564          * If all bits are set to 0 (i.e. field value set 0),
19565          * then the receive side of the port is not configured
19566          * to capture timestamp for PTP messages.
19567          * If all bits are set to 1, then the receive side of the
19568          * port is configured to capture timestamp for all PTP
19569          * messages.
19570          */
19571         uint16_t        rx_ts_capture_ptp_msg_type;
19572         /*
19573          * This is a 16-bit bit mask that represents the
19574          * current configuration of time stamp capture of PTP messages
19575          * on the transmit side of this port.
19576          * If bit 'i' is set, then the transmit side of the port
19577          * is configured to capture the time stamp of every
19578          * received PTP message with messageType field value set
19579          * to i.
19580          * If all bits are set to 0 (i.e. field value set 0),
19581          * then the transmit side of the port is not configured
19582          * to capture timestamp for PTP messages.
19583          * If all bits are set to 1, then the transmit side of the
19584          * port is configured to capture timestamp for all PTP
19585          * messages.
19586          */
19587         uint16_t        tx_ts_capture_ptp_msg_type;
19588         /* Configuration of CoS fields. */
19589         uint8_t cos_field_cfg;
19590         /* Reserved */
19591         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_RSVD \
19592                 UINT32_C(0x1)
19593         /*
19594          * This field is used for selecting VLAN PRI value
19595          * based on whether one or two VLAN Tags are present in
19596          * the inner packet headers of tunneled packets or
19597          * non-tunneled packets.
19598          */
19599         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_MASK \
19600                 UINT32_C(0x6)
19601         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_SFT \
19602                 1
19603         /*
19604          * Select inner VLAN PRI when 1 or 2 VLAN Tags are
19605          * present in the inner packet headers
19606          */
19607         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_INNERMOST \
19608                 (UINT32_C(0x0) << 1)
19609         /*
19610          * Select outer VLAN Tag PRI when 2 VLAN Tags are
19611          * present in the inner packet headers.
19612          * No VLAN PRI is selected for this configuration
19613          * if only one VLAN Tag is present in the inner
19614          * packet headers.
19615          */
19616         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_OUTER \
19617                 (UINT32_C(0x1) << 1)
19618         /*
19619          * Select outermost VLAN PRI when 1 or 2 VLAN Tags
19620          * are present in the inner packet headers
19621          */
19622         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_OUTERMOST \
19623                 (UINT32_C(0x2) << 1)
19624         /* Unspecified */
19625         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_UNSPECIFIED \
19626                 (UINT32_C(0x3) << 1)
19627         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_LAST \
19628                 HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_UNSPECIFIED
19629         /*
19630          * This field is used for selecting tunnel VLAN PRI value
19631          * based on whether one or two VLAN Tags are present in
19632          * the tunnel headers of tunneled packets. This selection
19633          * does not apply to non-tunneled packets.
19634          */
19635         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_MASK \
19636                 UINT32_C(0x18)
19637         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_SFT \
19638                 3
19639         /*
19640          * Select inner VLAN PRI when 1 or 2 VLAN Tags are
19641          * present in the tunnel packet headers
19642          */
19643         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_INNERMOST \
19644                 (UINT32_C(0x0) << 3)
19645         /*
19646          * Select outer VLAN Tag PRI when 2 VLAN Tags are
19647          * present in the tunnel packet headers.
19648          * No VLAN PRI is selected for this configuration
19649          * if only one VLAN Tag is present in the tunnel
19650          * packet headers.
19651          */
19652         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_OUTER \
19653                 (UINT32_C(0x1) << 3)
19654         /*
19655          * Select outermost VLAN PRI when 1 or 2 VLAN Tags
19656          * are present in the tunnel packet headers
19657          */
19658         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_OUTERMOST \
19659                 (UINT32_C(0x2) << 3)
19660         /* Unspecified */
19661         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_UNSPECIFIED \
19662                 (UINT32_C(0x3) << 3)
19663         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_LAST \
19664                 HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_UNSPECIFIED
19665         /*
19666          * This field is used to provide default CoS value that
19667          * has been configured on this port.
19668          */
19669         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_DEFAULT_COS_MASK \
19670                 UINT32_C(0xe0)
19671         #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_DEFAULT_COS_SFT \
19672                 5
19673         uint8_t unused_1;
19674         uint16_t        port_svif_info;
19675         /*
19676          * This field specifies the source virtual interface of the port being
19677          * queried. Drivers can use this to program port svif field in the
19678          * L2 context table
19679          */
19680         #define HWRM_PORT_MAC_QCFG_OUTPUT_PORT_SVIF_INFO_PORT_SVIF_MASK \
19681                 UINT32_C(0x7fff)
19682         #define HWRM_PORT_MAC_QCFG_OUTPUT_PORT_SVIF_INFO_PORT_SVIF_SFT       0
19683         /* This field specifies whether port_svif is valid or not */
19684         #define HWRM_PORT_MAC_QCFG_OUTPUT_PORT_SVIF_INFO_PORT_SVIF_VALID \
19685                 UINT32_C(0x8000)
19686         uint8_t unused_2[5];
19687         /*
19688          * This field is used in Output records to indicate that the output
19689          * is completely written to RAM.  This field should be read as '1'
19690          * to indicate that the output has been completely written.
19691          * When writing a command completion or response to an internal processor,
19692          * the order of writes has to be such that this field is written last.
19693          */
19694         uint8_t valid;
19695 } __rte_packed;
19696
19697 /**************************
19698  * hwrm_port_mac_ptp_qcfg *
19699  **************************/
19700
19701
19702 /* hwrm_port_mac_ptp_qcfg_input (size:192b/24B) */
19703 struct hwrm_port_mac_ptp_qcfg_input {
19704         /* The HWRM command request type. */
19705         uint16_t        req_type;
19706         /*
19707          * The completion ring to send the completion event on. This should
19708          * be the NQ ID returned from the `nq_alloc` HWRM command.
19709          */
19710         uint16_t        cmpl_ring;
19711         /*
19712          * The sequence ID is used by the driver for tracking multiple
19713          * commands. This ID is treated as opaque data by the firmware and
19714          * the value is returned in the `hwrm_resp_hdr` upon completion.
19715          */
19716         uint16_t        seq_id;
19717         /*
19718          * The target ID of the command:
19719          * * 0x0-0xFFF8 - The function ID
19720          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
19721          * * 0xFFFD - Reserved for user-space HWRM interface
19722          * * 0xFFFF - HWRM
19723          */
19724         uint16_t        target_id;
19725         /*
19726          * A physical address pointer pointing to a host buffer that the
19727          * command's response data will be written. This can be either a host
19728          * physical address (HPA) or a guest physical address (GPA) and must
19729          * point to a physically contiguous block of memory.
19730          */
19731         uint64_t        resp_addr;
19732         /* Port ID of port that is being queried. */
19733         uint16_t        port_id;
19734         uint8_t unused_0[6];
19735 } __rte_packed;
19736
19737 /* hwrm_port_mac_ptp_qcfg_output (size:640b/80B) */
19738 struct hwrm_port_mac_ptp_qcfg_output {
19739         /* The specific error status for the command. */
19740         uint16_t        error_code;
19741         /* The HWRM command request type. */
19742         uint16_t        req_type;
19743         /* The sequence ID from the original command. */
19744         uint16_t        seq_id;
19745         /* The length of the response data in number of bytes. */
19746         uint16_t        resp_len;
19747         /*
19748          * In this field, a number of PTP related flags
19749          * are used to indicate configured PTP capabilities.
19750          */
19751         uint8_t flags;
19752         /*
19753          * When this bit is set to '1', the PTP related registers are
19754          * directly accessible by the host.
19755          */
19756         #define HWRM_PORT_MAC_PTP_QCFG_OUTPUT_FLAGS_DIRECT_ACCESS \
19757                 UINT32_C(0x1)
19758         /*
19759          * When this bit is set to '1', the device supports one-step
19760          * Tx timestamping.
19761          */
19762         #define HWRM_PORT_MAC_PTP_QCFG_OUTPUT_FLAGS_ONE_STEP_TX_TS \
19763                 UINT32_C(0x4)
19764         /*
19765          * When this bit is set to '1', the PTP information is accessible
19766          * via HWRM commands.
19767          */
19768         #define HWRM_PORT_MAC_PTP_QCFG_OUTPUT_FLAGS_HWRM_ACCESS \
19769                 UINT32_C(0x8)
19770         uint8_t unused_0[3];
19771         /* Offset of the PTP register for the lower 32 bits of timestamp for RX. */
19772         uint32_t        rx_ts_reg_off_lower;
19773         /* Offset of the PTP register for the upper 32 bits of timestamp for RX. */
19774         uint32_t        rx_ts_reg_off_upper;
19775         /* Offset of the PTP register for the sequence ID for RX. */
19776         uint32_t        rx_ts_reg_off_seq_id;
19777         /* Offset of the first PTP source ID for RX. */
19778         uint32_t        rx_ts_reg_off_src_id_0;
19779         /* Offset of the second PTP source ID for RX. */
19780         uint32_t        rx_ts_reg_off_src_id_1;
19781         /* Offset of the third PTP source ID for RX. */
19782         uint32_t        rx_ts_reg_off_src_id_2;
19783         /* Offset of the domain ID for RX. */
19784         uint32_t        rx_ts_reg_off_domain_id;
19785         /* Offset of the PTP FIFO register for RX. */
19786         uint32_t        rx_ts_reg_off_fifo;
19787         /* Offset of the PTP advance FIFO register for RX. */
19788         uint32_t        rx_ts_reg_off_fifo_adv;
19789         /* PTP timestamp granularity for RX. */
19790         uint32_t        rx_ts_reg_off_granularity;
19791         /* Offset of the PTP register for the lower 32 bits of timestamp for TX. */
19792         uint32_t        tx_ts_reg_off_lower;
19793         /* Offset of the PTP register for the upper 32 bits of timestamp for TX. */
19794         uint32_t        tx_ts_reg_off_upper;
19795         /* Offset of the PTP register for the sequence ID for TX. */
19796         uint32_t        tx_ts_reg_off_seq_id;
19797         /* Offset of the PTP FIFO register for TX. */
19798         uint32_t        tx_ts_reg_off_fifo;
19799         /* PTP timestamp granularity for TX. */
19800         uint32_t        tx_ts_reg_off_granularity;
19801         uint8_t unused_1[7];
19802         /*
19803          * This field is used in Output records to indicate that the output
19804          * is completely written to RAM.  This field should be read as '1'
19805          * to indicate that the output has been completely written.
19806          * When writing a command completion or response to an internal processor,
19807          * the order of writes has to be such that this field is written last.
19808          */
19809         uint8_t valid;
19810 } __rte_packed;
19811
19812 /* Port Tx Statistics Format */
19813 /* tx_port_stats (size:3264b/408B) */
19814 struct tx_port_stats {
19815         /* Total Number of 64 Bytes frames transmitted */
19816         uint64_t        tx_64b_frames;
19817         /* Total Number of 65-127 Bytes frames transmitted */
19818         uint64_t        tx_65b_127b_frames;
19819         /* Total Number of 128-255 Bytes frames transmitted */
19820         uint64_t        tx_128b_255b_frames;
19821         /* Total Number of 256-511 Bytes frames transmitted */
19822         uint64_t        tx_256b_511b_frames;
19823         /* Total Number of 512-1023 Bytes frames transmitted */
19824         uint64_t        tx_512b_1023b_frames;
19825         /* Total Number of 1024-1518 Bytes frames transmitted */
19826         uint64_t        tx_1024b_1518b_frames;
19827         /*
19828          * Total Number of each good VLAN (exludes FCS errors)
19829          * frame transmitted which is 1519 to 1522 bytes in length
19830          * inclusive (excluding framing bits but including FCS bytes).
19831          */
19832         uint64_t        tx_good_vlan_frames;
19833         /* Total Number of 1519-2047 Bytes frames transmitted */
19834         uint64_t        tx_1519b_2047b_frames;
19835         /* Total Number of 2048-4095 Bytes frames transmitted */
19836         uint64_t        tx_2048b_4095b_frames;
19837         /* Total Number of 4096-9216 Bytes frames transmitted */
19838         uint64_t        tx_4096b_9216b_frames;
19839         /* Total Number of 9217-16383 Bytes frames transmitted */
19840         uint64_t        tx_9217b_16383b_frames;
19841         /* Total Number of good frames transmitted */
19842         uint64_t        tx_good_frames;
19843         /* Total Number of frames transmitted */
19844         uint64_t        tx_total_frames;
19845         /* Total number of unicast frames transmitted */
19846         uint64_t        tx_ucast_frames;
19847         /* Total number of multicast frames transmitted */
19848         uint64_t        tx_mcast_frames;
19849         /* Total number of broadcast frames transmitted */
19850         uint64_t        tx_bcast_frames;
19851         /* Total number of PAUSE control frames transmitted */
19852         uint64_t        tx_pause_frames;
19853         /*
19854          * Total number of PFC/per-priority PAUSE
19855          * control frames transmitted
19856          */
19857         uint64_t        tx_pfc_frames;
19858         /* Total number of jabber frames transmitted */
19859         uint64_t        tx_jabber_frames;
19860         /* Total number of frames transmitted with FCS error */
19861         uint64_t        tx_fcs_err_frames;
19862         /* Total number of control frames transmitted */
19863         uint64_t        tx_control_frames;
19864         /* Total number of over-sized frames transmitted */
19865         uint64_t        tx_oversz_frames;
19866         /* Total number of frames with single deferral */
19867         uint64_t        tx_single_dfrl_frames;
19868         /* Total number of frames with multiple deferrals */
19869         uint64_t        tx_multi_dfrl_frames;
19870         /* Total number of frames with single collision */
19871         uint64_t        tx_single_coll_frames;
19872         /* Total number of frames with multiple collisions */
19873         uint64_t        tx_multi_coll_frames;
19874         /* Total number of frames with late collisions */
19875         uint64_t        tx_late_coll_frames;
19876         /* Total number of frames with excessive collisions */
19877         uint64_t        tx_excessive_coll_frames;
19878         /* Total number of fragmented frames transmitted */
19879         uint64_t        tx_frag_frames;
19880         /* Total number of transmit errors */
19881         uint64_t        tx_err;
19882         /* Total number of single VLAN tagged frames transmitted */
19883         uint64_t        tx_tagged_frames;
19884         /* Total number of double VLAN tagged frames transmitted */
19885         uint64_t        tx_dbl_tagged_frames;
19886         /* Total number of runt frames transmitted */
19887         uint64_t        tx_runt_frames;
19888         /* Total number of TX FIFO under runs */
19889         uint64_t        tx_fifo_underruns;
19890         /*
19891          * Total number of PFC frames with PFC enabled bit for
19892          * Pri 0 transmitted
19893          */
19894         uint64_t        tx_pfc_ena_frames_pri0;
19895         /*
19896          * Total number of PFC frames with PFC enabled bit for
19897          * Pri 1 transmitted
19898          */
19899         uint64_t        tx_pfc_ena_frames_pri1;
19900         /*
19901          * Total number of PFC frames with PFC enabled bit for
19902          * Pri 2 transmitted
19903          */
19904         uint64_t        tx_pfc_ena_frames_pri2;
19905         /*
19906          * Total number of PFC frames with PFC enabled bit for
19907          * Pri 3 transmitted
19908          */
19909         uint64_t        tx_pfc_ena_frames_pri3;
19910         /*
19911          * Total number of PFC frames with PFC enabled bit for
19912          * Pri 4 transmitted
19913          */
19914         uint64_t        tx_pfc_ena_frames_pri4;
19915         /*
19916          * Total number of PFC frames with PFC enabled bit for
19917          * Pri 5 transmitted
19918          */
19919         uint64_t        tx_pfc_ena_frames_pri5;
19920         /*
19921          * Total number of PFC frames with PFC enabled bit for
19922          * Pri 6 transmitted
19923          */
19924         uint64_t        tx_pfc_ena_frames_pri6;
19925         /*
19926          * Total number of PFC frames with PFC enabled bit for
19927          * Pri 7 transmitted
19928          */
19929         uint64_t        tx_pfc_ena_frames_pri7;
19930         /* Total number of EEE LPI Events on TX */
19931         uint64_t        tx_eee_lpi_events;
19932         /* EEE LPI Duration Counter on TX */
19933         uint64_t        tx_eee_lpi_duration;
19934         /*
19935          * Total number of Link Level Flow Control (LLFC) messages
19936          * transmitted
19937          */
19938         uint64_t        tx_llfc_logical_msgs;
19939         /* Total number of HCFC messages transmitted */
19940         uint64_t        tx_hcfc_msgs;
19941         /* Total number of TX collisions */
19942         uint64_t        tx_total_collisions;
19943         /* Total number of transmitted bytes */
19944         uint64_t        tx_bytes;
19945         /* Total number of end-to-end HOL frames */
19946         uint64_t        tx_xthol_frames;
19947         /* Total Tx Drops per Port reported by STATS block */
19948         uint64_t        tx_stat_discard;
19949         /* Total Tx Error Drops per Port reported by STATS block */
19950         uint64_t        tx_stat_error;
19951 } __rte_packed;
19952
19953 /* Port Rx Statistics Format */
19954 /* rx_port_stats (size:4224b/528B) */
19955 struct rx_port_stats {
19956         /* Total Number of 64 Bytes frames received */
19957         uint64_t        rx_64b_frames;
19958         /* Total Number of 65-127 Bytes frames received */
19959         uint64_t        rx_65b_127b_frames;
19960         /* Total Number of 128-255 Bytes frames received */
19961         uint64_t        rx_128b_255b_frames;
19962         /* Total Number of 256-511 Bytes frames received */
19963         uint64_t        rx_256b_511b_frames;
19964         /* Total Number of 512-1023 Bytes frames received */
19965         uint64_t        rx_512b_1023b_frames;
19966         /* Total Number of 1024-1518 Bytes frames received */
19967         uint64_t        rx_1024b_1518b_frames;
19968         /*
19969          * Total Number of each good VLAN (exludes FCS errors)
19970          * frame received which is 1519 to 1522 bytes in length
19971          * inclusive (excluding framing bits but including FCS bytes).
19972          */
19973         uint64_t        rx_good_vlan_frames;
19974         /* Total Number of 1519-2047 Bytes frames received */
19975         uint64_t        rx_1519b_2047b_frames;
19976         /* Total Number of 2048-4095 Bytes frames received */
19977         uint64_t        rx_2048b_4095b_frames;
19978         /* Total Number of 4096-9216 Bytes frames received */
19979         uint64_t        rx_4096b_9216b_frames;
19980         /* Total Number of 9217-16383 Bytes frames received */
19981         uint64_t        rx_9217b_16383b_frames;
19982         /* Total number of frames received */
19983         uint64_t        rx_total_frames;
19984         /* Total number of unicast frames received */
19985         uint64_t        rx_ucast_frames;
19986         /* Total number of multicast frames received */
19987         uint64_t        rx_mcast_frames;
19988         /* Total number of broadcast frames received */
19989         uint64_t        rx_bcast_frames;
19990         /* Total number of received frames with FCS error */
19991         uint64_t        rx_fcs_err_frames;
19992         /* Total number of control frames received */
19993         uint64_t        rx_ctrl_frames;
19994         /* Total number of PAUSE frames received */
19995         uint64_t        rx_pause_frames;
19996         /* Total number of PFC frames received */
19997         uint64_t        rx_pfc_frames;
19998         /*
19999          * Total number of frames received with an unsupported
20000          * opcode
20001          */
20002         uint64_t        rx_unsupported_opcode_frames;
20003         /*
20004          * Total number of frames received with an unsupported
20005          * DA for pause and PFC
20006          */
20007         uint64_t        rx_unsupported_da_pausepfc_frames;
20008         /* Total number of frames received with an unsupported SA */
20009         uint64_t        rx_wrong_sa_frames;
20010         /* Total number of received packets with alignment error */
20011         uint64_t        rx_align_err_frames;
20012         /* Total number of received frames with out-of-range length */
20013         uint64_t        rx_oor_len_frames;
20014         /* Total number of received frames with error termination */
20015         uint64_t        rx_code_err_frames;
20016         /*
20017          * Total number of received frames with a false carrier is
20018          * detected during idle, as defined by RX_ER samples active
20019          * and RXD is 0xE. The event is reported along with the
20020          * statistics generated on the next received frame. Only
20021          * one false carrier condition can be detected and logged
20022          * between frames.
20023          *
20024          * Carrier event, valid for 10M/100M speed modes only.
20025          */
20026         uint64_t        rx_false_carrier_frames;
20027         /* Total number of over-sized frames received */
20028         uint64_t        rx_ovrsz_frames;
20029         /* Total number of jabber packets received */
20030         uint64_t        rx_jbr_frames;
20031         /* Total number of received frames with MTU error */
20032         uint64_t        rx_mtu_err_frames;
20033         /* Total number of received frames with CRC match */
20034         uint64_t        rx_match_crc_frames;
20035         /* Total number of frames received promiscuously */
20036         uint64_t        rx_promiscuous_frames;
20037         /*
20038          * Total number of received frames with one or two VLAN
20039          * tags
20040          */
20041         uint64_t        rx_tagged_frames;
20042         /* Total number of received frames with two VLAN tags */
20043         uint64_t        rx_double_tagged_frames;
20044         /* Total number of truncated frames received */
20045         uint64_t        rx_trunc_frames;
20046         /* Total number of good frames (without errors) received */
20047         uint64_t        rx_good_frames;
20048         /*
20049          * Total number of received PFC frames with transition from
20050          * XON to XOFF on Pri 0
20051          */
20052         uint64_t        rx_pfc_xon2xoff_frames_pri0;
20053         /*
20054          * Total number of received PFC frames with transition from
20055          * XON to XOFF on Pri 1
20056          */
20057         uint64_t        rx_pfc_xon2xoff_frames_pri1;
20058         /*
20059          * Total number of received PFC frames with transition from
20060          * XON to XOFF on Pri 2
20061          */
20062         uint64_t        rx_pfc_xon2xoff_frames_pri2;
20063         /*
20064          * Total number of received PFC frames with transition from
20065          * XON to XOFF on Pri 3
20066          */
20067         uint64_t        rx_pfc_xon2xoff_frames_pri3;
20068         /*
20069          * Total number of received PFC frames with transition from
20070          * XON to XOFF on Pri 4
20071          */
20072         uint64_t        rx_pfc_xon2xoff_frames_pri4;
20073         /*
20074          * Total number of received PFC frames with transition from
20075          * XON to XOFF on Pri 5
20076          */
20077         uint64_t        rx_pfc_xon2xoff_frames_pri5;
20078         /*
20079          * Total number of received PFC frames with transition from
20080          * XON to XOFF on Pri 6
20081          */
20082         uint64_t        rx_pfc_xon2xoff_frames_pri6;
20083         /*
20084          * Total number of received PFC frames with transition from
20085          * XON to XOFF on Pri 7
20086          */
20087         uint64_t        rx_pfc_xon2xoff_frames_pri7;
20088         /*
20089          * Total number of received PFC frames with PFC enabled
20090          * bit for Pri 0
20091          */
20092         uint64_t        rx_pfc_ena_frames_pri0;
20093         /*
20094          * Total number of received PFC frames with PFC enabled
20095          * bit for Pri 1
20096          */
20097         uint64_t        rx_pfc_ena_frames_pri1;
20098         /*
20099          * Total number of received PFC frames with PFC enabled
20100          * bit for Pri 2
20101          */
20102         uint64_t        rx_pfc_ena_frames_pri2;
20103         /*
20104          * Total number of received PFC frames with PFC enabled
20105          * bit for Pri 3
20106          */
20107         uint64_t        rx_pfc_ena_frames_pri3;
20108         /*
20109          * Total number of received PFC frames with PFC enabled
20110          * bit for Pri 4
20111          */
20112         uint64_t        rx_pfc_ena_frames_pri4;
20113         /*
20114          * Total number of received PFC frames with PFC enabled
20115          * bit for Pri 5
20116          */
20117         uint64_t        rx_pfc_ena_frames_pri5;
20118         /*
20119          * Total number of received PFC frames with PFC enabled
20120          * bit for Pri 6
20121          */
20122         uint64_t        rx_pfc_ena_frames_pri6;
20123         /*
20124          * Total number of received PFC frames with PFC enabled
20125          * bit for Pri 7
20126          */
20127         uint64_t        rx_pfc_ena_frames_pri7;
20128         /* Total Number of frames received with SCH CRC error */
20129         uint64_t        rx_sch_crc_err_frames;
20130         /* Total Number of under-sized frames received */
20131         uint64_t        rx_undrsz_frames;
20132         /* Total Number of fragmented frames received */
20133         uint64_t        rx_frag_frames;
20134         /* Total number of RX EEE LPI Events */
20135         uint64_t        rx_eee_lpi_events;
20136         /* EEE LPI Duration Counter on RX */
20137         uint64_t        rx_eee_lpi_duration;
20138         /*
20139          * Total number of physical type Link Level Flow Control
20140          * (LLFC) messages received
20141          */
20142         uint64_t        rx_llfc_physical_msgs;
20143         /*
20144          * Total number of logical type Link Level Flow Control
20145          * (LLFC) messages received
20146          */
20147         uint64_t        rx_llfc_logical_msgs;
20148         /*
20149          * Total number of logical type Link Level Flow Control
20150          * (LLFC) messages received with CRC error
20151          */
20152         uint64_t        rx_llfc_msgs_with_crc_err;
20153         /* Total number of HCFC messages received */
20154         uint64_t        rx_hcfc_msgs;
20155         /* Total number of HCFC messages received with CRC error */
20156         uint64_t        rx_hcfc_msgs_with_crc_err;
20157         /* Total number of received bytes */
20158         uint64_t        rx_bytes;
20159         /* Total number of bytes received in runt frames */
20160         uint64_t        rx_runt_bytes;
20161         /* Total number of runt frames received */
20162         uint64_t        rx_runt_frames;
20163         /* Total Rx Discards per Port reported by STATS block */
20164         uint64_t        rx_stat_discard;
20165         uint64_t        rx_stat_err;
20166 } __rte_packed;
20167
20168 /********************
20169  * hwrm_port_qstats *
20170  ********************/
20171
20172
20173 /* hwrm_port_qstats_input (size:320b/40B) */
20174 struct hwrm_port_qstats_input {
20175         /* The HWRM command request type. */
20176         uint16_t        req_type;
20177         /*
20178          * The completion ring to send the completion event on. This should
20179          * be the NQ ID returned from the `nq_alloc` HWRM command.
20180          */
20181         uint16_t        cmpl_ring;
20182         /*
20183          * The sequence ID is used by the driver for tracking multiple
20184          * commands. This ID is treated as opaque data by the firmware and
20185          * the value is returned in the `hwrm_resp_hdr` upon completion.
20186          */
20187         uint16_t        seq_id;
20188         /*
20189          * The target ID of the command:
20190          * * 0x0-0xFFF8 - The function ID
20191          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
20192          * * 0xFFFD - Reserved for user-space HWRM interface
20193          * * 0xFFFF - HWRM
20194          */
20195         uint16_t        target_id;
20196         /*
20197          * A physical address pointer pointing to a host buffer that the
20198          * command's response data will be written. This can be either a host
20199          * physical address (HPA) or a guest physical address (GPA) and must
20200          * point to a physically contiguous block of memory.
20201          */
20202         uint64_t        resp_addr;
20203         /* Port ID of port that is being queried. */
20204         uint16_t        port_id;
20205         uint8_t flags;
20206         /* This value is not used to avoid backward compatibility issues. */
20207         #define HWRM_PORT_QSTATS_INPUT_FLAGS_UNUSED       UINT32_C(0x0)
20208         /*
20209          * This bit is set to 1 when request is for a counter mask,
20210          * representing the width of each of the stats counters, rather
20211          * than counters themselves.
20212          */
20213         #define HWRM_PORT_QSTATS_INPUT_FLAGS_COUNTER_MASK UINT32_C(0x1)
20214         #define HWRM_PORT_QSTATS_INPUT_FLAGS_LAST \
20215                 HWRM_PORT_QSTATS_INPUT_FLAGS_COUNTER_MASK
20216         uint8_t unused_0[5];
20217         /*
20218          * This is the host address where
20219          * Tx port statistics will be stored
20220          */
20221         uint64_t        tx_stat_host_addr;
20222         /*
20223          * This is the host address where
20224          * Rx port statistics will be stored
20225          */
20226         uint64_t        rx_stat_host_addr;
20227 } __rte_packed;
20228
20229 /* hwrm_port_qstats_output (size:128b/16B) */
20230 struct hwrm_port_qstats_output {
20231         /* The specific error status for the command. */
20232         uint16_t        error_code;
20233         /* The HWRM command request type. */
20234         uint16_t        req_type;
20235         /* The sequence ID from the original command. */
20236         uint16_t        seq_id;
20237         /* The length of the response data in number of bytes. */
20238         uint16_t        resp_len;
20239         /* The size of TX port statistics block in bytes. */
20240         uint16_t        tx_stat_size;
20241         /* The size of RX port statistics block in bytes. */
20242         uint16_t        rx_stat_size;
20243         uint8_t unused_0[3];
20244         /*
20245          * This field is used in Output records to indicate that the output
20246          * is completely written to RAM.  This field should be read as '1'
20247          * to indicate that the output has been completely written.
20248          * When writing a command completion or response to an internal processor,
20249          * the order of writes has to be such that this field is written last.
20250          */
20251         uint8_t valid;
20252 } __rte_packed;
20253
20254 /* Port Tx Statistics extended Format */
20255 /* tx_port_stats_ext (size:2048b/256B) */
20256 struct tx_port_stats_ext {
20257         /* Total number of tx bytes count on cos queue 0 */
20258         uint64_t        tx_bytes_cos0;
20259         /* Total number of tx bytes count on cos queue 1 */
20260         uint64_t        tx_bytes_cos1;
20261         /* Total number of tx bytes count on cos queue 2 */
20262         uint64_t        tx_bytes_cos2;
20263         /* Total number of tx bytes count on cos queue 3 */
20264         uint64_t        tx_bytes_cos3;
20265         /* Total number of tx bytes count on cos queue 4 */
20266         uint64_t        tx_bytes_cos4;
20267         /* Total number of tx bytes count on cos queue 5 */
20268         uint64_t        tx_bytes_cos5;
20269         /* Total number of tx bytes count on cos queue 6 */
20270         uint64_t        tx_bytes_cos6;
20271         /* Total number of tx bytes count on cos queue 7 */
20272         uint64_t        tx_bytes_cos7;
20273         /* Total number of tx packets count on cos queue 0 */
20274         uint64_t        tx_packets_cos0;
20275         /* Total number of tx packets count on cos queue 1 */
20276         uint64_t        tx_packets_cos1;
20277         /* Total number of tx packets count on cos queue 2 */
20278         uint64_t        tx_packets_cos2;
20279         /* Total number of tx packets count on cos queue 3 */
20280         uint64_t        tx_packets_cos3;
20281         /* Total number of tx packets count on cos queue 4 */
20282         uint64_t        tx_packets_cos4;
20283         /* Total number of tx packets count on cos queue 5 */
20284         uint64_t        tx_packets_cos5;
20285         /* Total number of tx packets count on cos queue 6 */
20286         uint64_t        tx_packets_cos6;
20287         /* Total number of tx packets count on cos queue 7 */
20288         uint64_t        tx_packets_cos7;
20289         /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 0 */
20290         uint64_t        pfc_pri0_tx_duration_us;
20291         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 0 */
20292         uint64_t        pfc_pri0_tx_transitions;
20293         /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 1 */
20294         uint64_t        pfc_pri1_tx_duration_us;
20295         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 1 */
20296         uint64_t        pfc_pri1_tx_transitions;
20297         /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 2 */
20298         uint64_t        pfc_pri2_tx_duration_us;
20299         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 2 */
20300         uint64_t        pfc_pri2_tx_transitions;
20301         /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 3 */
20302         uint64_t        pfc_pri3_tx_duration_us;
20303         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 3 */
20304         uint64_t        pfc_pri3_tx_transitions;
20305         /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 4 */
20306         uint64_t        pfc_pri4_tx_duration_us;
20307         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 4 */
20308         uint64_t        pfc_pri4_tx_transitions;
20309         /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 5 */
20310         uint64_t        pfc_pri5_tx_duration_us;
20311         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 5 */
20312         uint64_t        pfc_pri5_tx_transitions;
20313         /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 6 */
20314         uint64_t        pfc_pri6_tx_duration_us;
20315         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 6 */
20316         uint64_t        pfc_pri6_tx_transitions;
20317         /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 7 */
20318         uint64_t        pfc_pri7_tx_duration_us;
20319         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 7 */
20320         uint64_t        pfc_pri7_tx_transitions;
20321 } __rte_packed;
20322
20323 /* Port Rx Statistics extended Format */
20324 /* rx_port_stats_ext (size:3648b/456B) */
20325 struct rx_port_stats_ext {
20326         /* Number of times link state changed to down */
20327         uint64_t        link_down_events;
20328         /* Number of times the idle rings with pause bit are found */
20329         uint64_t        continuous_pause_events;
20330         /* Number of times the active rings pause bit resumed back */
20331         uint64_t        resume_pause_events;
20332         /* Number of times, the ROCE cos queue PFC is disabled to avoid pause flood/burst */
20333         uint64_t        continuous_roce_pause_events;
20334         /* Number of times, the ROCE cos queue PFC is enabled back */
20335         uint64_t        resume_roce_pause_events;
20336         /* Total number of rx bytes count on cos queue 0 */
20337         uint64_t        rx_bytes_cos0;
20338         /* Total number of rx bytes count on cos queue 1 */
20339         uint64_t        rx_bytes_cos1;
20340         /* Total number of rx bytes count on cos queue 2 */
20341         uint64_t        rx_bytes_cos2;
20342         /* Total number of rx bytes count on cos queue 3 */
20343         uint64_t        rx_bytes_cos3;
20344         /* Total number of rx bytes count on cos queue 4 */
20345         uint64_t        rx_bytes_cos4;
20346         /* Total number of rx bytes count on cos queue 5 */
20347         uint64_t        rx_bytes_cos5;
20348         /* Total number of rx bytes count on cos queue 6 */
20349         uint64_t        rx_bytes_cos6;
20350         /* Total number of rx bytes count on cos queue 7 */
20351         uint64_t        rx_bytes_cos7;
20352         /* Total number of rx packets count on cos queue 0 */
20353         uint64_t        rx_packets_cos0;
20354         /* Total number of rx packets count on cos queue 1 */
20355         uint64_t        rx_packets_cos1;
20356         /* Total number of rx packets count on cos queue 2 */
20357         uint64_t        rx_packets_cos2;
20358         /* Total number of rx packets count on cos queue 3 */
20359         uint64_t        rx_packets_cos3;
20360         /* Total number of rx packets count on cos queue 4 */
20361         uint64_t        rx_packets_cos4;
20362         /* Total number of rx packets count on cos queue 5 */
20363         uint64_t        rx_packets_cos5;
20364         /* Total number of rx packets count on cos queue 6 */
20365         uint64_t        rx_packets_cos6;
20366         /* Total number of rx packets count on cos queue 7 */
20367         uint64_t        rx_packets_cos7;
20368         /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 0 */
20369         uint64_t        pfc_pri0_rx_duration_us;
20370         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 0 */
20371         uint64_t        pfc_pri0_rx_transitions;
20372         /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 1 */
20373         uint64_t        pfc_pri1_rx_duration_us;
20374         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 1 */
20375         uint64_t        pfc_pri1_rx_transitions;
20376         /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 2 */
20377         uint64_t        pfc_pri2_rx_duration_us;
20378         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 2 */
20379         uint64_t        pfc_pri2_rx_transitions;
20380         /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 3 */
20381         uint64_t        pfc_pri3_rx_duration_us;
20382         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 3 */
20383         uint64_t        pfc_pri3_rx_transitions;
20384         /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 4 */
20385         uint64_t        pfc_pri4_rx_duration_us;
20386         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 4 */
20387         uint64_t        pfc_pri4_rx_transitions;
20388         /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 5 */
20389         uint64_t        pfc_pri5_rx_duration_us;
20390         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 5 */
20391         uint64_t        pfc_pri5_rx_transitions;
20392         /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 6 */
20393         uint64_t        pfc_pri6_rx_duration_us;
20394         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 6 */
20395         uint64_t        pfc_pri6_rx_transitions;
20396         /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 7 */
20397         uint64_t        pfc_pri7_rx_duration_us;
20398         /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 7 */
20399         uint64_t        pfc_pri7_rx_transitions;
20400         /* Total number of received bits */
20401         uint64_t        rx_bits;
20402         /* The number of events where the port receive buffer was over 85% full */
20403         uint64_t        rx_buffer_passed_threshold;
20404         /*
20405          * The number of symbol errors that wasn't corrected by FEC correction
20406          * alogirithm
20407          */
20408         uint64_t        rx_pcs_symbol_err;
20409         /* The number of corrected bits on the port according to active FEC */
20410         uint64_t        rx_corrected_bits;
20411         /* Total number of rx discard bytes count on cos queue 0 */
20412         uint64_t        rx_discard_bytes_cos0;
20413         /* Total number of rx discard bytes count on cos queue 1 */
20414         uint64_t        rx_discard_bytes_cos1;
20415         /* Total number of rx discard bytes count on cos queue 2 */
20416         uint64_t        rx_discard_bytes_cos2;
20417         /* Total number of rx discard bytes count on cos queue 3 */
20418         uint64_t        rx_discard_bytes_cos3;
20419         /* Total number of rx discard bytes count on cos queue 4 */
20420         uint64_t        rx_discard_bytes_cos4;
20421         /* Total number of rx discard bytes count on cos queue 5 */
20422         uint64_t        rx_discard_bytes_cos5;
20423         /* Total number of rx discard bytes count on cos queue 6 */
20424         uint64_t        rx_discard_bytes_cos6;
20425         /* Total number of rx discard bytes count on cos queue 7 */
20426         uint64_t        rx_discard_bytes_cos7;
20427         /* Total number of rx discard packets count on cos queue 0 */
20428         uint64_t        rx_discard_packets_cos0;
20429         /* Total number of rx discard packets count on cos queue 1 */
20430         uint64_t        rx_discard_packets_cos1;
20431         /* Total number of rx discard packets count on cos queue 2 */
20432         uint64_t        rx_discard_packets_cos2;
20433         /* Total number of rx discard packets count on cos queue 3 */
20434         uint64_t        rx_discard_packets_cos3;
20435         /* Total number of rx discard packets count on cos queue 4 */
20436         uint64_t        rx_discard_packets_cos4;
20437         /* Total number of rx discard packets count on cos queue 5 */
20438         uint64_t        rx_discard_packets_cos5;
20439         /* Total number of rx discard packets count on cos queue 6 */
20440         uint64_t        rx_discard_packets_cos6;
20441         /* Total number of rx discard packets count on cos queue 7 */
20442         uint64_t        rx_discard_packets_cos7;
20443 } __rte_packed;
20444
20445 /*
20446  * Port Rx Statistics extended PFC WatchDog Format.
20447  * StormDetect and StormRevert event determination is based
20448  * on an integration period and a percentage threshold.
20449  * StormDetect event - when percentage of XOFF frames received
20450  * within an integration period exceeds the configured threshold.
20451  * StormRevert event - when percentage of XON frames received
20452  * within an integration period exceeds the configured threshold.
20453  * Actual number of XOFF/XON frames for the events to be triggered
20454  * depends on both configured integration period and sampling rate.
20455  * The statistics in this structure represent counts of specified
20456  * events from the moment the feature (PFC WatchDog) is enabled via
20457  * hwrm_queue_pfc_enable_cfg call.
20458  */
20459 /* rx_port_stats_ext_pfc_wd (size:5120b/640B) */
20460 struct rx_port_stats_ext_pfc_wd {
20461         /*
20462          * Total number of PFC WatchDog StormDetect events detected
20463          * for Pri 0
20464          */
20465         uint64_t        rx_pfc_watchdog_storms_detected_pri0;
20466         /*
20467          * Total number of PFC WatchDog StormDetect events detected
20468          * for Pri 1
20469          */
20470         uint64_t        rx_pfc_watchdog_storms_detected_pri1;
20471         /*
20472          * Total number of PFC WatchDog StormDetect events detected
20473          * for Pri 2
20474          */
20475         uint64_t        rx_pfc_watchdog_storms_detected_pri2;
20476         /*
20477          * Total number of PFC WatchDog StormDetect events detected
20478          * for Pri 3
20479          */
20480         uint64_t        rx_pfc_watchdog_storms_detected_pri3;
20481         /*
20482          * Total number of PFC WatchDog StormDetect events detected
20483          * for Pri 4
20484          */
20485         uint64_t        rx_pfc_watchdog_storms_detected_pri4;
20486         /*
20487          * Total number of PFC WatchDog StormDetect events detected
20488          * for Pri 5
20489          */
20490         uint64_t        rx_pfc_watchdog_storms_detected_pri5;
20491         /*
20492          * Total number of PFC WatchDog StormDetect events detected
20493          * for Pri 6
20494          */
20495         uint64_t        rx_pfc_watchdog_storms_detected_pri6;
20496         /*
20497          * Total number of PFC WatchDog StormDetect events detected
20498          * for Pri 7
20499          */
20500         uint64_t        rx_pfc_watchdog_storms_detected_pri7;
20501         /*
20502          * Total number of PFC WatchDog StormRevert events detected
20503          * for Pri 0
20504          */
20505         uint64_t        rx_pfc_watchdog_storms_reverted_pri0;
20506         /*
20507          * Total number of PFC WatchDog StormRevert events detected
20508          * for Pri 1
20509          */
20510         uint64_t        rx_pfc_watchdog_storms_reverted_pri1;
20511         /*
20512          * Total number of PFC WatchDog StormRevert events detected
20513          * for Pri 2
20514          */
20515         uint64_t        rx_pfc_watchdog_storms_reverted_pri2;
20516         /*
20517          * Total number of PFC WatchDog StormRevert events detected
20518          * for Pri 3
20519          */
20520         uint64_t        rx_pfc_watchdog_storms_reverted_pri3;
20521         /*
20522          * Total number of PFC WatchDog StormRevert events detected
20523          * for Pri 4
20524          */
20525         uint64_t        rx_pfc_watchdog_storms_reverted_pri4;
20526         /*
20527          * Total number of PFC WatchDog StormRevert events detected
20528          * for Pri 5
20529          */
20530         uint64_t        rx_pfc_watchdog_storms_reverted_pri5;
20531         /*
20532          * Total number of PFC WatchDog StormRevert events detected
20533          * for Pri 6
20534          */
20535         uint64_t        rx_pfc_watchdog_storms_reverted_pri6;
20536         /*
20537          * Total number of PFC WatchDog StormRevert events detected
20538          * for Pri 7
20539          */
20540         uint64_t        rx_pfc_watchdog_storms_reverted_pri7;
20541         /*
20542          * Total number of packets received during PFC watchdog storm
20543          * for pri 0
20544          */
20545         uint64_t        rx_pfc_watchdog_storms_rx_packets_pri0;
20546         /*
20547          * Total number of packets received during PFC watchdog storm
20548          * for pri 1
20549          */
20550         uint64_t        rx_pfc_watchdog_storms_rx_packets_pri1;
20551         /*
20552          * Total number of packets received during PFC watchdog storm
20553          *  for pri 2
20554          */
20555         uint64_t        rx_pfc_watchdog_storms_rx_packets_pri2;
20556         /*
20557          * Total number of packets received during PFC watchdog storm
20558          *  for pri 3
20559          */
20560         uint64_t        rx_pfc_watchdog_storms_rx_packets_pri3;
20561         /*
20562          * Total number of packets received during PFC watchdog storm
20563          *  for pri 4
20564          */
20565         uint64_t        rx_pfc_watchdog_storms_rx_packets_pri4;
20566         /*
20567          * Total number of packets received during PFC watchdog storm
20568          *  for pri 5
20569          */
20570         uint64_t        rx_pfc_watchdog_storms_rx_packets_pri5;
20571         /*
20572          * Total number of packets received during PFC watchdog storm
20573          *  for pri 6
20574          */
20575         uint64_t        rx_pfc_watchdog_storms_rx_packets_pri6;
20576         /*
20577          * Total number of packets received during PFC watchdog storm
20578          *  for pri 7
20579          */
20580         uint64_t        rx_pfc_watchdog_storms_rx_packets_pri7;
20581         /*
20582          * Total number of bytes received during PFC watchdog storm
20583          * for pri 0
20584          */
20585         uint64_t        rx_pfc_watchdog_storms_rx_bytes_pri0;
20586         /*
20587          * Total number of bytes received during PFC watchdog storm
20588          * for pri 1
20589          */
20590         uint64_t        rx_pfc_watchdog_storms_rx_bytes_pri1;
20591         /*
20592          * Total number of bytes received during PFC watchdog storm
20593          *  for pri 2
20594          */
20595         uint64_t        rx_pfc_watchdog_storms_rx_bytes_pri2;
20596         /*
20597          * Total number of bytes received during PFC watchdog storm
20598          *  for pri 3
20599          */
20600         uint64_t        rx_pfc_watchdog_storms_rx_bytes_pri3;
20601         /*
20602          * Total number of bytes received during PFC watchdog storm
20603          *  for pri 4
20604          */
20605         uint64_t        rx_pfc_watchdog_storms_rx_bytes_pri4;
20606         /*
20607          * Total number of bytes received during PFC watchdog storm
20608          *  for pri 5
20609          */
20610         uint64_t        rx_pfc_watchdog_storms_rx_bytes_pri5;
20611         /*
20612          * Total number of bytes received during PFC watchdog storm
20613          *  for pri 6
20614          */
20615         uint64_t        rx_pfc_watchdog_storms_rx_bytes_pri6;
20616         /*
20617          * Total number of bytes received during PFC watchdog storm
20618          *  for pri 7
20619          */
20620         uint64_t        rx_pfc_watchdog_storms_rx_bytes_pri7;
20621         /*
20622          * Total number of packets dropped on rx during PFC watchdog storm
20623          * for pri 0
20624          */
20625         uint64_t        rx_pfc_watchdog_storms_rx_packets_dropped_pri0;
20626         /*
20627          * Total number of packets dropped on rx during PFC watchdog storm
20628          * for pri 1
20629          */
20630         uint64_t        rx_pfc_watchdog_storms_rx_packets_dropped_pri1;
20631         /*
20632          * Total number of packets dropped on rx during PFC watchdog storm
20633          *  for pri 2
20634          */
20635         uint64_t        rx_pfc_watchdog_storms_rx_packets_dropped_pri2;
20636         /*
20637          * Total number of packets dropped on rx during PFC watchdog storm
20638          *  for pri 3
20639          */
20640         uint64_t        rx_pfc_watchdog_storms_rx_packets_dropped_pri3;
20641         /*
20642          * Total number of packets dropped on rx during PFC watchdog storm
20643          *  for pri 4
20644          */
20645         uint64_t        rx_pfc_watchdog_storms_rx_packets_dropped_pri4;
20646         /*
20647          * Total number of packets dropped on rx during PFC watchdog storm
20648          *  for pri 5
20649          */
20650         uint64_t        rx_pfc_watchdog_storms_rx_packets_dropped_pri5;
20651         /*
20652          * Total number of packets dropped on rx during PFC watchdog storm
20653          *  for pri 6
20654          */
20655         uint64_t        rx_pfc_watchdog_storms_rx_packets_dropped_pri6;
20656         /*
20657          * Total number of packets dropped on rx during PFC watchdog storm
20658          *  for pri 7
20659          */
20660         uint64_t        rx_pfc_watchdog_storms_rx_packets_dropped_pri7;
20661         /*
20662          * Total number of bytes dropped on rx during PFC watchdog storm
20663          * for pri 0
20664          */
20665         uint64_t        rx_pfc_watchdog_storms_rx_bytes_dropped_pri0;
20666         /*
20667          * Total number of bytes dropped on rx during PFC watchdog storm
20668          * for pri 1
20669          */
20670         uint64_t        rx_pfc_watchdog_storms_rx_bytes_dropped_pri1;
20671         /*
20672          * Total number of bytes dropped on rx during PFC watchdog storm
20673          *  for pri 2
20674          */
20675         uint64_t        rx_pfc_watchdog_storms_rx_bytes_dropped_pri2;
20676         /*
20677          * Total number of bytes dropped on rx during PFC watchdog storm
20678          *  for pri 3
20679          */
20680         uint64_t        rx_pfc_watchdog_storms_rx_bytes_dropped_pri3;
20681         /*
20682          * Total number of bytes dropped on rx during PFC watchdog storm
20683          *  for pri 4
20684          */
20685         uint64_t        rx_pfc_watchdog_storms_rx_bytes_dropped_pri4;
20686         /*
20687          * Total number of bytes dropped on rx during PFC watchdog storm
20688          *  for pri 5
20689          */
20690         uint64_t        rx_pfc_watchdog_storms_rx_bytes_dropped_pri5;
20691         /*
20692          * Total number of bytes dropped on rx during PFC watchdog storm
20693          *  for pri 6
20694          */
20695         uint64_t        rx_pfc_watchdog_storms_rx_bytes_dropped_pri6;
20696         /*
20697          * Total number of bytes dropped on rx during PFC watchdog storm
20698          *  for pri 7
20699          */
20700         uint64_t        rx_pfc_watchdog_storms_rx_bytes_dropped_pri7;
20701         /*
20702          * Number of packets received during last PFC watchdog storm
20703          * for pri 0
20704          */
20705         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_pri0;
20706         /*
20707          * Number of packets received during last PFC watchdog storm
20708          * for pri 1
20709          */
20710         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_pri1;
20711         /*
20712          * Number of packets received during last PFC watchdog storm
20713          *  for pri 2
20714          */
20715         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_pri2;
20716         /*
20717          * Number of packets received during last PFC watchdog storm
20718          *  for pri 3
20719          */
20720         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_pri3;
20721         /*
20722          * Number of packets received during last PFC watchdog storm
20723          *  for pri 4
20724          */
20725         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_pri4;
20726         /*
20727          * Number of packets received during last PFC watchdog storm
20728          *  for pri 5
20729          */
20730         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_pri5;
20731         /*
20732          * Number of packets received during last PFC watchdog storm
20733          *  for pri 6
20734          */
20735         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_pri6;
20736         /*
20737          * Number of packets received during last PFC watchdog storm
20738          *  for pri 7
20739          */
20740         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_pri7;
20741         /*
20742          * Number of bytes received during last PFC watchdog storm
20743          * for pri 0
20744          */
20745         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_pri0;
20746         /*
20747          * Number of bytes received during last PFC watchdog storm
20748          * for pri 1
20749          */
20750         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_pri1;
20751         /*
20752          * Number of bytes received during last PFC watchdog storm
20753          *  for pri 2
20754          */
20755         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_pri2;
20756         /*
20757          * Number of bytes received during last PFC watchdog storm
20758          *  for pri 3
20759          */
20760         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_pri3;
20761         /*
20762          * Number of bytes received during last PFC watchdog storm
20763          *  for pri 4
20764          */
20765         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_pri4;
20766         /*
20767          * Number of bytes received during last PFC watchdog storm
20768          *  for pri 5
20769          */
20770         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_pri5;
20771         /*
20772          * Number of bytes received during last PFC watchdog storm
20773          *  for pri 6
20774          */
20775         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_pri6;
20776         /*
20777          * Number of bytes received during last PFC watchdog storm
20778          *  for pri 7
20779          */
20780         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_pri7;
20781         /*
20782          * Number of packets dropped on rx during last PFC watchdog storm
20783          * for pri 0
20784          */
20785         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_dropped_pri0;
20786         /*
20787          * Number of packets dropped on rx during last PFC watchdog storm
20788          * for pri 1
20789          */
20790         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_dropped_pri1;
20791         /*
20792          * Number of packets dropped on rx during last PFC watchdog storm
20793          *  for pri 2
20794          */
20795         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_dropped_pri2;
20796         /*
20797          * Number of packets dropped on rx during last PFC watchdog storm
20798          *  for pri 3
20799          */
20800         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_dropped_pri3;
20801         /*
20802          * Number of packets dropped on rx during last PFC watchdog storm
20803          *  for pri 4
20804          */
20805         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_dropped_pri4;
20806         /*
20807          * Number of packets dropped on rx during last PFC watchdog storm
20808          *  for pri 5
20809          */
20810         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_dropped_pri5;
20811         /*
20812          * Number of packets dropped on rx during last PFC watchdog storm
20813          *  for pri 6
20814          */
20815         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_dropped_pri6;
20816         /*
20817          * Number of packets dropped on rx during last PFC watchdog storm
20818          *  for pri 7
20819          */
20820         uint64_t        rx_pfc_watchdog_last_storm_rx_packets_dropped_pri7;
20821         /*
20822          * Total number of bytes dropped on rx during PFC watchdog storm
20823          * for pri 0
20824          */
20825         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri0;
20826         /*
20827          * Number of bytes dropped on rx during last PFC watchdog storm
20828          * for pri 1
20829          */
20830         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri1;
20831         /*
20832          * Number of bytes dropped on rx during last PFC watchdog storm
20833          *  for pri 2
20834          */
20835         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri2;
20836         /*
20837          * Number of bytes dropped on rx during last PFC watchdog storm
20838          *  for pri 3
20839          */
20840         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri3;
20841         /*
20842          * Number of bytes dropped on rx during last PFC watchdog storm
20843          *  for pri 4
20844          */
20845         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri4;
20846         /*
20847          * Number of bytes dropped on rx during last PFC watchdog storm
20848          *  for pri 5
20849          */
20850         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri5;
20851         /*
20852          * Number of bytes dropped on rx during last PFC watchdog storm
20853          *  for pri 6
20854          */
20855         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri6;
20856         /*
20857          * Number of bytes dropped on rx during last PFC watchdog storm
20858          *  for pri 7
20859          */
20860         uint64_t        rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri7;
20861 } __rte_packed;
20862
20863 /************************
20864  * hwrm_port_qstats_ext *
20865  ************************/
20866
20867
20868 /* hwrm_port_qstats_ext_input (size:320b/40B) */
20869 struct hwrm_port_qstats_ext_input {
20870         /* The HWRM command request type. */
20871         uint16_t        req_type;
20872         /*
20873          * The completion ring to send the completion event on. This should
20874          * be the NQ ID returned from the `nq_alloc` HWRM command.
20875          */
20876         uint16_t        cmpl_ring;
20877         /*
20878          * The sequence ID is used by the driver for tracking multiple
20879          * commands. This ID is treated as opaque data by the firmware and
20880          * the value is returned in the `hwrm_resp_hdr` upon completion.
20881          */
20882         uint16_t        seq_id;
20883         /*
20884          * The target ID of the command:
20885          * * 0x0-0xFFF8 - The function ID
20886          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
20887          * * 0xFFFD - Reserved for user-space HWRM interface
20888          * * 0xFFFF - HWRM
20889          */
20890         uint16_t        target_id;
20891         /*
20892          * A physical address pointer pointing to a host buffer that the
20893          * command's response data will be written. This can be either a host
20894          * physical address (HPA) or a guest physical address (GPA) and must
20895          * point to a physically contiguous block of memory.
20896          */
20897         uint64_t        resp_addr;
20898         /* Port ID of port that is being queried. */
20899         uint16_t        port_id;
20900         /*
20901          * The size of TX port extended
20902          * statistics block in bytes.
20903          */
20904         uint16_t        tx_stat_size;
20905         /*
20906          * The size of RX port extended
20907          * statistics block in bytes
20908          */
20909         uint16_t        rx_stat_size;
20910         uint8_t flags;
20911         /* This value is not used to avoid backward compatibility issues. */
20912         #define HWRM_PORT_QSTATS_EXT_INPUT_FLAGS_UNUSED       UINT32_C(0x0)
20913         /*
20914          * This bit is set to 1 when request is for the counter mask,
20915          * representing width of each of the stats counters, rather than
20916          * counters themselves.
20917          */
20918         #define HWRM_PORT_QSTATS_EXT_INPUT_FLAGS_COUNTER_MASK UINT32_C(0x1)
20919         #define HWRM_PORT_QSTATS_EXT_INPUT_FLAGS_LAST \
20920                 HWRM_PORT_QSTATS_EXT_INPUT_FLAGS_COUNTER_MASK
20921         uint8_t unused_0;
20922         /*
20923          * This is the host address where
20924          * Tx port statistics will be stored
20925          */
20926         uint64_t        tx_stat_host_addr;
20927         /*
20928          * This is the host address where
20929          * Rx port statistics will be stored
20930          */
20931         uint64_t        rx_stat_host_addr;
20932 } __rte_packed;
20933
20934 /* hwrm_port_qstats_ext_output (size:128b/16B) */
20935 struct hwrm_port_qstats_ext_output {
20936         /* The specific error status for the command. */
20937         uint16_t        error_code;
20938         /* The HWRM command request type. */
20939         uint16_t        req_type;
20940         /* The sequence ID from the original command. */
20941         uint16_t        seq_id;
20942         /* The length of the response data in number of bytes. */
20943         uint16_t        resp_len;
20944         /* The size of TX port statistics block in bytes. */
20945         uint16_t        tx_stat_size;
20946         /* The size of RX port statistics block in bytes. */
20947         uint16_t        rx_stat_size;
20948         /* Total number of active cos queues available. */
20949         uint16_t        total_active_cos_queues;
20950         uint8_t flags;
20951         /*
20952          * If set to 1, then this field indicates that clear
20953          * roce specific counters is supported.
20954          */
20955         #define HWRM_PORT_QSTATS_EXT_OUTPUT_FLAGS_CLEAR_ROCE_COUNTERS_SUPPORTED \
20956                 UINT32_C(0x1)
20957         /*
20958          * This field is used in Output records to indicate that the output
20959          * is completely written to RAM.  This field should be read as '1'
20960          * to indicate that the output has been completely written.
20961          * When writing a command completion or response to an internal processor,
20962          * the order of writes has to be such that this field is written last.
20963          */
20964         uint8_t valid;
20965 } __rte_packed;
20966
20967 /*******************************
20968  * hwrm_port_qstats_ext_pfc_wd *
20969  *******************************/
20970
20971
20972 /* hwrm_port_qstats_ext_pfc_wd_input (size:256b/32B) */
20973 struct hwrm_port_qstats_ext_pfc_wd_input {
20974         /* The HWRM command request type. */
20975         uint16_t        req_type;
20976         /*
20977          * The completion ring to send the completion event on. This should
20978          * be the NQ ID returned from the `nq_alloc` HWRM command.
20979          */
20980         uint16_t        cmpl_ring;
20981         /*
20982          * The sequence ID is used by the driver for tracking multiple
20983          * commands. This ID is treated as opaque data by the firmware and
20984          * the value is returned in the `hwrm_resp_hdr` upon completion.
20985          */
20986         uint16_t        seq_id;
20987         /*
20988          * The target ID of the command:
20989          * * 0x0-0xFFF8 - The function ID
20990          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
20991          * * 0xFFFD - Reserved for user-space HWRM interface
20992          * * 0xFFFF - HWRM
20993          */
20994         uint16_t        target_id;
20995         /*
20996          * A physical address pointer pointing to a host buffer that the
20997          * command's response data will be written. This can be either a host
20998          * physical address (HPA) or a guest physical address (GPA) and must
20999          * point to a physically contiguous block of memory.
21000          */
21001         uint64_t        resp_addr;
21002         /* Port ID of port that is being queried. */
21003         uint16_t        port_id;
21004         /*
21005          * The size of rx_port_stats_ext_pfc_wd
21006          * block in bytes
21007          */
21008         uint16_t        pfc_wd_stat_size;
21009         uint8_t unused_0[4];
21010         /*
21011          * This is the host address where
21012          * rx_port_stats_ext_pfc_wd will be stored
21013          */
21014         uint64_t        pfc_wd_stat_host_addr;
21015 } __rte_packed;
21016
21017 /* hwrm_port_qstats_ext_pfc_wd_output (size:128b/16B) */
21018 struct hwrm_port_qstats_ext_pfc_wd_output {
21019         /* The specific error status for the command. */
21020         uint16_t        error_code;
21021         /* The HWRM command request type. */
21022         uint16_t        req_type;
21023         /* The sequence ID from the original command. */
21024         uint16_t        seq_id;
21025         /* The length of the response data in number of bytes. */
21026         uint16_t        resp_len;
21027         /*
21028          * The size of rx_port_stats_ext_pfc_wd
21029          * statistics block in bytes.
21030          */
21031         uint16_t        pfc_wd_stat_size;
21032         uint8_t flags;
21033         /*
21034          * This field is used in Output records to indicate that the output
21035          * is completely written to RAM.  This field should be read as '1'
21036          * to indicate that the output has been completely written.
21037          * When writing a command completion or response to an internal processor,
21038          * the order of writes has to be such that this field is written last.
21039          */
21040         uint8_t valid;
21041         uint8_t unused_0[4];
21042 } __rte_packed;
21043
21044 /*************************
21045  * hwrm_port_lpbk_qstats *
21046  *************************/
21047
21048
21049 /* hwrm_port_lpbk_qstats_input (size:128b/16B) */
21050 struct hwrm_port_lpbk_qstats_input {
21051         /* The HWRM command request type. */
21052         uint16_t        req_type;
21053         /*
21054          * The completion ring to send the completion event on. This should
21055          * be the NQ ID returned from the `nq_alloc` HWRM command.
21056          */
21057         uint16_t        cmpl_ring;
21058         /*
21059          * The sequence ID is used by the driver for tracking multiple
21060          * commands. This ID is treated as opaque data by the firmware and
21061          * the value is returned in the `hwrm_resp_hdr` upon completion.
21062          */
21063         uint16_t        seq_id;
21064         /*
21065          * The target ID of the command:
21066          * * 0x0-0xFFF8 - The function ID
21067          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
21068          * * 0xFFFD - Reserved for user-space HWRM interface
21069          * * 0xFFFF - HWRM
21070          */
21071         uint16_t        target_id;
21072         /*
21073          * A physical address pointer pointing to a host buffer that the
21074          * command's response data will be written. This can be either a host
21075          * physical address (HPA) or a guest physical address (GPA) and must
21076          * point to a physically contiguous block of memory.
21077          */
21078         uint64_t        resp_addr;
21079 } __rte_packed;
21080
21081 /* hwrm_port_lpbk_qstats_output (size:768b/96B) */
21082 struct hwrm_port_lpbk_qstats_output {
21083         /* The specific error status for the command. */
21084         uint16_t        error_code;
21085         /* The HWRM command request type. */
21086         uint16_t        req_type;
21087         /* The sequence ID from the original command. */
21088         uint16_t        seq_id;
21089         /* The length of the response data in number of bytes. */
21090         uint16_t        resp_len;
21091         /* Number of transmitted unicast frames */
21092         uint64_t        lpbk_ucast_frames;
21093         /* Number of transmitted multicast frames */
21094         uint64_t        lpbk_mcast_frames;
21095         /* Number of transmitted broadcast frames */
21096         uint64_t        lpbk_bcast_frames;
21097         /* Number of transmitted bytes for unicast traffic */
21098         uint64_t        lpbk_ucast_bytes;
21099         /* Number of transmitted bytes for multicast traffic */
21100         uint64_t        lpbk_mcast_bytes;
21101         /* Number of transmitted bytes for broadcast traffic */
21102         uint64_t        lpbk_bcast_bytes;
21103         /* Total Tx Drops for loopback traffic reported by STATS block */
21104         uint64_t        tx_stat_discard;
21105         /* Total Tx Error Drops for loopback traffic reported by STATS block */
21106         uint64_t        tx_stat_error;
21107         /* Total Rx Drops for loopback traffic reported by STATS block */
21108         uint64_t        rx_stat_discard;
21109         /* Total Rx Error Drops for loopback traffic reported by STATS block */
21110         uint64_t        rx_stat_error;
21111         uint8_t unused_0[7];
21112         /*
21113          * This field is used in Output records to indicate that the output
21114          * is completely written to RAM.  This field should be read as '1'
21115          * to indicate that the output has been completely written.
21116          * When writing a command completion or response to an internal processor,
21117          * the order of writes has to be such that this field is written last.
21118          */
21119         uint8_t valid;
21120 } __rte_packed;
21121
21122 /************************
21123  * hwrm_port_ecn_qstats *
21124  ************************/
21125
21126
21127 /* hwrm_port_ecn_qstats_input (size:256b/32B) */
21128 struct hwrm_port_ecn_qstats_input {
21129         /* The HWRM command request type. */
21130         uint16_t        req_type;
21131         /*
21132          * The completion ring to send the completion event on. This should
21133          * be the NQ ID returned from the `nq_alloc` HWRM command.
21134          */
21135         uint16_t        cmpl_ring;
21136         /*
21137          * The sequence ID is used by the driver for tracking multiple
21138          * commands. This ID is treated as opaque data by the firmware and
21139          * the value is returned in the `hwrm_resp_hdr` upon completion.
21140          */
21141         uint16_t        seq_id;
21142         /*
21143          * The target ID of the command:
21144          * * 0x0-0xFFF8 - The function ID
21145          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
21146          * * 0xFFFD - Reserved for user-space HWRM interface
21147          * * 0xFFFF - HWRM
21148          */
21149         uint16_t        target_id;
21150         /*
21151          * A physical address pointer pointing to a host buffer that the
21152          * command's response data will be written. This can be either a host
21153          * physical address (HPA) or a guest physical address (GPA) and must
21154          * point to a physically contiguous block of memory.
21155          */
21156         uint64_t        resp_addr;
21157         /*
21158          * Port ID of port that is being queried. Unused if NIC is in
21159          * multi-host mode.
21160          */
21161         uint16_t        port_id;
21162         /*
21163          * Size of the DMA buffer the caller has allocated for the firmware to
21164          * write into.
21165          */
21166         uint16_t        ecn_stat_buf_size;
21167         uint8_t flags;
21168         /* This value is not used to avoid backward compatibility issues. */
21169         #define HWRM_PORT_ECN_QSTATS_INPUT_FLAGS_UNUSED       UINT32_C(0x0)
21170         /*
21171          * This bit is set to 1 when request is for a counter mask,
21172          * representing the width of each of the stats counters, rather
21173          * than counters themselves.
21174          */
21175         #define HWRM_PORT_ECN_QSTATS_INPUT_FLAGS_COUNTER_MASK UINT32_C(0x1)
21176         #define HWRM_PORT_ECN_QSTATS_INPUT_FLAGS_LAST \
21177                 HWRM_PORT_ECN_QSTATS_INPUT_FLAGS_COUNTER_MASK
21178         uint8_t unused_0[3];
21179         /*
21180          * This is the host address where
21181          * ECN port statistics will be stored
21182          */
21183         uint64_t        ecn_stat_host_addr;
21184 } __rte_packed;
21185
21186 /* hwrm_port_ecn_qstats_output (size:128b/16B) */
21187 struct hwrm_port_ecn_qstats_output {
21188         /* The specific error status for the command. */
21189         uint16_t        error_code;
21190         /* The HWRM command request type. */
21191         uint16_t        req_type;
21192         /* The sequence ID from the original command. */
21193         uint16_t        seq_id;
21194         /* The length of the response data in number of bytes. */
21195         uint16_t        resp_len;
21196         /* Number of bytes of stats the firmware wrote to the DMA buffer. */
21197         uint16_t        ecn_stat_buf_size;
21198         /*
21199          * Bitmask that indicates which CoS queues have ECN marking enabled.
21200          * Bit i corresponds to CoS queue i.
21201          */
21202         uint8_t mark_en;
21203         uint8_t unused_0[4];
21204         /*
21205          * This field is used in Output records to indicate that the output
21206          * is completely written to RAM.  This field should be read as '1'
21207          * to indicate that the output has been completely written.
21208          * When writing a command completion or response to an internal processor,
21209          * the order of writes has to be such that this field is written last.
21210          */
21211         uint8_t valid;
21212 } __rte_packed;
21213
21214 /* ECN mark statistics format */
21215 /* port_stats_ecn (size:512b/64B) */
21216 struct port_stats_ecn {
21217         /*
21218          * Number of packets marked in CoS queue 0.
21219          * Or, if the driver requested counter masks, a mask to indicate the size
21220          * of the counter.
21221          */
21222         uint64_t        mark_cnt_cos0;
21223         /*
21224          * Number of packets marked in CoS queue 1.
21225          * Or, if the driver requested counter masks, a mask to indicate the size
21226          * of the counter.
21227          */
21228         uint64_t        mark_cnt_cos1;
21229         /*
21230          * Number of packets marked in CoS queue 2.
21231          * Or, if the driver requested counter masks, a mask to indicate the size
21232          * of the counter.
21233          */
21234         uint64_t        mark_cnt_cos2;
21235         /*
21236          * Number of packets marked in CoS queue 3.
21237          * Or, if the driver requested counter masks, a mask to indicate the size
21238          * of the counter.
21239          */
21240         uint64_t        mark_cnt_cos3;
21241         /*
21242          * Number of packets marked in CoS queue 4.
21243          * Or, if the driver requested counter masks, a mask to indicate the size
21244          * of the counter.
21245          */
21246         uint64_t        mark_cnt_cos4;
21247         /*
21248          * Number of packets marked in CoS queue 5.
21249          * Or, if the driver requested counter masks, a mask to indicate the size
21250          * of the counter.
21251          */
21252         uint64_t        mark_cnt_cos5;
21253         /*
21254          * Number of packets marked in CoS queue 6.
21255          * Or, if the driver requested counter masks, a mask to indicate the size
21256          * of the counter.
21257          */
21258         uint64_t        mark_cnt_cos6;
21259         /*
21260          * Number of packets marked in CoS queue 7.
21261          * Or, if the driver requested counter masks, a mask to indicate the size
21262          * of the counter.
21263          */
21264         uint64_t        mark_cnt_cos7;
21265 } __rte_packed;
21266
21267 /***********************
21268  * hwrm_port_clr_stats *
21269  ***********************/
21270
21271
21272 /* hwrm_port_clr_stats_input (size:192b/24B) */
21273 struct hwrm_port_clr_stats_input {
21274         /* The HWRM command request type. */
21275         uint16_t        req_type;
21276         /*
21277          * The completion ring to send the completion event on. This should
21278          * be the NQ ID returned from the `nq_alloc` HWRM command.
21279          */
21280         uint16_t        cmpl_ring;
21281         /*
21282          * The sequence ID is used by the driver for tracking multiple
21283          * commands. This ID is treated as opaque data by the firmware and
21284          * the value is returned in the `hwrm_resp_hdr` upon completion.
21285          */
21286         uint16_t        seq_id;
21287         /*
21288          * The target ID of the command:
21289          * * 0x0-0xFFF8 - The function ID
21290          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
21291          * * 0xFFFD - Reserved for user-space HWRM interface
21292          * * 0xFFFF - HWRM
21293          */
21294         uint16_t        target_id;
21295         /*
21296          * A physical address pointer pointing to a host buffer that the
21297          * command's response data will be written. This can be either a host
21298          * physical address (HPA) or a guest physical address (GPA) and must
21299          * point to a physically contiguous block of memory.
21300          */
21301         uint64_t        resp_addr;
21302         /* Port ID of port that is being queried. */
21303         uint16_t        port_id;
21304         uint8_t flags;
21305         /*
21306          * If set to 1, then this field indicates clear the following RoCE
21307          * specific counters.
21308          * RoCE associated TX/RX cos counters
21309          * CNP associated TX/RX cos counters
21310          * RoCE/CNP specific TX/RX flow counters
21311          * Firmware will determine the RoCE/CNP cos queue based on qos profile.
21312          * This flag is honored only when RoCE is enabled on that port.
21313          */
21314         #define HWRM_PORT_CLR_STATS_INPUT_FLAGS_ROCE_COUNTERS     UINT32_C(0x1)
21315         uint8_t unused_0[5];
21316 } __rte_packed;
21317
21318 /* hwrm_port_clr_stats_output (size:128b/16B) */
21319 struct hwrm_port_clr_stats_output {
21320         /* The specific error status for the command. */
21321         uint16_t        error_code;
21322         /* The HWRM command request type. */
21323         uint16_t        req_type;
21324         /* The sequence ID from the original command. */
21325         uint16_t        seq_id;
21326         /* The length of the response data in number of bytes. */
21327         uint16_t        resp_len;
21328         uint8_t unused_0[7];
21329         /*
21330          * This field is used in Output records to indicate that the output
21331          * is completely written to RAM.  This field should be read as '1'
21332          * to indicate that the output has been completely written.
21333          * When writing a command completion or response to an internal processor,
21334          * the order of writes has to be such that this field is written last.
21335          */
21336         uint8_t valid;
21337 } __rte_packed;
21338
21339 /***********************
21340  * hwrm_port_phy_qcaps *
21341  ***********************/
21342
21343
21344 /* hwrm_port_phy_qcaps_input (size:192b/24B) */
21345 struct hwrm_port_phy_qcaps_input {
21346         /* The HWRM command request type. */
21347         uint16_t        req_type;
21348         /*
21349          * The completion ring to send the completion event on. This should
21350          * be the NQ ID returned from the `nq_alloc` HWRM command.
21351          */
21352         uint16_t        cmpl_ring;
21353         /*
21354          * The sequence ID is used by the driver for tracking multiple
21355          * commands. This ID is treated as opaque data by the firmware and
21356          * the value is returned in the `hwrm_resp_hdr` upon completion.
21357          */
21358         uint16_t        seq_id;
21359         /*
21360          * The target ID of the command:
21361          * * 0x0-0xFFF8 - The function ID
21362          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
21363          * * 0xFFFD - Reserved for user-space HWRM interface
21364          * * 0xFFFF - HWRM
21365          */
21366         uint16_t        target_id;
21367         /*
21368          * A physical address pointer pointing to a host buffer that the
21369          * command's response data will be written. This can be either a host
21370          * physical address (HPA) or a guest physical address (GPA) and must
21371          * point to a physically contiguous block of memory.
21372          */
21373         uint64_t        resp_addr;
21374         /* Port ID of port that is being queried. */
21375         uint16_t        port_id;
21376         uint8_t unused_0[6];
21377 } __rte_packed;
21378
21379 /* hwrm_port_phy_qcaps_output (size:256b/32B) */
21380 struct hwrm_port_phy_qcaps_output {
21381         /* The specific error status for the command. */
21382         uint16_t        error_code;
21383         /* The HWRM command request type. */
21384         uint16_t        req_type;
21385         /* The sequence ID from the original command. */
21386         uint16_t        seq_id;
21387         /* The length of the response data in number of bytes. */
21388         uint16_t        resp_len;
21389         /* PHY capability flags */
21390         uint8_t flags;
21391         /*
21392          * If set to 1, then this field indicates that the
21393          * link is capable of supporting EEE.
21394          */
21395         #define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_EEE_SUPPORTED \
21396                 UINT32_C(0x1)
21397         /*
21398          * If set to 1, then this field indicates that the
21399          * PHY is capable of supporting external loopback.
21400          */
21401         #define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_EXTERNAL_LPBK_SUPPORTED \
21402                 UINT32_C(0x2)
21403         /*
21404          * If set to 1, then this field indicates that the
21405          * PHY is capable of supporting loopback in autoneg mode.
21406          */
21407         #define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_AUTONEG_LPBK_SUPPORTED \
21408                 UINT32_C(0x4)
21409         /*
21410          * Indicates if the configuration of shared PHY settings is supported.
21411          * In cases where a physical port is shared by multiple functions
21412          * (e.g. NPAR, multihost, etc), the configuration of PHY
21413          * settings may not be allowed. Callers to HWRM_PORT_PHY_CFG will
21414          * get an HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED error in this case.
21415          */
21416         #define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_SHARED_PHY_CFG_SUPPORTED \
21417                 UINT32_C(0x8)
21418         /*
21419          * If set to 1, it indicates that the port counters and extended
21420          * port counters will not reset when the firmware shuts down or
21421          * resets the PHY.  These counters will only be reset during power
21422          * cycle or by calling HWRM_PORT_CLR_STATS.
21423          * If set to 0, the state of the counters is unspecified when
21424          * firmware shuts down or resets the PHY.
21425          */
21426         #define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_CUMULATIVE_COUNTERS_ON_RESET \
21427                 UINT32_C(0x10)
21428         /*
21429          * If set to 1, then this field indicates that the
21430          * local loopback is not supported on this controller.
21431          */
21432         #define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_LOCAL_LPBK_NOT_SUPPORTED \
21433                 UINT32_C(0x20)
21434         /*
21435          * Reserved field. The HWRM shall set this field to 0.
21436          * An HWRM client shall ignore this field.
21437          */
21438         #define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_RSVD1_MASK \
21439                 UINT32_C(0xc0)
21440         #define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_RSVD1_SFT \
21441                 6
21442         /* Number of front panel ports for this device. */
21443         uint8_t port_cnt;
21444         /* Not supported or unknown */
21445         #define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_UNKNOWN UINT32_C(0x0)
21446         /* single port device */
21447         #define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_1       UINT32_C(0x1)
21448         /* 2-port device */
21449         #define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_2       UINT32_C(0x2)
21450         /* 3-port device */
21451         #define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_3       UINT32_C(0x3)
21452         /* 4-port device */
21453         #define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_4       UINT32_C(0x4)
21454         #define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_LAST \
21455                 HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_4
21456         /*
21457          * This is a bit mask to indicate what speeds are supported
21458          * as forced speeds on this link.
21459          * For each speed that can be forced on this link, the
21460          * corresponding mask bit shall be set to '1'.
21461          */
21462         uint16_t        supported_speeds_force_mode;
21463         /* 100Mb link speed (Half-duplex) */
21464         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_100MBHD \
21465                 UINT32_C(0x1)
21466         /* 100Mb link speed (Full-duplex) */
21467         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_100MB \
21468                 UINT32_C(0x2)
21469         /* 1Gb link speed (Half-duplex) */
21470         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_1GBHD \
21471                 UINT32_C(0x4)
21472         /* 1Gb link speed (Full-duplex) */
21473         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_1GB \
21474                 UINT32_C(0x8)
21475         /* 2Gb link speed */
21476         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_2GB \
21477                 UINT32_C(0x10)
21478         /* 25Gb link speed */
21479         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_2_5GB \
21480                 UINT32_C(0x20)
21481         /* 10Gb link speed */
21482         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_10GB \
21483                 UINT32_C(0x40)
21484         /* 20Gb link speed */
21485         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_20GB \
21486                 UINT32_C(0x80)
21487         /* 25Gb link speed */
21488         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_25GB \
21489                 UINT32_C(0x100)
21490         /* 40Gb link speed */
21491         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_40GB \
21492                 UINT32_C(0x200)
21493         /* 50Gb link speed */
21494         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_50GB \
21495                 UINT32_C(0x400)
21496         /* 100Gb link speed */
21497         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_100GB \
21498                 UINT32_C(0x800)
21499         /* 10Mb link speed (Half-duplex) */
21500         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_10MBHD \
21501                 UINT32_C(0x1000)
21502         /* 10Mb link speed (Full-duplex) */
21503         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_10MB \
21504                 UINT32_C(0x2000)
21505         /*
21506          * This is a bit mask to indicate what speeds are supported
21507          * for autonegotiation on this link.
21508          * For each speed that can be autonegotiated on this link, the
21509          * corresponding mask bit shall be set to '1'.
21510          */
21511         uint16_t        supported_speeds_auto_mode;
21512         /* 100Mb link speed (Half-duplex) */
21513         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_100MBHD \
21514                 UINT32_C(0x1)
21515         /* 100Mb link speed (Full-duplex) */
21516         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_100MB \
21517                 UINT32_C(0x2)
21518         /* 1Gb link speed (Half-duplex) */
21519         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_1GBHD \
21520                 UINT32_C(0x4)
21521         /* 1Gb link speed (Full-duplex) */
21522         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_1GB \
21523                 UINT32_C(0x8)
21524         /* 2Gb link speed */
21525         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_2GB \
21526                 UINT32_C(0x10)
21527         /* 25Gb link speed */
21528         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_2_5GB \
21529                 UINT32_C(0x20)
21530         /* 10Gb link speed */
21531         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_10GB \
21532                 UINT32_C(0x40)
21533         /* 20Gb link speed */
21534         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_20GB \
21535                 UINT32_C(0x80)
21536         /* 25Gb link speed */
21537         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_25GB \
21538                 UINT32_C(0x100)
21539         /* 40Gb link speed */
21540         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_40GB \
21541                 UINT32_C(0x200)
21542         /* 50Gb link speed */
21543         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_50GB \
21544                 UINT32_C(0x400)
21545         /* 100Gb link speed */
21546         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_100GB \
21547                 UINT32_C(0x800)
21548         /* 10Mb link speed (Half-duplex) */
21549         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_10MBHD \
21550                 UINT32_C(0x1000)
21551         /* 10Mb link speed (Full-duplex) */
21552         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_10MB \
21553                 UINT32_C(0x2000)
21554         /*
21555          * This is a bit mask to indicate what speeds are supported
21556          * for EEE on this link.
21557          * For each speed that can be autonegotiated when EEE is enabled
21558          * on this link, the corresponding mask bit shall be set to '1'.
21559          * This field is only valid when the eee_suppotred is set to '1'.
21560          */
21561         uint16_t        supported_speeds_eee_mode;
21562         /* Reserved */
21563         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_RSVD1 \
21564                 UINT32_C(0x1)
21565         /* 100Mb link speed (Full-duplex) */
21566         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_100MB \
21567                 UINT32_C(0x2)
21568         /* Reserved */
21569         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_RSVD2 \
21570                 UINT32_C(0x4)
21571         /* 1Gb link speed (Full-duplex) */
21572         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_1GB \
21573                 UINT32_C(0x8)
21574         /* Reserved */
21575         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_RSVD3 \
21576                 UINT32_C(0x10)
21577         /* Reserved */
21578         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_RSVD4 \
21579                 UINT32_C(0x20)
21580         /* 10Gb link speed */
21581         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_10GB \
21582                 UINT32_C(0x40)
21583         uint32_t        tx_lpi_timer_low;
21584         /*
21585          * The lowest value of TX LPI timer that can be set on this link
21586          * when EEE is enabled. This value is in microseconds.
21587          * This field is valid only when_eee_supported is set to '1'.
21588          */
21589         #define HWRM_PORT_PHY_QCAPS_OUTPUT_TX_LPI_TIMER_LOW_MASK \
21590                 UINT32_C(0xffffff)
21591         #define HWRM_PORT_PHY_QCAPS_OUTPUT_TX_LPI_TIMER_LOW_SFT 0
21592         /*
21593          * Reserved field. The HWRM shall set this field to 0.
21594          * An HWRM client shall ignore this field.
21595          */
21596         #define HWRM_PORT_PHY_QCAPS_OUTPUT_RSVD2_MASK \
21597                 UINT32_C(0xff000000)
21598         #define HWRM_PORT_PHY_QCAPS_OUTPUT_RSVD2_SFT            24
21599         uint32_t        valid_tx_lpi_timer_high;
21600         /*
21601          * The highest value of TX LPI timer that can be set on this link
21602          * when EEE is enabled. This value is in microseconds.
21603          * This field is valid only when_eee_supported is set to '1'.
21604          */
21605         #define HWRM_PORT_PHY_QCAPS_OUTPUT_TX_LPI_TIMER_HIGH_MASK \
21606                 UINT32_C(0xffffff)
21607         #define HWRM_PORT_PHY_QCAPS_OUTPUT_TX_LPI_TIMER_HIGH_SFT 0
21608         /*
21609          * Reserved field. The HWRM shall set this field to 0.
21610          * An HWRM client shall ignore this field.
21611          */
21612         #define HWRM_PORT_PHY_QCAPS_OUTPUT_RSVD_MASK \
21613                 UINT32_C(0xff000000)
21614         #define HWRM_PORT_PHY_QCAPS_OUTPUT_RSVD_SFT              24
21615         /*
21616          * This field is used to advertise which PAM4 speeds are supported
21617          * in auto mode.
21618          */
21619         uint16_t        supported_pam4_speeds_auto_mode;
21620         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_PAM4_SPEEDS_AUTO_MODE_50G \
21621                 UINT32_C(0x1)
21622         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_PAM4_SPEEDS_AUTO_MODE_100G \
21623                 UINT32_C(0x2)
21624         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_PAM4_SPEEDS_AUTO_MODE_200G \
21625                 UINT32_C(0x4)
21626         /*
21627          * This field is used to advertise which PAM4 speeds are supported
21628          * in forced mode.
21629          */
21630         uint16_t        supported_pam4_speeds_force_mode;
21631         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_PAM4_SPEEDS_FORCE_MODE_50G \
21632                 UINT32_C(0x1)
21633         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_PAM4_SPEEDS_FORCE_MODE_100G \
21634                 UINT32_C(0x2)
21635         #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_PAM4_SPEEDS_FORCE_MODE_200G \
21636                 UINT32_C(0x4)
21637         uint8_t unused_0[3];
21638         /*
21639          * This field is used in Output records to indicate that the output
21640          * is completely written to RAM.  This field should be read as '1'
21641          * to indicate that the output has been completely written.
21642          * When writing a command completion or response to an internal processor,
21643          * the order of writes has to be such that this field is written last.
21644          */
21645         uint8_t valid;
21646 } __rte_packed;
21647
21648 /****************************
21649  * hwrm_port_phy_mdio_write *
21650  ****************************/
21651
21652
21653 /* hwrm_port_phy_mdio_write_input (size:320b/40B) */
21654 struct hwrm_port_phy_mdio_write_input {
21655         /* The HWRM command request type. */
21656         uint16_t        req_type;
21657         /*
21658          * The completion ring to send the completion event on. This should
21659          * be the NQ ID returned from the `nq_alloc` HWRM command.
21660          */
21661         uint16_t        cmpl_ring;
21662         /*
21663          * The sequence ID is used by the driver for tracking multiple
21664          * commands. This ID is treated as opaque data by the firmware and
21665          * the value is returned in the `hwrm_resp_hdr` upon completion.
21666          */
21667         uint16_t        seq_id;
21668         /*
21669          * The target ID of the command:
21670          * * 0x0-0xFFF8 - The function ID
21671          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
21672          * * 0xFFFD - Reserved for user-space HWRM interface
21673          * * 0xFFFF - HWRM
21674          */
21675         uint16_t        target_id;
21676         /*
21677          * A physical address pointer pointing to a host buffer that the
21678          * command's response data will be written. This can be either a host
21679          * physical address (HPA) or a guest physical address (GPA) and must
21680          * point to a physically contiguous block of memory.
21681          */
21682         uint64_t        resp_addr;
21683         /* Reserved for future use. */
21684         uint32_t        unused_0[2];
21685         /* Port ID of port. */
21686         uint16_t        port_id;
21687         /* If phy_address is 0xFF, port_id will be used to derive phy_addr. */
21688         uint8_t phy_addr;
21689         /* 8-bit device address. */
21690         uint8_t dev_addr;
21691         /* 16-bit register address. */
21692         uint16_t        reg_addr;
21693         /* 16-bit register data. */
21694         uint16_t        reg_data;
21695         /*
21696          * When this bit is set to 1 a Clause 45 mdio access is done.
21697          * when this bit is set to 0 a Clause 22 mdio access is done.
21698          */
21699         uint8_t cl45_mdio;
21700         /*  */
21701         uint8_t unused_1[7];
21702 } __rte_packed;
21703
21704 /* hwrm_port_phy_mdio_write_output (size:128b/16B) */
21705 struct hwrm_port_phy_mdio_write_output {
21706         /* The specific error status for the command. */
21707         uint16_t        error_code;
21708         /* The HWRM command request type. */
21709         uint16_t        req_type;
21710         /* The sequence ID from the original command. */
21711         uint16_t        seq_id;
21712         /* The length of the response data in number of bytes. */
21713         uint16_t        resp_len;
21714         uint8_t unused_0[7];
21715         /*
21716          * This field is used in Output records to indicate that the output
21717          * is completely written to RAM.  This field should be read as '1'
21718          * to indicate that the output has been completely written.
21719          * When writing a command completion or response to an internal processor,
21720          * the order of writes has to be such that this field is written last.
21721          */
21722         uint8_t valid;
21723 } __rte_packed;
21724
21725 /***************************
21726  * hwrm_port_phy_mdio_read *
21727  ***************************/
21728
21729
21730 /* hwrm_port_phy_mdio_read_input (size:256b/32B) */
21731 struct hwrm_port_phy_mdio_read_input {
21732         /* The HWRM command request type. */
21733         uint16_t        req_type;
21734         /*
21735          * The completion ring to send the completion event on. This should
21736          * be the NQ ID returned from the `nq_alloc` HWRM command.
21737          */
21738         uint16_t        cmpl_ring;
21739         /*
21740          * The sequence ID is used by the driver for tracking multiple
21741          * commands. This ID is treated as opaque data by the firmware and
21742          * the value is returned in the `hwrm_resp_hdr` upon completion.
21743          */
21744         uint16_t        seq_id;
21745         /*
21746          * The target ID of the command:
21747          * * 0x0-0xFFF8 - The function ID
21748          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
21749          * * 0xFFFD - Reserved for user-space HWRM interface
21750          * * 0xFFFF - HWRM
21751          */
21752         uint16_t        target_id;
21753         /*
21754          * A physical address pointer pointing to a host buffer that the
21755          * command's response data will be written. This can be either a host
21756          * physical address (HPA) or a guest physical address (GPA) and must
21757          * point to a physically contiguous block of memory.
21758          */
21759         uint64_t        resp_addr;
21760         /* Reserved for future use. */
21761         uint32_t        unused_0[2];
21762         /* Port ID of port. */
21763         uint16_t        port_id;
21764         /* If phy_address is 0xFF, port_id will be used to derive phy_addr. */
21765         uint8_t phy_addr;
21766         /* 8-bit device address. */
21767         uint8_t dev_addr;
21768         /* 16-bit register address. */
21769         uint16_t        reg_addr;
21770         /*
21771          * When this bit is set to 1 a Clause 45 mdio access is done.
21772          * when this bit is set to 0 a Clause 22 mdio access is done.
21773          */
21774         uint8_t cl45_mdio;
21775         /*  */
21776         uint8_t unused_1;
21777 } __rte_packed;
21778
21779 /* hwrm_port_phy_mdio_read_output (size:128b/16B) */
21780 struct hwrm_port_phy_mdio_read_output {
21781         /* The specific error status for the command. */
21782         uint16_t        error_code;
21783         /* The HWRM command request type. */
21784         uint16_t        req_type;
21785         /* The sequence ID from the original command. */
21786         uint16_t        seq_id;
21787         /* The length of the response data in number of bytes. */
21788         uint16_t        resp_len;
21789         /* 16-bit register data. */
21790         uint16_t        reg_data;
21791         uint8_t unused_0[5];
21792         /*
21793          * This field is used in Output records to indicate that the output
21794          * is completely written to RAM.  This field should be read as '1'
21795          * to indicate that the output has been completely written.
21796          * When writing a command completion or response to an internal processor,
21797          * the order of writes has to be such that this field is written last.
21798          */
21799         uint8_t valid;
21800 } __rte_packed;
21801
21802 /*********************
21803  * hwrm_port_led_cfg *
21804  *********************/
21805
21806
21807 /* hwrm_port_led_cfg_input (size:512b/64B) */
21808 struct hwrm_port_led_cfg_input {
21809         /* The HWRM command request type. */
21810         uint16_t        req_type;
21811         /*
21812          * The completion ring to send the completion event on. This should
21813          * be the NQ ID returned from the `nq_alloc` HWRM command.
21814          */
21815         uint16_t        cmpl_ring;
21816         /*
21817          * The sequence ID is used by the driver for tracking multiple
21818          * commands. This ID is treated as opaque data by the firmware and
21819          * the value is returned in the `hwrm_resp_hdr` upon completion.
21820          */
21821         uint16_t        seq_id;
21822         /*
21823          * The target ID of the command:
21824          * * 0x0-0xFFF8 - The function ID
21825          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
21826          * * 0xFFFD - Reserved for user-space HWRM interface
21827          * * 0xFFFF - HWRM
21828          */
21829         uint16_t        target_id;
21830         /*
21831          * A physical address pointer pointing to a host buffer that the
21832          * command's response data will be written. This can be either a host
21833          * physical address (HPA) or a guest physical address (GPA) and must
21834          * point to a physically contiguous block of memory.
21835          */
21836         uint64_t        resp_addr;
21837         uint32_t        enables;
21838         /*
21839          * This bit must be '1' for the led0_id field to be
21840          * configured.
21841          */
21842         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_ID \
21843                 UINT32_C(0x1)
21844         /*
21845          * This bit must be '1' for the led0_state field to be
21846          * configured.
21847          */
21848         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_STATE \
21849                 UINT32_C(0x2)
21850         /*
21851          * This bit must be '1' for the led0_color field to be
21852          * configured.
21853          */
21854         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_COLOR \
21855                 UINT32_C(0x4)
21856         /*
21857          * This bit must be '1' for the led0_blink_on field to be
21858          * configured.
21859          */
21860         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_BLINK_ON \
21861                 UINT32_C(0x8)
21862         /*
21863          * This bit must be '1' for the led0_blink_off field to be
21864          * configured.
21865          */
21866         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_BLINK_OFF \
21867                 UINT32_C(0x10)
21868         /*
21869          * This bit must be '1' for the led0_group_id field to be
21870          * configured.
21871          */
21872         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_GROUP_ID \
21873                 UINT32_C(0x20)
21874         /*
21875          * This bit must be '1' for the led1_id field to be
21876          * configured.
21877          */
21878         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_ID \
21879                 UINT32_C(0x40)
21880         /*
21881          * This bit must be '1' for the led1_state field to be
21882          * configured.
21883          */
21884         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_STATE \
21885                 UINT32_C(0x80)
21886         /*
21887          * This bit must be '1' for the led1_color field to be
21888          * configured.
21889          */
21890         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_COLOR \
21891                 UINT32_C(0x100)
21892         /*
21893          * This bit must be '1' for the led1_blink_on field to be
21894          * configured.
21895          */
21896         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_BLINK_ON \
21897                 UINT32_C(0x200)
21898         /*
21899          * This bit must be '1' for the led1_blink_off field to be
21900          * configured.
21901          */
21902         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_BLINK_OFF \
21903                 UINT32_C(0x400)
21904         /*
21905          * This bit must be '1' for the led1_group_id field to be
21906          * configured.
21907          */
21908         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_GROUP_ID \
21909                 UINT32_C(0x800)
21910         /*
21911          * This bit must be '1' for the led2_id field to be
21912          * configured.
21913          */
21914         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_ID \
21915                 UINT32_C(0x1000)
21916         /*
21917          * This bit must be '1' for the led2_state field to be
21918          * configured.
21919          */
21920         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_STATE \
21921                 UINT32_C(0x2000)
21922         /*
21923          * This bit must be '1' for the led2_color field to be
21924          * configured.
21925          */
21926         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_COLOR \
21927                 UINT32_C(0x4000)
21928         /*
21929          * This bit must be '1' for the led2_blink_on field to be
21930          * configured.
21931          */
21932         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_BLINK_ON \
21933                 UINT32_C(0x8000)
21934         /*
21935          * This bit must be '1' for the led2_blink_off field to be
21936          * configured.
21937          */
21938         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_BLINK_OFF \
21939                 UINT32_C(0x10000)
21940         /*
21941          * This bit must be '1' for the led2_group_id field to be
21942          * configured.
21943          */
21944         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_GROUP_ID \
21945                 UINT32_C(0x20000)
21946         /*
21947          * This bit must be '1' for the led3_id field to be
21948          * configured.
21949          */
21950         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_ID \
21951                 UINT32_C(0x40000)
21952         /*
21953          * This bit must be '1' for the led3_state field to be
21954          * configured.
21955          */
21956         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_STATE \
21957                 UINT32_C(0x80000)
21958         /*
21959          * This bit must be '1' for the led3_color field to be
21960          * configured.
21961          */
21962         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_COLOR \
21963                 UINT32_C(0x100000)
21964         /*
21965          * This bit must be '1' for the led3_blink_on field to be
21966          * configured.
21967          */
21968         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_BLINK_ON \
21969                 UINT32_C(0x200000)
21970         /*
21971          * This bit must be '1' for the led3_blink_off field to be
21972          * configured.
21973          */
21974         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_BLINK_OFF \
21975                 UINT32_C(0x400000)
21976         /*
21977          * This bit must be '1' for the led3_group_id field to be
21978          * configured.
21979          */
21980         #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_GROUP_ID \
21981                 UINT32_C(0x800000)
21982         /* Port ID of port whose LEDs are configured. */
21983         uint16_t        port_id;
21984         /*
21985          * The number of LEDs that are being configured.
21986          * Up to 4 LEDs can be configured with this command.
21987          */
21988         uint8_t num_leds;
21989         /* Reserved field. */
21990         uint8_t rsvd;
21991         /* An identifier for the LED #0. */
21992         uint8_t led0_id;
21993         /* The requested state of the LED #0. */
21994         uint8_t led0_state;
21995         /* Default state of the LED */
21996         #define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_DEFAULT  UINT32_C(0x0)
21997         /* Off */
21998         #define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_OFF      UINT32_C(0x1)
21999         /* On */
22000         #define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_ON       UINT32_C(0x2)
22001         /* Blink */
22002         #define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_BLINK    UINT32_C(0x3)
22003         /* Blink Alternately */
22004         #define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_BLINKALT UINT32_C(0x4)
22005         #define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_LAST \
22006                 HWRM_PORT_LED_CFG_INPUT_LED0_STATE_BLINKALT
22007         /* The requested color of LED #0. */
22008         uint8_t led0_color;
22009         /* Default */
22010         #define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_DEFAULT    UINT32_C(0x0)
22011         /* Amber */
22012         #define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_AMBER      UINT32_C(0x1)
22013         /* Green */
22014         #define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_GREEN      UINT32_C(0x2)
22015         /* Green or Amber */
22016         #define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_GREENAMBER UINT32_C(0x3)
22017         #define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_LAST \
22018                 HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_GREENAMBER
22019         uint8_t unused_0;
22020         /*
22021          * If the LED #0 state is "blink" or "blinkalt", then
22022          * this field represents the requested time in milliseconds
22023          * to keep LED on between cycles.
22024          */
22025         uint16_t        led0_blink_on;
22026         /*
22027          * If the LED #0 state is "blink" or "blinkalt", then
22028          * this field represents the requested time in milliseconds
22029          * to keep LED off between cycles.
22030          */
22031         uint16_t        led0_blink_off;
22032         /*
22033          * An identifier for the group of LEDs that LED #0 belongs
22034          * to.
22035          * If set to 0, then the LED #0 shall not be grouped and
22036          * shall be treated as an individual resource.
22037          * For all other non-zero values of this field, LED #0 shall
22038          * be grouped together with the LEDs with the same group ID
22039          * value.
22040          */
22041         uint8_t led0_group_id;
22042         /* Reserved field. */
22043         uint8_t rsvd0;
22044         /* An identifier for the LED #1. */
22045         uint8_t led1_id;
22046         /* The requested state of the LED #1. */
22047         uint8_t led1_state;
22048         /* Default state of the LED */
22049         #define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_DEFAULT  UINT32_C(0x0)
22050         /* Off */
22051         #define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_OFF      UINT32_C(0x1)
22052         /* On */
22053         #define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_ON       UINT32_C(0x2)
22054         /* Blink */
22055         #define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_BLINK    UINT32_C(0x3)
22056         /* Blink Alternately */
22057         #define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_BLINKALT UINT32_C(0x4)
22058         #define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_LAST \
22059                 HWRM_PORT_LED_CFG_INPUT_LED1_STATE_BLINKALT
22060         /* The requested color of LED #1. */
22061         uint8_t led1_color;
22062         /* Default */
22063         #define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_DEFAULT    UINT32_C(0x0)
22064         /* Amber */
22065         #define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_AMBER      UINT32_C(0x1)
22066         /* Green */
22067         #define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_GREEN      UINT32_C(0x2)
22068         /* Green or Amber */
22069         #define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_GREENAMBER UINT32_C(0x3)
22070         #define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_LAST \
22071                 HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_GREENAMBER
22072         uint8_t unused_1;
22073         /*
22074          * If the LED #1 state is "blink" or "blinkalt", then
22075          * this field represents the requested time in milliseconds
22076          * to keep LED on between cycles.
22077          */
22078         uint16_t        led1_blink_on;
22079         /*
22080          * If the LED #1 state is "blink" or "blinkalt", then
22081          * this field represents the requested time in milliseconds
22082          * to keep LED off between cycles.
22083          */
22084         uint16_t        led1_blink_off;
22085         /*
22086          * An identifier for the group of LEDs that LED #1 belongs
22087          * to.
22088          * If set to 0, then the LED #1 shall not be grouped and
22089          * shall be treated as an individual resource.
22090          * For all other non-zero values of this field, LED #1 shall
22091          * be grouped together with the LEDs with the same group ID
22092          * value.
22093          */
22094         uint8_t led1_group_id;
22095         /* Reserved field. */
22096         uint8_t rsvd1;
22097         /* An identifier for the LED #2. */
22098         uint8_t led2_id;
22099         /* The requested state of the LED #2. */
22100         uint8_t led2_state;
22101         /* Default state of the LED */
22102         #define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_DEFAULT  UINT32_C(0x0)
22103         /* Off */
22104         #define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_OFF      UINT32_C(0x1)
22105         /* On */
22106         #define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_ON       UINT32_C(0x2)
22107         /* Blink */
22108         #define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_BLINK    UINT32_C(0x3)
22109         /* Blink Alternately */
22110         #define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_BLINKALT UINT32_C(0x4)
22111         #define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_LAST \
22112                 HWRM_PORT_LED_CFG_INPUT_LED2_STATE_BLINKALT
22113         /* The requested color of LED #2. */
22114         uint8_t led2_color;
22115         /* Default */
22116         #define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_DEFAULT    UINT32_C(0x0)
22117         /* Amber */
22118         #define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_AMBER      UINT32_C(0x1)
22119         /* Green */
22120         #define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_GREEN      UINT32_C(0x2)
22121         /* Green or Amber */
22122         #define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_GREENAMBER UINT32_C(0x3)
22123         #define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_LAST \
22124                 HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_GREENAMBER
22125         uint8_t unused_2;
22126         /*
22127          * If the LED #2 state is "blink" or "blinkalt", then
22128          * this field represents the requested time in milliseconds
22129          * to keep LED on between cycles.
22130          */
22131         uint16_t        led2_blink_on;
22132         /*
22133          * If the LED #2 state is "blink" or "blinkalt", then
22134          * this field represents the requested time in milliseconds
22135          * to keep LED off between cycles.
22136          */
22137         uint16_t        led2_blink_off;
22138         /*
22139          * An identifier for the group of LEDs that LED #2 belongs
22140          * to.
22141          * If set to 0, then the LED #2 shall not be grouped and
22142          * shall be treated as an individual resource.
22143          * For all other non-zero values of this field, LED #2 shall
22144          * be grouped together with the LEDs with the same group ID
22145          * value.
22146          */
22147         uint8_t led2_group_id;
22148         /* Reserved field. */
22149         uint8_t rsvd2;
22150         /* An identifier for the LED #3. */
22151         uint8_t led3_id;
22152         /* The requested state of the LED #3. */
22153         uint8_t led3_state;
22154         /* Default state of the LED */
22155         #define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_DEFAULT  UINT32_C(0x0)
22156         /* Off */
22157         #define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_OFF      UINT32_C(0x1)
22158         /* On */
22159         #define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_ON       UINT32_C(0x2)
22160         /* Blink */
22161         #define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_BLINK    UINT32_C(0x3)
22162         /* Blink Alternately */
22163         #define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_BLINKALT UINT32_C(0x4)
22164         #define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_LAST \
22165                 HWRM_PORT_LED_CFG_INPUT_LED3_STATE_BLINKALT
22166         /* The requested color of LED #3. */
22167         uint8_t led3_color;
22168         /* Default */
22169         #define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_DEFAULT    UINT32_C(0x0)
22170         /* Amber */
22171         #define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_AMBER      UINT32_C(0x1)
22172         /* Green */
22173         #define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_GREEN      UINT32_C(0x2)
22174         /* Green or Amber */
22175         #define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_GREENAMBER UINT32_C(0x3)
22176         #define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_LAST \
22177                 HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_GREENAMBER
22178         uint8_t unused_3;
22179         /*
22180          * If the LED #3 state is "blink" or "blinkalt", then
22181          * this field represents the requested time in milliseconds
22182          * to keep LED on between cycles.
22183          */
22184         uint16_t        led3_blink_on;
22185         /*
22186          * If the LED #3 state is "blink" or "blinkalt", then
22187          * this field represents the requested time in milliseconds
22188          * to keep LED off between cycles.
22189          */
22190         uint16_t        led3_blink_off;
22191         /*
22192          * An identifier for the group of LEDs that LED #3 belongs
22193          * to.
22194          * If set to 0, then the LED #3 shall not be grouped and
22195          * shall be treated as an individual resource.
22196          * For all other non-zero values of this field, LED #3 shall
22197          * be grouped together with the LEDs with the same group ID
22198          * value.
22199          */
22200         uint8_t led3_group_id;
22201         /* Reserved field. */
22202         uint8_t rsvd3;
22203 } __rte_packed;
22204
22205 /* hwrm_port_led_cfg_output (size:128b/16B) */
22206 struct hwrm_port_led_cfg_output {
22207         /* The specific error status for the command. */
22208         uint16_t        error_code;
22209         /* The HWRM command request type. */
22210         uint16_t        req_type;
22211         /* The sequence ID from the original command. */
22212         uint16_t        seq_id;
22213         /* The length of the response data in number of bytes. */
22214         uint16_t        resp_len;
22215         uint8_t unused_0[7];
22216         /*
22217          * This field is used in Output records to indicate that the output
22218          * is completely written to RAM.  This field should be read as '1'
22219          * to indicate that the output has been completely written.
22220          * When writing a command completion or response to an internal processor,
22221          * the order of writes has to be such that this field is written last.
22222          */
22223         uint8_t valid;
22224 } __rte_packed;
22225
22226 /**********************
22227  * hwrm_port_led_qcfg *
22228  **********************/
22229
22230
22231 /* hwrm_port_led_qcfg_input (size:192b/24B) */
22232 struct hwrm_port_led_qcfg_input {
22233         /* The HWRM command request type. */
22234         uint16_t        req_type;
22235         /*
22236          * The completion ring to send the completion event on. This should
22237          * be the NQ ID returned from the `nq_alloc` HWRM command.
22238          */
22239         uint16_t        cmpl_ring;
22240         /*
22241          * The sequence ID is used by the driver for tracking multiple
22242          * commands. This ID is treated as opaque data by the firmware and
22243          * the value is returned in the `hwrm_resp_hdr` upon completion.
22244          */
22245         uint16_t        seq_id;
22246         /*
22247          * The target ID of the command:
22248          * * 0x0-0xFFF8 - The function ID
22249          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
22250          * * 0xFFFD - Reserved for user-space HWRM interface
22251          * * 0xFFFF - HWRM
22252          */
22253         uint16_t        target_id;
22254         /*
22255          * A physical address pointer pointing to a host buffer that the
22256          * command's response data will be written. This can be either a host
22257          * physical address (HPA) or a guest physical address (GPA) and must
22258          * point to a physically contiguous block of memory.
22259          */
22260         uint64_t        resp_addr;
22261         /* Port ID of port whose LED configuration is being queried. */
22262         uint16_t        port_id;
22263         uint8_t unused_0[6];
22264 } __rte_packed;
22265
22266 /* hwrm_port_led_qcfg_output (size:448b/56B) */
22267 struct hwrm_port_led_qcfg_output {
22268         /* The specific error status for the command. */
22269         uint16_t        error_code;
22270         /* The HWRM command request type. */
22271         uint16_t        req_type;
22272         /* The sequence ID from the original command. */
22273         uint16_t        seq_id;
22274         /* The length of the response data in number of bytes. */
22275         uint16_t        resp_len;
22276         /*
22277          * The number of LEDs that are configured on this port.
22278          * Up to 4 LEDs can be returned in the response.
22279          */
22280         uint8_t num_leds;
22281         /* An identifier for the LED #0. */
22282         uint8_t led0_id;
22283         /* The type of LED #0. */
22284         uint8_t led0_type;
22285         /* Speed LED */
22286         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_SPEED    UINT32_C(0x0)
22287         /* Activity LED */
22288         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_ACTIVITY UINT32_C(0x1)
22289         /* Invalid */
22290         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_INVALID  UINT32_C(0xff)
22291         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_LAST \
22292                 HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_INVALID
22293         /* The current state of the LED #0. */
22294         uint8_t led0_state;
22295         /* Default state of the LED */
22296         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_DEFAULT  UINT32_C(0x0)
22297         /* Off */
22298         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_OFF      UINT32_C(0x1)
22299         /* On */
22300         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_ON       UINT32_C(0x2)
22301         /* Blink */
22302         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_BLINK    UINT32_C(0x3)
22303         /* Blink Alternately */
22304         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_BLINKALT UINT32_C(0x4)
22305         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_LAST \
22306                 HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_BLINKALT
22307         /* The color of LED #0. */
22308         uint8_t led0_color;
22309         /* Default */
22310         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_DEFAULT    UINT32_C(0x0)
22311         /* Amber */
22312         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_AMBER      UINT32_C(0x1)
22313         /* Green */
22314         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_GREEN      UINT32_C(0x2)
22315         /* Green or Amber */
22316         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_GREENAMBER UINT32_C(0x3)
22317         #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_LAST \
22318                 HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_GREENAMBER
22319         uint8_t unused_0;
22320         /*
22321          * If the LED #0 state is "blink" or "blinkalt", then
22322          * this field represents the requested time in milliseconds
22323          * to keep LED on between cycles.
22324          */
22325         uint16_t        led0_blink_on;
22326         /*
22327          * If the LED #0 state is "blink" or "blinkalt", then
22328          * this field represents the requested time in milliseconds
22329          * to keep LED off between cycles.
22330          */
22331         uint16_t        led0_blink_off;
22332         /*
22333          * An identifier for the group of LEDs that LED #0 belongs
22334          * to.
22335          * If set to 0, then the LED #0 is not grouped.
22336          * For all other non-zero values of this field, LED #0 is
22337          * grouped together with the LEDs with the same group ID
22338          * value.
22339          */
22340         uint8_t led0_group_id;
22341         /* An identifier for the LED #1. */
22342         uint8_t led1_id;
22343         /* The type of LED #1. */
22344         uint8_t led1_type;
22345         /* Speed LED */
22346         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_SPEED    UINT32_C(0x0)
22347         /* Activity LED */
22348         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_ACTIVITY UINT32_C(0x1)
22349         /* Invalid */
22350         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_INVALID  UINT32_C(0xff)
22351         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_LAST \
22352                 HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_INVALID
22353         /* The current state of the LED #1. */
22354         uint8_t led1_state;
22355         /* Default state of the LED */
22356         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_DEFAULT  UINT32_C(0x0)
22357         /* Off */
22358         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_OFF      UINT32_C(0x1)
22359         /* On */
22360         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_ON       UINT32_C(0x2)
22361         /* Blink */
22362         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_BLINK    UINT32_C(0x3)
22363         /* Blink Alternately */
22364         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_BLINKALT UINT32_C(0x4)
22365         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_LAST \
22366                 HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_BLINKALT
22367         /* The color of LED #1. */
22368         uint8_t led1_color;
22369         /* Default */
22370         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_DEFAULT    UINT32_C(0x0)
22371         /* Amber */
22372         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_AMBER      UINT32_C(0x1)
22373         /* Green */
22374         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_GREEN      UINT32_C(0x2)
22375         /* Green or Amber */
22376         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_GREENAMBER UINT32_C(0x3)
22377         #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_LAST \
22378                 HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_GREENAMBER
22379         uint8_t unused_1;
22380         /*
22381          * If the LED #1 state is "blink" or "blinkalt", then
22382          * this field represents the requested time in milliseconds
22383          * to keep LED on between cycles.
22384          */
22385         uint16_t        led1_blink_on;
22386         /*
22387          * If the LED #1 state is "blink" or "blinkalt", then
22388          * this field represents the requested time in milliseconds
22389          * to keep LED off between cycles.
22390          */
22391         uint16_t        led1_blink_off;
22392         /*
22393          * An identifier for the group of LEDs that LED #1 belongs
22394          * to.
22395          * If set to 0, then the LED #1 is not grouped.
22396          * For all other non-zero values of this field, LED #1 is
22397          * grouped together with the LEDs with the same group ID
22398          * value.
22399          */
22400         uint8_t led1_group_id;
22401         /* An identifier for the LED #2. */
22402         uint8_t led2_id;
22403         /* The type of LED #2. */
22404         uint8_t led2_type;
22405         /* Speed LED */
22406         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_SPEED    UINT32_C(0x0)
22407         /* Activity LED */
22408         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_ACTIVITY UINT32_C(0x1)
22409         /* Invalid */
22410         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_INVALID  UINT32_C(0xff)
22411         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_LAST \
22412                 HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_INVALID
22413         /* The current state of the LED #2. */
22414         uint8_t led2_state;
22415         /* Default state of the LED */
22416         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_DEFAULT  UINT32_C(0x0)
22417         /* Off */
22418         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_OFF      UINT32_C(0x1)
22419         /* On */
22420         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_ON       UINT32_C(0x2)
22421         /* Blink */
22422         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_BLINK    UINT32_C(0x3)
22423         /* Blink Alternately */
22424         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_BLINKALT UINT32_C(0x4)
22425         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_LAST \
22426                 HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_BLINKALT
22427         /* The color of LED #2. */
22428         uint8_t led2_color;
22429         /* Default */
22430         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_DEFAULT    UINT32_C(0x0)
22431         /* Amber */
22432         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_AMBER      UINT32_C(0x1)
22433         /* Green */
22434         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_GREEN      UINT32_C(0x2)
22435         /* Green or Amber */
22436         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_GREENAMBER UINT32_C(0x3)
22437         #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_LAST \
22438                 HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_GREENAMBER
22439         uint8_t unused_2;
22440         /*
22441          * If the LED #2 state is "blink" or "blinkalt", then
22442          * this field represents the requested time in milliseconds
22443          * to keep LED on between cycles.
22444          */
22445         uint16_t        led2_blink_on;
22446         /*
22447          * If the LED #2 state is "blink" or "blinkalt", then
22448          * this field represents the requested time in milliseconds
22449          * to keep LED off between cycles.
22450          */
22451         uint16_t        led2_blink_off;
22452         /*
22453          * An identifier for the group of LEDs that LED #2 belongs
22454          * to.
22455          * If set to 0, then the LED #2 is not grouped.
22456          * For all other non-zero values of this field, LED #2 is
22457          * grouped together with the LEDs with the same group ID
22458          * value.
22459          */
22460         uint8_t led2_group_id;
22461         /* An identifier for the LED #3. */
22462         uint8_t led3_id;
22463         /* The type of LED #3. */
22464         uint8_t led3_type;
22465         /* Speed LED */
22466         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_SPEED    UINT32_C(0x0)
22467         /* Activity LED */
22468         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_ACTIVITY UINT32_C(0x1)
22469         /* Invalid */
22470         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_INVALID  UINT32_C(0xff)
22471         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_LAST \
22472                 HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_INVALID
22473         /* The current state of the LED #3. */
22474         uint8_t led3_state;
22475         /* Default state of the LED */
22476         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_DEFAULT  UINT32_C(0x0)
22477         /* Off */
22478         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_OFF      UINT32_C(0x1)
22479         /* On */
22480         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_ON       UINT32_C(0x2)
22481         /* Blink */
22482         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_BLINK    UINT32_C(0x3)
22483         /* Blink Alternately */
22484         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_BLINKALT UINT32_C(0x4)
22485         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_LAST \
22486                 HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_BLINKALT
22487         /* The color of LED #3. */
22488         uint8_t led3_color;
22489         /* Default */
22490         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_DEFAULT    UINT32_C(0x0)
22491         /* Amber */
22492         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_AMBER      UINT32_C(0x1)
22493         /* Green */
22494         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_GREEN      UINT32_C(0x2)
22495         /* Green or Amber */
22496         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_GREENAMBER UINT32_C(0x3)
22497         #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_LAST \
22498                 HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_GREENAMBER
22499         uint8_t unused_3;
22500         /*
22501          * If the LED #3 state is "blink" or "blinkalt", then
22502          * this field represents the requested time in milliseconds
22503          * to keep LED on between cycles.
22504          */
22505         uint16_t        led3_blink_on;
22506         /*
22507          * If the LED #3 state is "blink" or "blinkalt", then
22508          * this field represents the requested time in milliseconds
22509          * to keep LED off between cycles.
22510          */
22511         uint16_t        led3_blink_off;
22512         /*
22513          * An identifier for the group of LEDs that LED #3 belongs
22514          * to.
22515          * If set to 0, then the LED #3 is not grouped.
22516          * For all other non-zero values of this field, LED #3 is
22517          * grouped together with the LEDs with the same group ID
22518          * value.
22519          */
22520         uint8_t led3_group_id;
22521         uint8_t unused_4[6];
22522         /*
22523          * This field is used in Output records to indicate that the output
22524          * is completely written to RAM.  This field should be read as '1'
22525          * to indicate that the output has been completely written.
22526          * When writing a command completion or response to an internal processor,
22527          * the order of writes has to be such that this field is written last.
22528          */
22529         uint8_t valid;
22530 } __rte_packed;
22531
22532 /***********************
22533  * hwrm_port_led_qcaps *
22534  ***********************/
22535
22536
22537 /* hwrm_port_led_qcaps_input (size:192b/24B) */
22538 struct hwrm_port_led_qcaps_input {
22539         /* The HWRM command request type. */
22540         uint16_t        req_type;
22541         /*
22542          * The completion ring to send the completion event on. This should
22543          * be the NQ ID returned from the `nq_alloc` HWRM command.
22544          */
22545         uint16_t        cmpl_ring;
22546         /*
22547          * The sequence ID is used by the driver for tracking multiple
22548          * commands. This ID is treated as opaque data by the firmware and
22549          * the value is returned in the `hwrm_resp_hdr` upon completion.
22550          */
22551         uint16_t        seq_id;
22552         /*
22553          * The target ID of the command:
22554          * * 0x0-0xFFF8 - The function ID
22555          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
22556          * * 0xFFFD - Reserved for user-space HWRM interface
22557          * * 0xFFFF - HWRM
22558          */
22559         uint16_t        target_id;
22560         /*
22561          * A physical address pointer pointing to a host buffer that the
22562          * command's response data will be written. This can be either a host
22563          * physical address (HPA) or a guest physical address (GPA) and must
22564          * point to a physically contiguous block of memory.
22565          */
22566         uint64_t        resp_addr;
22567         /* Port ID of port whose LED configuration is being queried. */
22568         uint16_t        port_id;
22569         uint8_t unused_0[6];
22570 } __rte_packed;
22571
22572 /* hwrm_port_led_qcaps_output (size:384b/48B) */
22573 struct hwrm_port_led_qcaps_output {
22574         /* The specific error status for the command. */
22575         uint16_t        error_code;
22576         /* The HWRM command request type. */
22577         uint16_t        req_type;
22578         /* The sequence ID from the original command. */
22579         uint16_t        seq_id;
22580         /* The length of the response data in number of bytes. */
22581         uint16_t        resp_len;
22582         /*
22583          * The number of LEDs that are configured on this port.
22584          * Up to 4 LEDs can be returned in the response.
22585          */
22586         uint8_t num_leds;
22587         /* Reserved for future use. */
22588         uint8_t unused[3];
22589         /* An identifier for the LED #0. */
22590         uint8_t led0_id;
22591         /* The type of LED #0. */
22592         uint8_t led0_type;
22593         /* Speed LED */
22594         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_SPEED    UINT32_C(0x0)
22595         /* Activity LED */
22596         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_ACTIVITY UINT32_C(0x1)
22597         /* Invalid */
22598         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_INVALID  UINT32_C(0xff)
22599         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_LAST \
22600                 HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_INVALID
22601         /*
22602          * An identifier for the group of LEDs that LED #0 belongs
22603          * to.
22604          * If set to 0, then the LED #0 cannot be grouped.
22605          * For all other non-zero values of this field, LED #0 is
22606          * grouped together with the LEDs with the same group ID
22607          * value.
22608          */
22609         uint8_t led0_group_id;
22610         uint8_t unused_0;
22611         /* The states supported by LED #0. */
22612         uint16_t        led0_state_caps;
22613         /*
22614          * If set to 1, this LED is enabled.
22615          * If set to 0, this LED is disabled.
22616          */
22617         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_ENABLED \
22618                 UINT32_C(0x1)
22619         /*
22620          * If set to 1, off state is supported on this LED.
22621          * If set to 0, off state is not supported on this LED.
22622          */
22623         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_OFF_SUPPORTED \
22624                 UINT32_C(0x2)
22625         /*
22626          * If set to 1, on state is supported on this LED.
22627          * If set to 0, on state is not supported on this LED.
22628          */
22629         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_ON_SUPPORTED \
22630                 UINT32_C(0x4)
22631         /*
22632          * If set to 1, blink state is supported on this LED.
22633          * If set to 0, blink state is not supported on this LED.
22634          */
22635         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_BLINK_SUPPORTED \
22636                 UINT32_C(0x8)
22637         /*
22638          * If set to 1, blink_alt state is supported on this LED.
22639          * If set to 0, blink_alt state is not supported on this LED.
22640          */
22641         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_BLINK_ALT_SUPPORTED \
22642                 UINT32_C(0x10)
22643         /* The colors supported by LED #0. */
22644         uint16_t        led0_color_caps;
22645         /* reserved. */
22646         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_COLOR_CAPS_RSVD \
22647                 UINT32_C(0x1)
22648         /*
22649          * If set to 1, Amber color is supported on this LED.
22650          * If set to 0, Amber color is not supported on this LED.
22651          */
22652         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_COLOR_CAPS_AMBER_SUPPORTED \
22653                 UINT32_C(0x2)
22654         /*
22655          * If set to 1, Green color is supported on this LED.
22656          * If set to 0, Green color is not supported on this LED.
22657          */
22658         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_COLOR_CAPS_GREEN_SUPPORTED \
22659                 UINT32_C(0x4)
22660         /* An identifier for the LED #1. */
22661         uint8_t led1_id;
22662         /* The type of LED #1. */
22663         uint8_t led1_type;
22664         /* Speed LED */
22665         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_SPEED    UINT32_C(0x0)
22666         /* Activity LED */
22667         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_ACTIVITY UINT32_C(0x1)
22668         /* Invalid */
22669         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_INVALID  UINT32_C(0xff)
22670         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_LAST \
22671                 HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_INVALID
22672         /*
22673          * An identifier for the group of LEDs that LED #1 belongs
22674          * to.
22675          * If set to 0, then the LED #0 cannot be grouped.
22676          * For all other non-zero values of this field, LED #0 is
22677          * grouped together with the LEDs with the same group ID
22678          * value.
22679          */
22680         uint8_t led1_group_id;
22681         uint8_t unused_1;
22682         /* The states supported by LED #1. */
22683         uint16_t        led1_state_caps;
22684         /*
22685          * If set to 1, this LED is enabled.
22686          * If set to 0, this LED is disabled.
22687          */
22688         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_ENABLED \
22689                 UINT32_C(0x1)
22690         /*
22691          * If set to 1, off state is supported on this LED.
22692          * If set to 0, off state is not supported on this LED.
22693          */
22694         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_OFF_SUPPORTED \
22695                 UINT32_C(0x2)
22696         /*
22697          * If set to 1, on state is supported on this LED.
22698          * If set to 0, on state is not supported on this LED.
22699          */
22700         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_ON_SUPPORTED \
22701                 UINT32_C(0x4)
22702         /*
22703          * If set to 1, blink state is supported on this LED.
22704          * If set to 0, blink state is not supported on this LED.
22705          */
22706         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_BLINK_SUPPORTED \
22707                 UINT32_C(0x8)
22708         /*
22709          * If set to 1, blink_alt state is supported on this LED.
22710          * If set to 0, blink_alt state is not supported on this LED.
22711          */
22712         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_BLINK_ALT_SUPPORTED \
22713                 UINT32_C(0x10)
22714         /* The colors supported by LED #1. */
22715         uint16_t        led1_color_caps;
22716         /* reserved. */
22717         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_COLOR_CAPS_RSVD \
22718                 UINT32_C(0x1)
22719         /*
22720          * If set to 1, Amber color is supported on this LED.
22721          * If set to 0, Amber color is not supported on this LED.
22722          */
22723         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_COLOR_CAPS_AMBER_SUPPORTED \
22724                 UINT32_C(0x2)
22725         /*
22726          * If set to 1, Green color is supported on this LED.
22727          * If set to 0, Green color is not supported on this LED.
22728          */
22729         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_COLOR_CAPS_GREEN_SUPPORTED \
22730                 UINT32_C(0x4)
22731         /* An identifier for the LED #2. */
22732         uint8_t led2_id;
22733         /* The type of LED #2. */
22734         uint8_t led2_type;
22735         /* Speed LED */
22736         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_SPEED    UINT32_C(0x0)
22737         /* Activity LED */
22738         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_ACTIVITY UINT32_C(0x1)
22739         /* Invalid */
22740         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_INVALID  UINT32_C(0xff)
22741         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_LAST \
22742                 HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_INVALID
22743         /*
22744          * An identifier for the group of LEDs that LED #0 belongs
22745          * to.
22746          * If set to 0, then the LED #0 cannot be grouped.
22747          * For all other non-zero values of this field, LED #0 is
22748          * grouped together with the LEDs with the same group ID
22749          * value.
22750          */
22751         uint8_t led2_group_id;
22752         uint8_t unused_2;
22753         /* The states supported by LED #2. */
22754         uint16_t        led2_state_caps;
22755         /*
22756          * If set to 1, this LED is enabled.
22757          * If set to 0, this LED is disabled.
22758          */
22759         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_ENABLED \
22760                 UINT32_C(0x1)
22761         /*
22762          * If set to 1, off state is supported on this LED.
22763          * If set to 0, off state is not supported on this LED.
22764          */
22765         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_OFF_SUPPORTED \
22766                 UINT32_C(0x2)
22767         /*
22768          * If set to 1, on state is supported on this LED.
22769          * If set to 0, on state is not supported on this LED.
22770          */
22771         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_ON_SUPPORTED \
22772                 UINT32_C(0x4)
22773         /*
22774          * If set to 1, blink state is supported on this LED.
22775          * If set to 0, blink state is not supported on this LED.
22776          */
22777         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_BLINK_SUPPORTED \
22778                 UINT32_C(0x8)
22779         /*
22780          * If set to 1, blink_alt state is supported on this LED.
22781          * If set to 0, blink_alt state is not supported on this LED.
22782          */
22783         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_BLINK_ALT_SUPPORTED \
22784                 UINT32_C(0x10)
22785         /* The colors supported by LED #2. */
22786         uint16_t        led2_color_caps;
22787         /* reserved. */
22788         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_COLOR_CAPS_RSVD \
22789                 UINT32_C(0x1)
22790         /*
22791          * If set to 1, Amber color is supported on this LED.
22792          * If set to 0, Amber color is not supported on this LED.
22793          */
22794         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_COLOR_CAPS_AMBER_SUPPORTED \
22795                 UINT32_C(0x2)
22796         /*
22797          * If set to 1, Green color is supported on this LED.
22798          * If set to 0, Green color is not supported on this LED.
22799          */
22800         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_COLOR_CAPS_GREEN_SUPPORTED \
22801                 UINT32_C(0x4)
22802         /* An identifier for the LED #3. */
22803         uint8_t led3_id;
22804         /* The type of LED #3. */
22805         uint8_t led3_type;
22806         /* Speed LED */
22807         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_SPEED    UINT32_C(0x0)
22808         /* Activity LED */
22809         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_ACTIVITY UINT32_C(0x1)
22810         /* Invalid */
22811         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_INVALID  UINT32_C(0xff)
22812         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_LAST \
22813                 HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_INVALID
22814         /*
22815          * An identifier for the group of LEDs that LED #3 belongs
22816          * to.
22817          * If set to 0, then the LED #0 cannot be grouped.
22818          * For all other non-zero values of this field, LED #0 is
22819          * grouped together with the LEDs with the same group ID
22820          * value.
22821          */
22822         uint8_t led3_group_id;
22823         uint8_t unused_3;
22824         /* The states supported by LED #3. */
22825         uint16_t        led3_state_caps;
22826         /*
22827          * If set to 1, this LED is enabled.
22828          * If set to 0, this LED is disabled.
22829          */
22830         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_ENABLED \
22831                 UINT32_C(0x1)
22832         /*
22833          * If set to 1, off state is supported on this LED.
22834          * If set to 0, off state is not supported on this LED.
22835          */
22836         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_OFF_SUPPORTED \
22837                 UINT32_C(0x2)
22838         /*
22839          * If set to 1, on state is supported on this LED.
22840          * If set to 0, on state is not supported on this LED.
22841          */
22842         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_ON_SUPPORTED \
22843                 UINT32_C(0x4)
22844         /*
22845          * If set to 1, blink state is supported on this LED.
22846          * If set to 0, blink state is not supported on this LED.
22847          */
22848         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_BLINK_SUPPORTED \
22849                 UINT32_C(0x8)
22850         /*
22851          * If set to 1, blink_alt state is supported on this LED.
22852          * If set to 0, blink_alt state is not supported on this LED.
22853          */
22854         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_BLINK_ALT_SUPPORTED \
22855                 UINT32_C(0x10)
22856         /* The colors supported by LED #3. */
22857         uint16_t        led3_color_caps;
22858         /* reserved. */
22859         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_COLOR_CAPS_RSVD \
22860                 UINT32_C(0x1)
22861         /*
22862          * If set to 1, Amber color is supported on this LED.
22863          * If set to 0, Amber color is not supported on this LED.
22864          */
22865         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_COLOR_CAPS_AMBER_SUPPORTED \
22866                 UINT32_C(0x2)
22867         /*
22868          * If set to 1, Green color is supported on this LED.
22869          * If set to 0, Green color is not supported on this LED.
22870          */
22871         #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_COLOR_CAPS_GREEN_SUPPORTED \
22872                 UINT32_C(0x4)
22873         uint8_t unused_4[3];
22874         /*
22875          * This field is used in Output records to indicate that the output
22876          * is completely written to RAM.  This field should be read as '1'
22877          * to indicate that the output has been completely written.
22878          * When writing a command completion or response to an internal processor,
22879          * the order of writes has to be such that this field is written last.
22880          */
22881         uint8_t valid;
22882 } __rte_packed;
22883
22884 /***********************
22885  * hwrm_port_prbs_test *
22886  ***********************/
22887
22888
22889 /* hwrm_port_prbs_test_input (size:384b/48B) */
22890 struct hwrm_port_prbs_test_input {
22891         /* The HWRM command request type. */
22892         uint16_t        req_type;
22893         /*
22894          * The completion ring to send the completion event on. This should
22895          * be the NQ ID returned from the `nq_alloc` HWRM command.
22896          */
22897         uint16_t        cmpl_ring;
22898         /*
22899          * The sequence ID is used by the driver for tracking multiple
22900          * commands. This ID is treated as opaque data by the firmware and
22901          * the value is returned in the `hwrm_resp_hdr` upon completion.
22902          */
22903         uint16_t        seq_id;
22904         /*
22905          * The target ID of the command:
22906          * * 0x0-0xFFF8 - The function ID
22907          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
22908          * * 0xFFFD - Reserved for user-space HWRM interface
22909          * * 0xFFFF - HWRM
22910          */
22911         uint16_t        target_id;
22912         /*
22913          * A physical address pointer pointing to a host buffer that the
22914          * command's response data will be written. This can be either a host
22915          * physical address (HPA) or a guest physical address (GPA) and must
22916          * point to a physically contiguous block of memory.
22917          */
22918         uint64_t        resp_addr;
22919         /* Host address data is to DMA'd to. */
22920         uint64_t        resp_data_addr;
22921         /*
22922          * Size of the buffer pointed to by resp_data_addr. The firmware may
22923          * use this entire buffer or less than the entire buffer, but never more.
22924          */
22925         uint16_t        data_len;
22926         uint16_t        unused_0;
22927         uint32_t        unused_1;
22928         /* Port ID of port where PRBS test to be run. */
22929         uint16_t        port_id;
22930         /* Polynomial selection for PRBS test. */
22931         uint16_t        poly;
22932         /* PRBS7 */
22933         #define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS7   UINT32_C(0x0)
22934         /* PRBS9 */
22935         #define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS9   UINT32_C(0x1)
22936         /* PRBS11 */
22937         #define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS11  UINT32_C(0x2)
22938         /* PRBS15 */
22939         #define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS15  UINT32_C(0x3)
22940         /* PRBS23 */
22941         #define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS23  UINT32_C(0x4)
22942         /* PRBS31 */
22943         #define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS31  UINT32_C(0x5)
22944         /* PRBS58 */
22945         #define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS58  UINT32_C(0x6)
22946         /* Invalid */
22947         #define HWRM_PORT_PRBS_TEST_INPUT_POLY_INVALID UINT32_C(0xff)
22948         #define HWRM_PORT_PRBS_TEST_INPUT_POLY_LAST \
22949                 HWRM_PORT_PRBS_TEST_INPUT_POLY_INVALID
22950         /*
22951          * Configuration bits for PRBS test.
22952          * Use enable bit to start/stop test.
22953          * Use tx/rx lane map bits to run test on specific lanes,
22954          * if set to 0 test will be run on all lanes.
22955          */
22956         uint16_t        prbs_config;
22957         /*
22958          * Set 0 to stop test currently in progress
22959          * Set 1 to start test with configuration provided.
22960          */
22961         #define HWRM_PORT_PRBS_TEST_INPUT_PRBS_CONFIG_START_STOP \
22962                 UINT32_C(0x1)
22963         /*
22964          * If set to 1, tx_lane_map bitmap should have lane bits set.
22965          * If set to 0, test will be run on all lanes for this port.
22966          */
22967         #define HWRM_PORT_PRBS_TEST_INPUT_PRBS_CONFIG_TX_LANE_MAP_VALID \
22968                 UINT32_C(0x2)
22969         /*
22970          * If set to 1, rx_lane_map bitmap should have lane bits set.
22971          * If set to 0, test will be run on all lanes for this port.
22972          */
22973         #define HWRM_PORT_PRBS_TEST_INPUT_PRBS_CONFIG_RX_LANE_MAP_VALID \
22974                 UINT32_C(0x4)
22975         /* Duration in seconds to run the PRBS test. */
22976         uint16_t        timeout;
22977         /*
22978          * If tx_lane_map_valid is set to 1, this field is a bitmap
22979          * of tx lanes to run PRBS test. bit0 = lane0,
22980          * bit1 = lane1 ..bit31 = lane31
22981          */
22982         uint32_t        tx_lane_map;
22983         /*
22984          * If rx_lane_map_valid is set to 1, this field is a bitmap
22985          * of rx lanes to run PRBS test. bit0 = lane0,
22986          * bit1 = lane1 ..bit31 = lane31
22987          */
22988         uint32_t        rx_lane_map;
22989 } __rte_packed;
22990
22991 /* hwrm_port_prbs_test_output (size:128b/16B) */
22992 struct hwrm_port_prbs_test_output {
22993         /* The specific error status for the command. */
22994         uint16_t        error_code;
22995         /* The HWRM command request type. */
22996         uint16_t        req_type;
22997         /* The sequence ID from the original command. */
22998         uint16_t        seq_id;
22999         /* The length of the response data in number of bytes. */
23000         uint16_t        resp_len;
23001         /* Total length of stored data. */
23002         uint16_t        total_data_len;
23003         uint16_t        unused_0;
23004         uint8_t unused_1[3];
23005         /*
23006          * This field is used in Output records to indicate that the output
23007          * is completely written to RAM.  This field should be read as '1'
23008          * to indicate that the output has been completely written.
23009          * When writing a command completion or response to an internal processor,
23010          * the order of writes has to be such that this field is written last.
23011          */
23012         uint8_t valid;
23013 } __rte_packed;
23014
23015 /**********************
23016  * hwrm_port_dsc_dump *
23017  **********************/
23018
23019
23020 /* hwrm_port_dsc_dump_input (size:320b/40B) */
23021 struct hwrm_port_dsc_dump_input {
23022         /* The HWRM command request type. */
23023         uint16_t        req_type;
23024         /*
23025          * The completion ring to send the completion event on. This should
23026          * be the NQ ID returned from the `nq_alloc` HWRM command.
23027          */
23028         uint16_t        cmpl_ring;
23029         /*
23030          * The sequence ID is used by the driver for tracking multiple
23031          * commands. This ID is treated as opaque data by the firmware and
23032          * the value is returned in the `hwrm_resp_hdr` upon completion.
23033          */
23034         uint16_t        seq_id;
23035         /*
23036          * The target ID of the command:
23037          * * 0x0-0xFFF8 - The function ID
23038          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
23039          * * 0xFFFD - Reserved for user-space HWRM interface
23040          * * 0xFFFF - HWRM
23041          */
23042         uint16_t        target_id;
23043         /*
23044          * A physical address pointer pointing to a host buffer that the
23045          * command's response data will be written. This can be either a host
23046          * physical address (HPA) or a guest physical address (GPA) and must
23047          * point to a physically contiguous block of memory.
23048          */
23049         uint64_t        resp_addr;
23050         /* Host address where response diagnostic data is returned. */
23051         uint64_t        resp_data_addr;
23052         /*
23053          * Size of the buffer pointed to by resp_data_addr. The firmware
23054          * may use this entire buffer or less than the entire buffer, but
23055          * never more.
23056          */
23057         uint16_t        data_len;
23058         uint16_t        unused_0;
23059         uint32_t        unused_1;
23060         /* Port ID of port where dsc dump to be collected. */
23061         uint16_t        port_id;
23062         /* Diag level specified by the user */
23063         uint16_t        diag_level;
23064         /* SRDS_DIAG_LANE */
23065         #define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_LANE \
23066                 UINT32_C(0x0)
23067         /* SRDS_DIAG_CORE */
23068         #define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_CORE \
23069                 UINT32_C(0x1)
23070         /* SRDS_DIAG_EVENT */
23071         #define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_EVENT \
23072                 UINT32_C(0x2)
23073         /* SRDS_DIAG_EYE */
23074         #define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_EYE \
23075                 UINT32_C(0x3)
23076         /* SRDS_DIAG_REG_CORE */
23077         #define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_REG_CORE \
23078                 UINT32_C(0x4)
23079         /* SRDS_DIAG_REG_LANE */
23080         #define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_REG_LANE \
23081                 UINT32_C(0x5)
23082         /* SRDS_DIAG_UC_CORE */
23083         #define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_UC_CORE \
23084                 UINT32_C(0x6)
23085         /* SRDS_DIAG_UC_LANE */
23086         #define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_UC_LANE \
23087                 UINT32_C(0x7)
23088         /* SRDS_DIAG_LANE_DEBUG */
23089         #define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_LANE_DEBUG \
23090                 UINT32_C(0x8)
23091         /* SRDS_DIAG_BER_VERT */
23092         #define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_BER_VERT \
23093                 UINT32_C(0x9)
23094         /* SRDS_DIAG_BER_HORZ */
23095         #define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_BER_HORZ \
23096                 UINT32_C(0xa)
23097         /* SRDS_DIAG_EVENT_SAFE */
23098         #define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_EVENT_SAFE \
23099                 UINT32_C(0xb)
23100         /* SRDS_DIAG_TIMESTAMP */
23101         #define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_TIMESTAMP \
23102                 UINT32_C(0xc)
23103         #define HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_LAST \
23104                 HWRM_PORT_DSC_DUMP_INPUT_DIAG_LEVEL_SRDS_DIAG_TIMESTAMP
23105         /*
23106          * This field is a lane number
23107          * on which to collect the dsc dump
23108          */
23109         uint16_t        lane_number;
23110         /*
23111          * Configuration bits.
23112          * Use enable bit to start dsc dump or retrieve dump
23113          */
23114         uint16_t        dsc_dump_config;
23115         /*
23116          * Set 0 to retrieve the dsc dump
23117          * Set 1 to start the dsc dump
23118          */
23119         #define HWRM_PORT_DSC_DUMP_INPUT_DSC_DUMP_CONFIG_START_RETRIEVE \
23120                 UINT32_C(0x1)
23121 } __rte_packed;
23122
23123 /* hwrm_port_dsc_dump_output (size:128b/16B) */
23124 struct hwrm_port_dsc_dump_output {
23125         /* The specific error status for the command. */
23126         uint16_t        error_code;
23127         /* The HWRM command request type. */
23128         uint16_t        req_type;
23129         /* The sequence ID from the original command. */
23130         uint16_t        seq_id;
23131         /* The length of the response data in number of bytes. */
23132         uint16_t        resp_len;
23133         /* Total length of stored data. */
23134         uint16_t        total_data_len;
23135         uint16_t        unused_0;
23136         uint8_t unused_1[3];
23137         /*
23138          * This field is used in Output records to indicate that the output
23139          * is completely written to RAM.  This field should be read as '1'
23140          * to indicate that the output has been completely written.
23141          * When writing a command completion or response to an internal processor,
23142          * the order of writes has to be such that this field is written last.
23143          */
23144         uint8_t valid;
23145 } __rte_packed;
23146
23147 /******************************
23148  * hwrm_port_sfp_sideband_cfg *
23149  ******************************/
23150
23151
23152 /* hwrm_port_sfp_sideband_cfg_input (size:256b/32B) */
23153 struct hwrm_port_sfp_sideband_cfg_input {
23154         /* The HWRM command request type. */
23155         uint16_t        req_type;
23156         /*
23157          * The completion ring to send the completion event on. This should
23158          * be the NQ ID returned from the `nq_alloc` HWRM command.
23159          */
23160         uint16_t        cmpl_ring;
23161         /*
23162          * The sequence ID is used by the driver for tracking multiple
23163          * commands. This ID is treated as opaque data by the firmware and
23164          * the value is returned in the `hwrm_resp_hdr` upon completion.
23165          */
23166         uint16_t        seq_id;
23167         /*
23168          * The target ID of the command:
23169          * * 0x0-0xFFF8 - The function ID
23170          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
23171          * * 0xFFFD - Reserved for user-space HWRM interface
23172          * * 0xFFFF - HWRM
23173          */
23174         uint16_t        target_id;
23175         /*
23176          * A physical address pointer pointing to a host buffer that the
23177          * command's response data will be written. This can be either a host
23178          * physical address (HPA) or a guest physical address (GPA) and must
23179          * point to a physically contiguous block of memory.
23180          */
23181         uint64_t        resp_addr;
23182         /* Port ID of port that is to be queried. */
23183         uint16_t        port_id;
23184         uint8_t unused_0[6];
23185         /*
23186          * This bitfield is used to specify which bits from the 'flags'
23187          * fields are being configured by the caller.
23188          */
23189         uint32_t        enables;
23190         /* This bit must be '1' for rs0 to be configured. */
23191         #define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_ENABLES_RS0 \
23192                 UINT32_C(0x1)
23193         /* This bit must be '1' for rs1 to be configured. */
23194         #define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_ENABLES_RS1 \
23195                 UINT32_C(0x2)
23196         /* This bit must be '1' for tx_disable to be configured. */
23197         #define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_ENABLES_TX_DIS \
23198                 UINT32_C(0x4)
23199         /*
23200          * This bit must be '1' for mod_sel to be configured.
23201          * Valid only on QSFP modules
23202          */
23203         #define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_ENABLES_MOD_SEL \
23204                 UINT32_C(0x8)
23205         /* This bit must be '1' for reset_l to be configured. */
23206         #define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_ENABLES_RESET_L \
23207                 UINT32_C(0x10)
23208         /* This bit must be '1' for lp_mode to be configured. */
23209         #define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_ENABLES_LP_MODE \
23210                 UINT32_C(0x20)
23211         /* This bit must be '1' for pwr_disable to be configured. */
23212         #define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_ENABLES_PWR_DIS \
23213                 UINT32_C(0x40)
23214         /*
23215          * Only bits that have corresponding bits in the 'enables'
23216          * bitfield are processed by the firmware, all other bits
23217          * of 'flags' are ignored.
23218          */
23219         uint32_t        flags;
23220         /*
23221          * This bit along with rs1 configures the current speed of the dual
23222          * rate module. If these pins are GNDed then the speed can be changed
23223          * by driectly writing to EEPROM.
23224          */
23225         #define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_FLAGS_RS0 \
23226                 UINT32_C(0x1)
23227         /*
23228          * This bit along with rs0 configures the current speed of the dual
23229          * rate module. If these pins are GNDed then the speed can be changed
23230          * by driectly writing to EEPROM.
23231          */
23232         #define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_FLAGS_RS1 \
23233                 UINT32_C(0x2)
23234         /*
23235          * When this bit is set to '1', tx_disable is set.
23236          * On a 1G BASE-T module, if this bit is set,
23237          * module PHY registers will not be accessible.
23238          */
23239         #define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_FLAGS_TX_DIS \
23240                 UINT32_C(0x4)
23241         /*
23242          * When this bit is set to '1', this module is selected.
23243          * Valid only on QSFP modules
23244          */
23245         #define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_FLAGS_MOD_SEL \
23246                 UINT32_C(0x8)
23247         /*
23248          * If reset_l is set to 0, Module will be taken out of reset
23249          * and other signals will be set to their requested state once
23250          * the module is out of reset.
23251          * Valid only on QSFP modules
23252          */
23253         #define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_FLAGS_RESET_L \
23254                 UINT32_C(0x10)
23255         /*
23256          * When this bit is set to '1', the module will be configured
23257          * in low power mode.
23258          * Valid only on QSFP modules
23259          */
23260         #define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_FLAGS_LP_MODE \
23261                 UINT32_C(0x20)
23262         /* When this bit is set to '1', the module will be powered down. */
23263         #define HWRM_PORT_SFP_SIDEBAND_CFG_INPUT_FLAGS_PWR_DIS \
23264                 UINT32_C(0x40)
23265 } __rte_packed;
23266
23267 /* hwrm_port_sfp_sideband_cfg_output (size:128b/16B) */
23268 struct hwrm_port_sfp_sideband_cfg_output {
23269         /* The specific error status for the command. */
23270         uint16_t        error_code;
23271         /* The HWRM command request type. */
23272         uint16_t        req_type;
23273         /* The sequence ID from the original command. */
23274         uint16_t        seq_id;
23275         /* The length of the response data in number of bytes. */
23276         uint16_t        resp_len;
23277         uint8_t unused[7];
23278         /*
23279          * This field is used in Output records to indicate that the output
23280          * is completely written to RAM.  This field should be read as '1'
23281          * to indicate that the output has been completely written. When
23282          * writing a command completion or response to an internal processor,
23283          * the order of writes has to be such that this field is written last.
23284          */
23285         uint8_t valid;
23286 } __rte_packed;
23287
23288 /*******************************
23289  * hwrm_port_sfp_sideband_qcfg *
23290  *******************************/
23291
23292
23293 /* hwrm_port_sfp_sideband_qcfg_input (size:192b/24B) */
23294 struct hwrm_port_sfp_sideband_qcfg_input {
23295         /* The HWRM command request type. */
23296         uint16_t        req_type;
23297         /*
23298          * The completion ring to send the completion event on. This should
23299          * be the NQ ID returned from the `nq_alloc` HWRM command.
23300          */
23301         uint16_t        cmpl_ring;
23302         /*
23303          * The sequence ID is used by the driver for tracking multiple
23304          * commands. This ID is treated as opaque data by the firmware and
23305          * the value is returned in the `hwrm_resp_hdr` upon completion.
23306          */
23307         uint16_t        seq_id;
23308         /*
23309          * The target ID of the command:
23310          * * 0x0-0xFFF8 - The function ID
23311          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
23312          * * 0xFFFD - Reserved for user-space HWRM interface
23313          * * 0xFFFF - HWRM
23314          */
23315         uint16_t        target_id;
23316         /*
23317          * A physical address pointer pointing to a host buffer that the
23318          * command's response data will be written. This can be either a host
23319          * physical address (HPA) or a guest physical address (GPA) and must
23320          * point to a physically contiguous block of memory.
23321          */
23322         uint64_t        resp_addr;
23323         /* Port ID of port that is to be queried. */
23324         uint16_t        port_id;
23325         uint8_t unused_0[6];
23326 } __rte_packed;
23327
23328 /* hwrm_port_sfp_sideband_qcfg_output (size:192b/24B) */
23329 struct hwrm_port_sfp_sideband_qcfg_output {
23330         /* The specific error status for the command. */
23331         uint16_t        error_code;
23332         /* The HWRM command request type. */
23333         uint16_t        req_type;
23334         /* The sequence ID from the original command. */
23335         uint16_t        seq_id;
23336         /* The length of the response data in number of bytes. */
23337         uint16_t        resp_len;
23338         /*
23339          * Bitmask indicating which sideband signals are valid.
23340          * This is based on the board and nvm cfg that is present on the board.
23341          */
23342         uint32_t        supported_mask;
23343         uint32_t        sideband_signals;
23344         /* When this bit is set to '1', the Module is absent. */
23345         #define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_MOD_ABS \
23346                 UINT32_C(0x1)
23347         /*
23348          * When this bit is set to '1', there is no valid signal on RX.
23349          * This signal is a filtered version of Signal Detect.
23350          */
23351         #define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_RX_LOS \
23352                 UINT32_C(0x2)
23353         /*
23354          * This bit along with rs1 indiactes the current speed of the dual
23355          * rate module.If these pins are grounded then the speed can be
23356          * changed by driectky writing to EEPROM.
23357          */
23358         #define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_RS0 \
23359                 UINT32_C(0x4)
23360         /*
23361          * This bit along with rs0 indiactes the current speed of the dual
23362          * rate module.If these pins are grounded then the speed can be
23363          * changed by driectky writing to EEPROM.
23364          */
23365         #define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_RS1 \
23366                 UINT32_C(0x8)
23367         /*
23368          * When this bit is set to '1', tx_disable is set.
23369          * On a 1G BASE-T module, if this bit is set, module PHY
23370          * registers will not be accessible.
23371          */
23372         #define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_TX_DIS \
23373                 UINT32_C(0x10)
23374         /* When this bit is set to '1', tx_fault is set. */
23375         #define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_TX_FAULT \
23376                 UINT32_C(0x20)
23377         /*
23378          * When this bit is set to '1', module is selected.
23379          * Valid only on QSFP modules
23380          */
23381         #define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_MOD_SEL \
23382                 UINT32_C(0x40)
23383         /*
23384          * When this bit is set to '0', the module is held in reset.
23385          * if reset_l is set to 1,first module is taken out of reset
23386          * and other signals will be set to their requested state.
23387          * Valid only on QSFP modules.
23388          */
23389         #define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_RESET_L \
23390                 UINT32_C(0x80)
23391         /*
23392          * When this bit is set to '1', the module is in low power mode.
23393          * Valid only on QSFP modules
23394          */
23395         #define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_LP_MODE \
23396                 UINT32_C(0x100)
23397         /* When this bit is set to '1', module is in power down state. */
23398         #define HWRM_PORT_SFP_SIDEBAND_QCFG_OUTPUT_SIDEBAND_SIGNALS_PWR_DIS \
23399                 UINT32_C(0x200)
23400         uint8_t unused[7];
23401         /*
23402          * This field is used in Output records to indicate that the output
23403          * is completely written to RAM.  This field should be read as '1'
23404          * to indicate that the output has been completely written. When
23405          * writing a command completion or response to an internal processor,
23406          * the order of writes has to be such that this field is written last.
23407          */
23408         uint8_t valid;
23409 } __rte_packed;
23410
23411 /**********************************
23412  * hwrm_port_phy_mdio_bus_acquire *
23413  **********************************/
23414
23415
23416 /* hwrm_port_phy_mdio_bus_acquire_input (size:192b/24B) */
23417 struct hwrm_port_phy_mdio_bus_acquire_input {
23418         /* The HWRM command request type. */
23419         uint16_t        req_type;
23420         /*
23421          * The completion ring to send the completion event on. This should
23422          * be the NQ ID returned from the `nq_alloc` HWRM command.
23423          */
23424         uint16_t        cmpl_ring;
23425         /*
23426          * The sequence ID is used by the driver for tracking multiple
23427          * commands. This ID is treated as opaque data by the firmware and
23428          * the value is returned in the `hwrm_resp_hdr` upon completion.
23429          */
23430         uint16_t        seq_id;
23431         /*
23432          * The target ID of the command:
23433          * * 0x0-0xFFF8 - The function ID
23434          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
23435          * * 0xFFFD - Reserved for user-space HWRM interface
23436          * * 0xFFFF - HWRM
23437          */
23438         uint16_t        target_id;
23439         /*
23440          * A physical address pointer pointing to a host buffer that the
23441          * command's response data will be written. This can be either a host
23442          * physical address (HPA) or a guest physical address (GPA) and must
23443          * point to a physically contiguous block of memory.
23444          */
23445         uint64_t        resp_addr;
23446         /* Port ID of the port. */
23447         uint16_t        port_id;
23448         /*
23449          * client_id of the client requesting BUS access.
23450          * Any value from 0x10 to 0xFFFF can be used.
23451          * Client should make sure that the returned client_id
23452          * in response matches the client_id in request.
23453          * 0-0xF are reserved for internal use.
23454          */
23455         uint16_t        client_id;
23456         /*
23457          * Timeout in milli seconds, MDIO BUS will be released automatically
23458          * after this time, if another mdio acquire command is not received
23459          * within the timeout window from the same client.
23460          * A 0xFFFF will hold the bus until this bus is released.
23461          */
23462         uint16_t        mdio_bus_timeout;
23463         uint8_t unused_0[2];
23464 } __rte_packed;
23465
23466 /* hwrm_port_phy_mdio_bus_acquire_output (size:128b/16B) */
23467 struct hwrm_port_phy_mdio_bus_acquire_output {
23468         /* The specific error status for the command. */
23469         uint16_t        error_code;
23470         /* The HWRM command request type. */
23471         uint16_t        req_type;
23472         /* The sequence ID from the original command. */
23473         uint16_t        seq_id;
23474         /* The length of the response data in number of bytes. */
23475         uint16_t        resp_len;
23476         uint16_t        unused_0;
23477         /*
23478          * client_id of the module holding the BUS.
23479          * 0-0xF are reserved for internal use.
23480          */
23481         uint16_t        client_id;
23482         uint8_t unused_1[3];
23483         /*
23484          * This field is used in Output records to indicate that the output
23485          * is completely written to RAM.  This field should be read as '1'
23486          * to indicate that the output has been completely written.
23487          * When writing a command completion or response to an internal processor,
23488          * the order of writes has to be such that this field is written last.
23489          */
23490         uint8_t valid;
23491 } __rte_packed;
23492
23493 /**********************************
23494  * hwrm_port_phy_mdio_bus_release *
23495  **********************************/
23496
23497
23498 /* hwrm_port_phy_mdio_bus_release_input (size:192b/24B) */
23499 struct hwrm_port_phy_mdio_bus_release_input {
23500         /* The HWRM command request type. */
23501         uint16_t        req_type;
23502         /*
23503          * The completion ring to send the completion event on. This should
23504          * be the NQ ID returned from the `nq_alloc` HWRM command.
23505          */
23506         uint16_t        cmpl_ring;
23507         /*
23508          * The sequence ID is used by the driver for tracking multiple
23509          * commands. This ID is treated as opaque data by the firmware and
23510          * the value is returned in the `hwrm_resp_hdr` upon completion.
23511          */
23512         uint16_t        seq_id;
23513         /*
23514          * The target ID of the command:
23515          * * 0x0-0xFFF8 - The function ID
23516          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
23517          * * 0xFFFD - Reserved for user-space HWRM interface
23518          * * 0xFFFF - HWRM
23519          */
23520         uint16_t        target_id;
23521         /*
23522          * A physical address pointer pointing to a host buffer that the
23523          * command's response data will be written. This can be either a host
23524          * physical address (HPA) or a guest physical address (GPA) and must
23525          * point to a physically contiguous block of memory.
23526          */
23527         uint64_t        resp_addr;
23528         /* Port ID of the port. */
23529         uint16_t        port_id;
23530         /*
23531          * client_id of the client requesting BUS release.
23532          * A client should not release any other clients BUS.
23533          */
23534         uint16_t        client_id;
23535         uint8_t unused_0[4];
23536 } __rte_packed;
23537
23538 /* hwrm_port_phy_mdio_bus_release_output (size:128b/16B) */
23539 struct hwrm_port_phy_mdio_bus_release_output {
23540         /* The specific error status for the command. */
23541         uint16_t        error_code;
23542         /* The HWRM command request type. */
23543         uint16_t        req_type;
23544         /* The sequence ID from the original command. */
23545         uint16_t        seq_id;
23546         /* The length of the response data in number of bytes. */
23547         uint16_t        resp_len;
23548         uint16_t        unused_0;
23549         /* The BUS is released if client_id matches the client_id in request. */
23550         uint16_t        clients_id;
23551         uint8_t unused_1[3];
23552         /*
23553          * This field is used in Output records to indicate that the output
23554          * is completely written to RAM.  This field should be read as '1'
23555          * to indicate that the output has been completely written.
23556          * When writing a command completion or response to an internal processor,
23557          * the order of writes has to be such that this field is written last.
23558          */
23559         uint8_t valid;
23560 } __rte_packed;
23561
23562 /************************
23563  * hwrm_port_tx_fir_cfg *
23564  ************************/
23565
23566
23567 /* hwrm_port_tx_fir_cfg_input (size:320b/40B) */
23568 struct hwrm_port_tx_fir_cfg_input {
23569         /* The HWRM command request type. */
23570         uint16_t        req_type;
23571         /*
23572          * The completion ring to send the completion event on. This should
23573          * be the NQ ID returned from the `nq_alloc` HWRM command.
23574          */
23575         uint16_t        cmpl_ring;
23576         /*
23577          * The sequence ID is used by the driver for tracking multiple
23578          * commands. This ID is treated as opaque data by the firmware and
23579          * the value is returned in the `hwrm_resp_hdr` upon completion.
23580          */
23581         uint16_t        seq_id;
23582         /*
23583          * The target ID of the command:
23584          * * 0x0-0xFFF8 - The function ID
23585          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
23586          * * 0xFFFD - Reserved for user-space HWRM interface
23587          * * 0xFFFF - HWRM
23588          */
23589         uint16_t        target_id;
23590         /*
23591          * A physical address pointer pointing to a host buffer that the
23592          * command's response data will be written. This can be either a host
23593          * physical address (HPA) or a guest physical address (GPA) and must
23594          * point to a physically contiguous block of memory.
23595          */
23596         uint64_t        resp_addr;
23597         /* Modulation types of TX FIR: NRZ, PAM4. */
23598         uint8_t mod_type;
23599         /* For NRZ */
23600         #define HWRM_PORT_TX_FIR_CFG_INPUT_MOD_TYPE_NRZ  UINT32_C(0x0)
23601         /* For PAM4 */
23602         #define HWRM_PORT_TX_FIR_CFG_INPUT_MOD_TYPE_PAM4 UINT32_C(0x1)
23603         #define HWRM_PORT_TX_FIR_CFG_INPUT_MOD_TYPE_LAST \
23604                 HWRM_PORT_TX_FIR_CFG_INPUT_MOD_TYPE_PAM4
23605         /* The lane mask of the lane TX FIR will be configured. */
23606         uint8_t lane_mask;
23607         uint8_t unused_0[2];
23608         /* Value1 of TX FIR, required for NRZ or PAM4. */
23609         uint32_t        txfir_val_1;
23610         /* Value2 of TX FIR, required for NRZ or PAM4. */
23611         uint32_t        txfir_val_2;
23612         /* Value3 of TX FIR, required for PAM4. */
23613         uint32_t        txfir_val_3;
23614         /* Value4 of TX FIR, required for PAM4. */
23615         uint32_t        txfir_val_4;
23616         uint8_t unused_1[4];
23617 } __rte_packed;
23618
23619 /* hwrm_port_tx_fir_cfg_output (size:128b/16B) */
23620 struct hwrm_port_tx_fir_cfg_output {
23621         /* The specific error status for the command. */
23622         uint16_t        error_code;
23623         /* The HWRM command request type. */
23624         uint16_t        req_type;
23625         /* The sequence ID from the original command. */
23626         uint16_t        seq_id;
23627         /* The length of the response data in number of bytes. */
23628         uint16_t        resp_len;
23629         uint8_t unused[7];
23630         /*
23631          * This field is used in Output records to indicate that the output
23632          * is completely written to RAM.  This field should be read as '1'
23633          * to indicate that the output has been completely written.
23634          * When writing a command completion or response to an internal processor,
23635          * the order of writes has to be such that this field is written last.
23636          */
23637         uint8_t valid;
23638 } __rte_packed;
23639
23640 /*************************
23641  * hwrm_port_tx_fir_qcfg *
23642  *************************/
23643
23644
23645 /* hwrm_port_tx_fir_qcfg_input (size:192b/24B) */
23646 struct hwrm_port_tx_fir_qcfg_input {
23647         /* The HWRM command request type. */
23648         uint16_t        req_type;
23649         /*
23650          * The completion ring to send the completion event on. This should
23651          * be the NQ ID returned from the `nq_alloc` HWRM command.
23652          */
23653         uint16_t        cmpl_ring;
23654         /*
23655          * The sequence ID is used by the driver for tracking multiple
23656          * commands. This ID is treated as opaque data by the firmware and
23657          * the value is returned in the `hwrm_resp_hdr` upon completion.
23658          */
23659         uint16_t        seq_id;
23660         /*
23661          * The target ID of the command:
23662          * * 0x0-0xFFF8 - The function ID
23663          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
23664          * * 0xFFFD - Reserved for user-space HWRM interface
23665          * * 0xFFFF - HWRM
23666          */
23667         uint16_t        target_id;
23668         /*
23669          * A physical address pointer pointing to a host buffer that the
23670          * command's response data will be written. This can be either a host
23671          * physical address (HPA) or a guest physical address (GPA) and must
23672          * point to a physically contiguous block of memory.
23673          */
23674         uint64_t        resp_addr;
23675         /* Modulation types of TX FIR: NRZ, PAM4. */
23676         uint8_t mod_type;
23677         /* For NRZ */
23678         #define HWRM_PORT_TX_FIR_QCFG_INPUT_MOD_TYPE_NRZ  UINT32_C(0x0)
23679         /* For PAM4 */
23680         #define HWRM_PORT_TX_FIR_QCFG_INPUT_MOD_TYPE_PAM4 UINT32_C(0x1)
23681         #define HWRM_PORT_TX_FIR_QCFG_INPUT_MOD_TYPE_LAST \
23682                 HWRM_PORT_TX_FIR_QCFG_INPUT_MOD_TYPE_PAM4
23683         /* The ID of the lane TX FIR will be queried. */
23684         uint8_t lane_id;
23685         uint8_t unused[6];
23686 } __rte_packed;
23687
23688 /* hwrm_port_tx_fir_qcfg_output (size:256b/32B) */
23689 struct hwrm_port_tx_fir_qcfg_output {
23690         /* The specific error status for the command. */
23691         uint16_t        error_code;
23692         /* The HWRM command request type. */
23693         uint16_t        req_type;
23694         /* The sequence ID from the original command. */
23695         uint16_t        seq_id;
23696         /* The length of the response data in number of bytes. */
23697         uint16_t        resp_len;
23698         /* Value1 of TX FIR, required for NRZ or PAM4. */
23699         uint32_t        txfir_val_1;
23700         /* Value2 of TX FIR, required for NRZ or PAM4. */
23701         uint32_t        txfir_val_2;
23702         /* Value3 of TX FIR, required for PAM4. */
23703         uint32_t        txfir_val_3;
23704         /* Value4 of TX FIR, required for PAM4. */
23705         uint32_t        txfir_val_4;
23706         uint8_t unused[7];
23707         /*
23708          * This field is used in Output records to indicate that the output
23709          * is completely written to RAM.  This field should be read as '1'
23710          * to indicate that the output has been completely written.
23711          * When writing a command completion or response to an internal processor,
23712          * the order of writes has to be such that this field is written last.
23713          */
23714         uint8_t valid;
23715 } __rte_packed;
23716
23717 /***********************
23718  * hwrm_queue_qportcfg *
23719  ***********************/
23720
23721
23722 /* hwrm_queue_qportcfg_input (size:192b/24B) */
23723 struct hwrm_queue_qportcfg_input {
23724         /* The HWRM command request type. */
23725         uint16_t        req_type;
23726         /*
23727          * The completion ring to send the completion event on. This should
23728          * be the NQ ID returned from the `nq_alloc` HWRM command.
23729          */
23730         uint16_t        cmpl_ring;
23731         /*
23732          * The sequence ID is used by the driver for tracking multiple
23733          * commands. This ID is treated as opaque data by the firmware and
23734          * the value is returned in the `hwrm_resp_hdr` upon completion.
23735          */
23736         uint16_t        seq_id;
23737         /*
23738          * The target ID of the command:
23739          * * 0x0-0xFFF8 - The function ID
23740          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
23741          * * 0xFFFD - Reserved for user-space HWRM interface
23742          * * 0xFFFF - HWRM
23743          */
23744         uint16_t        target_id;
23745         /*
23746          * A physical address pointer pointing to a host buffer that the
23747          * command's response data will be written. This can be either a host
23748          * physical address (HPA) or a guest physical address (GPA) and must
23749          * point to a physically contiguous block of memory.
23750          */
23751         uint64_t        resp_addr;
23752         uint32_t        flags;
23753         /*
23754          * Enumeration denoting the RX, TX type of the resource.
23755          * This enumeration is used for resources that are similar for both
23756          * TX and RX paths of the chip.
23757          */
23758         #define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH     UINT32_C(0x1)
23759         /* tx path */
23760         #define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)
23761         /* rx path */
23762         #define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)
23763         #define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_LAST \
23764                 HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_RX
23765         /*
23766          * Port ID of port for which the queue configuration is being
23767          * queried. This field is only required when sent by IPC.
23768          */
23769         uint16_t        port_id;
23770         /*
23771          * Drivers will set this capability when it can use
23772          * queue_idx_service_profile to map the queues to application.
23773          */
23774         uint8_t drv_qmap_cap;
23775         /* disabled */
23776         #define HWRM_QUEUE_QPORTCFG_INPUT_DRV_QMAP_CAP_DISABLED UINT32_C(0x0)
23777         /* enabled */
23778         #define HWRM_QUEUE_QPORTCFG_INPUT_DRV_QMAP_CAP_ENABLED  UINT32_C(0x1)
23779         #define HWRM_QUEUE_QPORTCFG_INPUT_DRV_QMAP_CAP_LAST \
23780                 HWRM_QUEUE_QPORTCFG_INPUT_DRV_QMAP_CAP_ENABLED
23781         uint8_t unused_0;
23782 } __rte_packed;
23783
23784 /* hwrm_queue_qportcfg_output (size:1344b/168B) */
23785 struct hwrm_queue_qportcfg_output {
23786         /* The specific error status for the command. */
23787         uint16_t        error_code;
23788         /* The HWRM command request type. */
23789         uint16_t        req_type;
23790         /* The sequence ID from the original command. */
23791         uint16_t        seq_id;
23792         /* The length of the response data in number of bytes. */
23793         uint16_t        resp_len;
23794         /*
23795          * The maximum number of queues that can be configured on this
23796          * port.
23797          * Valid values range from 1 through 8.
23798          */
23799         uint8_t max_configurable_queues;
23800         /*
23801          * The maximum number of lossless queues that can be configured
23802          * on this port.
23803          * Valid values range from 0 through 8.
23804          */
23805         uint8_t max_configurable_lossless_queues;
23806         /*
23807          * Bitmask indicating which queues can be configured by the
23808          * hwrm_queue_cfg command.
23809          *
23810          * Each bit represents a specific queue where bit 0 represents
23811          * queue 0 and bit 7 represents queue 7.
23812          * # A value of 0 indicates that the queue is not configurable
23813          * by the hwrm_queue_cfg command.
23814          * # A value of 1 indicates that the queue is configurable.
23815          * # A hwrm_queue_cfg command shall return error when trying to
23816          * configure a queue not configurable.
23817          */
23818         uint8_t queue_cfg_allowed;
23819         /* Information about queue configuration. */
23820         uint8_t queue_cfg_info;
23821         /*
23822          * If this flag is set to '1', then the queues are
23823          * configured asymmetrically on TX and RX sides.
23824          * If this flag is set to '0', then the queues are
23825          * configured symmetrically on TX and RX sides. For
23826          * symmetric configuration, the queue configuration
23827          * including queue ids and service profiles on the
23828          * TX side is the same as the corresponding queue
23829          * configuration on the RX side.
23830          */
23831         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_CFG_INFO_ASYM_CFG \
23832                 UINT32_C(0x1)
23833         /*
23834          * Bitmask indicating which queues can be configured by the
23835          * hwrm_queue_pfcenable_cfg command.
23836          *
23837          * Each bit represents a specific priority where bit 0 represents
23838          * priority 0 and bit 7 represents priority 7.
23839          * # A value of 0 indicates that the priority is not configurable by
23840          * the hwrm_queue_pfcenable_cfg command.
23841          * # A value of 1 indicates that the priority is configurable.
23842          * # A hwrm_queue_pfcenable_cfg command shall return error when
23843          * trying to configure a priority that is not configurable.
23844          */
23845         uint8_t queue_pfcenable_cfg_allowed;
23846         /*
23847          * Bitmask indicating which queues can be configured by the
23848          * hwrm_queue_pri2cos_cfg command.
23849          *
23850          * Each bit represents a specific queue where bit 0 represents
23851          * queue 0 and bit 7 represents queue 7.
23852          * # A value of 0 indicates that the queue is not configurable
23853          * by the hwrm_queue_pri2cos_cfg command.
23854          * # A value of 1 indicates that the queue is configurable.
23855          * # A hwrm_queue_pri2cos_cfg command shall return error when
23856          * trying to configure a queue that is not configurable.
23857          */
23858         uint8_t queue_pri2cos_cfg_allowed;
23859         /*
23860          * Bitmask indicating which queues can be configured by the
23861          * hwrm_queue_pri2cos_cfg command.
23862          *
23863          * Each bit represents a specific queue where bit 0 represents
23864          * queue 0 and bit 7 represents queue 7.
23865          * # A value of 0 indicates that the queue is not configurable
23866          * by the hwrm_queue_pri2cos_cfg command.
23867          * # A value of 1 indicates that the queue is configurable.
23868          * # A hwrm_queue_pri2cos_cfg command shall return error when
23869          * trying to configure a queue not configurable.
23870          */
23871         uint8_t queue_cos2bw_cfg_allowed;
23872         /*
23873          * ID of CoS Queue 0.
23874          * FF - Invalid id
23875          *
23876          * # This ID can be used on any subsequent call to an hwrm command
23877          * that takes a queue id.
23878          * # IDs must always be queried by this command before any use
23879          * by the driver or software.
23880          * # The CoS queue index is obtained by applying modulo 10 to the
23881          * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
23882          * The CoS queue index is used to reference port statistics for the
23883          * CoS queue.
23884          * # A value of 0xff indicates that the queue is not available.
23885          * # Available queues may not be in sequential order.
23886          */
23887         uint8_t queue_id0;
23888         /* This value is applicable to CoS queues only. */
23889         uint8_t queue_id0_service_profile;
23890         /* Lossy (best-effort) */
23891         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSY \
23892                 UINT32_C(0x0)
23893         /* Lossless (legacy) */
23894         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSLESS \
23895                 UINT32_C(0x1)
23896         /* Lossless RoCE */
23897         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSLESS_ROCE \
23898                 UINT32_C(0x1)
23899         /* Lossy RoCE CNP */
23900         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSY_ROCE_CNP \
23901                 UINT32_C(0x2)
23902         /* Lossless NIC */
23903         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSLESS_NIC \
23904                 UINT32_C(0x3)
23905         /* Set to 0xFF... (All Fs) if there is no service profile specified */
23906         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_UNKNOWN \
23907                 UINT32_C(0xff)
23908         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LAST \
23909                 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_UNKNOWN
23910         /*
23911          * ID of CoS Queue 1.
23912          * FF - Invalid id
23913          *
23914          * # This ID can be used on any subsequent call to an hwrm command
23915          * that takes a queue id.
23916          * # IDs must always be queried by this command before any use
23917          * by the driver or software.
23918          * # The CoS queue index is obtained by applying modulo 10 to the
23919          * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
23920          * The CoS queue index is used to reference port statistics for the
23921          * CoS queue.
23922          * # A value of 0xff indicates that the queue is not available.
23923          * # Available queues may not be in sequential order.
23924          */
23925         uint8_t queue_id1;
23926         /* This value is applicable to CoS queues only. */
23927         uint8_t queue_id1_service_profile;
23928         /* Lossy (best-effort) */
23929         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSY \
23930                 UINT32_C(0x0)
23931         /* Lossless (legacy) */
23932         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSLESS \
23933                 UINT32_C(0x1)
23934         /* Lossless RoCE */
23935         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSLESS_ROCE \
23936                 UINT32_C(0x1)
23937         /* Lossy RoCE CNP */
23938         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSY_ROCE_CNP \
23939                 UINT32_C(0x2)
23940         /* Lossless NIC */
23941         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSLESS_NIC \
23942                 UINT32_C(0x3)
23943         /* Set to 0xFF... (All Fs) if there is no service profile specified */
23944         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_UNKNOWN \
23945                 UINT32_C(0xff)
23946         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LAST \
23947                 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_UNKNOWN
23948         /*
23949          * ID of CoS Queue 2.
23950          * FF - Invalid id
23951          *
23952          * # This ID can be used on any subsequent call to an hwrm command
23953          * that takes a queue id.
23954          * # IDs must always be queried by this command before any use
23955          * by the driver or software.
23956          * # The CoS queue index is obtained by applying modulo 10 to the
23957          * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
23958          * The CoS queue index is used to reference port statistics for the
23959          * CoS queue.
23960          * # A value of 0xff indicates that the queue is not available.
23961          * # Available queues may not be in sequential order.
23962          */
23963         uint8_t queue_id2;
23964         /* This value is applicable to CoS queues only. */
23965         uint8_t queue_id2_service_profile;
23966         /* Lossy (best-effort) */
23967         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSY \
23968                 UINT32_C(0x0)
23969         /* Lossless (legacy) */
23970         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSLESS \
23971                 UINT32_C(0x1)
23972         /* Lossless RoCE */
23973         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSLESS_ROCE \
23974                 UINT32_C(0x1)
23975         /* Lossy RoCE CNP */
23976         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSY_ROCE_CNP \
23977                 UINT32_C(0x2)
23978         /* Lossless NIC */
23979         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSLESS_NIC \
23980                 UINT32_C(0x3)
23981         /* Set to 0xFF... (All Fs) if there is no service profile specified */
23982         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_UNKNOWN \
23983                 UINT32_C(0xff)
23984         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LAST \
23985                 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_UNKNOWN
23986         /*
23987          * ID of CoS Queue 3.
23988          * FF - Invalid id
23989          *
23990          * # This ID can be used on any subsequent call to an hwrm command
23991          * that takes a queue id.
23992          * # IDs must always be queried by this command before any use
23993          * by the driver or software.
23994          * # The CoS queue index is obtained by applying modulo 10 to the
23995          * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
23996          * The CoS queue index is used to reference port statistics for the
23997          * CoS queue.
23998          * # A value of 0xff indicates that the queue is not available.
23999          * # Available queues may not be in sequential order.
24000          */
24001         uint8_t queue_id3;
24002         /* This value is applicable to CoS queues only. */
24003         uint8_t queue_id3_service_profile;
24004         /* Lossy (best-effort) */
24005         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSY \
24006                 UINT32_C(0x0)
24007         /* Lossless (legacy) */
24008         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSLESS \
24009                 UINT32_C(0x1)
24010         /* Lossless RoCE */
24011         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSLESS_ROCE \
24012                 UINT32_C(0x1)
24013         /* Lossy RoCE CNP */
24014         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSY_ROCE_CNP \
24015                 UINT32_C(0x2)
24016         /* Lossless NIC */
24017         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSLESS_NIC \
24018                 UINT32_C(0x3)
24019         /* Set to 0xFF... (All Fs) if there is no service profile specified */
24020         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_UNKNOWN \
24021                 UINT32_C(0xff)
24022         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LAST \
24023                 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_UNKNOWN
24024         /*
24025          * ID of CoS Queue 4.
24026          * FF - Invalid id
24027          *
24028          * # This ID can be used on any subsequent call to an hwrm command
24029          * that takes a queue id.
24030          * # IDs must always be queried by this command before any use
24031          * by the driver or software.
24032          * # The CoS queue index is obtained by applying modulo 10 to the
24033          * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
24034          * The CoS queue index is used to reference port statistics for the
24035          * CoS queue.
24036          * # A value of 0xff indicates that the queue is not available.
24037          * # Available queues may not be in sequential order.
24038          */
24039         uint8_t queue_id4;
24040         /* This value is applicable to CoS queues only. */
24041         uint8_t queue_id4_service_profile;
24042         /* Lossy (best-effort) */
24043         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSY \
24044                 UINT32_C(0x0)
24045         /* Lossless (legacy) */
24046         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSLESS \
24047                 UINT32_C(0x1)
24048         /* Lossless RoCE */
24049         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSLESS_ROCE \
24050                 UINT32_C(0x1)
24051         /* Lossy RoCE CNP */
24052         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSY_ROCE_CNP \
24053                 UINT32_C(0x2)
24054         /* Lossless NIC */
24055         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSLESS_NIC \
24056                 UINT32_C(0x3)
24057         /* Set to 0xFF... (All Fs) if there is no service profile specified */
24058         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_UNKNOWN \
24059                 UINT32_C(0xff)
24060         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LAST \
24061                 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_UNKNOWN
24062         /*
24063          * ID of CoS Queue 5.
24064          * FF - Invalid id
24065          *
24066          * # This ID can be used on any subsequent call to an hwrm command
24067          * that takes a queue id.
24068          * # IDs must always be queried by this command before any use
24069          * by the driver or software.
24070          * # The CoS queue index is obtained by applying modulo 10 to the
24071          * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
24072          * The CoS queue index is used to reference port statistics for the
24073          * CoS queue.
24074          * # A value of 0xff indicates that the queue is not available.
24075          * # Available queues may not be in sequential order.
24076          */
24077         uint8_t queue_id5;
24078         /* This value is applicable to CoS queues only. */
24079         uint8_t queue_id5_service_profile;
24080         /* Lossy (best-effort) */
24081         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSY \
24082                 UINT32_C(0x0)
24083         /* Lossless (legacy) */
24084         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSLESS \
24085                 UINT32_C(0x1)
24086         /* Lossless RoCE */
24087         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSLESS_ROCE \
24088                 UINT32_C(0x1)
24089         /* Lossy RoCE CNP */
24090         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSY_ROCE_CNP \
24091                 UINT32_C(0x2)
24092         /* Lossless NIC */
24093         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSLESS_NIC \
24094                 UINT32_C(0x3)
24095         /* Set to 0xFF... (All Fs) if there is no service profile specified */
24096         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_UNKNOWN \
24097                 UINT32_C(0xff)
24098         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LAST \
24099                 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_UNKNOWN
24100         /*
24101          * ID of CoS Queue 6.
24102          * FF - Invalid id
24103          *
24104          * # This ID can be used on any subsequent call to an hwrm command
24105          * that takes a queue id.
24106          * # IDs must always be queried by this command before any use
24107          * by the driver or software.
24108          * # The CoS queue index is obtained by applying modulo 10 to the
24109          * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
24110          * The CoS queue index is used to reference port statistics for the
24111          * CoS queue.
24112          * # A value of 0xff indicates that the queue is not available.
24113          * # Available queues may not be in sequential order.
24114          */
24115         uint8_t queue_id6;
24116         /* This value is applicable to CoS queues only. */
24117         uint8_t queue_id6_service_profile;
24118         /* Lossy (best-effort) */
24119         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSY \
24120                 UINT32_C(0x0)
24121         /* Lossless (legacy) */
24122         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSLESS \
24123                 UINT32_C(0x1)
24124         /* Lossless RoCE */
24125         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSLESS_ROCE \
24126                 UINT32_C(0x1)
24127         /* Lossy RoCE CNP */
24128         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSY_ROCE_CNP \
24129                 UINT32_C(0x2)
24130         /* Lossless NIC */
24131         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSLESS_NIC \
24132                 UINT32_C(0x3)
24133         /* Set to 0xFF... (All Fs) if there is no service profile specified */
24134         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_UNKNOWN \
24135                 UINT32_C(0xff)
24136         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LAST \
24137                 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_UNKNOWN
24138         /*
24139          * ID of CoS Queue 7.
24140          * FF - Invalid id
24141          *
24142          * # This ID can be used on any subsequent call to an hwrm command
24143          * that takes a queue id.
24144          * # IDs must always be queried by this command before any use
24145          * by the driver or software.
24146          * # The CoS queue index is obtained by applying modulo 10 to the
24147          * CoS queue ID. Valid CoS queue indexes are in the range of 0 to 7.
24148          * The CoS queue index is used to reference port statistics for the
24149          * CoS queue.
24150          * # A value of 0xff indicates that the queue is not available.
24151          * # Available queues may not be in sequential order.
24152          */
24153         uint8_t queue_id7;
24154         /* This value is applicable to CoS queues only. */
24155         uint8_t queue_id7_service_profile;
24156         /* Lossy (best-effort) */
24157         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSY \
24158                 UINT32_C(0x0)
24159         /* Lossless (legacy) */
24160         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSLESS \
24161                 UINT32_C(0x1)
24162         /* Lossless RoCE */
24163         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSLESS_ROCE \
24164                 UINT32_C(0x1)
24165         /* Lossy RoCE CNP */
24166         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSY_ROCE_CNP \
24167                 UINT32_C(0x2)
24168         /* Lossless NIC */
24169         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSLESS_NIC \
24170                 UINT32_C(0x3)
24171         /* Set to 0xFF... (All Fs) if there is no service profile specified */
24172         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_UNKNOWN \
24173                 UINT32_C(0xff)
24174         #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LAST \
24175                 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_UNKNOWN
24176         uint8_t unused_0;
24177         /*
24178          * Up to 16 bytes of null padded ASCII string describing this queue.
24179          * The queue name includes a CoS queue index and, in some cases, text
24180          * that distinguishes the queue from other queues in the group.
24181          */
24182         char    qid0_name[16];
24183         /* Up to 16 bytes of null padded ASCII string describing this queue. */
24184         char    qid1_name[16];
24185         /* Up to 16 bytes of null padded ASCII string describing this queue. */
24186         char    qid2_name[16];
24187         /* Up to 16 bytes of null padded ASCII string describing this queue. */
24188         char    qid3_name[16];
24189         /* Up to 16 bytes of null padded ASCII string describing this queue. */
24190         char    qid4_name[16];
24191         /* Up to 16 bytes of null padded ASCII string describing this queue. */
24192         char    qid5_name[16];
24193         /* Up to 16 bytes of null padded ASCII string describing this queue. */
24194         char    qid6_name[16];
24195         /* Up to 16 bytes of null padded ASCII string describing this queue. */
24196         char    qid7_name[16];
24197         uint8_t unused_1[7];
24198         /*
24199          * This field is used in Output records to indicate that the output
24200          * is completely written to RAM. This field should be read as '1'
24201          * to indicate that the output has been completely written.
24202          * When writing a command completion or response to an internal processor,
24203          * the order of writes has to be such that this field is written last.
24204          */
24205         uint8_t valid;
24206 } __rte_packed;
24207
24208 /*******************
24209  * hwrm_queue_qcfg *
24210  *******************/
24211
24212
24213 /* hwrm_queue_qcfg_input (size:192b/24B) */
24214 struct hwrm_queue_qcfg_input {
24215         /* The HWRM command request type. */
24216         uint16_t        req_type;
24217         /*
24218          * The completion ring to send the completion event on. This should
24219          * be the NQ ID returned from the `nq_alloc` HWRM command.
24220          */
24221         uint16_t        cmpl_ring;
24222         /*
24223          * The sequence ID is used by the driver for tracking multiple
24224          * commands. This ID is treated as opaque data by the firmware and
24225          * the value is returned in the `hwrm_resp_hdr` upon completion.
24226          */
24227         uint16_t        seq_id;
24228         /*
24229          * The target ID of the command:
24230          * * 0x0-0xFFF8 - The function ID
24231          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
24232          * * 0xFFFD - Reserved for user-space HWRM interface
24233          * * 0xFFFF - HWRM
24234          */
24235         uint16_t        target_id;
24236         /*
24237          * A physical address pointer pointing to a host buffer that the
24238          * command's response data will be written. This can be either a host
24239          * physical address (HPA) or a guest physical address (GPA) and must
24240          * point to a physically contiguous block of memory.
24241          */
24242         uint64_t        resp_addr;
24243         uint32_t        flags;
24244         /*
24245          * Enumeration denoting the RX, TX type of the resource.
24246          * This enumeration is used for resources that are similar for both
24247          * TX and RX paths of the chip.
24248          */
24249         #define HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH     UINT32_C(0x1)
24250         /* tx path */
24251         #define HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)
24252         /* rx path */
24253         #define HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)
24254         #define HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH_LAST \
24255                 HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH_RX
24256         /* Queue ID of the queue. */
24257         uint32_t        queue_id;
24258 } __rte_packed;
24259
24260 /* hwrm_queue_qcfg_output (size:128b/16B) */
24261 struct hwrm_queue_qcfg_output {
24262         /* The specific error status for the command. */
24263         uint16_t        error_code;
24264         /* The HWRM command request type. */
24265         uint16_t        req_type;
24266         /* The sequence ID from the original command. */
24267         uint16_t        seq_id;
24268         /* The length of the response data in number of bytes. */
24269         uint16_t        resp_len;
24270         /*
24271          * This value is the estimate packet length used in the
24272          * TX arbiter.
24273          */
24274         uint32_t        queue_len;
24275         /* This value is applicable to CoS queues only. */
24276         uint8_t service_profile;
24277         /* Lossy (best-effort) */
24278         #define HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_LOSSY    UINT32_C(0x0)
24279         /* Lossless */
24280         #define HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_LOSSLESS UINT32_C(0x1)
24281         /* Set to 0xFF... (All Fs) if there is no service profile specified */
24282         #define HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_UNKNOWN  UINT32_C(0xff)
24283         #define HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_LAST \
24284                 HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_UNKNOWN
24285         /* Information about queue configuration. */
24286         uint8_t queue_cfg_info;
24287         /*
24288          * If this flag is set to '1', then the queue is
24289          * configured asymmetrically on TX and RX sides.
24290          * If this flag is set to '0', then this queue is
24291          * configured symmetrically on TX and RX sides.
24292          */
24293         #define HWRM_QUEUE_QCFG_OUTPUT_QUEUE_CFG_INFO_ASYM_CFG \
24294                 UINT32_C(0x1)
24295         uint8_t unused_0;
24296         /*
24297          * This field is used in Output records to indicate that the output
24298          * is completely written to RAM. This field should be read as '1'
24299          * to indicate that the output has been completely written.
24300          * When writing a command completion or response to an internal processor,
24301          * the order of writes has to be such that this field is written last.
24302          */
24303         uint8_t valid;
24304 } __rte_packed;
24305
24306 /******************
24307  * hwrm_queue_cfg *
24308  ******************/
24309
24310
24311 /* hwrm_queue_cfg_input (size:320b/40B) */
24312 struct hwrm_queue_cfg_input {
24313         /* The HWRM command request type. */
24314         uint16_t        req_type;
24315         /*
24316          * The completion ring to send the completion event on. This should
24317          * be the NQ ID returned from the `nq_alloc` HWRM command.
24318          */
24319         uint16_t        cmpl_ring;
24320         /*
24321          * The sequence ID is used by the driver for tracking multiple
24322          * commands. This ID is treated as opaque data by the firmware and
24323          * the value is returned in the `hwrm_resp_hdr` upon completion.
24324          */
24325         uint16_t        seq_id;
24326         /*
24327          * The target ID of the command:
24328          * * 0x0-0xFFF8 - The function ID
24329          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
24330          * * 0xFFFD - Reserved for user-space HWRM interface
24331          * * 0xFFFF - HWRM
24332          */
24333         uint16_t        target_id;
24334         /*
24335          * A physical address pointer pointing to a host buffer that the
24336          * command's response data will be written. This can be either a host
24337          * physical address (HPA) or a guest physical address (GPA) and must
24338          * point to a physically contiguous block of memory.
24339          */
24340         uint64_t        resp_addr;
24341         uint32_t        flags;
24342         /*
24343          * Enumeration denoting the RX, TX, or both directions applicable to the resource.
24344          * This enumeration is used for resources that are similar for both
24345          * TX and RX paths of the chip.
24346          */
24347         #define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_MASK UINT32_C(0x3)
24348         #define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_SFT  0
24349         /* tx path */
24350         #define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_TX     UINT32_C(0x0)
24351         /* rx path */
24352         #define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_RX     UINT32_C(0x1)
24353         /* Bi-directional (Symmetrically applicable to TX and RX paths) */
24354         #define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_BIDIR  UINT32_C(0x2)
24355         #define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_LAST \
24356                 HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_BIDIR
24357         uint32_t        enables;
24358         /*
24359          * This bit must be '1' for the dflt_len field to be
24360          * configured.
24361          */
24362         #define HWRM_QUEUE_CFG_INPUT_ENABLES_DFLT_LEN            UINT32_C(0x1)
24363         /*
24364          * This bit must be '1' for the service_profile field to be
24365          * configured.
24366          */
24367         #define HWRM_QUEUE_CFG_INPUT_ENABLES_SERVICE_PROFILE     UINT32_C(0x2)
24368         /* Queue ID of queue that is to be configured by this function. */
24369         uint32_t        queue_id;
24370         /*
24371          * This value is a the estimate packet length used in the
24372          * TX arbiter.
24373          * Set to 0xFF... (All Fs) to not adjust this value.
24374          */
24375         uint32_t        dflt_len;
24376         /* This value is applicable to CoS queues only. */
24377         uint8_t service_profile;
24378         /* Lossy (best-effort) */
24379         #define HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_LOSSY    UINT32_C(0x0)
24380         /* Lossless */
24381         #define HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_LOSSLESS UINT32_C(0x1)
24382         /* Set to 0xFF... (All Fs) if there is no service profile specified */
24383         #define HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_UNKNOWN  UINT32_C(0xff)
24384         #define HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_LAST \
24385                 HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_UNKNOWN
24386         uint8_t unused_0[7];
24387 } __rte_packed;
24388
24389 /* hwrm_queue_cfg_output (size:128b/16B) */
24390 struct hwrm_queue_cfg_output {
24391         /* The specific error status for the command. */
24392         uint16_t        error_code;
24393         /* The HWRM command request type. */
24394         uint16_t        req_type;
24395         /* The sequence ID from the original command. */
24396         uint16_t        seq_id;
24397         /* The length of the response data in number of bytes. */
24398         uint16_t        resp_len;
24399         uint8_t unused_0[7];
24400         /*
24401          * This field is used in Output records to indicate that the output
24402          * is completely written to RAM. This field should be read as '1'
24403          * to indicate that the output has been completely written.
24404          * When writing a command completion or response to an internal processor,
24405          * the order of writes has to be such that this field is written last.
24406          */
24407         uint8_t valid;
24408 } __rte_packed;
24409
24410 /*****************************
24411  * hwrm_queue_pfcenable_qcfg *
24412  *****************************/
24413
24414
24415 /* hwrm_queue_pfcenable_qcfg_input (size:192b/24B) */
24416 struct hwrm_queue_pfcenable_qcfg_input {
24417         /* The HWRM command request type. */
24418         uint16_t        req_type;
24419         /*
24420          * The completion ring to send the completion event on. This should
24421          * be the NQ ID returned from the `nq_alloc` HWRM command.
24422          */
24423         uint16_t        cmpl_ring;
24424         /*
24425          * The sequence ID is used by the driver for tracking multiple
24426          * commands. This ID is treated as opaque data by the firmware and
24427          * the value is returned in the `hwrm_resp_hdr` upon completion.
24428          */
24429         uint16_t        seq_id;
24430         /*
24431          * The target ID of the command:
24432          * * 0x0-0xFFF8 - The function ID
24433          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
24434          * * 0xFFFD - Reserved for user-space HWRM interface
24435          * * 0xFFFF - HWRM
24436          */
24437         uint16_t        target_id;
24438         /*
24439          * A physical address pointer pointing to a host buffer that the
24440          * command's response data will be written. This can be either a host
24441          * physical address (HPA) or a guest physical address (GPA) and must
24442          * point to a physically contiguous block of memory.
24443          */
24444         uint64_t        resp_addr;
24445         /*
24446          * Port ID of port for which the table is being configured.
24447          * The HWRM needs to check whether this function is allowed
24448          * to configure pri2cos mapping on this port.
24449          */
24450         uint16_t        port_id;
24451         uint8_t unused_0[6];
24452 } __rte_packed;
24453
24454 /* hwrm_queue_pfcenable_qcfg_output (size:128b/16B) */
24455 struct hwrm_queue_pfcenable_qcfg_output {
24456         /* The specific error status for the command. */
24457         uint16_t        error_code;
24458         /* The HWRM command request type. */
24459         uint16_t        req_type;
24460         /* The sequence ID from the original command. */
24461         uint16_t        seq_id;
24462         /* The length of the response data in number of bytes. */
24463         uint16_t        resp_len;
24464         uint32_t        flags;
24465         /* If set to 1, then PFC is enabled on PRI 0. */
24466         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI0_PFC_ENABLED \
24467                 UINT32_C(0x1)
24468         /* If set to 1, then PFC is enabled on PRI 1. */
24469         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI1_PFC_ENABLED \
24470                 UINT32_C(0x2)
24471         /* If set to 1, then PFC is enabled on PRI 2. */
24472         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI2_PFC_ENABLED \
24473                 UINT32_C(0x4)
24474         /* If set to 1, then PFC is enabled on PRI 3. */
24475         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI3_PFC_ENABLED \
24476                 UINT32_C(0x8)
24477         /* If set to 1, then PFC is enabled on PRI 4. */
24478         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI4_PFC_ENABLED \
24479                 UINT32_C(0x10)
24480         /* If set to 1, then PFC is enabled on PRI 5. */
24481         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI5_PFC_ENABLED \
24482                 UINT32_C(0x20)
24483         /* If set to 1, then PFC is enabled on PRI 6. */
24484         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI6_PFC_ENABLED \
24485                 UINT32_C(0x40)
24486         /* If set to 1, then PFC is enabled on PRI 7. */
24487         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI7_PFC_ENABLED \
24488                 UINT32_C(0x80)
24489         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI0. */
24490         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI0_PFC_WATCHDOG_ENABLED \
24491                 UINT32_C(0x100)
24492         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI1. */
24493         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI1_PFC_WATCHDOG_ENABLED \
24494                 UINT32_C(0x200)
24495         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI2. */
24496         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI2_PFC_WATCHDOG_ENABLED \
24497                 UINT32_C(0x400)
24498         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI3. */
24499         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI3_PFC_WATCHDOG_ENABLED \
24500                 UINT32_C(0x800)
24501         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI4. */
24502         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI4_PFC_WATCHDOG_ENABLED \
24503                 UINT32_C(0x1000)
24504         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI5. */
24505         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI5_PFC_WATCHDOG_ENABLED \
24506                 UINT32_C(0x2000)
24507         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI6. */
24508         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI6_PFC_WATCHDOG_ENABLED \
24509                 UINT32_C(0x4000)
24510         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI7. */
24511         #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI7_PFC_WATCHDOG_ENABLED \
24512                 UINT32_C(0x8000)
24513         uint8_t unused_0[3];
24514         /*
24515          * This field is used in Output records to indicate that the output
24516          * is completely written to RAM. This field should be read as '1'
24517          * to indicate that the output has been completely written.
24518          * When writing a command completion or response to an internal processor,
24519          * the order of writes has to be such that this field is written last.
24520          */
24521         uint8_t valid;
24522 } __rte_packed;
24523
24524 /****************************
24525  * hwrm_queue_pfcenable_cfg *
24526  ****************************/
24527
24528
24529 /* hwrm_queue_pfcenable_cfg_input (size:192b/24B) */
24530 struct hwrm_queue_pfcenable_cfg_input {
24531         /* The HWRM command request type. */
24532         uint16_t        req_type;
24533         /*
24534          * The completion ring to send the completion event on. This should
24535          * be the NQ ID returned from the `nq_alloc` HWRM command.
24536          */
24537         uint16_t        cmpl_ring;
24538         /*
24539          * The sequence ID is used by the driver for tracking multiple
24540          * commands. This ID is treated as opaque data by the firmware and
24541          * the value is returned in the `hwrm_resp_hdr` upon completion.
24542          */
24543         uint16_t        seq_id;
24544         /*
24545          * The target ID of the command:
24546          * * 0x0-0xFFF8 - The function ID
24547          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
24548          * * 0xFFFD - Reserved for user-space HWRM interface
24549          * * 0xFFFF - HWRM
24550          */
24551         uint16_t        target_id;
24552         /*
24553          * A physical address pointer pointing to a host buffer that the
24554          * command's response data will be written. This can be either a host
24555          * physical address (HPA) or a guest physical address (GPA) and must
24556          * point to a physically contiguous block of memory.
24557          */
24558         uint64_t        resp_addr;
24559         uint32_t        flags;
24560         /* If set to 1, then PFC is requested to be enabled on PRI 0. */
24561         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI0_PFC_ENABLED \
24562                 UINT32_C(0x1)
24563         /* If set to 1, then PFC is requested to be enabled on PRI 1. */
24564         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI1_PFC_ENABLED \
24565                 UINT32_C(0x2)
24566         /* If set to 1, then PFC is requested to be enabled on PRI 2. */
24567         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI2_PFC_ENABLED \
24568                 UINT32_C(0x4)
24569         /* If set to 1, then PFC is requested to be enabled on PRI 3. */
24570         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI3_PFC_ENABLED \
24571                 UINT32_C(0x8)
24572         /* If set to 1, then PFC is requested to be enabled on PRI 4. */
24573         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI4_PFC_ENABLED \
24574                 UINT32_C(0x10)
24575         /* If set to 1, then PFC is requested to be enabled on PRI 5. */
24576         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI5_PFC_ENABLED \
24577                 UINT32_C(0x20)
24578         /* If set to 1, then PFC is requested to be enabled on PRI 6. */
24579         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI6_PFC_ENABLED \
24580                 UINT32_C(0x40)
24581         /* If set to 1, then PFC is requested to be enabled on PRI 7. */
24582         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI7_PFC_ENABLED \
24583                 UINT32_C(0x80)
24584         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI0. */
24585         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI0_PFC_WATCHDOG_ENABLED \
24586                 UINT32_C(0x100)
24587         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI1. */
24588         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI1_PFC_WATCHDOG_ENABLED \
24589                 UINT32_C(0x200)
24590         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI2. */
24591         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI2_PFC_WATCHDOG_ENABLED \
24592                 UINT32_C(0x400)
24593         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI3. */
24594         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI3_PFC_WATCHDOG_ENABLED \
24595                 UINT32_C(0x800)
24596         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI4. */
24597         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI4_PFC_WATCHDOG_ENABLED \
24598                 UINT32_C(0x1000)
24599         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI5. */
24600         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI5_PFC_WATCHDOG_ENABLED \
24601                 UINT32_C(0x2000)
24602         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI6. */
24603         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI6_PFC_WATCHDOG_ENABLED \
24604                 UINT32_C(0x4000)
24605         /* If set to 1, then PFC WatchDog is requested to be enabled on PRI7. */
24606         #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI7_PFC_WATCHDOG_ENABLED \
24607                 UINT32_C(0x8000)
24608         /*
24609          * Port ID of port for which the table is being configured.
24610          * The HWRM needs to check whether this function is allowed
24611          * to configure pri2cos mapping on this port.
24612          */
24613         uint16_t        port_id;
24614         uint8_t unused_0[2];
24615 } __rte_packed;
24616
24617 /* hwrm_queue_pfcenable_cfg_output (size:128b/16B) */
24618 struct hwrm_queue_pfcenable_cfg_output {
24619         /* The specific error status for the command. */
24620         uint16_t        error_code;
24621         /* The HWRM command request type. */
24622         uint16_t        req_type;
24623         /* The sequence ID from the original command. */
24624         uint16_t        seq_id;
24625         /* The length of the response data in number of bytes. */
24626         uint16_t        resp_len;
24627         uint8_t unused_0[7];
24628         /*
24629          * This field is used in Output records to indicate that the output
24630          * is completely written to RAM. This field should be read as '1'
24631          * to indicate that the output has been completely written.
24632          * When writing a command completion or response to an internal processor,
24633          * the order of writes has to be such that this field is written last.
24634          */
24635         uint8_t valid;
24636 } __rte_packed;
24637
24638 /***************************
24639  * hwrm_queue_pri2cos_qcfg *
24640  ***************************/
24641
24642
24643 /* hwrm_queue_pri2cos_qcfg_input (size:192b/24B) */
24644 struct hwrm_queue_pri2cos_qcfg_input {
24645         /* The HWRM command request type. */
24646         uint16_t        req_type;
24647         /*
24648          * The completion ring to send the completion event on. This should
24649          * be the NQ ID returned from the `nq_alloc` HWRM command.
24650          */
24651         uint16_t        cmpl_ring;
24652         /*
24653          * The sequence ID is used by the driver for tracking multiple
24654          * commands. This ID is treated as opaque data by the firmware and
24655          * the value is returned in the `hwrm_resp_hdr` upon completion.
24656          */
24657         uint16_t        seq_id;
24658         /*
24659          * The target ID of the command:
24660          * * 0x0-0xFFF8 - The function ID
24661          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
24662          * * 0xFFFD - Reserved for user-space HWRM interface
24663          * * 0xFFFF - HWRM
24664          */
24665         uint16_t        target_id;
24666         /*
24667          * A physical address pointer pointing to a host buffer that the
24668          * command's response data will be written. This can be either a host
24669          * physical address (HPA) or a guest physical address (GPA) and must
24670          * point to a physically contiguous block of memory.
24671          */
24672         uint64_t        resp_addr;
24673         uint32_t        flags;
24674         /*
24675          * Enumeration denoting the RX, TX type of the resource.
24676          * This enumeration is used for resources that are similar for both
24677          * TX and RX paths of the chip.
24678          */
24679         #define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH      UINT32_C(0x1)
24680         /* tx path */
24681         #define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH_TX     UINT32_C(0x0)
24682         /* rx path */
24683         #define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH_RX     UINT32_C(0x1)
24684         #define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH_LAST \
24685                 HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH_RX
24686         /*
24687          * When this bit is set to '0', the query is
24688          * for PRI from tunnel headers.
24689          * When this bit is set to '1', the query is
24690          * for PRI from inner packet headers.
24691          */
24692         #define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_IVLAN     UINT32_C(0x2)
24693         /*
24694          * Port ID of port for which the table is being configured.
24695          * The HWRM needs to check whether this function is allowed
24696          * to configure pri2cos mapping on this port.
24697          */
24698         uint8_t port_id;
24699         uint8_t unused_0[3];
24700 } __rte_packed;
24701
24702 /* hwrm_queue_pri2cos_qcfg_output (size:192b/24B) */
24703 struct hwrm_queue_pri2cos_qcfg_output {
24704         /* The specific error status for the command. */
24705         uint16_t        error_code;
24706         /* The HWRM command request type. */
24707         uint16_t        req_type;
24708         /* The sequence ID from the original command. */
24709         uint16_t        seq_id;
24710         /* The length of the response data in number of bytes. */
24711         uint16_t        resp_len;
24712         /*
24713          * CoS Queue assigned to priority 0. This value can only
24714          * be changed before traffic has started.
24715          * A value of 0xff indicates that no CoS queue is assigned to the
24716          * specified priority.
24717          */
24718         uint8_t pri0_cos_queue_id;
24719         /*
24720          * CoS Queue assigned to priority 1. This value can only
24721          * be changed before traffic has started.
24722          * A value of 0xff indicates that no CoS queue is assigned to the
24723          * specified priority.
24724          */
24725         uint8_t pri1_cos_queue_id;
24726         /*
24727          * CoS Queue assigned to priority 2. This value can only
24728          * be changed before traffic has started.
24729          * A value of 0xff indicates that no CoS queue is assigned to the
24730          * specified priority.
24731          */
24732         uint8_t pri2_cos_queue_id;
24733         /*
24734          * CoS Queue assigned to priority 3. This value can only
24735          * be changed before traffic has started.
24736          * A value of 0xff indicates that no CoS queue is assigned to the
24737          * specified priority.
24738          */
24739         uint8_t pri3_cos_queue_id;
24740         /*
24741          * CoS Queue assigned to priority 4. This value can only
24742          * be changed before traffic has started.
24743          * A value of 0xff indicates that no CoS queue is assigned to the
24744          * specified priority.
24745          */
24746         uint8_t pri4_cos_queue_id;
24747         /*
24748          * CoS Queue assigned to priority 5. This value can only
24749          * be changed before traffic has started.
24750          * A value of 0xff indicates that no CoS queue is assigned to the
24751          * specified priority.
24752          */
24753         uint8_t pri5_cos_queue_id;
24754         /*
24755          * CoS Queue assigned to priority 6. This value can only
24756          * be changed before traffic has started.
24757          * A value of 0xff indicates that no CoS queue is assigned to the
24758          * specified priority.
24759          */
24760         uint8_t pri6_cos_queue_id;
24761         /*
24762          * CoS Queue assigned to priority 7. This value can only
24763          * be changed before traffic has started.
24764          * A value of 0xff indicates that no CoS queue is assigned to the
24765          * specified priority.
24766          */
24767         uint8_t pri7_cos_queue_id;
24768         /* Information about queue configuration. */
24769         uint8_t queue_cfg_info;
24770         /*
24771          * If this flag is set to '1', then the PRI to CoS
24772          * configuration is asymmetric on TX and RX sides.
24773          * If this flag is set to '0', then PRI to CoS configuration
24774          * is symmetric on TX and RX sides.
24775          */
24776         #define HWRM_QUEUE_PRI2COS_QCFG_OUTPUT_QUEUE_CFG_INFO_ASYM_CFG \
24777                 UINT32_C(0x1)
24778         uint8_t unused_0[6];
24779         /*
24780          * This field is used in Output records to indicate that the output
24781          * is completely written to RAM. This field should be read as '1'
24782          * to indicate that the output has been completely written.
24783          * When writing a command completion or response to an internal processor,
24784          * the order of writes has to be such that this field is written last.
24785          */
24786         uint8_t valid;
24787 } __rte_packed;
24788
24789 /**************************
24790  * hwrm_queue_pri2cos_cfg *
24791  **************************/
24792
24793
24794 /* hwrm_queue_pri2cos_cfg_input (size:320b/40B) */
24795 struct hwrm_queue_pri2cos_cfg_input {
24796         /* The HWRM command request type. */
24797         uint16_t        req_type;
24798         /*
24799          * The completion ring to send the completion event on. This should
24800          * be the NQ ID returned from the `nq_alloc` HWRM command.
24801          */
24802         uint16_t        cmpl_ring;
24803         /*
24804          * The sequence ID is used by the driver for tracking multiple
24805          * commands. This ID is treated as opaque data by the firmware and
24806          * the value is returned in the `hwrm_resp_hdr` upon completion.
24807          */
24808         uint16_t        seq_id;
24809         /*
24810          * The target ID of the command:
24811          * * 0x0-0xFFF8 - The function ID
24812          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
24813          * * 0xFFFD - Reserved for user-space HWRM interface
24814          * * 0xFFFF - HWRM
24815          */
24816         uint16_t        target_id;
24817         /*
24818          * A physical address pointer pointing to a host buffer that the
24819          * command's response data will be written. This can be either a host
24820          * physical address (HPA) or a guest physical address (GPA) and must
24821          * point to a physically contiguous block of memory.
24822          */
24823         uint64_t        resp_addr;
24824         uint32_t        flags;
24825         /*
24826          * Enumeration denoting the RX, TX, or both directions applicable to the resource.
24827          * This enumeration is used for resources that are similar for both
24828          * TX and RX paths of the chip.
24829          */
24830         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_MASK UINT32_C(0x3)
24831         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_SFT  0
24832         /* tx path */
24833         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_TX     UINT32_C(0x0)
24834         /* rx path */
24835         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_RX     UINT32_C(0x1)
24836         /* Bi-directional (Symmetrically applicable to TX and RX paths) */
24837         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_BIDIR  UINT32_C(0x2)
24838         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_LAST \
24839                 HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_BIDIR
24840         /*
24841          * When this bit is set to '0', the mapping is requested
24842          * for PRI from tunnel headers.
24843          * When this bit is set to '1', the mapping is requested
24844          * for PRI from inner packet headers.
24845          */
24846         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_IVLAN     UINT32_C(0x4)
24847         uint32_t        enables;
24848         /*
24849          * This bit must be '1' for the pri0_cos_queue_id field to be
24850          * configured.
24851          */
24852         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI0_COS_QUEUE_ID \
24853                 UINT32_C(0x1)
24854         /*
24855          * This bit must be '1' for the pri1_cos_queue_id field to be
24856          * configured.
24857          */
24858         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI1_COS_QUEUE_ID \
24859                 UINT32_C(0x2)
24860         /*
24861          * This bit must be '1' for the pri2_cos_queue_id field to be
24862          * configured.
24863          */
24864         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI2_COS_QUEUE_ID \
24865                 UINT32_C(0x4)
24866         /*
24867          * This bit must be '1' for the pri3_cos_queue_id field to be
24868          * configured.
24869          */
24870         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI3_COS_QUEUE_ID \
24871                 UINT32_C(0x8)
24872         /*
24873          * This bit must be '1' for the pri4_cos_queue_id field to be
24874          * configured.
24875          */
24876         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI4_COS_QUEUE_ID \
24877                 UINT32_C(0x10)
24878         /*
24879          * This bit must be '1' for the pri5_cos_queue_id field to be
24880          * configured.
24881          */
24882         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI5_COS_QUEUE_ID \
24883                 UINT32_C(0x20)
24884         /*
24885          * This bit must be '1' for the pri6_cos_queue_id field to be
24886          * configured.
24887          */
24888         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI6_COS_QUEUE_ID \
24889                 UINT32_C(0x40)
24890         /*
24891          * This bit must be '1' for the pri7_cos_queue_id field to be
24892          * configured.
24893          */
24894         #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI7_COS_QUEUE_ID \
24895                 UINT32_C(0x80)
24896         /*
24897          * Port ID of port for which the table is being configured.
24898          * The HWRM needs to check whether this function is allowed
24899          * to configure pri2cos mapping on this port.
24900          */
24901         uint8_t port_id;
24902         /*
24903          * CoS Queue assigned to priority 0. This value can only
24904          * be changed before traffic has started.
24905          */
24906         uint8_t pri0_cos_queue_id;
24907         /*
24908          * CoS Queue assigned to priority 1. This value can only
24909          * be changed before traffic has started.
24910          */
24911         uint8_t pri1_cos_queue_id;
24912         /*
24913          * CoS Queue assigned to priority 2  This value can only
24914          * be changed before traffic has started.
24915          */
24916         uint8_t pri2_cos_queue_id;
24917         /*
24918          * CoS Queue assigned to priority 3. This value can only
24919          * be changed before traffic has started.
24920          */
24921         uint8_t pri3_cos_queue_id;
24922         /*
24923          * CoS Queue assigned to priority 4. This value can only
24924          * be changed before traffic has started.
24925          */
24926         uint8_t pri4_cos_queue_id;
24927         /*
24928          * CoS Queue assigned to priority 5. This value can only
24929          * be changed before traffic has started.
24930          */
24931         uint8_t pri5_cos_queue_id;
24932         /*
24933          * CoS Queue assigned to priority 6. This value can only
24934          * be changed before traffic has started.
24935          */
24936         uint8_t pri6_cos_queue_id;
24937         /*
24938          * CoS Queue assigned to priority 7. This value can only
24939          * be changed before traffic has started.
24940          */
24941         uint8_t pri7_cos_queue_id;
24942         uint8_t unused_0[7];
24943 } __rte_packed;
24944
24945 /* hwrm_queue_pri2cos_cfg_output (size:128b/16B) */
24946 struct hwrm_queue_pri2cos_cfg_output {
24947         /* The specific error status for the command. */
24948         uint16_t        error_code;
24949         /* The HWRM command request type. */
24950         uint16_t        req_type;
24951         /* The sequence ID from the original command. */
24952         uint16_t        seq_id;
24953         /* The length of the response data in number of bytes. */
24954         uint16_t        resp_len;
24955         uint8_t unused_0[7];
24956         /*
24957          * This field is used in Output records to indicate that the output
24958          * is completely written to RAM. This field should be read as '1'
24959          * to indicate that the output has been completely written.
24960          * When writing a command completion or response to an internal processor,
24961          * the order of writes has to be such that this field is written last.
24962          */
24963         uint8_t valid;
24964 } __rte_packed;
24965
24966 /**************************
24967  * hwrm_queue_cos2bw_qcfg *
24968  **************************/
24969
24970
24971 /* hwrm_queue_cos2bw_qcfg_input (size:192b/24B) */
24972 struct hwrm_queue_cos2bw_qcfg_input {
24973         /* The HWRM command request type. */
24974         uint16_t        req_type;
24975         /*
24976          * The completion ring to send the completion event on. This should
24977          * be the NQ ID returned from the `nq_alloc` HWRM command.
24978          */
24979         uint16_t        cmpl_ring;
24980         /*
24981          * The sequence ID is used by the driver for tracking multiple
24982          * commands. This ID is treated as opaque data by the firmware and
24983          * the value is returned in the `hwrm_resp_hdr` upon completion.
24984          */
24985         uint16_t        seq_id;
24986         /*
24987          * The target ID of the command:
24988          * * 0x0-0xFFF8 - The function ID
24989          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
24990          * * 0xFFFD - Reserved for user-space HWRM interface
24991          * * 0xFFFF - HWRM
24992          */
24993         uint16_t        target_id;
24994         /*
24995          * A physical address pointer pointing to a host buffer that the
24996          * command's response data will be written. This can be either a host
24997          * physical address (HPA) or a guest physical address (GPA) and must
24998          * point to a physically contiguous block of memory.
24999          */
25000         uint64_t        resp_addr;
25001         /*
25002          * Port ID of port for which the table is being configured.
25003          * The HWRM needs to check whether this function is allowed
25004          * to configure TC BW assignment on this port.
25005          */
25006         uint16_t        port_id;
25007         uint8_t unused_0[6];
25008 } __rte_packed;
25009
25010 /* hwrm_queue_cos2bw_qcfg_output (size:896b/112B) */
25011 struct hwrm_queue_cos2bw_qcfg_output {
25012         /* The specific error status for the command. */
25013         uint16_t        error_code;
25014         /* The HWRM command request type. */
25015         uint16_t        req_type;
25016         /* The sequence ID from the original command. */
25017         uint16_t        seq_id;
25018         /* The length of the response data in number of bytes. */
25019         uint16_t        resp_len;
25020         /* ID of CoS Queue 0. */
25021         uint8_t queue_id0;
25022         uint8_t unused_0;
25023         uint16_t        unused_1;
25024         /*
25025          * Minimum BW allocated to CoS Queue.
25026          * The HWRM will translate this value into byte counter and
25027          * time interval used for this COS inside the device.
25028          */
25029         uint32_t        queue_id0_min_bw;
25030         /* The bandwidth value. */
25031         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_MASK \
25032                 UINT32_C(0xfffffff)
25033         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_SFT \
25034                 0
25035         /* The granularity of the value (bits or bytes). */
25036         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE \
25037                 UINT32_C(0x10000000)
25038         /* Value is in bits. */
25039         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE_BITS \
25040                 (UINT32_C(0x0) << 28)
25041         /* Value is in bytes. */
25042         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE_BYTES \
25043                 (UINT32_C(0x1) << 28)
25044         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE_LAST \
25045                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE_BYTES
25046         /* bw_value_unit is 3 b */
25047         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_MASK \
25048                 UINT32_C(0xe0000000)
25049         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_SFT \
25050                 29
25051         /* Value is in Mb or MB (base 10). */
25052         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_MEGA \
25053                 (UINT32_C(0x0) << 29)
25054         /* Value is in Kb or KB (base 10). */
25055         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_KILO \
25056                 (UINT32_C(0x2) << 29)
25057         /* Value is in bits or bytes. */
25058         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_BASE \
25059                 (UINT32_C(0x4) << 29)
25060         /* Value is in Gb or GB (base 10). */
25061         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_GIGA \
25062                 (UINT32_C(0x6) << 29)
25063         /* Value is in 1/100th of a percentage of total bandwidth. */
25064         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
25065                 (UINT32_C(0x1) << 29)
25066         /* Invalid unit */
25067         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_INVALID \
25068                 (UINT32_C(0x7) << 29)
25069         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_LAST \
25070                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_INVALID
25071         /*
25072          * Maximum BW allocated to CoS Queue.
25073          * The HWRM will translate this value into byte counter and
25074          * time interval used for this COS inside the device.
25075          */
25076         uint32_t        queue_id0_max_bw;
25077         /* The bandwidth value. */
25078         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_MASK \
25079                 UINT32_C(0xfffffff)
25080         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_SFT \
25081                 0
25082         /* The granularity of the value (bits or bytes). */
25083         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE \
25084                 UINT32_C(0x10000000)
25085         /* Value is in bits. */
25086         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE_BITS \
25087                 (UINT32_C(0x0) << 28)
25088         /* Value is in bytes. */
25089         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE_BYTES \
25090                 (UINT32_C(0x1) << 28)
25091         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE_LAST \
25092                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE_BYTES
25093         /* bw_value_unit is 3 b */
25094         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_MASK \
25095                 UINT32_C(0xe0000000)
25096         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_SFT \
25097                 29
25098         /* Value is in Mb or MB (base 10). */
25099         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_MEGA \
25100                 (UINT32_C(0x0) << 29)
25101         /* Value is in Kb or KB (base 10). */
25102         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_KILO \
25103                 (UINT32_C(0x2) << 29)
25104         /* Value is in bits or bytes. */
25105         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_BASE \
25106                 (UINT32_C(0x4) << 29)
25107         /* Value is in Gb or GB (base 10). */
25108         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_GIGA \
25109                 (UINT32_C(0x6) << 29)
25110         /* Value is in 1/100th of a percentage of total bandwidth. */
25111         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
25112                 (UINT32_C(0x1) << 29)
25113         /* Invalid unit */
25114         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_INVALID \
25115                 (UINT32_C(0x7) << 29)
25116         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_LAST \
25117                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_INVALID
25118         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
25119         uint8_t queue_id0_tsa_assign;
25120         /* Strict Priority */
25121         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_TSA_ASSIGN_SP \
25122                 UINT32_C(0x0)
25123         /* Enhanced Transmission Selection */
25124         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_TSA_ASSIGN_ETS \
25125                 UINT32_C(0x1)
25126         /* reserved. */
25127         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_TSA_ASSIGN_RESERVED_FIRST \
25128                 UINT32_C(0x2)
25129         /* reserved. */
25130         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_TSA_ASSIGN_RESERVED_LAST \
25131                 UINT32_C(0xff)
25132         /*
25133          * Priority level for strict priority. Valid only when the
25134          * tsa_assign is 0 - Strict Priority (SP)
25135          * 0..7 - Valid values.
25136          * 8..255 - Reserved.
25137          */
25138         uint8_t queue_id0_pri_lvl;
25139         /*
25140          * Weight used to allocate remaining BW for this COS after
25141          * servicing guaranteed bandwidths for all COS.
25142          */
25143         uint8_t queue_id0_bw_weight;
25144         /* ID of CoS Queue 1. */
25145         uint8_t queue_id1;
25146         /*
25147          * Minimum BW allocated to CoS Queue.
25148          * The HWRM will translate this value into byte counter and
25149          * time interval used for this COS inside the device.
25150          */
25151         uint32_t        queue_id1_min_bw;
25152         /* The bandwidth value. */
25153         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_MASK \
25154                 UINT32_C(0xfffffff)
25155         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_SFT \
25156                 0
25157         /* The granularity of the value (bits or bytes). */
25158         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE \
25159                 UINT32_C(0x10000000)
25160         /* Value is in bits. */
25161         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE_BITS \
25162                 (UINT32_C(0x0) << 28)
25163         /* Value is in bytes. */
25164         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE_BYTES \
25165                 (UINT32_C(0x1) << 28)
25166         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE_LAST \
25167                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE_BYTES
25168         /* bw_value_unit is 3 b */
25169         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_MASK \
25170                 UINT32_C(0xe0000000)
25171         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_SFT \
25172                 29
25173         /* Value is in Mb or MB (base 10). */
25174         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_MEGA \
25175                 (UINT32_C(0x0) << 29)
25176         /* Value is in Kb or KB (base 10). */
25177         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_KILO \
25178                 (UINT32_C(0x2) << 29)
25179         /* Value is in bits or bytes. */
25180         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_BASE \
25181                 (UINT32_C(0x4) << 29)
25182         /* Value is in Gb or GB (base 10). */
25183         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_GIGA \
25184                 (UINT32_C(0x6) << 29)
25185         /* Value is in 1/100th of a percentage of total bandwidth. */
25186         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
25187                 (UINT32_C(0x1) << 29)
25188         /* Invalid unit */
25189         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_INVALID \
25190                 (UINT32_C(0x7) << 29)
25191         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_LAST \
25192                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_INVALID
25193         /*
25194          * Maximum BW allocated to CoS queue.
25195          * The HWRM will translate this value into byte counter and
25196          * time interval used for this COS inside the device.
25197          */
25198         uint32_t        queue_id1_max_bw;
25199         /* The bandwidth value. */
25200         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_MASK \
25201                 UINT32_C(0xfffffff)
25202         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_SFT \
25203                 0
25204         /* The granularity of the value (bits or bytes). */
25205         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE \
25206                 UINT32_C(0x10000000)
25207         /* Value is in bits. */
25208         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE_BITS \
25209                 (UINT32_C(0x0) << 28)
25210         /* Value is in bytes. */
25211         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE_BYTES \
25212                 (UINT32_C(0x1) << 28)
25213         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE_LAST \
25214                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE_BYTES
25215         /* bw_value_unit is 3 b */
25216         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_MASK \
25217                 UINT32_C(0xe0000000)
25218         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_SFT \
25219                 29
25220         /* Value is in Mb or MB (base 10). */
25221         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_MEGA \
25222                 (UINT32_C(0x0) << 29)
25223         /* Value is in Kb or KB (base 10). */
25224         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_KILO \
25225                 (UINT32_C(0x2) << 29)
25226         /* Value is in bits or bytes. */
25227         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_BASE \
25228                 (UINT32_C(0x4) << 29)
25229         /* Value is in Gb or GB (base 10). */
25230         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_GIGA \
25231                 (UINT32_C(0x6) << 29)
25232         /* Value is in 1/100th of a percentage of total bandwidth. */
25233         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
25234                 (UINT32_C(0x1) << 29)
25235         /* Invalid unit */
25236         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_INVALID \
25237                 (UINT32_C(0x7) << 29)
25238         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_LAST \
25239                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_INVALID
25240         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
25241         uint8_t queue_id1_tsa_assign;
25242         /* Strict Priority */
25243         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_TSA_ASSIGN_SP \
25244                 UINT32_C(0x0)
25245         /* Enhanced Transmission Selection */
25246         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_TSA_ASSIGN_ETS \
25247                 UINT32_C(0x1)
25248         /* reserved. */
25249         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_TSA_ASSIGN_RESERVED_FIRST \
25250                 UINT32_C(0x2)
25251         /* reserved. */
25252         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_TSA_ASSIGN_RESERVED_LAST \
25253                 UINT32_C(0xff)
25254         /*
25255          * Priority level for strict priority. Valid only when the
25256          * tsa_assign is 0 - Strict Priority (SP)
25257          * 0..7 - Valid values.
25258          * 8..255 - Reserved.
25259          */
25260         uint8_t queue_id1_pri_lvl;
25261         /*
25262          * Weight used to allocate remaining BW for this COS after
25263          * servicing guaranteed bandwidths for all COS.
25264          */
25265         uint8_t queue_id1_bw_weight;
25266         /* ID of CoS Queue 2. */
25267         uint8_t queue_id2;
25268         /*
25269          * Minimum BW allocated to CoS Queue.
25270          * The HWRM will translate this value into byte counter and
25271          * time interval used for this COS inside the device.
25272          */
25273         uint32_t        queue_id2_min_bw;
25274         /* The bandwidth value. */
25275         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_MASK \
25276                 UINT32_C(0xfffffff)
25277         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_SFT \
25278                 0
25279         /* The granularity of the value (bits or bytes). */
25280         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE \
25281                 UINT32_C(0x10000000)
25282         /* Value is in bits. */
25283         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE_BITS \
25284                 (UINT32_C(0x0) << 28)
25285         /* Value is in bytes. */
25286         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE_BYTES \
25287                 (UINT32_C(0x1) << 28)
25288         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE_LAST \
25289                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE_BYTES
25290         /* bw_value_unit is 3 b */
25291         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_MASK \
25292                 UINT32_C(0xe0000000)
25293         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_SFT \
25294                 29
25295         /* Value is in Mb or MB (base 10). */
25296         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_MEGA \
25297                 (UINT32_C(0x0) << 29)
25298         /* Value is in Kb or KB (base 10). */
25299         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_KILO \
25300                 (UINT32_C(0x2) << 29)
25301         /* Value is in bits or bytes. */
25302         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_BASE \
25303                 (UINT32_C(0x4) << 29)
25304         /* Value is in Gb or GB (base 10). */
25305         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_GIGA \
25306                 (UINT32_C(0x6) << 29)
25307         /* Value is in 1/100th of a percentage of total bandwidth. */
25308         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
25309                 (UINT32_C(0x1) << 29)
25310         /* Invalid unit */
25311         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_INVALID \
25312                 (UINT32_C(0x7) << 29)
25313         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_LAST \
25314                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_INVALID
25315         /*
25316          * Maximum BW allocated to CoS queue.
25317          * The HWRM will translate this value into byte counter and
25318          * time interval used for this COS inside the device.
25319          */
25320         uint32_t        queue_id2_max_bw;
25321         /* The bandwidth value. */
25322         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_MASK \
25323                 UINT32_C(0xfffffff)
25324         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_SFT \
25325                 0
25326         /* The granularity of the value (bits or bytes). */
25327         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE \
25328                 UINT32_C(0x10000000)
25329         /* Value is in bits. */
25330         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE_BITS \
25331                 (UINT32_C(0x0) << 28)
25332         /* Value is in bytes. */
25333         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE_BYTES \
25334                 (UINT32_C(0x1) << 28)
25335         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE_LAST \
25336                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE_BYTES
25337         /* bw_value_unit is 3 b */
25338         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_MASK \
25339                 UINT32_C(0xe0000000)
25340         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_SFT \
25341                 29
25342         /* Value is in Mb or MB (base 10). */
25343         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_MEGA \
25344                 (UINT32_C(0x0) << 29)
25345         /* Value is in Kb or KB (base 10). */
25346         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_KILO \
25347                 (UINT32_C(0x2) << 29)
25348         /* Value is in bits or bytes. */
25349         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_BASE \
25350                 (UINT32_C(0x4) << 29)
25351         /* Value is in Gb or GB (base 10). */
25352         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_GIGA \
25353                 (UINT32_C(0x6) << 29)
25354         /* Value is in 1/100th of a percentage of total bandwidth. */
25355         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
25356                 (UINT32_C(0x1) << 29)
25357         /* Invalid unit */
25358         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_INVALID \
25359                 (UINT32_C(0x7) << 29)
25360         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_LAST \
25361                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_INVALID
25362         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
25363         uint8_t queue_id2_tsa_assign;
25364         /* Strict Priority */
25365         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_TSA_ASSIGN_SP \
25366                 UINT32_C(0x0)
25367         /* Enhanced Transmission Selection */
25368         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_TSA_ASSIGN_ETS \
25369                 UINT32_C(0x1)
25370         /* reserved. */
25371         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_TSA_ASSIGN_RESERVED_FIRST \
25372                 UINT32_C(0x2)
25373         /* reserved. */
25374         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_TSA_ASSIGN_RESERVED_LAST \
25375                 UINT32_C(0xff)
25376         /*
25377          * Priority level for strict priority. Valid only when the
25378          * tsa_assign is 0 - Strict Priority (SP)
25379          * 0..7 - Valid values.
25380          * 8..255 - Reserved.
25381          */
25382         uint8_t queue_id2_pri_lvl;
25383         /*
25384          * Weight used to allocate remaining BW for this COS after
25385          * servicing guaranteed bandwidths for all COS.
25386          */
25387         uint8_t queue_id2_bw_weight;
25388         /* ID of CoS Queue 3. */
25389         uint8_t queue_id3;
25390         /*
25391          * Minimum BW allocated to CoS Queue.
25392          * The HWRM will translate this value into byte counter and
25393          * time interval used for this COS inside the device.
25394          */
25395         uint32_t        queue_id3_min_bw;
25396         /* The bandwidth value. */
25397         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_MASK \
25398                 UINT32_C(0xfffffff)
25399         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_SFT \
25400                 0
25401         /* The granularity of the value (bits or bytes). */
25402         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE \
25403                 UINT32_C(0x10000000)
25404         /* Value is in bits. */
25405         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE_BITS \
25406                 (UINT32_C(0x0) << 28)
25407         /* Value is in bytes. */
25408         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE_BYTES \
25409                 (UINT32_C(0x1) << 28)
25410         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE_LAST \
25411                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE_BYTES
25412         /* bw_value_unit is 3 b */
25413         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_MASK \
25414                 UINT32_C(0xe0000000)
25415         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_SFT \
25416                 29
25417         /* Value is in Mb or MB (base 10). */
25418         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_MEGA \
25419                 (UINT32_C(0x0) << 29)
25420         /* Value is in Kb or KB (base 10). */
25421         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_KILO \
25422                 (UINT32_C(0x2) << 29)
25423         /* Value is in bits or bytes. */
25424         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_BASE \
25425                 (UINT32_C(0x4) << 29)
25426         /* Value is in Gb or GB (base 10). */
25427         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_GIGA \
25428                 (UINT32_C(0x6) << 29)
25429         /* Value is in 1/100th of a percentage of total bandwidth. */
25430         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
25431                 (UINT32_C(0x1) << 29)
25432         /* Invalid unit */
25433         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_INVALID \
25434                 (UINT32_C(0x7) << 29)
25435         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_LAST \
25436                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_INVALID
25437         /*
25438          * Maximum BW allocated to CoS queue.
25439          * The HWRM will translate this value into byte counter and
25440          * time interval used for this COS inside the device.
25441          */
25442         uint32_t        queue_id3_max_bw;
25443         /* The bandwidth value. */
25444         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_MASK \
25445                 UINT32_C(0xfffffff)
25446         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_SFT \
25447                 0
25448         /* The granularity of the value (bits or bytes). */
25449         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE \
25450                 UINT32_C(0x10000000)
25451         /* Value is in bits. */
25452         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE_BITS \
25453                 (UINT32_C(0x0) << 28)
25454         /* Value is in bytes. */
25455         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE_BYTES \
25456                 (UINT32_C(0x1) << 28)
25457         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE_LAST \
25458                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE_BYTES
25459         /* bw_value_unit is 3 b */
25460         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_MASK \
25461                 UINT32_C(0xe0000000)
25462         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_SFT \
25463                 29
25464         /* Value is in Mb or MB (base 10). */
25465         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_MEGA \
25466                 (UINT32_C(0x0) << 29)
25467         /* Value is in Kb or KB (base 10). */
25468         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_KILO \
25469                 (UINT32_C(0x2) << 29)
25470         /* Value is in bits or bytes. */
25471         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_BASE \
25472                 (UINT32_C(0x4) << 29)
25473         /* Value is in Gb or GB (base 10). */
25474         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_GIGA \
25475                 (UINT32_C(0x6) << 29)
25476         /* Value is in 1/100th of a percentage of total bandwidth. */
25477         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
25478                 (UINT32_C(0x1) << 29)
25479         /* Invalid unit */
25480         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_INVALID \
25481                 (UINT32_C(0x7) << 29)
25482         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_LAST \
25483                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_INVALID
25484         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
25485         uint8_t queue_id3_tsa_assign;
25486         /* Strict Priority */
25487         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_TSA_ASSIGN_SP \
25488                 UINT32_C(0x0)
25489         /* Enhanced Transmission Selection */
25490         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_TSA_ASSIGN_ETS \
25491                 UINT32_C(0x1)
25492         /* reserved. */
25493         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_TSA_ASSIGN_RESERVED_FIRST \
25494                 UINT32_C(0x2)
25495         /* reserved. */
25496         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_TSA_ASSIGN_RESERVED_LAST \
25497                 UINT32_C(0xff)
25498         /*
25499          * Priority level for strict priority. Valid only when the
25500          * tsa_assign is 0 - Strict Priority (SP)
25501          * 0..7 - Valid values.
25502          * 8..255 - Reserved.
25503          */
25504         uint8_t queue_id3_pri_lvl;
25505         /*
25506          * Weight used to allocate remaining BW for this COS after
25507          * servicing guaranteed bandwidths for all COS.
25508          */
25509         uint8_t queue_id3_bw_weight;
25510         /* ID of CoS Queue 4. */
25511         uint8_t queue_id4;
25512         /*
25513          * Minimum BW allocated to CoS Queue.
25514          * The HWRM will translate this value into byte counter and
25515          * time interval used for this COS inside the device.
25516          */
25517         uint32_t        queue_id4_min_bw;
25518         /* The bandwidth value. */
25519         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_MASK \
25520                 UINT32_C(0xfffffff)
25521         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_SFT \
25522                 0
25523         /* The granularity of the value (bits or bytes). */
25524         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE \
25525                 UINT32_C(0x10000000)
25526         /* Value is in bits. */
25527         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE_BITS \
25528                 (UINT32_C(0x0) << 28)
25529         /* Value is in bytes. */
25530         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE_BYTES \
25531                 (UINT32_C(0x1) << 28)
25532         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE_LAST \
25533                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE_BYTES
25534         /* bw_value_unit is 3 b */
25535         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_MASK \
25536                 UINT32_C(0xe0000000)
25537         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_SFT \
25538                 29
25539         /* Value is in Mb or MB (base 10). */
25540         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_MEGA \
25541                 (UINT32_C(0x0) << 29)
25542         /* Value is in Kb or KB (base 10). */
25543         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_KILO \
25544                 (UINT32_C(0x2) << 29)
25545         /* Value is in bits or bytes. */
25546         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_BASE \
25547                 (UINT32_C(0x4) << 29)
25548         /* Value is in Gb or GB (base 10). */
25549         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_GIGA \
25550                 (UINT32_C(0x6) << 29)
25551         /* Value is in 1/100th of a percentage of total bandwidth. */
25552         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
25553                 (UINT32_C(0x1) << 29)
25554         /* Invalid unit */
25555         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_INVALID \
25556                 (UINT32_C(0x7) << 29)
25557         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_LAST \
25558                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_INVALID
25559         /*
25560          * Maximum BW allocated to CoS queue.
25561          * The HWRM will translate this value into byte counter and
25562          * time interval used for this COS inside the device.
25563          */
25564         uint32_t        queue_id4_max_bw;
25565         /* The bandwidth value. */
25566         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_MASK \
25567                 UINT32_C(0xfffffff)
25568         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_SFT \
25569                 0
25570         /* The granularity of the value (bits or bytes). */
25571         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE \
25572                 UINT32_C(0x10000000)
25573         /* Value is in bits. */
25574         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE_BITS \
25575                 (UINT32_C(0x0) << 28)
25576         /* Value is in bytes. */
25577         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE_BYTES \
25578                 (UINT32_C(0x1) << 28)
25579         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE_LAST \
25580                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE_BYTES
25581         /* bw_value_unit is 3 b */
25582         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_MASK \
25583                 UINT32_C(0xe0000000)
25584         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_SFT \
25585                 29
25586         /* Value is in Mb or MB (base 10). */
25587         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_MEGA \
25588                 (UINT32_C(0x0) << 29)
25589         /* Value is in Kb or KB (base 10). */
25590         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_KILO \
25591                 (UINT32_C(0x2) << 29)
25592         /* Value is in bits or bytes. */
25593         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_BASE \
25594                 (UINT32_C(0x4) << 29)
25595         /* Value is in Gb or GB (base 10). */
25596         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_GIGA \
25597                 (UINT32_C(0x6) << 29)
25598         /* Value is in 1/100th of a percentage of total bandwidth. */
25599         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
25600                 (UINT32_C(0x1) << 29)
25601         /* Invalid unit */
25602         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_INVALID \
25603                 (UINT32_C(0x7) << 29)
25604         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_LAST \
25605                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_INVALID
25606         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
25607         uint8_t queue_id4_tsa_assign;
25608         /* Strict Priority */
25609         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_TSA_ASSIGN_SP \
25610                 UINT32_C(0x0)
25611         /* Enhanced Transmission Selection */
25612         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_TSA_ASSIGN_ETS \
25613                 UINT32_C(0x1)
25614         /* reserved. */
25615         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_TSA_ASSIGN_RESERVED_FIRST \
25616                 UINT32_C(0x2)
25617         /* reserved. */
25618         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_TSA_ASSIGN_RESERVED_LAST \
25619                 UINT32_C(0xff)
25620         /*
25621          * Priority level for strict priority. Valid only when the
25622          * tsa_assign is 0 - Strict Priority (SP)
25623          * 0..7 - Valid values.
25624          * 8..255 - Reserved.
25625          */
25626         uint8_t queue_id4_pri_lvl;
25627         /*
25628          * Weight used to allocate remaining BW for this COS after
25629          * servicing guaranteed bandwidths for all COS.
25630          */
25631         uint8_t queue_id4_bw_weight;
25632         /* ID of CoS Queue 5. */
25633         uint8_t queue_id5;
25634         /*
25635          * Minimum BW allocated to CoS Queue.
25636          * The HWRM will translate this value into byte counter and
25637          * time interval used for this COS inside the device.
25638          */
25639         uint32_t        queue_id5_min_bw;
25640         /* The bandwidth value. */
25641         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_MASK \
25642                 UINT32_C(0xfffffff)
25643         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_SFT \
25644                 0
25645         /* The granularity of the value (bits or bytes). */
25646         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE \
25647                 UINT32_C(0x10000000)
25648         /* Value is in bits. */
25649         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE_BITS \
25650                 (UINT32_C(0x0) << 28)
25651         /* Value is in bytes. */
25652         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE_BYTES \
25653                 (UINT32_C(0x1) << 28)
25654         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE_LAST \
25655                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE_BYTES
25656         /* bw_value_unit is 3 b */
25657         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_MASK \
25658                 UINT32_C(0xe0000000)
25659         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_SFT \
25660                 29
25661         /* Value is in Mb or MB (base 10). */
25662         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_MEGA \
25663                 (UINT32_C(0x0) << 29)
25664         /* Value is in Kb or KB (base 10). */
25665         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_KILO \
25666                 (UINT32_C(0x2) << 29)
25667         /* Value is in bits or bytes. */
25668         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_BASE \
25669                 (UINT32_C(0x4) << 29)
25670         /* Value is in Gb or GB (base 10). */
25671         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_GIGA \
25672                 (UINT32_C(0x6) << 29)
25673         /* Value is in 1/100th of a percentage of total bandwidth. */
25674         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
25675                 (UINT32_C(0x1) << 29)
25676         /* Invalid unit */
25677         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_INVALID \
25678                 (UINT32_C(0x7) << 29)
25679         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_LAST \
25680                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_INVALID
25681         /*
25682          * Maximum BW allocated to CoS queue.
25683          * The HWRM will translate this value into byte counter and
25684          * time interval used for this COS inside the device.
25685          */
25686         uint32_t        queue_id5_max_bw;
25687         /* The bandwidth value. */
25688         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_MASK \
25689                 UINT32_C(0xfffffff)
25690         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_SFT \
25691                 0
25692         /* The granularity of the value (bits or bytes). */
25693         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE \
25694                 UINT32_C(0x10000000)
25695         /* Value is in bits. */
25696         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE_BITS \
25697                 (UINT32_C(0x0) << 28)
25698         /* Value is in bytes. */
25699         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE_BYTES \
25700                 (UINT32_C(0x1) << 28)
25701         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE_LAST \
25702                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE_BYTES
25703         /* bw_value_unit is 3 b */
25704         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_MASK \
25705                 UINT32_C(0xe0000000)
25706         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_SFT \
25707                 29
25708         /* Value is in Mb or MB (base 10). */
25709         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_MEGA \
25710                 (UINT32_C(0x0) << 29)
25711         /* Value is in Kb or KB (base 10). */
25712         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_KILO \
25713                 (UINT32_C(0x2) << 29)
25714         /* Value is in bits or bytes. */
25715         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_BASE \
25716                 (UINT32_C(0x4) << 29)
25717         /* Value is in Gb or GB (base 10). */
25718         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_GIGA \
25719                 (UINT32_C(0x6) << 29)
25720         /* Value is in 1/100th of a percentage of total bandwidth. */
25721         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
25722                 (UINT32_C(0x1) << 29)
25723         /* Invalid unit */
25724         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_INVALID \
25725                 (UINT32_C(0x7) << 29)
25726         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_LAST \
25727                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_INVALID
25728         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
25729         uint8_t queue_id5_tsa_assign;
25730         /* Strict Priority */
25731         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_TSA_ASSIGN_SP \
25732                 UINT32_C(0x0)
25733         /* Enhanced Transmission Selection */
25734         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_TSA_ASSIGN_ETS \
25735                 UINT32_C(0x1)
25736         /* reserved. */
25737         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_TSA_ASSIGN_RESERVED_FIRST \
25738                 UINT32_C(0x2)
25739         /* reserved. */
25740         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_TSA_ASSIGN_RESERVED_LAST \
25741                 UINT32_C(0xff)
25742         /*
25743          * Priority level for strict priority. Valid only when the
25744          * tsa_assign is 0 - Strict Priority (SP)
25745          * 0..7 - Valid values.
25746          * 8..255 - Reserved.
25747          */
25748         uint8_t queue_id5_pri_lvl;
25749         /*
25750          * Weight used to allocate remaining BW for this COS after
25751          * servicing guaranteed bandwidths for all COS.
25752          */
25753         uint8_t queue_id5_bw_weight;
25754         /* ID of CoS Queue 6. */
25755         uint8_t queue_id6;
25756         /*
25757          * Minimum BW allocated to CoS Queue.
25758          * The HWRM will translate this value into byte counter and
25759          * time interval used for this COS inside the device.
25760          */
25761         uint32_t        queue_id6_min_bw;
25762         /* The bandwidth value. */
25763         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_MASK \
25764                 UINT32_C(0xfffffff)
25765         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_SFT \
25766                 0
25767         /* The granularity of the value (bits or bytes). */
25768         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE \
25769                 UINT32_C(0x10000000)
25770         /* Value is in bits. */
25771         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE_BITS \
25772                 (UINT32_C(0x0) << 28)
25773         /* Value is in bytes. */
25774         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE_BYTES \
25775                 (UINT32_C(0x1) << 28)
25776         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE_LAST \
25777                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE_BYTES
25778         /* bw_value_unit is 3 b */
25779         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_MASK \
25780                 UINT32_C(0xe0000000)
25781         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_SFT \
25782                 29
25783         /* Value is in Mb or MB (base 10). */
25784         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_MEGA \
25785                 (UINT32_C(0x0) << 29)
25786         /* Value is in Kb or KB (base 10). */
25787         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_KILO \
25788                 (UINT32_C(0x2) << 29)
25789         /* Value is in bits or bytes. */
25790         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_BASE \
25791                 (UINT32_C(0x4) << 29)
25792         /* Value is in Gb or GB (base 10). */
25793         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_GIGA \
25794                 (UINT32_C(0x6) << 29)
25795         /* Value is in 1/100th of a percentage of total bandwidth. */
25796         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
25797                 (UINT32_C(0x1) << 29)
25798         /* Invalid unit */
25799         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_INVALID \
25800                 (UINT32_C(0x7) << 29)
25801         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_LAST \
25802                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_INVALID
25803         /*
25804          * Maximum BW allocated to CoS queue.
25805          * The HWRM will translate this value into byte counter and
25806          * time interval used for this COS inside the device.
25807          */
25808         uint32_t        queue_id6_max_bw;
25809         /* The bandwidth value. */
25810         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_MASK \
25811                 UINT32_C(0xfffffff)
25812         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_SFT \
25813                 0
25814         /* The granularity of the value (bits or bytes). */
25815         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE \
25816                 UINT32_C(0x10000000)
25817         /* Value is in bits. */
25818         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE_BITS \
25819                 (UINT32_C(0x0) << 28)
25820         /* Value is in bytes. */
25821         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE_BYTES \
25822                 (UINT32_C(0x1) << 28)
25823         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE_LAST \
25824                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE_BYTES
25825         /* bw_value_unit is 3 b */
25826         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_MASK \
25827                 UINT32_C(0xe0000000)
25828         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_SFT \
25829                 29
25830         /* Value is in Mb or MB (base 10). */
25831         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_MEGA \
25832                 (UINT32_C(0x0) << 29)
25833         /* Value is in Kb or KB (base 10). */
25834         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_KILO \
25835                 (UINT32_C(0x2) << 29)
25836         /* Value is in bits or bytes. */
25837         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_BASE \
25838                 (UINT32_C(0x4) << 29)
25839         /* Value is in Gb or GB (base 10). */
25840         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_GIGA \
25841                 (UINT32_C(0x6) << 29)
25842         /* Value is in 1/100th of a percentage of total bandwidth. */
25843         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
25844                 (UINT32_C(0x1) << 29)
25845         /* Invalid unit */
25846         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_INVALID \
25847                 (UINT32_C(0x7) << 29)
25848         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_LAST \
25849                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_INVALID
25850         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
25851         uint8_t queue_id6_tsa_assign;
25852         /* Strict Priority */
25853         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_TSA_ASSIGN_SP \
25854                 UINT32_C(0x0)
25855         /* Enhanced Transmission Selection */
25856         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_TSA_ASSIGN_ETS \
25857                 UINT32_C(0x1)
25858         /* reserved. */
25859         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_TSA_ASSIGN_RESERVED_FIRST \
25860                 UINT32_C(0x2)
25861         /* reserved. */
25862         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_TSA_ASSIGN_RESERVED_LAST \
25863                 UINT32_C(0xff)
25864         /*
25865          * Priority level for strict priority. Valid only when the
25866          * tsa_assign is 0 - Strict Priority (SP)
25867          * 0..7 - Valid values.
25868          * 8..255 - Reserved.
25869          */
25870         uint8_t queue_id6_pri_lvl;
25871         /*
25872          * Weight used to allocate remaining BW for this COS after
25873          * servicing guaranteed bandwidths for all COS.
25874          */
25875         uint8_t queue_id6_bw_weight;
25876         /* ID of CoS Queue 7. */
25877         uint8_t queue_id7;
25878         /*
25879          * Minimum BW allocated to CoS Queue.
25880          * The HWRM will translate this value into byte counter and
25881          * time interval used for this COS inside the device.
25882          */
25883         uint32_t        queue_id7_min_bw;
25884         /* The bandwidth value. */
25885         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_MASK \
25886                 UINT32_C(0xfffffff)
25887         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_SFT \
25888                 0
25889         /* The granularity of the value (bits or bytes). */
25890         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE \
25891                 UINT32_C(0x10000000)
25892         /* Value is in bits. */
25893         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE_BITS \
25894                 (UINT32_C(0x0) << 28)
25895         /* Value is in bytes. */
25896         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE_BYTES \
25897                 (UINT32_C(0x1) << 28)
25898         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE_LAST \
25899                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE_BYTES
25900         /* bw_value_unit is 3 b */
25901         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_MASK \
25902                 UINT32_C(0xe0000000)
25903         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_SFT \
25904                 29
25905         /* Value is in Mb or MB (base 10). */
25906         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_MEGA \
25907                 (UINT32_C(0x0) << 29)
25908         /* Value is in Kb or KB (base 10). */
25909         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_KILO \
25910                 (UINT32_C(0x2) << 29)
25911         /* Value is in bits or bytes. */
25912         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_BASE \
25913                 (UINT32_C(0x4) << 29)
25914         /* Value is in Gb or GB (base 10). */
25915         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_GIGA \
25916                 (UINT32_C(0x6) << 29)
25917         /* Value is in 1/100th of a percentage of total bandwidth. */
25918         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
25919                 (UINT32_C(0x1) << 29)
25920         /* Invalid unit */
25921         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_INVALID \
25922                 (UINT32_C(0x7) << 29)
25923         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_LAST \
25924                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_INVALID
25925         /*
25926          * Maximum BW allocated to CoS queue.
25927          * The HWRM will translate this value into byte counter and
25928          * time interval used for this COS inside the device.
25929          */
25930         uint32_t        queue_id7_max_bw;
25931         /* The bandwidth value. */
25932         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_MASK \
25933                 UINT32_C(0xfffffff)
25934         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_SFT \
25935                 0
25936         /* The granularity of the value (bits or bytes). */
25937         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE \
25938                 UINT32_C(0x10000000)
25939         /* Value is in bits. */
25940         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE_BITS \
25941                 (UINT32_C(0x0) << 28)
25942         /* Value is in bytes. */
25943         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE_BYTES \
25944                 (UINT32_C(0x1) << 28)
25945         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE_LAST \
25946                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE_BYTES
25947         /* bw_value_unit is 3 b */
25948         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_MASK \
25949                 UINT32_C(0xe0000000)
25950         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_SFT \
25951                 29
25952         /* Value is in Mb or MB (base 10). */
25953         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_MEGA \
25954                 (UINT32_C(0x0) << 29)
25955         /* Value is in Kb or KB (base 10). */
25956         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_KILO \
25957                 (UINT32_C(0x2) << 29)
25958         /* Value is in bits or bytes. */
25959         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_BASE \
25960                 (UINT32_C(0x4) << 29)
25961         /* Value is in Gb or GB (base 10). */
25962         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_GIGA \
25963                 (UINT32_C(0x6) << 29)
25964         /* Value is in 1/100th of a percentage of total bandwidth. */
25965         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
25966                 (UINT32_C(0x1) << 29)
25967         /* Invalid unit */
25968         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_INVALID \
25969                 (UINT32_C(0x7) << 29)
25970         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_LAST \
25971                 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_INVALID
25972         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
25973         uint8_t queue_id7_tsa_assign;
25974         /* Strict Priority */
25975         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_TSA_ASSIGN_SP \
25976                 UINT32_C(0x0)
25977         /* Enhanced Transmission Selection */
25978         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_TSA_ASSIGN_ETS \
25979                 UINT32_C(0x1)
25980         /* reserved. */
25981         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_FIRST \
25982                 UINT32_C(0x2)
25983         /* reserved. */
25984         #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_LAST \
25985                 UINT32_C(0xff)
25986         /*
25987          * Priority level for strict priority. Valid only when the
25988          * tsa_assign is 0 - Strict Priority (SP)
25989          * 0..7 - Valid values.
25990          * 8..255 - Reserved.
25991          */
25992         uint8_t queue_id7_pri_lvl;
25993         /*
25994          * Weight used to allocate remaining BW for this COS after
25995          * servicing guaranteed bandwidths for all COS.
25996          */
25997         uint8_t queue_id7_bw_weight;
25998         uint8_t unused_2[4];
25999         /*
26000          * This field is used in Output records to indicate that the output
26001          * is completely written to RAM. This field should be read as '1'
26002          * to indicate that the output has been completely written.
26003          * When writing a command completion or response to an internal processor,
26004          * the order of writes has to be such that this field is written last.
26005          */
26006         uint8_t valid;
26007 } __rte_packed;
26008
26009 /*************************
26010  * hwrm_queue_cos2bw_cfg *
26011  *************************/
26012
26013
26014 /* hwrm_queue_cos2bw_cfg_input (size:1024b/128B) */
26015 struct hwrm_queue_cos2bw_cfg_input {
26016         /* The HWRM command request type. */
26017         uint16_t        req_type;
26018         /*
26019          * The completion ring to send the completion event on. This should
26020          * be the NQ ID returned from the `nq_alloc` HWRM command.
26021          */
26022         uint16_t        cmpl_ring;
26023         /*
26024          * The sequence ID is used by the driver for tracking multiple
26025          * commands. This ID is treated as opaque data by the firmware and
26026          * the value is returned in the `hwrm_resp_hdr` upon completion.
26027          */
26028         uint16_t        seq_id;
26029         /*
26030          * The target ID of the command:
26031          * * 0x0-0xFFF8 - The function ID
26032          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
26033          * * 0xFFFD - Reserved for user-space HWRM interface
26034          * * 0xFFFF - HWRM
26035          */
26036         uint16_t        target_id;
26037         /*
26038          * A physical address pointer pointing to a host buffer that the
26039          * command's response data will be written. This can be either a host
26040          * physical address (HPA) or a guest physical address (GPA) and must
26041          * point to a physically contiguous block of memory.
26042          */
26043         uint64_t        resp_addr;
26044         uint32_t        flags;
26045         uint32_t        enables;
26046         /*
26047          * If this bit is set to 1, then all queue_id0 related
26048          * parameters in this command are valid.
26049          */
26050         #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID0_VALID \
26051                 UINT32_C(0x1)
26052         /*
26053          * If this bit is set to 1, then all queue_id1 related
26054          * parameters in this command are valid.
26055          */
26056         #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID1_VALID \
26057                 UINT32_C(0x2)
26058         /*
26059          * If this bit is set to 1, then all queue_id2 related
26060          * parameters in this command are valid.
26061          */
26062         #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID2_VALID \
26063                 UINT32_C(0x4)
26064         /*
26065          * If this bit is set to 1, then all queue_id3 related
26066          * parameters in this command are valid.
26067          */
26068         #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID3_VALID \
26069                 UINT32_C(0x8)
26070         /*
26071          * If this bit is set to 1, then all queue_id4 related
26072          * parameters in this command are valid.
26073          */
26074         #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID4_VALID \
26075                 UINT32_C(0x10)
26076         /*
26077          * If this bit is set to 1, then all queue_id5 related
26078          * parameters in this command are valid.
26079          */
26080         #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID5_VALID \
26081                 UINT32_C(0x20)
26082         /*
26083          * If this bit is set to 1, then all queue_id6 related
26084          * parameters in this command are valid.
26085          */
26086         #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID6_VALID \
26087                 UINT32_C(0x40)
26088         /*
26089          * If this bit is set to 1, then all queue_id7 related
26090          * parameters in this command are valid.
26091          */
26092         #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID7_VALID \
26093                 UINT32_C(0x80)
26094         /*
26095          * Port ID of port for which the table is being configured.
26096          * The HWRM needs to check whether this function is allowed
26097          * to configure TC BW assignment on this port.
26098          */
26099         uint16_t        port_id;
26100         /* ID of CoS Queue 0. */
26101         uint8_t queue_id0;
26102         uint8_t unused_0;
26103         /*
26104          * Minimum BW allocated to CoS Queue.
26105          * The HWRM will translate this value into byte counter and
26106          * time interval used for this COS inside the device.
26107          */
26108         uint32_t        queue_id0_min_bw;
26109         /* The bandwidth value. */
26110         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_MASK \
26111                 UINT32_C(0xfffffff)
26112         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_SFT \
26113                 0
26114         /* The granularity of the value (bits or bytes). */
26115         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE \
26116                 UINT32_C(0x10000000)
26117         /* Value is in bits. */
26118         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE_BITS \
26119                 (UINT32_C(0x0) << 28)
26120         /* Value is in bytes. */
26121         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE_BYTES \
26122                 (UINT32_C(0x1) << 28)
26123         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE_LAST \
26124                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE_BYTES
26125         /* bw_value_unit is 3 b */
26126         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_MASK \
26127                 UINT32_C(0xe0000000)
26128         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_SFT \
26129                 29
26130         /* Value is in Mb or MB (base 10). */
26131         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_MEGA \
26132                 (UINT32_C(0x0) << 29)
26133         /* Value is in Kb or KB (base 10). */
26134         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_KILO \
26135                 (UINT32_C(0x2) << 29)
26136         /* Value is in bits or bytes. */
26137         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_BASE \
26138                 (UINT32_C(0x4) << 29)
26139         /* Value is in Gb or GB (base 10). */
26140         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_GIGA \
26141                 (UINT32_C(0x6) << 29)
26142         /* Value is in 1/100th of a percentage of total bandwidth. */
26143         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
26144                 (UINT32_C(0x1) << 29)
26145         /* Invalid unit */
26146         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_INVALID \
26147                 (UINT32_C(0x7) << 29)
26148         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_LAST \
26149                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_INVALID
26150         /*
26151          * Maximum BW allocated to CoS Queue.
26152          * The HWRM will translate this value into byte counter and
26153          * time interval used for this COS inside the device.
26154          */
26155         uint32_t        queue_id0_max_bw;
26156         /* The bandwidth value. */
26157         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_MASK \
26158                 UINT32_C(0xfffffff)
26159         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_SFT \
26160                 0
26161         /* The granularity of the value (bits or bytes). */
26162         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE \
26163                 UINT32_C(0x10000000)
26164         /* Value is in bits. */
26165         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE_BITS \
26166                 (UINT32_C(0x0) << 28)
26167         /* Value is in bytes. */
26168         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE_BYTES \
26169                 (UINT32_C(0x1) << 28)
26170         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE_LAST \
26171                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE_BYTES
26172         /* bw_value_unit is 3 b */
26173         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_MASK \
26174                 UINT32_C(0xe0000000)
26175         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_SFT \
26176                 29
26177         /* Value is in Mb or MB (base 10). */
26178         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_MEGA \
26179                 (UINT32_C(0x0) << 29)
26180         /* Value is in Kb or KB (base 10). */
26181         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_KILO \
26182                 (UINT32_C(0x2) << 29)
26183         /* Value is in bits or bytes. */
26184         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_BASE \
26185                 (UINT32_C(0x4) << 29)
26186         /* Value is in Gb or GB (base 10). */
26187         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_GIGA \
26188                 (UINT32_C(0x6) << 29)
26189         /* Value is in 1/100th of a percentage of total bandwidth. */
26190         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
26191                 (UINT32_C(0x1) << 29)
26192         /* Invalid unit */
26193         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_INVALID \
26194                 (UINT32_C(0x7) << 29)
26195         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_LAST \
26196                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_INVALID
26197         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
26198         uint8_t queue_id0_tsa_assign;
26199         /* Strict Priority */
26200         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_TSA_ASSIGN_SP \
26201                 UINT32_C(0x0)
26202         /* Enhanced Transmission Selection */
26203         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_TSA_ASSIGN_ETS \
26204                 UINT32_C(0x1)
26205         /* reserved. */
26206         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_TSA_ASSIGN_RESERVED_FIRST \
26207                 UINT32_C(0x2)
26208         /* reserved. */
26209         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_TSA_ASSIGN_RESERVED_LAST \
26210                 UINT32_C(0xff)
26211         /*
26212          * Priority level for strict priority. Valid only when the
26213          * tsa_assign is 0 - Strict Priority (SP)
26214          * 0..7 - Valid values.
26215          * 8..255 - Reserved.
26216          */
26217         uint8_t queue_id0_pri_lvl;
26218         /*
26219          * Weight used to allocate remaining BW for this COS after
26220          * servicing guaranteed bandwidths for all COS.
26221          */
26222         uint8_t queue_id0_bw_weight;
26223         /* ID of CoS Queue 1. */
26224         uint8_t queue_id1;
26225         /*
26226          * Minimum BW allocated to CoS Queue.
26227          * The HWRM will translate this value into byte counter and
26228          * time interval used for this COS inside the device.
26229          */
26230         uint32_t        queue_id1_min_bw;
26231         /* The bandwidth value. */
26232         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_MASK \
26233                 UINT32_C(0xfffffff)
26234         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_SFT \
26235                 0
26236         /* The granularity of the value (bits or bytes). */
26237         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE \
26238                 UINT32_C(0x10000000)
26239         /* Value is in bits. */
26240         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE_BITS \
26241                 (UINT32_C(0x0) << 28)
26242         /* Value is in bytes. */
26243         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE_BYTES \
26244                 (UINT32_C(0x1) << 28)
26245         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE_LAST \
26246                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE_BYTES
26247         /* bw_value_unit is 3 b */
26248         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_MASK \
26249                 UINT32_C(0xe0000000)
26250         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_SFT \
26251                 29
26252         /* Value is in Mb or MB (base 10). */
26253         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_MEGA \
26254                 (UINT32_C(0x0) << 29)
26255         /* Value is in Kb or KB (base 10). */
26256         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_KILO \
26257                 (UINT32_C(0x2) << 29)
26258         /* Value is in bits or bytes. */
26259         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_BASE \
26260                 (UINT32_C(0x4) << 29)
26261         /* Value is in Gb or GB (base 10). */
26262         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_GIGA \
26263                 (UINT32_C(0x6) << 29)
26264         /* Value is in 1/100th of a percentage of total bandwidth. */
26265         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
26266                 (UINT32_C(0x1) << 29)
26267         /* Invalid unit */
26268         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_INVALID \
26269                 (UINT32_C(0x7) << 29)
26270         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_LAST \
26271                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_INVALID
26272         /*
26273          * Maximum BW allocated to CoS queue.
26274          * The HWRM will translate this value into byte counter and
26275          * time interval used for this COS inside the device.
26276          */
26277         uint32_t        queue_id1_max_bw;
26278         /* The bandwidth value. */
26279         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_MASK \
26280                 UINT32_C(0xfffffff)
26281         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_SFT \
26282                 0
26283         /* The granularity of the value (bits or bytes). */
26284         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE \
26285                 UINT32_C(0x10000000)
26286         /* Value is in bits. */
26287         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE_BITS \
26288                 (UINT32_C(0x0) << 28)
26289         /* Value is in bytes. */
26290         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE_BYTES \
26291                 (UINT32_C(0x1) << 28)
26292         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE_LAST \
26293                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE_BYTES
26294         /* bw_value_unit is 3 b */
26295         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_MASK \
26296                 UINT32_C(0xe0000000)
26297         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_SFT \
26298                 29
26299         /* Value is in Mb or MB (base 10). */
26300         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_MEGA \
26301                 (UINT32_C(0x0) << 29)
26302         /* Value is in Kb or KB (base 10). */
26303         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_KILO \
26304                 (UINT32_C(0x2) << 29)
26305         /* Value is in bits or bytes. */
26306         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_BASE \
26307                 (UINT32_C(0x4) << 29)
26308         /* Value is in Gb or GB (base 10). */
26309         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_GIGA \
26310                 (UINT32_C(0x6) << 29)
26311         /* Value is in 1/100th of a percentage of total bandwidth. */
26312         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
26313                 (UINT32_C(0x1) << 29)
26314         /* Invalid unit */
26315         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_INVALID \
26316                 (UINT32_C(0x7) << 29)
26317         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_LAST \
26318                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_INVALID
26319         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
26320         uint8_t queue_id1_tsa_assign;
26321         /* Strict Priority */
26322         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_TSA_ASSIGN_SP \
26323                 UINT32_C(0x0)
26324         /* Enhanced Transmission Selection */
26325         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_TSA_ASSIGN_ETS \
26326                 UINT32_C(0x1)
26327         /* reserved. */
26328         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_TSA_ASSIGN_RESERVED_FIRST \
26329                 UINT32_C(0x2)
26330         /* reserved. */
26331         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_TSA_ASSIGN_RESERVED_LAST \
26332                 UINT32_C(0xff)
26333         /*
26334          * Priority level for strict priority. Valid only when the
26335          * tsa_assign is 0 - Strict Priority (SP)
26336          * 0..7 - Valid values.
26337          * 8..255 - Reserved.
26338          */
26339         uint8_t queue_id1_pri_lvl;
26340         /*
26341          * Weight used to allocate remaining BW for this COS after
26342          * servicing guaranteed bandwidths for all COS.
26343          */
26344         uint8_t queue_id1_bw_weight;
26345         /* ID of CoS Queue 2. */
26346         uint8_t queue_id2;
26347         /*
26348          * Minimum BW allocated to CoS Queue.
26349          * The HWRM will translate this value into byte counter and
26350          * time interval used for this COS inside the device.
26351          */
26352         uint32_t        queue_id2_min_bw;
26353         /* The bandwidth value. */
26354         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_MASK \
26355                 UINT32_C(0xfffffff)
26356         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_SFT \
26357                 0
26358         /* The granularity of the value (bits or bytes). */
26359         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE \
26360                 UINT32_C(0x10000000)
26361         /* Value is in bits. */
26362         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE_BITS \
26363                 (UINT32_C(0x0) << 28)
26364         /* Value is in bytes. */
26365         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE_BYTES \
26366                 (UINT32_C(0x1) << 28)
26367         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE_LAST \
26368                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE_BYTES
26369         /* bw_value_unit is 3 b */
26370         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_MASK \
26371                 UINT32_C(0xe0000000)
26372         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_SFT \
26373                 29
26374         /* Value is in Mb or MB (base 10). */
26375         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_MEGA \
26376                 (UINT32_C(0x0) << 29)
26377         /* Value is in Kb or KB (base 10). */
26378         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_KILO \
26379                 (UINT32_C(0x2) << 29)
26380         /* Value is in bits or bytes. */
26381         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_BASE \
26382                 (UINT32_C(0x4) << 29)
26383         /* Value is in Gb or GB (base 10). */
26384         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_GIGA \
26385                 (UINT32_C(0x6) << 29)
26386         /* Value is in 1/100th of a percentage of total bandwidth. */
26387         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
26388                 (UINT32_C(0x1) << 29)
26389         /* Invalid unit */
26390         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_INVALID \
26391                 (UINT32_C(0x7) << 29)
26392         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_LAST \
26393                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_INVALID
26394         /*
26395          * Maximum BW allocated to CoS queue.
26396          * The HWRM will translate this value into byte counter and
26397          * time interval used for this COS inside the device.
26398          */
26399         uint32_t        queue_id2_max_bw;
26400         /* The bandwidth value. */
26401         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_MASK \
26402                 UINT32_C(0xfffffff)
26403         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_SFT \
26404                 0
26405         /* The granularity of the value (bits or bytes). */
26406         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE \
26407                 UINT32_C(0x10000000)
26408         /* Value is in bits. */
26409         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE_BITS \
26410                 (UINT32_C(0x0) << 28)
26411         /* Value is in bytes. */
26412         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE_BYTES \
26413                 (UINT32_C(0x1) << 28)
26414         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE_LAST \
26415                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE_BYTES
26416         /* bw_value_unit is 3 b */
26417         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_MASK \
26418                 UINT32_C(0xe0000000)
26419         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_SFT \
26420                 29
26421         /* Value is in Mb or MB (base 10). */
26422         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_MEGA \
26423                 (UINT32_C(0x0) << 29)
26424         /* Value is in Kb or KB (base 10). */
26425         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_KILO \
26426                 (UINT32_C(0x2) << 29)
26427         /* Value is in bits or bytes. */
26428         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_BASE \
26429                 (UINT32_C(0x4) << 29)
26430         /* Value is in Gb or GB (base 10). */
26431         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_GIGA \
26432                 (UINT32_C(0x6) << 29)
26433         /* Value is in 1/100th of a percentage of total bandwidth. */
26434         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
26435                 (UINT32_C(0x1) << 29)
26436         /* Invalid unit */
26437         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_INVALID \
26438                 (UINT32_C(0x7) << 29)
26439         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_LAST \
26440                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_INVALID
26441         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
26442         uint8_t queue_id2_tsa_assign;
26443         /* Strict Priority */
26444         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_TSA_ASSIGN_SP \
26445                 UINT32_C(0x0)
26446         /* Enhanced Transmission Selection */
26447         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_TSA_ASSIGN_ETS \
26448                 UINT32_C(0x1)
26449         /* reserved. */
26450         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_TSA_ASSIGN_RESERVED_FIRST \
26451                 UINT32_C(0x2)
26452         /* reserved. */
26453         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_TSA_ASSIGN_RESERVED_LAST \
26454                 UINT32_C(0xff)
26455         /*
26456          * Priority level for strict priority. Valid only when the
26457          * tsa_assign is 0 - Strict Priority (SP)
26458          * 0..7 - Valid values.
26459          * 8..255 - Reserved.
26460          */
26461         uint8_t queue_id2_pri_lvl;
26462         /*
26463          * Weight used to allocate remaining BW for this COS after
26464          * servicing guaranteed bandwidths for all COS.
26465          */
26466         uint8_t queue_id2_bw_weight;
26467         /* ID of CoS Queue 3. */
26468         uint8_t queue_id3;
26469         /*
26470          * Minimum BW allocated to CoS Queue.
26471          * The HWRM will translate this value into byte counter and
26472          * time interval used for this COS inside the device.
26473          */
26474         uint32_t        queue_id3_min_bw;
26475         /* The bandwidth value. */
26476         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_MASK \
26477                 UINT32_C(0xfffffff)
26478         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_SFT \
26479                 0
26480         /* The granularity of the value (bits or bytes). */
26481         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE \
26482                 UINT32_C(0x10000000)
26483         /* Value is in bits. */
26484         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE_BITS \
26485                 (UINT32_C(0x0) << 28)
26486         /* Value is in bytes. */
26487         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE_BYTES \
26488                 (UINT32_C(0x1) << 28)
26489         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE_LAST \
26490                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE_BYTES
26491         /* bw_value_unit is 3 b */
26492         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_MASK \
26493                 UINT32_C(0xe0000000)
26494         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_SFT \
26495                 29
26496         /* Value is in Mb or MB (base 10). */
26497         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_MEGA \
26498                 (UINT32_C(0x0) << 29)
26499         /* Value is in Kb or KB (base 10). */
26500         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_KILO \
26501                 (UINT32_C(0x2) << 29)
26502         /* Value is in bits or bytes. */
26503         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_BASE \
26504                 (UINT32_C(0x4) << 29)
26505         /* Value is in Gb or GB (base 10). */
26506         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_GIGA \
26507                 (UINT32_C(0x6) << 29)
26508         /* Value is in 1/100th of a percentage of total bandwidth. */
26509         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
26510                 (UINT32_C(0x1) << 29)
26511         /* Invalid unit */
26512         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_INVALID \
26513                 (UINT32_C(0x7) << 29)
26514         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_LAST \
26515                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_INVALID
26516         /*
26517          * Maximum BW allocated to CoS queue.
26518          * The HWRM will translate this value into byte counter and
26519          * time interval used for this COS inside the device.
26520          */
26521         uint32_t        queue_id3_max_bw;
26522         /* The bandwidth value. */
26523         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_MASK \
26524                 UINT32_C(0xfffffff)
26525         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_SFT \
26526                 0
26527         /* The granularity of the value (bits or bytes). */
26528         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE \
26529                 UINT32_C(0x10000000)
26530         /* Value is in bits. */
26531         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE_BITS \
26532                 (UINT32_C(0x0) << 28)
26533         /* Value is in bytes. */
26534         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE_BYTES \
26535                 (UINT32_C(0x1) << 28)
26536         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE_LAST \
26537                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE_BYTES
26538         /* bw_value_unit is 3 b */
26539         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_MASK \
26540                 UINT32_C(0xe0000000)
26541         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_SFT \
26542                 29
26543         /* Value is in Mb or MB (base 10). */
26544         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_MEGA \
26545                 (UINT32_C(0x0) << 29)
26546         /* Value is in Kb or KB (base 10). */
26547         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_KILO \
26548                 (UINT32_C(0x2) << 29)
26549         /* Value is in bits or bytes. */
26550         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_BASE \
26551                 (UINT32_C(0x4) << 29)
26552         /* Value is in Gb or GB (base 10). */
26553         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_GIGA \
26554                 (UINT32_C(0x6) << 29)
26555         /* Value is in 1/100th of a percentage of total bandwidth. */
26556         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
26557                 (UINT32_C(0x1) << 29)
26558         /* Invalid unit */
26559         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_INVALID \
26560                 (UINT32_C(0x7) << 29)
26561         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_LAST \
26562                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_INVALID
26563         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
26564         uint8_t queue_id3_tsa_assign;
26565         /* Strict Priority */
26566         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_TSA_ASSIGN_SP \
26567                 UINT32_C(0x0)
26568         /* Enhanced Transmission Selection */
26569         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_TSA_ASSIGN_ETS \
26570                 UINT32_C(0x1)
26571         /* reserved. */
26572         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_TSA_ASSIGN_RESERVED_FIRST \
26573                 UINT32_C(0x2)
26574         /* reserved. */
26575         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_TSA_ASSIGN_RESERVED_LAST \
26576                 UINT32_C(0xff)
26577         /*
26578          * Priority level for strict priority. Valid only when the
26579          * tsa_assign is 0 - Strict Priority (SP)
26580          * 0..7 - Valid values.
26581          * 8..255 - Reserved.
26582          */
26583         uint8_t queue_id3_pri_lvl;
26584         /*
26585          * Weight used to allocate remaining BW for this COS after
26586          * servicing guaranteed bandwidths for all COS.
26587          */
26588         uint8_t queue_id3_bw_weight;
26589         /* ID of CoS Queue 4. */
26590         uint8_t queue_id4;
26591         /*
26592          * Minimum BW allocated to CoS Queue.
26593          * The HWRM will translate this value into byte counter and
26594          * time interval used for this COS inside the device.
26595          */
26596         uint32_t        queue_id4_min_bw;
26597         /* The bandwidth value. */
26598         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_MASK \
26599                 UINT32_C(0xfffffff)
26600         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_SFT \
26601                 0
26602         /* The granularity of the value (bits or bytes). */
26603         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE \
26604                 UINT32_C(0x10000000)
26605         /* Value is in bits. */
26606         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE_BITS \
26607                 (UINT32_C(0x0) << 28)
26608         /* Value is in bytes. */
26609         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE_BYTES \
26610                 (UINT32_C(0x1) << 28)
26611         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE_LAST \
26612                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE_BYTES
26613         /* bw_value_unit is 3 b */
26614         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_MASK \
26615                 UINT32_C(0xe0000000)
26616         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_SFT \
26617                 29
26618         /* Value is in Mb or MB (base 10). */
26619         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_MEGA \
26620                 (UINT32_C(0x0) << 29)
26621         /* Value is in Kb or KB (base 10). */
26622         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_KILO \
26623                 (UINT32_C(0x2) << 29)
26624         /* Value is in bits or bytes. */
26625         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_BASE \
26626                 (UINT32_C(0x4) << 29)
26627         /* Value is in Gb or GB (base 10). */
26628         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_GIGA \
26629                 (UINT32_C(0x6) << 29)
26630         /* Value is in 1/100th of a percentage of total bandwidth. */
26631         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
26632                 (UINT32_C(0x1) << 29)
26633         /* Invalid unit */
26634         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_INVALID \
26635                 (UINT32_C(0x7) << 29)
26636         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_LAST \
26637                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_INVALID
26638         /*
26639          * Maximum BW allocated to CoS queue.
26640          * The HWRM will translate this value into byte counter and
26641          * time interval used for this COS inside the device.
26642          */
26643         uint32_t        queue_id4_max_bw;
26644         /* The bandwidth value. */
26645         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_MASK \
26646                 UINT32_C(0xfffffff)
26647         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_SFT \
26648                 0
26649         /* The granularity of the value (bits or bytes). */
26650         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE \
26651                 UINT32_C(0x10000000)
26652         /* Value is in bits. */
26653         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE_BITS \
26654                 (UINT32_C(0x0) << 28)
26655         /* Value is in bytes. */
26656         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE_BYTES \
26657                 (UINT32_C(0x1) << 28)
26658         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE_LAST \
26659                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE_BYTES
26660         /* bw_value_unit is 3 b */
26661         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_MASK \
26662                 UINT32_C(0xe0000000)
26663         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_SFT \
26664                 29
26665         /* Value is in Mb or MB (base 10). */
26666         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_MEGA \
26667                 (UINT32_C(0x0) << 29)
26668         /* Value is in Kb or KB (base 10). */
26669         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_KILO \
26670                 (UINT32_C(0x2) << 29)
26671         /* Value is in bits or bytes. */
26672         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_BASE \
26673                 (UINT32_C(0x4) << 29)
26674         /* Value is in Gb or GB (base 10). */
26675         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_GIGA \
26676                 (UINT32_C(0x6) << 29)
26677         /* Value is in 1/100th of a percentage of total bandwidth. */
26678         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
26679                 (UINT32_C(0x1) << 29)
26680         /* Invalid unit */
26681         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_INVALID \
26682                 (UINT32_C(0x7) << 29)
26683         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_LAST \
26684                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_INVALID
26685         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
26686         uint8_t queue_id4_tsa_assign;
26687         /* Strict Priority */
26688         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_TSA_ASSIGN_SP \
26689                 UINT32_C(0x0)
26690         /* Enhanced Transmission Selection */
26691         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_TSA_ASSIGN_ETS \
26692                 UINT32_C(0x1)
26693         /* reserved. */
26694         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_TSA_ASSIGN_RESERVED_FIRST \
26695                 UINT32_C(0x2)
26696         /* reserved. */
26697         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_TSA_ASSIGN_RESERVED_LAST \
26698                 UINT32_C(0xff)
26699         /*
26700          * Priority level for strict priority. Valid only when the
26701          * tsa_assign is 0 - Strict Priority (SP)
26702          * 0..7 - Valid values.
26703          * 8..255 - Reserved.
26704          */
26705         uint8_t queue_id4_pri_lvl;
26706         /*
26707          * Weight used to allocate remaining BW for this COS after
26708          * servicing guaranteed bandwidths for all COS.
26709          */
26710         uint8_t queue_id4_bw_weight;
26711         /* ID of CoS Queue 5. */
26712         uint8_t queue_id5;
26713         /*
26714          * Minimum BW allocated to CoS Queue.
26715          * The HWRM will translate this value into byte counter and
26716          * time interval used for this COS inside the device.
26717          */
26718         uint32_t        queue_id5_min_bw;
26719         /* The bandwidth value. */
26720         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_MASK \
26721                 UINT32_C(0xfffffff)
26722         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_SFT \
26723                 0
26724         /* The granularity of the value (bits or bytes). */
26725         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE \
26726                 UINT32_C(0x10000000)
26727         /* Value is in bits. */
26728         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE_BITS \
26729                 (UINT32_C(0x0) << 28)
26730         /* Value is in bytes. */
26731         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE_BYTES \
26732                 (UINT32_C(0x1) << 28)
26733         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE_LAST \
26734                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE_BYTES
26735         /* bw_value_unit is 3 b */
26736         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_MASK \
26737                 UINT32_C(0xe0000000)
26738         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_SFT \
26739                 29
26740         /* Value is in Mb or MB (base 10). */
26741         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_MEGA \
26742                 (UINT32_C(0x0) << 29)
26743         /* Value is in Kb or KB (base 10). */
26744         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_KILO \
26745                 (UINT32_C(0x2) << 29)
26746         /* Value is in bits or bytes. */
26747         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_BASE \
26748                 (UINT32_C(0x4) << 29)
26749         /* Value is in Gb or GB (base 10). */
26750         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_GIGA \
26751                 (UINT32_C(0x6) << 29)
26752         /* Value is in 1/100th of a percentage of total bandwidth. */
26753         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
26754                 (UINT32_C(0x1) << 29)
26755         /* Invalid unit */
26756         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_INVALID \
26757                 (UINT32_C(0x7) << 29)
26758         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_LAST \
26759                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_INVALID
26760         /*
26761          * Maximum BW allocated to CoS queue.
26762          * The HWRM will translate this value into byte counter and
26763          * time interval used for this COS inside the device.
26764          */
26765         uint32_t        queue_id5_max_bw;
26766         /* The bandwidth value. */
26767         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_MASK \
26768                 UINT32_C(0xfffffff)
26769         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_SFT \
26770                 0
26771         /* The granularity of the value (bits or bytes). */
26772         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE \
26773                 UINT32_C(0x10000000)
26774         /* Value is in bits. */
26775         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE_BITS \
26776                 (UINT32_C(0x0) << 28)
26777         /* Value is in bytes. */
26778         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE_BYTES \
26779                 (UINT32_C(0x1) << 28)
26780         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE_LAST \
26781                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE_BYTES
26782         /* bw_value_unit is 3 b */
26783         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_MASK \
26784                 UINT32_C(0xe0000000)
26785         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_SFT \
26786                 29
26787         /* Value is in Mb or MB (base 10). */
26788         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_MEGA \
26789                 (UINT32_C(0x0) << 29)
26790         /* Value is in Kb or KB (base 10). */
26791         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_KILO \
26792                 (UINT32_C(0x2) << 29)
26793         /* Value is in bits or bytes. */
26794         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_BASE \
26795                 (UINT32_C(0x4) << 29)
26796         /* Value is in Gb or GB (base 10). */
26797         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_GIGA \
26798                 (UINT32_C(0x6) << 29)
26799         /* Value is in 1/100th of a percentage of total bandwidth. */
26800         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
26801                 (UINT32_C(0x1) << 29)
26802         /* Invalid unit */
26803         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_INVALID \
26804                 (UINT32_C(0x7) << 29)
26805         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_LAST \
26806                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_INVALID
26807         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
26808         uint8_t queue_id5_tsa_assign;
26809         /* Strict Priority */
26810         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_TSA_ASSIGN_SP \
26811                 UINT32_C(0x0)
26812         /* Enhanced Transmission Selection */
26813         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_TSA_ASSIGN_ETS \
26814                 UINT32_C(0x1)
26815         /* reserved. */
26816         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_TSA_ASSIGN_RESERVED_FIRST \
26817                 UINT32_C(0x2)
26818         /* reserved. */
26819         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_TSA_ASSIGN_RESERVED_LAST \
26820                 UINT32_C(0xff)
26821         /*
26822          * Priority level for strict priority. Valid only when the
26823          * tsa_assign is 0 - Strict Priority (SP)
26824          * 0..7 - Valid values.
26825          * 8..255 - Reserved.
26826          */
26827         uint8_t queue_id5_pri_lvl;
26828         /*
26829          * Weight used to allocate remaining BW for this COS after
26830          * servicing guaranteed bandwidths for all COS.
26831          */
26832         uint8_t queue_id5_bw_weight;
26833         /* ID of CoS Queue 6. */
26834         uint8_t queue_id6;
26835         /*
26836          * Minimum BW allocated to CoS Queue.
26837          * The HWRM will translate this value into byte counter and
26838          * time interval used for this COS inside the device.
26839          */
26840         uint32_t        queue_id6_min_bw;
26841         /* The bandwidth value. */
26842         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_MASK \
26843                 UINT32_C(0xfffffff)
26844         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_SFT \
26845                 0
26846         /* The granularity of the value (bits or bytes). */
26847         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE \
26848                 UINT32_C(0x10000000)
26849         /* Value is in bits. */
26850         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE_BITS \
26851                 (UINT32_C(0x0) << 28)
26852         /* Value is in bytes. */
26853         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE_BYTES \
26854                 (UINT32_C(0x1) << 28)
26855         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE_LAST \
26856                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE_BYTES
26857         /* bw_value_unit is 3 b */
26858         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_MASK \
26859                 UINT32_C(0xe0000000)
26860         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_SFT \
26861                 29
26862         /* Value is in Mb or MB (base 10). */
26863         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_MEGA \
26864                 (UINT32_C(0x0) << 29)
26865         /* Value is in Kb or KB (base 10). */
26866         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_KILO \
26867                 (UINT32_C(0x2) << 29)
26868         /* Value is in bits or bytes. */
26869         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_BASE \
26870                 (UINT32_C(0x4) << 29)
26871         /* Value is in Gb or GB (base 10). */
26872         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_GIGA \
26873                 (UINT32_C(0x6) << 29)
26874         /* Value is in 1/100th of a percentage of total bandwidth. */
26875         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
26876                 (UINT32_C(0x1) << 29)
26877         /* Invalid unit */
26878         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_INVALID \
26879                 (UINT32_C(0x7) << 29)
26880         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_LAST \
26881                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_INVALID
26882         /*
26883          * Maximum BW allocated to CoS queue.
26884          * The HWRM will translate this value into byte counter and
26885          * time interval used for this COS inside the device.
26886          */
26887         uint32_t        queue_id6_max_bw;
26888         /* The bandwidth value. */
26889         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_MASK \
26890                 UINT32_C(0xfffffff)
26891         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_SFT \
26892                 0
26893         /* The granularity of the value (bits or bytes). */
26894         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE \
26895                 UINT32_C(0x10000000)
26896         /* Value is in bits. */
26897         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE_BITS \
26898                 (UINT32_C(0x0) << 28)
26899         /* Value is in bytes. */
26900         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE_BYTES \
26901                 (UINT32_C(0x1) << 28)
26902         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE_LAST \
26903                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE_BYTES
26904         /* bw_value_unit is 3 b */
26905         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_MASK \
26906                 UINT32_C(0xe0000000)
26907         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_SFT \
26908                 29
26909         /* Value is in Mb or MB (base 10). */
26910         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_MEGA \
26911                 (UINT32_C(0x0) << 29)
26912         /* Value is in Kb or KB (base 10). */
26913         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_KILO \
26914                 (UINT32_C(0x2) << 29)
26915         /* Value is in bits or bytes. */
26916         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_BASE \
26917                 (UINT32_C(0x4) << 29)
26918         /* Value is in Gb or GB (base 10). */
26919         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_GIGA \
26920                 (UINT32_C(0x6) << 29)
26921         /* Value is in 1/100th of a percentage of total bandwidth. */
26922         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
26923                 (UINT32_C(0x1) << 29)
26924         /* Invalid unit */
26925         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_INVALID \
26926                 (UINT32_C(0x7) << 29)
26927         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_LAST \
26928                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_INVALID
26929         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
26930         uint8_t queue_id6_tsa_assign;
26931         /* Strict Priority */
26932         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_TSA_ASSIGN_SP \
26933                 UINT32_C(0x0)
26934         /* Enhanced Transmission Selection */
26935         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_TSA_ASSIGN_ETS \
26936                 UINT32_C(0x1)
26937         /* reserved. */
26938         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_TSA_ASSIGN_RESERVED_FIRST \
26939                 UINT32_C(0x2)
26940         /* reserved. */
26941         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_TSA_ASSIGN_RESERVED_LAST \
26942                 UINT32_C(0xff)
26943         /*
26944          * Priority level for strict priority. Valid only when the
26945          * tsa_assign is 0 - Strict Priority (SP)
26946          * 0..7 - Valid values.
26947          * 8..255 - Reserved.
26948          */
26949         uint8_t queue_id6_pri_lvl;
26950         /*
26951          * Weight used to allocate remaining BW for this COS after
26952          * servicing guaranteed bandwidths for all COS.
26953          */
26954         uint8_t queue_id6_bw_weight;
26955         /* ID of CoS Queue 7. */
26956         uint8_t queue_id7;
26957         /*
26958          * Minimum BW allocated to CoS Queue.
26959          * The HWRM will translate this value into byte counter and
26960          * time interval used for this COS inside the device.
26961          */
26962         uint32_t        queue_id7_min_bw;
26963         /* The bandwidth value. */
26964         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_MASK \
26965                 UINT32_C(0xfffffff)
26966         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_SFT \
26967                 0
26968         /* The granularity of the value (bits or bytes). */
26969         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE \
26970                 UINT32_C(0x10000000)
26971         /* Value is in bits. */
26972         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE_BITS \
26973                 (UINT32_C(0x0) << 28)
26974         /* Value is in bytes. */
26975         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE_BYTES \
26976                 (UINT32_C(0x1) << 28)
26977         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE_LAST \
26978                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE_BYTES
26979         /* bw_value_unit is 3 b */
26980         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_MASK \
26981                 UINT32_C(0xe0000000)
26982         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_SFT \
26983                 29
26984         /* Value is in Mb or MB (base 10). */
26985         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_MEGA \
26986                 (UINT32_C(0x0) << 29)
26987         /* Value is in Kb or KB (base 10). */
26988         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_KILO \
26989                 (UINT32_C(0x2) << 29)
26990         /* Value is in bits or bytes. */
26991         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_BASE \
26992                 (UINT32_C(0x4) << 29)
26993         /* Value is in Gb or GB (base 10). */
26994         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_GIGA \
26995                 (UINT32_C(0x6) << 29)
26996         /* Value is in 1/100th of a percentage of total bandwidth. */
26997         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
26998                 (UINT32_C(0x1) << 29)
26999         /* Invalid unit */
27000         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_INVALID \
27001                 (UINT32_C(0x7) << 29)
27002         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_LAST \
27003                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_INVALID
27004         /*
27005          * Maximum BW allocated to CoS queue.
27006          * The HWRM will translate this value into byte counter and
27007          * time interval used for this COS inside the device.
27008          */
27009         uint32_t        queue_id7_max_bw;
27010         /* The bandwidth value. */
27011         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_MASK \
27012                 UINT32_C(0xfffffff)
27013         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_SFT \
27014                 0
27015         /* The granularity of the value (bits or bytes). */
27016         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE \
27017                 UINT32_C(0x10000000)
27018         /* Value is in bits. */
27019         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE_BITS \
27020                 (UINT32_C(0x0) << 28)
27021         /* Value is in bytes. */
27022         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE_BYTES \
27023                 (UINT32_C(0x1) << 28)
27024         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE_LAST \
27025                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE_BYTES
27026         /* bw_value_unit is 3 b */
27027         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_MASK \
27028                 UINT32_C(0xe0000000)
27029         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_SFT \
27030                 29
27031         /* Value is in Mb or MB (base 10). */
27032         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_MEGA \
27033                 (UINT32_C(0x0) << 29)
27034         /* Value is in Kb or KB (base 10). */
27035         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_KILO \
27036                 (UINT32_C(0x2) << 29)
27037         /* Value is in bits or bytes. */
27038         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_BASE \
27039                 (UINT32_C(0x4) << 29)
27040         /* Value is in Gb or GB (base 10). */
27041         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_GIGA \
27042                 (UINT32_C(0x6) << 29)
27043         /* Value is in 1/100th of a percentage of total bandwidth. */
27044         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
27045                 (UINT32_C(0x1) << 29)
27046         /* Invalid unit */
27047         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_INVALID \
27048                 (UINT32_C(0x7) << 29)
27049         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_LAST \
27050                 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_INVALID
27051         /* Transmission Selection Algorithm (TSA) for CoS Queue. */
27052         uint8_t queue_id7_tsa_assign;
27053         /* Strict Priority */
27054         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_SP \
27055                 UINT32_C(0x0)
27056         /* Enhanced Transmission Selection */
27057         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_ETS \
27058                 UINT32_C(0x1)
27059         /* reserved. */
27060         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_FIRST \
27061                 UINT32_C(0x2)
27062         /* reserved. */
27063         #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_LAST \
27064                 UINT32_C(0xff)
27065         /*
27066          * Priority level for strict priority. Valid only when the
27067          * tsa_assign is 0 - Strict Priority (SP)
27068          * 0..7 - Valid values.
27069          * 8..255 - Reserved.
27070          */
27071         uint8_t queue_id7_pri_lvl;
27072         /*
27073          * Weight used to allocate remaining BW for this COS after
27074          * servicing guaranteed bandwidths for all COS.
27075          */
27076         uint8_t queue_id7_bw_weight;
27077         uint8_t unused_1[5];
27078 } __rte_packed;
27079
27080 /* hwrm_queue_cos2bw_cfg_output (size:128b/16B) */
27081 struct hwrm_queue_cos2bw_cfg_output {
27082         /* The specific error status for the command. */
27083         uint16_t        error_code;
27084         /* The HWRM command request type. */
27085         uint16_t        req_type;
27086         /* The sequence ID from the original command. */
27087         uint16_t        seq_id;
27088         /* The length of the response data in number of bytes. */
27089         uint16_t        resp_len;
27090         uint8_t unused_0[7];
27091         /*
27092          * This field is used in Output records to indicate that the output
27093          * is completely written to RAM. This field should be read as '1'
27094          * to indicate that the output has been completely written.
27095          * When writing a command completion or response to an internal processor,
27096          * the order of writes has to be such that this field is written last.
27097          */
27098         uint8_t valid;
27099 } __rte_packed;
27100
27101 /*************************
27102  * hwrm_queue_dscp_qcaps *
27103  *************************/
27104
27105
27106 /* hwrm_queue_dscp_qcaps_input (size:192b/24B) */
27107 struct hwrm_queue_dscp_qcaps_input {
27108         /* The HWRM command request type. */
27109         uint16_t        req_type;
27110         /*
27111          * The completion ring to send the completion event on. This should
27112          * be the NQ ID returned from the `nq_alloc` HWRM command.
27113          */
27114         uint16_t        cmpl_ring;
27115         /*
27116          * The sequence ID is used by the driver for tracking multiple
27117          * commands. This ID is treated as opaque data by the firmware and
27118          * the value is returned in the `hwrm_resp_hdr` upon completion.
27119          */
27120         uint16_t        seq_id;
27121         /*
27122          * The target ID of the command:
27123          * * 0x0-0xFFF8 - The function ID
27124          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
27125          * * 0xFFFD - Reserved for user-space HWRM interface
27126          * * 0xFFFF - HWRM
27127          */
27128         uint16_t        target_id;
27129         /*
27130          * A physical address pointer pointing to a host buffer that the
27131          * command's response data will be written. This can be either a host
27132          * physical address (HPA) or a guest physical address (GPA) and must
27133          * point to a physically contiguous block of memory.
27134          */
27135         uint64_t        resp_addr;
27136         /*
27137          * Port ID of port for which the table is being configured.
27138          * The HWRM needs to check whether this function is allowed
27139          * to configure pri2cos mapping on this port.
27140          */
27141         uint8_t port_id;
27142         uint8_t unused_0[7];
27143 } __rte_packed;
27144
27145 /* hwrm_queue_dscp_qcaps_output (size:128b/16B) */
27146 struct hwrm_queue_dscp_qcaps_output {
27147         /* The specific error status for the command. */
27148         uint16_t        error_code;
27149         /* The HWRM command request type. */
27150         uint16_t        req_type;
27151         /* The sequence ID from the original command. */
27152         uint16_t        seq_id;
27153         /* The length of the response data in number of bytes. */
27154         uint16_t        resp_len;
27155         /* The number of bits provided by the hardware for the DSCP value. */
27156         uint8_t num_dscp_bits;
27157         uint8_t unused_0;
27158         /* Max number of DSCP-MASK-PRI entries supported. */
27159         uint16_t        max_entries;
27160         uint8_t unused_1[3];
27161         /*
27162          * This field is used in Output records to indicate that the output
27163          * is completely written to RAM. This field should be read as '1'
27164          * to indicate that the output has been completely written.
27165          * When writing a command completion or response to an internal processor,
27166          * the order of writes has to be such that this field is written last.
27167          */
27168         uint8_t valid;
27169 } __rte_packed;
27170
27171 /****************************
27172  * hwrm_queue_dscp2pri_qcfg *
27173  ****************************/
27174
27175
27176 /* hwrm_queue_dscp2pri_qcfg_input (size:256b/32B) */
27177 struct hwrm_queue_dscp2pri_qcfg_input {
27178         /* The HWRM command request type. */
27179         uint16_t        req_type;
27180         /*
27181          * The completion ring to send the completion event on. This should
27182          * be the NQ ID returned from the `nq_alloc` HWRM command.
27183          */
27184         uint16_t        cmpl_ring;
27185         /*
27186          * The sequence ID is used by the driver for tracking multiple
27187          * commands. This ID is treated as opaque data by the firmware and
27188          * the value is returned in the `hwrm_resp_hdr` upon completion.
27189          */
27190         uint16_t        seq_id;
27191         /*
27192          * The target ID of the command:
27193          * * 0x0-0xFFF8 - The function ID
27194          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
27195          * * 0xFFFD - Reserved for user-space HWRM interface
27196          * * 0xFFFF - HWRM
27197          */
27198         uint16_t        target_id;
27199         /*
27200          * A physical address pointer pointing to a host buffer that the
27201          * command's response data will be written. This can be either a host
27202          * physical address (HPA) or a guest physical address (GPA) and must
27203          * point to a physically contiguous block of memory.
27204          */
27205         uint64_t        resp_addr;
27206         /*
27207          * This is the host address where the 24-bits DSCP-MASK-PRI
27208          * tuple(s) will be copied to.
27209          */
27210         uint64_t        dest_data_addr;
27211         /*
27212          * Port ID of port for which the table is being configured.
27213          * The HWRM needs to check whether this function is allowed
27214          * to configure pri2cos mapping on this port.
27215          */
27216         uint8_t port_id;
27217         uint8_t unused_0;
27218         /* Size of the buffer pointed to by dest_data_addr. */
27219         uint16_t        dest_data_buffer_size;
27220         uint8_t unused_1[4];
27221 } __rte_packed;
27222
27223 /* hwrm_queue_dscp2pri_qcfg_output (size:128b/16B) */
27224 struct hwrm_queue_dscp2pri_qcfg_output {
27225         /* The specific error status for the command. */
27226         uint16_t        error_code;
27227         /* The HWRM command request type. */
27228         uint16_t        req_type;
27229         /* The sequence ID from the original command. */
27230         uint16_t        seq_id;
27231         /* The length of the response data in number of bytes. */
27232         uint16_t        resp_len;
27233         /*
27234          * A count of the number of DSCP-MASK-PRI tuple(s) pointed to
27235          * by the dest_data_addr.
27236          */
27237         uint16_t        entry_cnt;
27238         /*
27239          * This is the default PRI which un-initialized DSCP values are
27240          * mapped to.
27241          */
27242         uint8_t default_pri;
27243         uint8_t unused_0[4];
27244         /*
27245          * This field is used in Output records to indicate that the output
27246          * is completely written to RAM. This field should be read as '1'
27247          * to indicate that the output has been completely written.
27248          * When writing a command completion or response to an internal processor,
27249          * the order of writes has to be such that this field is written last.
27250          */
27251         uint8_t valid;
27252 } __rte_packed;
27253
27254 /***************************
27255  * hwrm_queue_dscp2pri_cfg *
27256  ***************************/
27257
27258
27259 /* hwrm_queue_dscp2pri_cfg_input (size:320b/40B) */
27260 struct hwrm_queue_dscp2pri_cfg_input {
27261         /* The HWRM command request type. */
27262         uint16_t        req_type;
27263         /*
27264          * The completion ring to send the completion event on. This should
27265          * be the NQ ID returned from the `nq_alloc` HWRM command.
27266          */
27267         uint16_t        cmpl_ring;
27268         /*
27269          * The sequence ID is used by the driver for tracking multiple
27270          * commands. This ID is treated as opaque data by the firmware and
27271          * the value is returned in the `hwrm_resp_hdr` upon completion.
27272          */
27273         uint16_t        seq_id;
27274         /*
27275          * The target ID of the command:
27276          * * 0x0-0xFFF8 - The function ID
27277          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
27278          * * 0xFFFD - Reserved for user-space HWRM interface
27279          * * 0xFFFF - HWRM
27280          */
27281         uint16_t        target_id;
27282         /*
27283          * A physical address pointer pointing to a host buffer that the
27284          * command's response data will be written. This can be either a host
27285          * physical address (HPA) or a guest physical address (GPA) and must
27286          * point to a physically contiguous block of memory.
27287          */
27288         uint64_t        resp_addr;
27289         /*
27290          * This is the host address where the 24-bits DSCP-MASK-PRI tuple
27291          * will be copied from.
27292          */
27293         uint64_t        src_data_addr;
27294         uint32_t        flags;
27295         /* use_hw_default_pri is 1 b */
27296         #define HWRM_QUEUE_DSCP2PRI_CFG_INPUT_FLAGS_USE_HW_DEFAULT_PRI \
27297                 UINT32_C(0x1)
27298         uint32_t        enables;
27299         /*
27300          * This bit must be '1' for the default_pri field to be
27301          * configured.
27302          */
27303         #define HWRM_QUEUE_DSCP2PRI_CFG_INPUT_ENABLES_DEFAULT_PRI \
27304                 UINT32_C(0x1)
27305         /*
27306          * Port ID of port for which the table is being configured.
27307          * The HWRM needs to check whether this function is allowed
27308          * to configure pri2cos mapping on this port.
27309          */
27310         uint8_t port_id;
27311         /*
27312          * This is the default PRI which un-initialized DSCP values will be
27313          * mapped to.
27314          */
27315         uint8_t default_pri;
27316         /*
27317          * A count of the number of DSCP-MASK-PRI tuple(s) in the data pointed
27318          * to by src_data_addr.
27319          */
27320         uint16_t        entry_cnt;
27321         uint8_t unused_0[4];
27322 } __rte_packed;
27323
27324 /* hwrm_queue_dscp2pri_cfg_output (size:128b/16B) */
27325 struct hwrm_queue_dscp2pri_cfg_output {
27326         /* The specific error status for the command. */
27327         uint16_t        error_code;
27328         /* The HWRM command request type. */
27329         uint16_t        req_type;
27330         /* The sequence ID from the original command. */
27331         uint16_t        seq_id;
27332         /* The length of the response data in number of bytes. */
27333         uint16_t        resp_len;
27334         uint8_t unused_0[7];
27335         /*
27336          * This field is used in Output records to indicate that the output
27337          * is completely written to RAM. This field should be read as '1'
27338          * to indicate that the output has been completely written.
27339          * When writing a command completion or response to an internal processor,
27340          * the order of writes has to be such that this field is written last.
27341          */
27342         uint8_t valid;
27343 } __rte_packed;
27344
27345 /*************************
27346  * hwrm_queue_mpls_qcaps *
27347  *************************/
27348
27349
27350 /* hwrm_queue_mpls_qcaps_input (size:192b/24B) */
27351 struct hwrm_queue_mpls_qcaps_input {
27352         /* The HWRM command request type. */
27353         uint16_t        req_type;
27354         /*
27355          * The completion ring to send the completion event on. This should
27356          * be the NQ ID returned from the `nq_alloc` HWRM command.
27357          */
27358         uint16_t        cmpl_ring;
27359         /*
27360          * The sequence ID is used by the driver for tracking multiple
27361          * commands. This ID is treated as opaque data by the firmware and
27362          * the value is returned in the `hwrm_resp_hdr` upon completion.
27363          */
27364         uint16_t        seq_id;
27365         /*
27366          * The target ID of the command:
27367          * * 0x0-0xFFF8 - The function ID
27368          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
27369          * * 0xFFFD - Reserved for user-space HWRM interface
27370          * * 0xFFFF - HWRM
27371          */
27372         uint16_t        target_id;
27373         /*
27374          * A physical address pointer pointing to a host buffer that the
27375          * command's response data will be written. This can be either a host
27376          * physical address (HPA) or a guest physical address (GPA) and must
27377          * point to a physically contiguous block of memory.
27378          */
27379         uint64_t        resp_addr;
27380         /*
27381          * Port ID of port for which the table is being configured.
27382          * The HWRM needs to check whether this function is allowed
27383          * to configure MPLS TC(EXP) to pri mapping on this port.
27384          */
27385         uint8_t port_id;
27386         uint8_t unused_0[7];
27387 } __rte_packed;
27388
27389 /* hwrm_queue_mpls_qcaps_output (size:128b/16B) */
27390 struct hwrm_queue_mpls_qcaps_output {
27391         /* The specific error status for the command. */
27392         uint16_t        error_code;
27393         /* The HWRM command request type. */
27394         uint16_t        req_type;
27395         /* The sequence ID from the original command. */
27396         uint16_t        seq_id;
27397         /* The length of the response data in number of bytes. */
27398         uint16_t        resp_len;
27399         /*
27400          * Bitmask indicating which queues can be configured by the
27401          * hwrm_queue_mplstc2pri_cfg command.
27402          *
27403          * Each bit represents a specific pri where bit 0 represents
27404          * pri 0 and bit 7 represents pri 7.
27405          * # A value of 0 indicates that the pri is not configurable
27406          * by the hwrm_queue_mplstc2pri_cfg command.
27407          * # A value of 1 indicates that the pri is configurable.
27408          * # A hwrm_queue_mplstc2pri_cfg command shall return error when
27409          * trying to configure a pri that is not configurable.
27410          */
27411         uint8_t queue_mplstc2pri_cfg_allowed;
27412         /*
27413          * This is the default PRI which un-initialized MPLS values will be
27414          * mapped to.
27415          */
27416         uint8_t hw_default_pri;
27417         uint8_t unused_0[5];
27418         /*
27419          * This field is used in Output records to indicate that the output
27420          * is completely written to RAM. This field should be read as '1'
27421          * to indicate that the output has been completely written.
27422          * When writing a command completion or response to an internal processor,
27423          * the order of writes has to be such that this field is written last.
27424          */
27425         uint8_t valid;
27426 } __rte_packed;
27427
27428 /******************************
27429  * hwrm_queue_mplstc2pri_qcfg *
27430  ******************************/
27431
27432
27433 /* hwrm_queue_mplstc2pri_qcfg_input (size:192b/24B) */
27434 struct hwrm_queue_mplstc2pri_qcfg_input {
27435         /* The HWRM command request type. */
27436         uint16_t        req_type;
27437         /*
27438          * The completion ring to send the completion event on. This should
27439          * be the NQ ID returned from the `nq_alloc` HWRM command.
27440          */
27441         uint16_t        cmpl_ring;
27442         /*
27443          * The sequence ID is used by the driver for tracking multiple
27444          * commands. This ID is treated as opaque data by the firmware and
27445          * the value is returned in the `hwrm_resp_hdr` upon completion.
27446          */
27447         uint16_t        seq_id;
27448         /*
27449          * The target ID of the command:
27450          * * 0x0-0xFFF8 - The function ID
27451          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
27452          * * 0xFFFD - Reserved for user-space HWRM interface
27453          * * 0xFFFF - HWRM
27454          */
27455         uint16_t        target_id;
27456         /*
27457          * A physical address pointer pointing to a host buffer that the
27458          * command's response data will be written. This can be either a host
27459          * physical address (HPA) or a guest physical address (GPA) and must
27460          * point to a physically contiguous block of memory.
27461          */
27462         uint64_t        resp_addr;
27463         /*
27464          * Port ID of port for which the table is being configured.
27465          * The HWRM needs to check whether this function is allowed
27466          * to configure MPLS TC(EXP) to pri mapping on this port.
27467          */
27468         uint8_t port_id;
27469         uint8_t unused_0[7];
27470 } __rte_packed;
27471
27472 /* hwrm_queue_mplstc2pri_qcfg_output (size:192b/24B) */
27473 struct hwrm_queue_mplstc2pri_qcfg_output {
27474         /* The specific error status for the command. */
27475         uint16_t        error_code;
27476         /* The HWRM command request type. */
27477         uint16_t        req_type;
27478         /* The sequence ID from the original command. */
27479         uint16_t        seq_id;
27480         /* The length of the response data in number of bytes. */
27481         uint16_t        resp_len;
27482         /*
27483          * pri assigned to MPLS TC(EXP) 0. This value can only be changed
27484          * before traffic has started.
27485          * A value of 0xff indicates that no pri is assigned to the
27486          * MPLS TC(EXP) 0.
27487          */
27488         uint8_t tc0_pri_queue_id;
27489         /*
27490          * pri assigned to MPLS TC(EXP) 1. This value can only be changed
27491          * before traffic has started.
27492          * A value of 0xff indicates that no pri is assigned to the
27493          * MPLS TC(EXP) 1.
27494          */
27495         uint8_t tc1_pri_queue_id;
27496         /*
27497          * pri assigned to MPLS TC(EXP) 2. This value can only be changed
27498          * before traffic has started.
27499          * A value of 0xff indicates that no pri is assigned to the
27500          * MPLS TC(EXP) 2.
27501          */
27502         uint8_t tc2_pri_queue_id;
27503         /*
27504          * pri assigned to MPLS TC(EXP) 3. This value can only be changed
27505          * before traffic has started.
27506          * A value of 0xff indicates that no pri is assigned to the
27507          * MPLS TC(EXP) 3.
27508          */
27509         uint8_t tc3_pri_queue_id;
27510         /*
27511          * pri assigned to MPLS TC(EXP) 4. This value can only be changed
27512          * before traffic has started.
27513          * A value of 0xff indicates that no pri is assigned to the
27514          * MPLS TC(EXP) 4.
27515          */
27516         uint8_t tc4_pri_queue_id;
27517         /*
27518          * pri assigned to MPLS TC(EXP) 5. This value can only be changed
27519          * before traffic has started.
27520          * A value of 0xff indicates that no pri is assigned to the
27521          * MPLS TC(EXP) 5.
27522          */
27523         uint8_t tc5_pri_queue_id;
27524         /*
27525          * pri assigned to MPLS TC(EXP) 6. This value can only
27526          * be changed before traffic has started.
27527          * A value of 0xff indicates that no pri is assigned to the
27528          * MPLS TC(EXP) 6.
27529          */
27530         uint8_t tc6_pri_queue_id;
27531         /*
27532          * pri assigned to MPLS TC(EXP) 7. This value can only
27533          * be changed before traffic has started.
27534          * A value of 0xff indicates that no pri is assigned to the
27535          * MPLS TC(EXP) 7.
27536          */
27537         uint8_t tc7_pri_queue_id;
27538         uint8_t unused_0[7];
27539         /*
27540          * This field is used in Output records to indicate that the output
27541          * is completely written to RAM. This field should be read as '1'
27542          * to indicate that the output has been completely written.
27543          * When writing a command completion or response to an internal processor,
27544          * the order of writes has to be such that this field is written last.
27545          */
27546         uint8_t valid;
27547 } __rte_packed;
27548
27549 /*****************************
27550  * hwrm_queue_mplstc2pri_cfg *
27551  *****************************/
27552
27553
27554 /* hwrm_queue_mplstc2pri_cfg_input (size:256b/32B) */
27555 struct hwrm_queue_mplstc2pri_cfg_input {
27556         /* The HWRM command request type. */
27557         uint16_t        req_type;
27558         /*
27559          * The completion ring to send the completion event on. This should
27560          * be the NQ ID returned from the `nq_alloc` HWRM command.
27561          */
27562         uint16_t        cmpl_ring;
27563         /*
27564          * The sequence ID is used by the driver for tracking multiple
27565          * commands. This ID is treated as opaque data by the firmware and
27566          * the value is returned in the `hwrm_resp_hdr` upon completion.
27567          */
27568         uint16_t        seq_id;
27569         /*
27570          * The target ID of the command:
27571          * * 0x0-0xFFF8 - The function ID
27572          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
27573          * * 0xFFFD - Reserved for user-space HWRM interface
27574          * * 0xFFFF - HWRM
27575          */
27576         uint16_t        target_id;
27577         /*
27578          * A physical address pointer pointing to a host buffer that the
27579          * command's response data will be written. This can be either a host
27580          * physical address (HPA) or a guest physical address (GPA) and must
27581          * point to a physically contiguous block of memory.
27582          */
27583         uint64_t        resp_addr;
27584         uint32_t        enables;
27585         /*
27586          * This bit must be '1' for the mplstc0_pri_queue_id field to be
27587          * configured.
27588          */
27589         #define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC0_PRI_QUEUE_ID \
27590                 UINT32_C(0x1)
27591         /*
27592          * This bit must be '1' for the mplstc1_pri_queue_id field to be
27593          * configured.
27594          */
27595         #define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC1_PRI_QUEUE_ID \
27596                 UINT32_C(0x2)
27597         /*
27598          * This bit must be '1' for the mplstc2_pri_queue_id field to be
27599          * configured.
27600          */
27601         #define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC2_PRI_QUEUE_ID \
27602                 UINT32_C(0x4)
27603         /*
27604          * This bit must be '1' for the mplstc3_pri_queue_id field to be
27605          * configured.
27606          */
27607         #define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC3_PRI_QUEUE_ID \
27608                 UINT32_C(0x8)
27609         /*
27610          * This bit must be '1' for the mplstc4_pri_queue_id field to be
27611          * configured.
27612          */
27613         #define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC4_PRI_QUEUE_ID \
27614                 UINT32_C(0x10)
27615         /*
27616          * This bit must be '1' for the mplstc5_pri_queue_id field to be
27617          * configured.
27618          */
27619         #define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC5_PRI_QUEUE_ID \
27620                 UINT32_C(0x20)
27621         /*
27622          * This bit must be '1' for the mplstc6_pri_queue_id field to be
27623          * configured.
27624          */
27625         #define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC6_PRI_QUEUE_ID \
27626                 UINT32_C(0x40)
27627         /*
27628          * This bit must be '1' for the mplstc7_pri_queue_id field to be
27629          * configured.
27630          */
27631         #define HWRM_QUEUE_MPLSTC2PRI_CFG_INPUT_ENABLES_TC7_PRI_QUEUE_ID \
27632                 UINT32_C(0x80)
27633         /*
27634          * Port ID of port for which the table is being configured.
27635          * The HWRM needs to check whether this function is allowed
27636          * to configure MPLS TC(EXP)to pri mapping on this port.
27637          */
27638         uint8_t port_id;
27639         uint8_t unused_0[3];
27640         /*
27641          * pri assigned to MPLS TC(EXP) 0. This value can only
27642          * be changed before traffic has started.
27643          */
27644         uint8_t tc0_pri_queue_id;
27645         /*
27646          * pri assigned to MPLS TC(EXP) 1. This value can only
27647          * be changed before traffic has started.
27648          */
27649         uint8_t tc1_pri_queue_id;
27650         /*
27651          * pri assigned to MPLS TC(EXP) 2  This value can only
27652          * be changed before traffic has started.
27653          */
27654         uint8_t tc2_pri_queue_id;
27655         /*
27656          * pri assigned to MPLS TC(EXP) 3. This value can only
27657          * be changed before traffic has started.
27658          */
27659         uint8_t tc3_pri_queue_id;
27660         /*
27661          * pri assigned to MPLS TC(EXP) 4. This value can only
27662          * be changed before traffic has started.
27663          */
27664         uint8_t tc4_pri_queue_id;
27665         /*
27666          * pri assigned to MPLS TC(EXP) 5. This value can only
27667          * be changed before traffic has started.
27668          */
27669         uint8_t tc5_pri_queue_id;
27670         /*
27671          * pri assigned to MPLS TC(EXP) 6. This value can only
27672          * be changed before traffic has started.
27673          */
27674         uint8_t tc6_pri_queue_id;
27675         /*
27676          * pri assigned to MPLS TC(EXP) 7. This value can only
27677          * be changed before traffic has started.
27678          */
27679         uint8_t tc7_pri_queue_id;
27680 } __rte_packed;
27681
27682 /* hwrm_queue_mplstc2pri_cfg_output (size:128b/16B) */
27683 struct hwrm_queue_mplstc2pri_cfg_output {
27684         /* The specific error status for the command. */
27685         uint16_t        error_code;
27686         /* The HWRM command request type. */
27687         uint16_t        req_type;
27688         /* The sequence ID from the original command. */
27689         uint16_t        seq_id;
27690         /* The length of the response data in number of bytes. */
27691         uint16_t        resp_len;
27692         uint8_t unused_0[7];
27693         /*
27694          * This field is used in Output records to indicate that the output
27695          * is completely written to RAM. This field should be read as '1'
27696          * to indicate that the output has been completely written.
27697          * When writing a command completion or response to an internal processor,
27698          * the order of writes has to be such that this field is written last.
27699          */
27700         uint8_t valid;
27701 } __rte_packed;
27702
27703 /*******************
27704  * hwrm_vnic_alloc *
27705  *******************/
27706
27707
27708 /* hwrm_vnic_alloc_input (size:192b/24B) */
27709 struct hwrm_vnic_alloc_input {
27710         /* The HWRM command request type. */
27711         uint16_t        req_type;
27712         /*
27713          * The completion ring to send the completion event on. This should
27714          * be the NQ ID returned from the `nq_alloc` HWRM command.
27715          */
27716         uint16_t        cmpl_ring;
27717         /*
27718          * The sequence ID is used by the driver for tracking multiple
27719          * commands. This ID is treated as opaque data by the firmware and
27720          * the value is returned in the `hwrm_resp_hdr` upon completion.
27721          */
27722         uint16_t        seq_id;
27723         /*
27724          * The target ID of the command:
27725          * * 0x0-0xFFF8 - The function ID
27726          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
27727          * * 0xFFFD - Reserved for user-space HWRM interface
27728          * * 0xFFFF - HWRM
27729          */
27730         uint16_t        target_id;
27731         /*
27732          * A physical address pointer pointing to a host buffer that the
27733          * command's response data will be written. This can be either a host
27734          * physical address (HPA) or a guest physical address (GPA) and must
27735          * point to a physically contiguous block of memory.
27736          */
27737         uint64_t        resp_addr;
27738         uint32_t        flags;
27739         /*
27740          * When this bit is '1', this VNIC is requested to
27741          * be the default VNIC for this function.
27742          */
27743         #define HWRM_VNIC_ALLOC_INPUT_FLAGS_DEFAULT     UINT32_C(0x1)
27744         uint8_t unused_0[4];
27745 } __rte_packed;
27746
27747 /* hwrm_vnic_alloc_output (size:128b/16B) */
27748 struct hwrm_vnic_alloc_output {
27749         /* The specific error status for the command. */
27750         uint16_t        error_code;
27751         /* The HWRM command request type. */
27752         uint16_t        req_type;
27753         /* The sequence ID from the original command. */
27754         uint16_t        seq_id;
27755         /* The length of the response data in number of bytes. */
27756         uint16_t        resp_len;
27757         /* Logical vnic ID */
27758         uint32_t        vnic_id;
27759         uint8_t unused_0[3];
27760         /*
27761          * This field is used in Output records to indicate that the output
27762          * is completely written to RAM.  This field should be read as '1'
27763          * to indicate that the output has been completely written.
27764          * When writing a command completion or response to an internal processor,
27765          * the order of writes has to be such that this field is written last.
27766          */
27767         uint8_t valid;
27768 } __rte_packed;
27769
27770 /******************
27771  * hwrm_vnic_free *
27772  ******************/
27773
27774
27775 /* hwrm_vnic_free_input (size:192b/24B) */
27776 struct hwrm_vnic_free_input {
27777         /* The HWRM command request type. */
27778         uint16_t        req_type;
27779         /*
27780          * The completion ring to send the completion event on. This should
27781          * be the NQ ID returned from the `nq_alloc` HWRM command.
27782          */
27783         uint16_t        cmpl_ring;
27784         /*
27785          * The sequence ID is used by the driver for tracking multiple
27786          * commands. This ID is treated as opaque data by the firmware and
27787          * the value is returned in the `hwrm_resp_hdr` upon completion.
27788          */
27789         uint16_t        seq_id;
27790         /*
27791          * The target ID of the command:
27792          * * 0x0-0xFFF8 - The function ID
27793          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
27794          * * 0xFFFD - Reserved for user-space HWRM interface
27795          * * 0xFFFF - HWRM
27796          */
27797         uint16_t        target_id;
27798         /*
27799          * A physical address pointer pointing to a host buffer that the
27800          * command's response data will be written. This can be either a host
27801          * physical address (HPA) or a guest physical address (GPA) and must
27802          * point to a physically contiguous block of memory.
27803          */
27804         uint64_t        resp_addr;
27805         /* Logical vnic ID */
27806         uint32_t        vnic_id;
27807         uint8_t unused_0[4];
27808 } __rte_packed;
27809
27810 /* hwrm_vnic_free_output (size:128b/16B) */
27811 struct hwrm_vnic_free_output {
27812         /* The specific error status for the command. */
27813         uint16_t        error_code;
27814         /* The HWRM command request type. */
27815         uint16_t        req_type;
27816         /* The sequence ID from the original command. */
27817         uint16_t        seq_id;
27818         /* The length of the response data in number of bytes. */
27819         uint16_t        resp_len;
27820         uint8_t unused_0[7];
27821         /*
27822          * This field is used in Output records to indicate that the output
27823          * is completely written to RAM.  This field should be read as '1'
27824          * to indicate that the output has been completely written.
27825          * When writing a command completion or response to an internal processor,
27826          * the order of writes has to be such that this field is written last.
27827          */
27828         uint8_t valid;
27829 } __rte_packed;
27830
27831 /*****************
27832  * hwrm_vnic_cfg *
27833  *****************/
27834
27835
27836 /* hwrm_vnic_cfg_input (size:384b/48B) */
27837 struct hwrm_vnic_cfg_input {
27838         /* The HWRM command request type. */
27839         uint16_t        req_type;
27840         /*
27841          * The completion ring to send the completion event on. This should
27842          * be the NQ ID returned from the `nq_alloc` HWRM command.
27843          */
27844         uint16_t        cmpl_ring;
27845         /*
27846          * The sequence ID is used by the driver for tracking multiple
27847          * commands. This ID is treated as opaque data by the firmware and
27848          * the value is returned in the `hwrm_resp_hdr` upon completion.
27849          */
27850         uint16_t        seq_id;
27851         /*
27852          * The target ID of the command:
27853          * * 0x0-0xFFF8 - The function ID
27854          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
27855          * * 0xFFFD - Reserved for user-space HWRM interface
27856          * * 0xFFFF - HWRM
27857          */
27858         uint16_t        target_id;
27859         /*
27860          * A physical address pointer pointing to a host buffer that the
27861          * command's response data will be written. This can be either a host
27862          * physical address (HPA) or a guest physical address (GPA) and must
27863          * point to a physically contiguous block of memory.
27864          */
27865         uint64_t        resp_addr;
27866         uint32_t        flags;
27867         /*
27868          * When this bit is '1', the VNIC is requested to
27869          * be the default VNIC for the function.
27870          */
27871         #define HWRM_VNIC_CFG_INPUT_FLAGS_DEFAULT \
27872                 UINT32_C(0x1)
27873         /*
27874          * When this bit is '1', the VNIC is being configured to
27875          * strip VLAN in the RX path.
27876          * If set to '0', then VLAN stripping is disabled on
27877          * this VNIC.
27878          */
27879         #define HWRM_VNIC_CFG_INPUT_FLAGS_VLAN_STRIP_MODE \
27880                 UINT32_C(0x2)
27881         /*
27882          * When this bit is '1', the VNIC is being configured to
27883          * buffer receive packets in the hardware until the host
27884          * posts new receive buffers.
27885          * If set to '0', then bd_stall is being configured to be
27886          * disabled on this VNIC.
27887          */
27888         #define HWRM_VNIC_CFG_INPUT_FLAGS_BD_STALL_MODE \
27889                 UINT32_C(0x4)
27890         /*
27891          * When this bit is '1', the VNIC is being configured to
27892          * receive both RoCE and non-RoCE traffic.
27893          * If set to '0', then this VNIC is not configured to be
27894          * operating in dual VNIC mode.
27895          */
27896         #define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_DUAL_VNIC_MODE \
27897                 UINT32_C(0x8)
27898         /*
27899          * When this flag is set to '1', the VNIC is requested to
27900          * be configured to receive only RoCE traffic.
27901          * If this flag is set to '0', then this flag shall be
27902          * ignored by the HWRM.
27903          * If roce_dual_vnic_mode flag is set to '1'
27904          * or roce_mirroring_capable_vnic_mode flag to 1,
27905          * then the HWRM client shall not set this flag to '1'.
27906          */
27907         #define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_ONLY_VNIC_MODE \
27908                 UINT32_C(0x10)
27909         /*
27910          * When a VNIC uses one destination ring group for certain
27911          * application (e.g. Receive Flow Steering) where
27912          * exact match is used to direct packets to a VNIC with one
27913          * destination ring group only, there is no need to configure
27914          * RSS indirection table for that VNIC as only one destination
27915          * ring group is used.
27916          *
27917          * This flag is used to enable a mode where
27918          * RSS is enabled in the VNIC using a RSS context
27919          * for computing RSS hash but the RSS indirection table is
27920          * not configured using hwrm_vnic_rss_cfg.
27921          *
27922          * If this mode is enabled, then the driver should not program
27923          * RSS indirection table for the RSS context that is used for
27924          * computing RSS hash only.
27925          */
27926         #define HWRM_VNIC_CFG_INPUT_FLAGS_RSS_DFLT_CR_MODE \
27927                 UINT32_C(0x20)
27928         /*
27929          * When this bit is '1', the VNIC is being configured to
27930          * receive both RoCE and non-RoCE traffic, but forward only the
27931          * RoCE traffic further. Also, RoCE traffic can be mirrored to
27932          * L2 driver.
27933          */
27934         #define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_MODE \
27935                 UINT32_C(0x40)
27936         uint32_t        enables;
27937         /*
27938          * This bit must be '1' for the dflt_ring_grp field to be
27939          * configured.
27940          */
27941         #define HWRM_VNIC_CFG_INPUT_ENABLES_DFLT_RING_GRP \
27942                 UINT32_C(0x1)
27943         /*
27944          * This bit must be '1' for the rss_rule field to be
27945          * configured.
27946          */
27947         #define HWRM_VNIC_CFG_INPUT_ENABLES_RSS_RULE \
27948                 UINT32_C(0x2)
27949         /*
27950          * This bit must be '1' for the cos_rule field to be
27951          * configured.
27952          */
27953         #define HWRM_VNIC_CFG_INPUT_ENABLES_COS_RULE \
27954                 UINT32_C(0x4)
27955         /*
27956          * This bit must be '1' for the lb_rule field to be
27957          * configured.
27958          */
27959         #define HWRM_VNIC_CFG_INPUT_ENABLES_LB_RULE \
27960                 UINT32_C(0x8)
27961         /*
27962          * This bit must be '1' for the mru field to be
27963          * configured.
27964          */
27965         #define HWRM_VNIC_CFG_INPUT_ENABLES_MRU \
27966                 UINT32_C(0x10)
27967         /*
27968          * This bit must be '1' for the default_rx_ring_id field to be
27969          * configured.
27970          */
27971         #define HWRM_VNIC_CFG_INPUT_ENABLES_DEFAULT_RX_RING_ID \
27972                 UINT32_C(0x20)
27973         /*
27974          * This bit must be '1' for the default_cmpl_ring_id field to be
27975          * configured.
27976          */
27977         #define HWRM_VNIC_CFG_INPUT_ENABLES_DEFAULT_CMPL_RING_ID \
27978                 UINT32_C(0x40)
27979         /* This bit must be '1' for the queue_id field to be configured. */
27980         #define HWRM_VNIC_CFG_INPUT_ENABLES_QUEUE_ID \
27981                 UINT32_C(0x80)
27982         /* This bit must be '1' for the rx_csum_v2_mode field to be configured. */
27983         #define HWRM_VNIC_CFG_INPUT_ENABLES_RX_CSUM_V2_MODE \
27984                 UINT32_C(0x100)
27985         /* Logical vnic ID */
27986         uint16_t        vnic_id;
27987         /*
27988          * Default Completion ring for the VNIC.  This ring will
27989          * be chosen if packet does not match any RSS rules and if
27990          * there is no COS rule.
27991          */
27992         uint16_t        dflt_ring_grp;
27993         /*
27994          * RSS ID for RSS rule/table structure.  0xFF... (All Fs) if
27995          * there is no RSS rule.
27996          */
27997         uint16_t        rss_rule;
27998         /*
27999          * RSS ID for COS rule/table structure.  0xFF... (All Fs) if
28000          * there is no COS rule.
28001          */
28002         uint16_t        cos_rule;
28003         /*
28004          * RSS ID for load balancing rule/table structure.
28005          * 0xFF... (All Fs) if there is no LB rule.
28006          */
28007         uint16_t        lb_rule;
28008         /*
28009          * The maximum receive unit of the vnic.
28010          * Each vnic is associated with a function.
28011          * The vnic mru value overwrites the mru setting of the
28012          * associated function.
28013          * The HWRM shall make sure that vnic mru does not exceed
28014          * the mru of the port the function is associated with.
28015          */
28016         uint16_t        mru;
28017         /*
28018          * Default Rx ring for the VNIC.  This ring will
28019          * be chosen if packet does not match any RSS rules.
28020          * The aggregation ring associated with the Rx ring is
28021          * implied based on the Rx ring specified when the
28022          * aggregation ring was allocated.
28023          */
28024         uint16_t        default_rx_ring_id;
28025         /*
28026          * Default completion ring for the VNIC.  This ring will
28027          * be chosen if packet does not match any RSS rules.
28028          */
28029         uint16_t        default_cmpl_ring_id;
28030         /*
28031          * When specified, only incoming packets classified to the specified CoS
28032          * queue ID will be arriving on this VNIC.  Packet priority to CoS mapping
28033          * rules can be specified using HWRM_QUEUE_PRI2COS_CFG.  In this mode,
28034          * ntuple filters with VNIC destination specified are invalid since they
28035          * conflict with the CoS to VNIC steering rules in this mode.
28036          *
28037          * If this field is not specified, packet to VNIC steering will be
28038          * subject to the standard L2 filter rules and any additional ntuple
28039          * filter rules with destination VNIC specified.
28040          */
28041         uint16_t        queue_id;
28042         /*
28043          * If the device supports the RX V2 and RX TPA start V2 completion
28044          * records as indicated by the HWRM_VNIC_QCAPS command, this field is
28045          * used to specify the two RX checksum modes supported by these
28046          * completion records.
28047          */
28048         uint8_t rx_csum_v2_mode;
28049         /*
28050          * When configured with this checksum mode, the number of header
28051          * groups in the delivered packet with a valid IP checksum and
28052          * the number of header groups in the delivered packet with a valid
28053          * L4 checksum are reported. Valid checksums are counted from the
28054          * outermost header group to the innermost header group, stopping at
28055          * the first error.  This is the default checksum mode supported if
28056          * the driver doesn't explicitly configure the RX checksum mode.
28057          */
28058         #define HWRM_VNIC_CFG_INPUT_RX_CSUM_V2_MODE_DEFAULT UINT32_C(0x0)
28059         /*
28060          * When configured with this checksum mode, the checksum status is
28061          * reported using 'all ok' mode. In the RX completion record, one
28062          * bit indicates if the IP checksum is valid for all the parsed
28063          * header groups with an IP checksum. Another bit indicates if the
28064          * L4 checksum is valid for all the parsed header groups with an L4
28065          * checksum. The number of header groups that were parsed by the
28066          * chip and passed in the delivered packet is also reported.
28067          */
28068         #define HWRM_VNIC_CFG_INPUT_RX_CSUM_V2_MODE_ALL_OK  UINT32_C(0x1)
28069         /*
28070          * Any rx_csum_v2_mode value larger than or equal to this is not
28071          * valid
28072          */
28073         #define HWRM_VNIC_CFG_INPUT_RX_CSUM_V2_MODE_MAX     UINT32_C(0x2)
28074         #define HWRM_VNIC_CFG_INPUT_RX_CSUM_V2_MODE_LAST \
28075                 HWRM_VNIC_CFG_INPUT_RX_CSUM_V2_MODE_MAX
28076         uint8_t unused0[5];
28077 } __rte_packed;
28078
28079 /* hwrm_vnic_cfg_output (size:128b/16B) */
28080 struct hwrm_vnic_cfg_output {
28081         /* The specific error status for the command. */
28082         uint16_t        error_code;
28083         /* The HWRM command request type. */
28084         uint16_t        req_type;
28085         /* The sequence ID from the original command. */
28086         uint16_t        seq_id;
28087         /* The length of the response data in number of bytes. */
28088         uint16_t        resp_len;
28089         uint8_t unused_0[7];
28090         /*
28091          * This field is used in Output records to indicate that the output
28092          * is completely written to RAM.  This field should be read as '1'
28093          * to indicate that the output has been completely written.
28094          * When writing a command completion or response to an internal processor,
28095          * the order of writes has to be such that this field is written last.
28096          */
28097         uint8_t valid;
28098 } __rte_packed;
28099
28100 /******************
28101  * hwrm_vnic_qcfg *
28102  ******************/
28103
28104
28105 /* hwrm_vnic_qcfg_input (size:256b/32B) */
28106 struct hwrm_vnic_qcfg_input {
28107         /* The HWRM command request type. */
28108         uint16_t        req_type;
28109         /*
28110          * The completion ring to send the completion event on. This should
28111          * be the NQ ID returned from the `nq_alloc` HWRM command.
28112          */
28113         uint16_t        cmpl_ring;
28114         /*
28115          * The sequence ID is used by the driver for tracking multiple
28116          * commands. This ID is treated as opaque data by the firmware and
28117          * the value is returned in the `hwrm_resp_hdr` upon completion.
28118          */
28119         uint16_t        seq_id;
28120         /*
28121          * The target ID of the command:
28122          * * 0x0-0xFFF8 - The function ID
28123          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
28124          * * 0xFFFD - Reserved for user-space HWRM interface
28125          * * 0xFFFF - HWRM
28126          */
28127         uint16_t        target_id;
28128         /*
28129          * A physical address pointer pointing to a host buffer that the
28130          * command's response data will be written. This can be either a host
28131          * physical address (HPA) or a guest physical address (GPA) and must
28132          * point to a physically contiguous block of memory.
28133          */
28134         uint64_t        resp_addr;
28135         uint32_t        enables;
28136         /*
28137          * This bit must be '1' for the vf_id_valid field to be
28138          * configured.
28139          */
28140         #define HWRM_VNIC_QCFG_INPUT_ENABLES_VF_ID_VALID     UINT32_C(0x1)
28141         /* Logical vnic ID */
28142         uint32_t        vnic_id;
28143         /* ID of Virtual Function whose VNIC resource is being queried. */
28144         uint16_t        vf_id;
28145         uint8_t unused_0[6];
28146 } __rte_packed;
28147
28148 /* hwrm_vnic_qcfg_output (size:256b/32B) */
28149 struct hwrm_vnic_qcfg_output {
28150         /* The specific error status for the command. */
28151         uint16_t        error_code;
28152         /* The HWRM command request type. */
28153         uint16_t        req_type;
28154         /* The sequence ID from the original command. */
28155         uint16_t        seq_id;
28156         /* The length of the response data in number of bytes. */
28157         uint16_t        resp_len;
28158         /* Default Completion ring for the VNIC. */
28159         uint16_t        dflt_ring_grp;
28160         /*
28161          * RSS ID for RSS rule/table structure.  0xFF... (All Fs) if
28162          * there is no RSS rule.
28163          */
28164         uint16_t        rss_rule;
28165         /*
28166          * RSS ID for COS rule/table structure.  0xFF... (All Fs) if
28167          * there is no COS rule.
28168          */
28169         uint16_t        cos_rule;
28170         /*
28171          * RSS ID for load balancing rule/table structure.
28172          * 0xFF... (All Fs) if there is no LB rule.
28173          */
28174         uint16_t        lb_rule;
28175         /* The maximum receive unit of the vnic. */
28176         uint16_t        mru;
28177         uint8_t unused_0[2];
28178         uint32_t        flags;
28179         /*
28180          * When this bit is '1', the VNIC is the default VNIC for
28181          * the function.
28182          */
28183         #define HWRM_VNIC_QCFG_OUTPUT_FLAGS_DEFAULT \
28184                 UINT32_C(0x1)
28185         /*
28186          * When this bit is '1', the VNIC is configured to
28187          * strip VLAN in the RX path.
28188          * If set to '0', then VLAN stripping is disabled on
28189          * this VNIC.
28190          */
28191         #define HWRM_VNIC_QCFG_OUTPUT_FLAGS_VLAN_STRIP_MODE \
28192                 UINT32_C(0x2)
28193         /*
28194          * When this bit is '1', the VNIC is configured to
28195          * buffer receive packets in the hardware until the host
28196          * posts new receive buffers.
28197          * If set to '0', then bd_stall is disabled on
28198          * this VNIC.
28199          */
28200         #define HWRM_VNIC_QCFG_OUTPUT_FLAGS_BD_STALL_MODE \
28201                 UINT32_C(0x4)
28202         /*
28203          * When this bit is '1', the VNIC is configured to
28204          * receive both RoCE and non-RoCE traffic.
28205          * If set to '0', then this VNIC is not configured to
28206          * operate in dual VNIC mode.
28207          */
28208         #define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_DUAL_VNIC_MODE \
28209                 UINT32_C(0x8)
28210         /*
28211          * When this flag is set to '1', the VNIC is configured to
28212          * receive only RoCE traffic.
28213          * When this flag is set to '0', the VNIC is not configured
28214          * to receive only RoCE traffic.
28215          * If roce_dual_vnic_mode flag and this flag both are set
28216          * to '1', then it is an invalid configuration of the
28217          * VNIC. The HWRM should not allow that type of
28218          * mis-configuration by HWRM clients.
28219          */
28220         #define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_ONLY_VNIC_MODE \
28221                 UINT32_C(0x10)
28222         /*
28223          * When a VNIC uses one destination ring group for certain
28224          * application (e.g. Receive Flow Steering) where
28225          * exact match is used to direct packets to a VNIC with one
28226          * destination ring group only, there is no need to configure
28227          * RSS indirection table for that VNIC as only one destination
28228          * ring group is used.
28229          *
28230          * When this bit is set to '1', then the VNIC is enabled in a
28231          * mode where RSS is enabled in the VNIC using a RSS context
28232          * for computing RSS hash but the RSS indirection table is
28233          * not configured.
28234          */
28235         #define HWRM_VNIC_QCFG_OUTPUT_FLAGS_RSS_DFLT_CR_MODE \
28236                 UINT32_C(0x20)
28237         /*
28238          * When this bit is '1', the VNIC is configured to
28239          * receive both RoCE and non-RoCE traffic, but forward only
28240          * RoCE traffic further. Also RoCE traffic can be mirrored to
28241          * L2 driver.
28242          */
28243         #define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_MODE \
28244                 UINT32_C(0x40)
28245         /*
28246          * When returned with a valid CoS Queue id, the CoS Queue/VNIC association
28247          * is valid.  Otherwise it will return 0xFFFF to indicate no VNIC/CoS
28248          * queue association.
28249          */
28250         uint16_t        queue_id;
28251         /*
28252          * If the device supports the RX V2 and RX TPA start V2 completion
28253          * records as indicated by the HWRM_VNIC_QCAPS command, this field is
28254          * used to specify the current RX checksum mode configured for all the
28255          * RX rings of a VNIC.
28256          */
28257         uint8_t rx_csum_v2_mode;
28258         /*
28259          * This value indicates that the VNIC is configured to use the
28260          * default RX checksum mode for all the rings associated with this
28261          * VNIC.
28262          */
28263         #define HWRM_VNIC_QCFG_OUTPUT_RX_CSUM_V2_MODE_DEFAULT UINT32_C(0x0)
28264         /*
28265          * This value indicates that the VNIC is configured to use the RX
28266          * checksum ‘all_ok’ mode for all the rings associated with this
28267          * VNIC.
28268          */
28269         #define HWRM_VNIC_QCFG_OUTPUT_RX_CSUM_V2_MODE_ALL_OK  UINT32_C(0x1)
28270         /*
28271          * Any rx_csum_v2_mode value larger than or equal to this is not
28272          * valid
28273          */
28274         #define HWRM_VNIC_QCFG_OUTPUT_RX_CSUM_V2_MODE_MAX     UINT32_C(0x2)
28275         #define HWRM_VNIC_QCFG_OUTPUT_RX_CSUM_V2_MODE_LAST \
28276                 HWRM_VNIC_QCFG_OUTPUT_RX_CSUM_V2_MODE_MAX
28277         uint8_t unused_1[4];
28278         /*
28279          * This field is used in Output records to indicate that the output
28280          * is completely written to RAM.  This field should be read as '1'
28281          * to indicate that the output has been completely written.
28282          * When writing a command completion or response to an internal processor,
28283          * the order of writes has to be such that this field is written last.
28284          */
28285         uint8_t valid;
28286 } __rte_packed;
28287
28288 /*******************
28289  * hwrm_vnic_qcaps *
28290  *******************/
28291
28292
28293 /* hwrm_vnic_qcaps_input (size:192b/24B) */
28294 struct hwrm_vnic_qcaps_input {
28295         /* The HWRM command request type. */
28296         uint16_t        req_type;
28297         /*
28298          * The completion ring to send the completion event on. This should
28299          * be the NQ ID returned from the `nq_alloc` HWRM command.
28300          */
28301         uint16_t        cmpl_ring;
28302         /*
28303          * The sequence ID is used by the driver for tracking multiple
28304          * commands. This ID is treated as opaque data by the firmware and
28305          * the value is returned in the `hwrm_resp_hdr` upon completion.
28306          */
28307         uint16_t        seq_id;
28308         /*
28309          * The target ID of the command:
28310          * * 0x0-0xFFF8 - The function ID
28311          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
28312          * * 0xFFFD - Reserved for user-space HWRM interface
28313          * * 0xFFFF - HWRM
28314          */
28315         uint16_t        target_id;
28316         /*
28317          * A physical address pointer pointing to a host buffer that the
28318          * command's response data will be written. This can be either a host
28319          * physical address (HPA) or a guest physical address (GPA) and must
28320          * point to a physically contiguous block of memory.
28321          */
28322         uint64_t        resp_addr;
28323         uint32_t        enables;
28324         uint8_t unused_0[4];
28325 } __rte_packed;
28326
28327 /* hwrm_vnic_qcaps_output (size:192b/24B) */
28328 struct hwrm_vnic_qcaps_output {
28329         /* The specific error status for the command. */
28330         uint16_t        error_code;
28331         /* The HWRM command request type. */
28332         uint16_t        req_type;
28333         /* The sequence ID from the original command. */
28334         uint16_t        seq_id;
28335         /* The length of the response data in number of bytes. */
28336         uint16_t        resp_len;
28337         /* The maximum receive unit that is settable on a vnic. */
28338         uint16_t        mru;
28339         uint8_t unused_0[2];
28340         uint32_t        flags;
28341         /* Unused. */
28342         #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_UNUSED \
28343                 UINT32_C(0x1)
28344         /*
28345          * When this bit is '1', the capability of stripping VLAN in
28346          * the RX path is supported on VNIC(s).
28347          * If set to '0', then VLAN stripping capability is
28348          * not supported on VNIC(s).
28349          */
28350         #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_VLAN_STRIP_CAP \
28351                 UINT32_C(0x2)
28352         /*
28353          * When this bit is '1', the capability to buffer receive
28354          * packets in the hardware until the host posts new receive buffers
28355          * is supported on VNIC(s).
28356          * If set to '0', then bd_stall capability is not supported
28357          * on VNIC(s).
28358          */
28359         #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_BD_STALL_CAP \
28360                 UINT32_C(0x4)
28361         /*
28362          * When this bit is '1', the capability to
28363          * receive both RoCE and non-RoCE traffic on VNIC(s) is
28364          * supported.
28365          * If set to '0', then the capability to receive
28366          * both RoCE and non-RoCE traffic on VNIC(s) is
28367          * not supported.
28368          */
28369         #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_DUAL_VNIC_CAP \
28370                 UINT32_C(0x8)
28371         /*
28372          * When this bit is set to '1', the capability to configure
28373          * a VNIC to receive only RoCE traffic is supported.
28374          * When this flag is set to '0', the VNIC capability to
28375          * configure to receive only RoCE traffic is not supported.
28376          */
28377         #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_ONLY_VNIC_CAP \
28378                 UINT32_C(0x10)
28379         /*
28380          * When this bit is set to '1', then the capability to enable
28381          * a VNIC in a mode where RSS context without configuring
28382          * RSS indirection table is supported (for RSS hash computation).
28383          * When this bit is set to '0', then a VNIC can not be configured
28384          * with a mode to enable RSS context without configuring RSS
28385          * indirection table.
28386          */
28387         #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_RSS_DFLT_CR_CAP \
28388                 UINT32_C(0x20)
28389         /*
28390          * When this bit is '1', the capability to
28391          * mirror the the RoCE traffic is supported.
28392          * If set to '0', then the capability to mirror the
28393          * RoCE traffic is not supported.
28394          */
28395         #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_CAP \
28396                 UINT32_C(0x40)
28397         /*
28398          * When this bit is '1', the outermost RSS hashing capability
28399          * is supported. If set to '0', then the outermost RSS hashing
28400          * capability is not supported.
28401          */
28402         #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_OUTERMOST_RSS_CAP \
28403                 UINT32_C(0x80)
28404         /*
28405          * When this bit is '1', it indicates that firmware supports the
28406          * ability to steer incoming packets from one CoS queue to one
28407          * VNIC.  This optional feature can then be enabled
28408          * using HWRM_VNIC_CFG on any VNIC.  This feature is only
28409          * available when NVM option “enable_cos_classfication” is set
28410          * to 1.  If set to '0', firmware does not support this feature.
28411          */
28412         #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_COS_ASSIGNMENT_CAP \
28413                 UINT32_C(0x100)
28414         /*
28415          * When this bit is '1', it indicates that HW and firmware supports
28416          * the use of RX V2 and RX TPA start V2 completion records for all
28417          * the RX rings of a VNIC. Once set, this feature is mandatory to
28418          * be used for the RX rings of the VNIC. Additionally, two new RX
28419          * checksum features supported by these ompletion records can be
28420          * configured using the HWRM_VNIC_CFG on a VNIC. If set to '0', the
28421          * HW and the firmware does not support this feature.
28422          */
28423         #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_RX_CMPL_V2_CAP \
28424                 UINT32_C(0x200)
28425         /*
28426          * This field advertises the maximum concurrent TPA aggregations
28427          * supported by the VNIC on new devices that support TPA v2.
28428          * '0' means that TPA v2 is not supported.
28429          */
28430         uint16_t        max_aggs_supported;
28431         uint8_t unused_1[5];
28432         /*
28433          * This field is used in Output records to indicate that the output
28434          * is completely written to RAM.  This field should be read as '1'
28435          * to indicate that the output has been completely written.
28436          * When writing a command completion or response to an internal processor,
28437          * the order of writes has to be such that this field is written last.
28438          */
28439         uint8_t valid;
28440 } __rte_packed;
28441
28442 /*********************
28443  * hwrm_vnic_tpa_cfg *
28444  *********************/
28445
28446
28447 /* hwrm_vnic_tpa_cfg_input (size:320b/40B) */
28448 struct hwrm_vnic_tpa_cfg_input {
28449         /* The HWRM command request type. */
28450         uint16_t        req_type;
28451         /*
28452          * The completion ring to send the completion event on. This should
28453          * be the NQ ID returned from the `nq_alloc` HWRM command.
28454          */
28455         uint16_t        cmpl_ring;
28456         /*
28457          * The sequence ID is used by the driver for tracking multiple
28458          * commands. This ID is treated as opaque data by the firmware and
28459          * the value is returned in the `hwrm_resp_hdr` upon completion.
28460          */
28461         uint16_t        seq_id;
28462         /*
28463          * The target ID of the command:
28464          * * 0x0-0xFFF8 - The function ID
28465          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
28466          * * 0xFFFD - Reserved for user-space HWRM interface
28467          * * 0xFFFF - HWRM
28468          */
28469         uint16_t        target_id;
28470         /*
28471          * A physical address pointer pointing to a host buffer that the
28472          * command's response data will be written. This can be either a host
28473          * physical address (HPA) or a guest physical address (GPA) and must
28474          * point to a physically contiguous block of memory.
28475          */
28476         uint64_t        resp_addr;
28477         uint32_t        flags;
28478         /*
28479          * When this bit is '1', the VNIC shall be configured to
28480          * perform transparent packet aggregation (TPA) of
28481          * non-tunneled TCP packets.
28482          */
28483         #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_TPA \
28484                 UINT32_C(0x1)
28485         /*
28486          * When this bit is '1', the VNIC shall be configured to
28487          * perform transparent packet aggregation (TPA) of
28488          * tunneled TCP packets.
28489          */
28490         #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_ENCAP_TPA \
28491                 UINT32_C(0x2)
28492         /*
28493          * When this bit is '1', the VNIC shall be configured to
28494          * perform transparent packet aggregation (TPA) according
28495          * to Windows Receive Segment Coalescing (RSC) rules.
28496          */
28497         #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_RSC_WND_UPDATE \
28498                 UINT32_C(0x4)
28499         /*
28500          * When this bit is '1', the VNIC shall be configured to
28501          * perform transparent packet aggregation (TPA) according
28502          * to Linux Generic Receive Offload (GRO) rules.
28503          */
28504         #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO \
28505                 UINT32_C(0x8)
28506         /*
28507          * When this bit is '1', the VNIC shall be configured to
28508          * perform transparent packet aggregation (TPA) for TCP
28509          * packets with IP ECN set to non-zero.
28510          */
28511         #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_WITH_ECN \
28512                 UINT32_C(0x10)
28513         /*
28514          * When this bit is '1', the VNIC shall be configured to
28515          * perform transparent packet aggregation (TPA) for
28516          * GRE tunneled TCP packets only if all packets have the
28517          * same GRE sequence.
28518          */
28519         #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_WITH_SAME_GRE_SEQ \
28520                 UINT32_C(0x20)
28521         /*
28522          * When this bit is '1' and the GRO mode is enabled,
28523          * the VNIC shall be configured to
28524          * perform transparent packet aggregation (TPA) for
28525          * TCP/IPv4 packets with consecutively increasing IPIDs.
28526          * In other words, the last packet that is being
28527          * aggregated to an already existing aggregation context
28528          * shall have IPID 1 more than the IPID of the last packet
28529          * that was aggregated in that aggregation context.
28530          */
28531         #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO_IPID_CHECK \
28532                 UINT32_C(0x40)
28533         /*
28534          * When this bit is '1' and the GRO mode is enabled,
28535          * the VNIC shall be configured to
28536          * perform transparent packet aggregation (TPA) for
28537          * TCP packets with the same TTL (IPv4) or Hop limit (IPv6)
28538          * value.
28539          */
28540         #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO_TTL_CHECK \
28541                 UINT32_C(0x80)
28542         /*
28543          * When this bit is '1' and the GRO mode is enabled,
28544          * the VNIC shall DMA payload data using GRO rules.
28545          * When this bit is '0', the VNIC shall DMA payload data
28546          * using the more efficient LRO rules of filling all
28547          * aggregation buffers.
28548          */
28549         #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_PACK_AS_GRO \
28550                 UINT32_C(0x100)
28551         uint32_t        enables;
28552         /*
28553          * This bit must be '1' for the max_agg_segs field to be
28554          * configured.
28555          */
28556         #define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGG_SEGS      UINT32_C(0x1)
28557         /*
28558          * This bit must be '1' for the max_aggs field to be
28559          * configured.
28560          */
28561         #define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGGS          UINT32_C(0x2)
28562         /*
28563          * This bit must be '1' for the max_agg_timer field to be
28564          * configured.
28565          */
28566         #define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGG_TIMER     UINT32_C(0x4)
28567         /* deprecated bit.  Do not use!!! */
28568         #define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MIN_AGG_LEN       UINT32_C(0x8)
28569         /* Logical vnic ID */
28570         uint16_t        vnic_id;
28571         /*
28572          * This is the maximum number of TCP segments that can
28573          * be aggregated (unit is Log2). Max value is 31. On new
28574          * devices supporting TPA v2, the unit is multiples of 4 and
28575          * valid values are > 0 and <= 63.
28576          */
28577         uint16_t        max_agg_segs;
28578         /* 1 segment */
28579         #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_1   UINT32_C(0x0)
28580         /* 2 segments */
28581         #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_2   UINT32_C(0x1)
28582         /* 4 segments */
28583         #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_4   UINT32_C(0x2)
28584         /* 8 segments */
28585         #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_8   UINT32_C(0x3)
28586         /* Any segment size larger than this is not valid */
28587         #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_MAX UINT32_C(0x1f)
28588         #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_LAST \
28589                 HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_MAX
28590         /*
28591          * This is the maximum number of aggregations this VNIC is
28592          * allowed (unit is Log2). Max value is 7. On new devices
28593          * supporting TPA v2, this is in unit of 1 and must be > 0
28594          * and <= max_aggs_supported in the hwrm_vnic_qcaps response
28595          * to enable TPA v2.
28596          */
28597         uint16_t        max_aggs;
28598         /* 1 aggregation */
28599         #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_1   UINT32_C(0x0)
28600         /* 2 aggregations */
28601         #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_2   UINT32_C(0x1)
28602         /* 4 aggregations */
28603         #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_4   UINT32_C(0x2)
28604         /* 8 aggregations */
28605         #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_8   UINT32_C(0x3)
28606         /* 16 aggregations */
28607         #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_16  UINT32_C(0x4)
28608         /* Any aggregation size larger than this is not valid */
28609         #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_MAX UINT32_C(0x7)
28610         #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_LAST \
28611                 HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_MAX
28612         uint8_t unused_0[2];
28613         /*
28614          * This is the maximum amount of time allowed for
28615          * an aggregation context to complete after it was initiated.
28616          */
28617         uint32_t        max_agg_timer;
28618         /*
28619          * This is the minimum amount of payload length required to
28620          * start an aggregation context. This field is deprecated and
28621          * should be set to 0.  The minimum length is set by firmware
28622          * and can be queried using hwrm_vnic_tpa_qcfg.
28623          */
28624         uint32_t        min_agg_len;
28625 } __rte_packed;
28626
28627 /* hwrm_vnic_tpa_cfg_output (size:128b/16B) */
28628 struct hwrm_vnic_tpa_cfg_output {
28629         /* The specific error status for the command. */
28630         uint16_t        error_code;
28631         /* The HWRM command request type. */
28632         uint16_t        req_type;
28633         /* The sequence ID from the original command. */
28634         uint16_t        seq_id;
28635         /* The length of the response data in number of bytes. */
28636         uint16_t        resp_len;
28637         uint8_t unused_0[7];
28638         /*
28639          * This field is used in Output records to indicate that the output
28640          * is completely written to RAM.  This field should be read as '1'
28641          * to indicate that the output has been completely written.
28642          * When writing a command completion or response to an internal processor,
28643          * the order of writes has to be such that this field is written last.
28644          */
28645         uint8_t valid;
28646 } __rte_packed;
28647
28648 /*********************
28649  * hwrm_vnic_rss_cfg *
28650  *********************/
28651
28652
28653 /* hwrm_vnic_rss_cfg_input (size:384b/48B) */
28654 struct hwrm_vnic_rss_cfg_input {
28655         /* The HWRM command request type. */
28656         uint16_t        req_type;
28657         /*
28658          * The completion ring to send the completion event on. This should
28659          * be the NQ ID returned from the `nq_alloc` HWRM command.
28660          */
28661         uint16_t        cmpl_ring;
28662         /*
28663          * The sequence ID is used by the driver for tracking multiple
28664          * commands. This ID is treated as opaque data by the firmware and
28665          * the value is returned in the `hwrm_resp_hdr` upon completion.
28666          */
28667         uint16_t        seq_id;
28668         /*
28669          * The target ID of the command:
28670          * * 0x0-0xFFF8 - The function ID
28671          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
28672          * * 0xFFFD - Reserved for user-space HWRM interface
28673          * * 0xFFFF - HWRM
28674          */
28675         uint16_t        target_id;
28676         /*
28677          * A physical address pointer pointing to a host buffer that the
28678          * command's response data will be written. This can be either a host
28679          * physical address (HPA) or a guest physical address (GPA) and must
28680          * point to a physically contiguous block of memory.
28681          */
28682         uint64_t        resp_addr;
28683         uint32_t        hash_type;
28684         /*
28685          * When this bit is '1', the RSS hash shall be computed
28686          * over source and destination IPv4 addresses of IPv4
28687          * packets.
28688          */
28689         #define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_IPV4         UINT32_C(0x1)
28690         /*
28691          * When this bit is '1', the RSS hash shall be computed
28692          * over source/destination IPv4 addresses and
28693          * source/destination ports of TCP/IPv4 packets.
28694          */
28695         #define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_TCP_IPV4     UINT32_C(0x2)
28696         /*
28697          * When this bit is '1', the RSS hash shall be computed
28698          * over source/destination IPv4 addresses and
28699          * source/destination ports of UDP/IPv4 packets.
28700          */
28701         #define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV4     UINT32_C(0x4)
28702         /*
28703          * When this bit is '1', the RSS hash shall be computed
28704          * over source and destination IPv4 addresses of IPv6
28705          * packets.
28706          */
28707         #define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_IPV6         UINT32_C(0x8)
28708         /*
28709          * When this bit is '1', the RSS hash shall be computed
28710          * over source/destination IPv6 addresses and
28711          * source/destination ports of TCP/IPv6 packets.
28712          */
28713         #define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_TCP_IPV6     UINT32_C(0x10)
28714         /*
28715          * When this bit is '1', the RSS hash shall be computed
28716          * over source/destination IPv6 addresses and
28717          * source/destination ports of UDP/IPv6 packets.
28718          */
28719         #define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV6     UINT32_C(0x20)
28720         /* VNIC ID of VNIC associated with RSS table being configured. */
28721         uint16_t        vnic_id;
28722         /*
28723          * Specifies which VNIC ring table pair to configure.
28724          * Valid values range from 0 to 7.
28725          */
28726         uint8_t ring_table_pair_index;
28727         /* Flags to specify different RSS hash modes. */
28728         uint8_t hash_mode_flags;
28729         /*
28730          * When this bit is '1', it indicates using current RSS
28731          * hash mode setting configured in the device.
28732          */
28733         #define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_DEFAULT \
28734                 UINT32_C(0x1)
28735         /*
28736          * When this bit is '1', it indicates requesting support of
28737          * RSS hashing over innermost 4 tuples {l3.src, l3.dest,
28738          * l4.src, l4.dest} for tunnel packets. For none-tunnel
28739          * packets, the RSS hash is computed over the normal
28740          * src/dest l3 and src/dest l4 headers.
28741          */
28742         #define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_INNERMOST_4 \
28743                 UINT32_C(0x2)
28744         /*
28745          * When this bit is '1', it indicates requesting support of
28746          * RSS hashing over innermost 2 tuples {l3.src, l3.dest} for
28747          * tunnel packets. For none-tunnel packets, the RSS hash is
28748          * computed over the normal src/dest l3 headers.
28749          */
28750         #define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_INNERMOST_2 \
28751                 UINT32_C(0x4)
28752         /*
28753          * When this bit is '1', it indicates requesting support of
28754          * RSS hashing over outermost 4 tuples {t_l3.src, t_l3.dest,
28755          * t_l4.src, t_l4.dest} for tunnel packets. For none-tunnel
28756          * packets, the RSS hash is computed over the normal
28757          * src/dest l3 and src/dest l4 headers.
28758          */
28759         #define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_OUTERMOST_4 \
28760                 UINT32_C(0x8)
28761         /*
28762          * When this bit is '1', it indicates requesting support of
28763          * RSS hashing over outermost 2 tuples {t_l3.src, t_l3.dest} for
28764          * tunnel packets. For none-tunnel packets, the RSS hash is
28765          * computed over the normal src/dest l3 headers.
28766          */
28767         #define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_OUTERMOST_2 \
28768                 UINT32_C(0x10)
28769         /* This is the address for rss ring group table */
28770         uint64_t        ring_grp_tbl_addr;
28771         /* This is the address for rss hash key table */
28772         uint64_t        hash_key_tbl_addr;
28773         /* Index to the rss indirection table. */
28774         uint16_t        rss_ctx_idx;
28775         uint8_t unused_1[6];
28776 } __rte_packed;
28777
28778 /* hwrm_vnic_rss_cfg_output (size:128b/16B) */
28779 struct hwrm_vnic_rss_cfg_output {
28780         /* The specific error status for the command. */
28781         uint16_t        error_code;
28782         /* The HWRM command request type. */
28783         uint16_t        req_type;
28784         /* The sequence ID from the original command. */
28785         uint16_t        seq_id;
28786         /* The length of the response data in number of bytes. */
28787         uint16_t        resp_len;
28788         uint8_t unused_0[7];
28789         /*
28790          * This field is used in Output records to indicate that the output
28791          * is completely written to RAM.  This field should be read as '1'
28792          * to indicate that the output has been completely written.
28793          * When writing a command completion or response to an internal processor,
28794          * the order of writes has to be such that this field is written last.
28795          */
28796         uint8_t valid;
28797 } __rte_packed;
28798
28799 /* hwrm_vnic_rss_cfg_cmd_err (size:64b/8B) */
28800 struct hwrm_vnic_rss_cfg_cmd_err {
28801         /*
28802          * command specific error codes that goes to
28803          * the cmd_err field in Common HWRM Error Response.
28804          */
28805         uint8_t code;
28806         /* Unknown error */
28807         #define HWRM_VNIC_RSS_CFG_CMD_ERR_CODE_UNKNOWN \
28808                 UINT32_C(0x0)
28809         /*
28810          * Unable to change global RSS mode to outer due to all active
28811          * interfaces are not ready to support outer RSS hashing.
28812          */
28813         #define HWRM_VNIC_RSS_CFG_CMD_ERR_CODE_INTERFACE_NOT_READY \
28814                 UINT32_C(0x1)
28815         #define HWRM_VNIC_RSS_CFG_CMD_ERR_CODE_LAST \
28816                 HWRM_VNIC_RSS_CFG_CMD_ERR_CODE_INTERFACE_NOT_READY
28817         uint8_t unused_0[7];
28818 } __rte_packed;
28819
28820 /**********************
28821  * hwrm_vnic_rss_qcfg *
28822  **********************/
28823
28824
28825 /* hwrm_vnic_rss_qcfg_input (size:192b/24B) */
28826 struct hwrm_vnic_rss_qcfg_input {
28827         /* The HWRM command request type. */
28828         uint16_t        req_type;
28829         /*
28830          * The completion ring to send the completion event on. This should
28831          * be the NQ ID returned from the `nq_alloc` HWRM command.
28832          */
28833         uint16_t        cmpl_ring;
28834         /*
28835          * The sequence ID is used by the driver for tracking multiple
28836          * commands. This ID is treated as opaque data by the firmware and
28837          * the value is returned in the `hwrm_resp_hdr` upon completion.
28838          */
28839         uint16_t        seq_id;
28840         /*
28841          * The target ID of the command:
28842          * * 0x0-0xFFF8 - The function ID
28843          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
28844          * * 0xFFFD - Reserved for user-space HWRM interface
28845          * * 0xFFFF - HWRM
28846          */
28847         uint16_t        target_id;
28848         /*
28849          * A physical address pointer pointing to a host buffer that the
28850          * command's response data will be written. This can be either a host
28851          * physical address (HPA) or a guest physical address (GPA) and must
28852          * point to a physically contiguous block of memory.
28853          */
28854         uint64_t        resp_addr;
28855         /* Index to the rss indirection table. */
28856         uint16_t        rss_ctx_idx;
28857         uint8_t unused_0[6];
28858 } __rte_packed;
28859
28860 /* hwrm_vnic_rss_qcfg_output (size:512b/64B) */
28861 struct hwrm_vnic_rss_qcfg_output {
28862         /* The specific error status for the command. */
28863         uint16_t        error_code;
28864         /* The HWRM command request type. */
28865         uint16_t        req_type;
28866         /* The sequence ID from the original command. */
28867         uint16_t        seq_id;
28868         /* The length of the response data in number of bytes. */
28869         uint16_t        resp_len;
28870         uint32_t        hash_type;
28871         /*
28872          * When this bit is '1', the RSS hash shall be computed
28873          * over source and destination IPv4 addresses of IPv4
28874          * packets.
28875          */
28876         #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_IPV4         UINT32_C(0x1)
28877         /*
28878          * When this bit is '1', the RSS hash shall be computed
28879          * over source/destination IPv4 addresses and
28880          * source/destination ports of TCP/IPv4 packets.
28881          */
28882         #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_TCP_IPV4     UINT32_C(0x2)
28883         /*
28884          * When this bit is '1', the RSS hash shall be computed
28885          * over source/destination IPv4 addresses and
28886          * source/destination ports of UDP/IPv4 packets.
28887          */
28888         #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_UDP_IPV4     UINT32_C(0x4)
28889         /*
28890          * When this bit is '1', the RSS hash shall be computed
28891          * over source and destination IPv4 addresses of IPv6
28892          * packets.
28893          */
28894         #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_IPV6         UINT32_C(0x8)
28895         /*
28896          * When this bit is '1', the RSS hash shall be computed
28897          * over source/destination IPv6 addresses and
28898          * source/destination ports of TCP/IPv6 packets.
28899          */
28900         #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_TCP_IPV6     UINT32_C(0x10)
28901         /*
28902          * When this bit is '1', the RSS hash shall be computed
28903          * over source/destination IPv6 addresses and
28904          * source/destination ports of UDP/IPv6 packets.
28905          */
28906         #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_UDP_IPV6     UINT32_C(0x20)
28907         uint8_t unused_0[4];
28908         /* This is the value of rss hash key */
28909         uint32_t        hash_key[10];
28910         /* Flags to specify different RSS hash modes. */
28911         uint8_t hash_mode_flags;
28912         /*
28913          * When this bit is '1', it indicates using current RSS
28914          * hash mode setting configured in the device.
28915          */
28916         #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_DEFAULT \
28917                 UINT32_C(0x1)
28918         /*
28919          * When this bit is '1', it indicates requesting support of
28920          * RSS hashing over innermost 4 tuples {l3.src, l3.dest,
28921          * l4.src, l4.dest} for tunnel packets. For none-tunnel
28922          * packets, the RSS hash is computed over the normal
28923          * src/dest l3 and src/dest l4 headers.
28924          */
28925         #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_INNERMOST_4 \
28926                 UINT32_C(0x2)
28927         /*
28928          * When this bit is '1', it indicates requesting support of
28929          * RSS hashing over innermost 2 tuples {l3.src, l3.dest} for
28930          * tunnel packets. For none-tunnel packets, the RSS hash is
28931          * computed over the normal src/dest l3 headers.
28932          */
28933         #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_INNERMOST_2 \
28934                 UINT32_C(0x4)
28935         /*
28936          * When this bit is '1', it indicates requesting support of
28937          * RSS hashing over outermost 4 tuples {t_l3.src, t_l3.dest,
28938          * t_l4.src, t_l4.dest} for tunnel packets. For none-tunnel
28939          * packets, the RSS hash is computed over the normal
28940          * src/dest l3 and src/dest l4 headers.
28941          */
28942         #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_OUTERMOST_4 \
28943                 UINT32_C(0x8)
28944         /*
28945          * When this bit is '1', it indicates requesting support of
28946          * RSS hashing over outermost 2 tuples {t_l3.src, t_l3.dest} for
28947          * tunnel packets. For none-tunnel packets, the RSS hash is
28948          * computed over the normal src/dest l3 headers.
28949          */
28950         #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_OUTERMOST_2 \
28951                 UINT32_C(0x10)
28952         uint8_t unused_1[6];
28953         /*
28954          * This field is used in Output records to indicate that the output
28955          * is completely written to RAM.  This field should be read as '1'
28956          * to indicate that the output has been completely written.
28957          * When writing a command completion or response to an internal processor,
28958          * the order of writes has to be such that this field is written last.
28959          */
28960         uint8_t valid;
28961 } __rte_packed;
28962
28963 /**************************
28964  * hwrm_vnic_plcmodes_cfg *
28965  **************************/
28966
28967
28968 /* hwrm_vnic_plcmodes_cfg_input (size:320b/40B) */
28969 struct hwrm_vnic_plcmodes_cfg_input {
28970         /* The HWRM command request type. */
28971         uint16_t        req_type;
28972         /*
28973          * The completion ring to send the completion event on. This should
28974          * be the NQ ID returned from the `nq_alloc` HWRM command.
28975          */
28976         uint16_t        cmpl_ring;
28977         /*
28978          * The sequence ID is used by the driver for tracking multiple
28979          * commands. This ID is treated as opaque data by the firmware and
28980          * the value is returned in the `hwrm_resp_hdr` upon completion.
28981          */
28982         uint16_t        seq_id;
28983         /*
28984          * The target ID of the command:
28985          * * 0x0-0xFFF8 - The function ID
28986          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
28987          * * 0xFFFD - Reserved for user-space HWRM interface
28988          * * 0xFFFF - HWRM
28989          */
28990         uint16_t        target_id;
28991         /*
28992          * A physical address pointer pointing to a host buffer that the
28993          * command's response data will be written. This can be either a host
28994          * physical address (HPA) or a guest physical address (GPA) and must
28995          * point to a physically contiguous block of memory.
28996          */
28997         uint64_t        resp_addr;
28998         uint32_t        flags;
28999         /*
29000          * When this bit is '1', the VNIC shall be configured to
29001          * use regular placement algorithm.
29002          * By default, the regular placement algorithm shall be
29003          * enabled on the VNIC.
29004          */
29005         #define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_REGULAR_PLACEMENT \
29006                 UINT32_C(0x1)
29007         /*
29008          * When this bit is '1', the VNIC shall be configured
29009          * use the jumbo placement algorithm.
29010          */
29011         #define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_JUMBO_PLACEMENT \
29012                 UINT32_C(0x2)
29013         /*
29014          * When this bit is '1', the VNIC shall be configured
29015          * to enable Header-Data split for IPv4 packets according
29016          * to the following rules:
29017          * # If the packet is identified as TCP/IPv4, then the
29018          * packet is split at the beginning of the TCP payload.
29019          * # If the packet is identified as UDP/IPv4, then the
29020          * packet is split at the beginning of UDP payload.
29021          * # If the packet is identified as non-TCP and non-UDP
29022          * IPv4 packet, then the packet is split at the beginning
29023          * of the upper layer protocol header carried in the IPv4
29024          * packet.
29025          */
29026         #define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_IPV4 \
29027                 UINT32_C(0x4)
29028         /*
29029          * When this bit is '1', the VNIC shall be configured
29030          * to enable Header-Data split for IPv6 packets according
29031          * to the following rules:
29032          * # If the packet is identified as TCP/IPv6, then the
29033          * packet is split at the beginning of the TCP payload.
29034          * # If the packet is identified as UDP/IPv6, then the
29035          * packet is split at the beginning of UDP payload.
29036          * # If the packet is identified as non-TCP and non-UDP
29037          * IPv6 packet, then the packet is split at the beginning
29038          * of the upper layer protocol header carried in the IPv6
29039          * packet.
29040          */
29041         #define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_IPV6 \
29042                 UINT32_C(0x8)
29043         /*
29044          * When this bit is '1', the VNIC shall be configured
29045          * to enable Header-Data split for FCoE packets at the
29046          * beginning of FC payload.
29047          */
29048         #define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_FCOE \
29049                 UINT32_C(0x10)
29050         /*
29051          * When this bit is '1', the VNIC shall be configured
29052          * to enable Header-Data split for RoCE packets at the
29053          * beginning of RoCE payload (after BTH/GRH headers).
29054          */
29055         #define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_ROCE \
29056                 UINT32_C(0x20)
29057         /*
29058          * When this bit is '1', the VNIC shall be configured use the virtio
29059          * placement algorithm. This feature can only be configured when
29060          * proxy mode is supported on the function.
29061          */
29062         #define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_VIRTIO_PLACEMENT \
29063                 UINT32_C(0x40)
29064         uint32_t        enables;
29065         /*
29066          * This bit must be '1' for the jumbo_thresh_valid field to be
29067          * configured.
29068          */
29069         #define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_JUMBO_THRESH_VALID \
29070                 UINT32_C(0x1)
29071         /*
29072          * This bit must be '1' for the hds_offset_valid field to be
29073          * configured.
29074          */
29075         #define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_HDS_OFFSET_VALID \
29076                 UINT32_C(0x2)
29077         /*
29078          * This bit must be '1' for the hds_threshold_valid field to be
29079          * configured.
29080          */
29081         #define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_HDS_THRESHOLD_VALID \
29082                 UINT32_C(0x4)
29083         /*
29084          * This bit must be '1' for the max_bds_valid field to be
29085          * configured.
29086          */
29087         #define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_MAX_BDS_VALID \
29088                 UINT32_C(0x8)
29089         /* Logical vnic ID */
29090         uint32_t        vnic_id;
29091         /*
29092          * When jumbo placement algorithm is enabled, this value
29093          * is used to determine the threshold for jumbo placement.
29094          * Packets with length larger than this value will be
29095          * placed according to the jumbo placement algorithm.
29096          */
29097         uint16_t        jumbo_thresh;
29098         /*
29099          * This value is used to determine the offset into
29100          * packet buffer where the split data (payload) will be
29101          * placed according to one of HDS placement algorithm.
29102          *
29103          * The lengths of packet buffers provided for split data
29104          * shall be larger than this value.
29105          */
29106         uint16_t        hds_offset;
29107         /*
29108          * When one of the HDS placement algorithm is enabled, this
29109          * value is used to determine the threshold for HDS
29110          * placement.
29111          * Packets with length larger than this value will be
29112          * placed according to the HDS placement algorithm.
29113          * This value shall be in multiple of 4 bytes.
29114          */
29115         uint16_t        hds_threshold;
29116         /*
29117          * When virtio placement algorithm is enabled, this
29118          * value is used to determine the the maximum number of BDs
29119          * that can be used to place an Rx Packet.
29120          * If an incoming packet does not fit in the buffers described
29121          * by the max BDs, the packet will be dropped and an error
29122          * will be reported in the completion. Valid values for this
29123          * field are between 1 and 8. If the VNIC uses header-data-
29124          * separation and/or TPA with buffer spanning enabled, valid
29125          * values for this field are between 2 and 8.
29126          * This feature can only be configured when proxy mode is
29127          * supported on the function.
29128          */
29129         uint16_t        max_bds;
29130         uint8_t unused_0[4];
29131 } __rte_packed;
29132
29133 /* hwrm_vnic_plcmodes_cfg_output (size:128b/16B) */
29134 struct hwrm_vnic_plcmodes_cfg_output {
29135         /* The specific error status for the command. */
29136         uint16_t        error_code;
29137         /* The HWRM command request type. */
29138         uint16_t        req_type;
29139         /* The sequence ID from the original command. */
29140         uint16_t        seq_id;
29141         /* The length of the response data in number of bytes. */
29142         uint16_t        resp_len;
29143         uint8_t unused_0[7];
29144         /*
29145          * This field is used in Output records to indicate that the output
29146          * is completely written to RAM.  This field should be read as '1'
29147          * to indicate that the output has been completely written.
29148          * When writing a command completion or response to an internal
29149          * processor, the order of writes has to be such that this field is
29150          * written last.
29151          */
29152         uint8_t valid;
29153 } __rte_packed;
29154
29155 /***************************
29156  * hwrm_vnic_plcmodes_qcfg *
29157  ***************************/
29158
29159
29160 /* hwrm_vnic_plcmodes_qcfg_input (size:192b/24B) */
29161 struct hwrm_vnic_plcmodes_qcfg_input {
29162         /* The HWRM command request type. */
29163         uint16_t        req_type;
29164         /*
29165          * The completion ring to send the completion event on. This should
29166          * be the NQ ID returned from the `nq_alloc` HWRM command.
29167          */
29168         uint16_t        cmpl_ring;
29169         /*
29170          * The sequence ID is used by the driver for tracking multiple
29171          * commands. This ID is treated as opaque data by the firmware and
29172          * the value is returned in the `hwrm_resp_hdr` upon completion.
29173          */
29174         uint16_t        seq_id;
29175         /*
29176          * The target ID of the command:
29177          * * 0x0-0xFFF8 - The function ID
29178          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
29179          * * 0xFFFD - Reserved for user-space HWRM interface
29180          * * 0xFFFF - HWRM
29181          */
29182         uint16_t        target_id;
29183         /*
29184          * A physical address pointer pointing to a host buffer that the
29185          * command's response data will be written. This can be either a host
29186          * physical address (HPA) or a guest physical address (GPA) and must
29187          * point to a physically contiguous block of memory.
29188          */
29189         uint64_t        resp_addr;
29190         /* Logical vnic ID */
29191         uint32_t        vnic_id;
29192         uint8_t unused_0[4];
29193 } __rte_packed;
29194
29195 /* hwrm_vnic_plcmodes_qcfg_output (size:192b/24B) */
29196 struct hwrm_vnic_plcmodes_qcfg_output {
29197         /* The specific error status for the command. */
29198         uint16_t        error_code;
29199         /* The HWRM command request type. */
29200         uint16_t        req_type;
29201         /* The sequence ID from the original command. */
29202         uint16_t        seq_id;
29203         /* The length of the response data in number of bytes. */
29204         uint16_t        resp_len;
29205         uint32_t        flags;
29206         /*
29207          * When this bit is '1', the VNIC is configured to
29208          * use regular placement algorithm.
29209          */
29210         #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_REGULAR_PLACEMENT \
29211                 UINT32_C(0x1)
29212         /*
29213          * When this bit is '1', the VNIC is configured to
29214          * use the jumbo placement algorithm.
29215          */
29216         #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_JUMBO_PLACEMENT \
29217                 UINT32_C(0x2)
29218         /*
29219          * When this bit is '1', the VNIC is configured
29220          * to enable Header-Data split for IPv4 packets.
29221          */
29222         #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_IPV4 \
29223                 UINT32_C(0x4)
29224         /*
29225          * When this bit is '1', the VNIC is configured
29226          * to enable Header-Data split for IPv6 packets.
29227          */
29228         #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_IPV6 \
29229                 UINT32_C(0x8)
29230         /*
29231          * When this bit is '1', the VNIC is configured
29232          * to enable Header-Data split for FCoE packets.
29233          */
29234         #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_FCOE \
29235                 UINT32_C(0x10)
29236         /*
29237          * When this bit is '1', the VNIC is configured
29238          * to enable Header-Data split for RoCE packets.
29239          */
29240         #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_ROCE \
29241                 UINT32_C(0x20)
29242         /*
29243          * When this bit is '1', the VNIC is configured
29244          * to be the default VNIC of the requesting function.
29245          */
29246         #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_DFLT_VNIC \
29247                 UINT32_C(0x40)
29248         /*
29249          * When this bit is '1', the VNIC is configured to use the virtio
29250          * placement algorithm. This feature can only be configured when
29251          * proxy mode is supported on the function.
29252          */
29253         #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_VIRTIO_PLACEMENT \
29254                 UINT32_C(0x80)
29255         /*
29256          * When jumbo placement algorithm is enabled, this value
29257          * is used to determine the threshold for jumbo placement.
29258          * Packets with length larger than this value will be
29259          * placed according to the jumbo placement algorithm.
29260          */
29261         uint16_t        jumbo_thresh;
29262         /*
29263          * This value is used to determine the offset into
29264          * packet buffer where the split data (payload) will be
29265          * placed according to one of HDS placement algorithm.
29266          *
29267          * The lengths of packet buffers provided for split data
29268          * shall be larger than this value.
29269          */
29270         uint16_t        hds_offset;
29271         /*
29272          * When one of the HDS placement algorithm is enabled, this
29273          * value is used to determine the threshold for HDS
29274          * placement.
29275          * Packets with length larger than this value will be
29276          * placed according to the HDS placement algorithm.
29277          * This value shall be in multiple of 4 bytes.
29278          */
29279         uint16_t        hds_threshold;
29280         /*
29281          * When virtio placement algorithm is enabled, this
29282          * value is used to determine the the maximum number of BDs
29283          * that can be used to place an Rx Packet.
29284          * If an incoming packet does not fit in the buffers described
29285          * by the max BDs, the packet will be dropped and an error
29286          * will be reported in the completion. Valid values for this
29287          * field are between 1 and 8. If the VNIC uses header-data-
29288          * separation and/or TPA with buffer spanning enabled, valid
29289          * values for this field are between 2 and 8.
29290          * This feature can only be configured when proxy mode is supported
29291          * on the function
29292          */
29293         uint16_t        max_bds;
29294         uint8_t unused_0[3];
29295         /*
29296          * This field is used in Output records to indicate that the output
29297          * is completely written to RAM.  This field should be read as '1'
29298          * to indicate that the output has been completely written.
29299          * When writing a command completion or response to an internal
29300          * processor, the order of writes has to be such that this field is
29301          * written last.
29302          */
29303         uint8_t valid;
29304 } __rte_packed;
29305
29306 /**********************************
29307  * hwrm_vnic_rss_cos_lb_ctx_alloc *
29308  **********************************/
29309
29310
29311 /* hwrm_vnic_rss_cos_lb_ctx_alloc_input (size:128b/16B) */
29312 struct hwrm_vnic_rss_cos_lb_ctx_alloc_input {
29313         /* The HWRM command request type. */
29314         uint16_t        req_type;
29315         /*
29316          * The completion ring to send the completion event on. This should
29317          * be the NQ ID returned from the `nq_alloc` HWRM command.
29318          */
29319         uint16_t        cmpl_ring;
29320         /*
29321          * The sequence ID is used by the driver for tracking multiple
29322          * commands. This ID is treated as opaque data by the firmware and
29323          * the value is returned in the `hwrm_resp_hdr` upon completion.
29324          */
29325         uint16_t        seq_id;
29326         /*
29327          * The target ID of the command:
29328          * * 0x0-0xFFF8 - The function ID
29329          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
29330          * * 0xFFFD - Reserved for user-space HWRM interface
29331          * * 0xFFFF - HWRM
29332          */
29333         uint16_t        target_id;
29334         /*
29335          * A physical address pointer pointing to a host buffer that the
29336          * command's response data will be written. This can be either a host
29337          * physical address (HPA) or a guest physical address (GPA) and must
29338          * point to a physically contiguous block of memory.
29339          */
29340         uint64_t        resp_addr;
29341 } __rte_packed;
29342
29343 /* hwrm_vnic_rss_cos_lb_ctx_alloc_output (size:128b/16B) */
29344 struct hwrm_vnic_rss_cos_lb_ctx_alloc_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         /* rss_cos_lb_ctx_id is 16 b */
29354         uint16_t        rss_cos_lb_ctx_id;
29355         uint8_t unused_0[5];
29356         /*
29357          * This field is used in Output records to indicate that the output
29358          * is completely written to RAM.  This field should be read as '1'
29359          * to indicate that the output has been completely written.
29360          * When writing a command completion or response to an internal processor,
29361          * the order of writes has to be such that this field is written last.
29362          */
29363         uint8_t valid;
29364 } __rte_packed;
29365
29366 /*********************************
29367  * hwrm_vnic_rss_cos_lb_ctx_free *
29368  *********************************/
29369
29370
29371 /* hwrm_vnic_rss_cos_lb_ctx_free_input (size:192b/24B) */
29372 struct hwrm_vnic_rss_cos_lb_ctx_free_input {
29373         /* The HWRM command request type. */
29374         uint16_t        req_type;
29375         /*
29376          * The completion ring to send the completion event on. This should
29377          * be the NQ ID returned from the `nq_alloc` HWRM command.
29378          */
29379         uint16_t        cmpl_ring;
29380         /*
29381          * The sequence ID is used by the driver for tracking multiple
29382          * commands. This ID is treated as opaque data by the firmware and
29383          * the value is returned in the `hwrm_resp_hdr` upon completion.
29384          */
29385         uint16_t        seq_id;
29386         /*
29387          * The target ID of the command:
29388          * * 0x0-0xFFF8 - The function ID
29389          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
29390          * * 0xFFFD - Reserved for user-space HWRM interface
29391          * * 0xFFFF - HWRM
29392          */
29393         uint16_t        target_id;
29394         /*
29395          * A physical address pointer pointing to a host buffer that the
29396          * command's response data will be written. This can be either a host
29397          * physical address (HPA) or a guest physical address (GPA) and must
29398          * point to a physically contiguous block of memory.
29399          */
29400         uint64_t        resp_addr;
29401         /* rss_cos_lb_ctx_id is 16 b */
29402         uint16_t        rss_cos_lb_ctx_id;
29403         uint8_t unused_0[6];
29404 } __rte_packed;
29405
29406 /* hwrm_vnic_rss_cos_lb_ctx_free_output (size:128b/16B) */
29407 struct hwrm_vnic_rss_cos_lb_ctx_free_output {
29408         /* The specific error status for the command. */
29409         uint16_t        error_code;
29410         /* The HWRM command request type. */
29411         uint16_t        req_type;
29412         /* The sequence ID from the original command. */
29413         uint16_t        seq_id;
29414         /* The length of the response data in number of bytes. */
29415         uint16_t        resp_len;
29416         uint8_t unused_0[7];
29417         /*
29418          * This field is used in Output records to indicate that the output
29419          * is completely written to RAM.  This field should be read as '1'
29420          * to indicate that the output has been completely written.
29421          * When writing a command completion or response to an internal processor,
29422          * the order of writes has to be such that this field is written last.
29423          */
29424         uint8_t valid;
29425 } __rte_packed;
29426
29427 /*******************
29428  * hwrm_ring_alloc *
29429  *******************/
29430
29431
29432 /* hwrm_ring_alloc_input (size:704b/88B) */
29433 struct hwrm_ring_alloc_input {
29434         /* The HWRM command request type. */
29435         uint16_t        req_type;
29436         /*
29437          * The completion ring to send the completion event on. This should
29438          * be the NQ ID returned from the `nq_alloc` HWRM command.
29439          */
29440         uint16_t        cmpl_ring;
29441         /*
29442          * The sequence ID is used by the driver for tracking multiple
29443          * commands. This ID is treated as opaque data by the firmware and
29444          * the value is returned in the `hwrm_resp_hdr` upon completion.
29445          */
29446         uint16_t        seq_id;
29447         /*
29448          * The target ID of the command:
29449          * * 0x0-0xFFF8 - The function ID
29450          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
29451          * * 0xFFFD - Reserved for user-space HWRM interface
29452          * * 0xFFFF - HWRM
29453          */
29454         uint16_t        target_id;
29455         /*
29456          * A physical address pointer pointing to a host buffer that the
29457          * command's response data will be written. This can be either a host
29458          * physical address (HPA) or a guest physical address (GPA) and must
29459          * point to a physically contiguous block of memory.
29460          */
29461         uint64_t        resp_addr;
29462         uint32_t        enables;
29463         /*
29464          * This bit must be '1' for the ring_arb_cfg field to be
29465          * configured.
29466          */
29467         #define HWRM_RING_ALLOC_INPUT_ENABLES_RING_ARB_CFG \
29468                 UINT32_C(0x2)
29469         /*
29470          * This bit must be '1' for the stat_ctx_id_valid field to be
29471          * configured.
29472          */
29473         #define HWRM_RING_ALLOC_INPUT_ENABLES_STAT_CTX_ID_VALID \
29474                 UINT32_C(0x8)
29475         /*
29476          * This bit must be '1' for the max_bw_valid field to be
29477          * configured.
29478          */
29479         #define HWRM_RING_ALLOC_INPUT_ENABLES_MAX_BW_VALID \
29480                 UINT32_C(0x20)
29481         /*
29482          * This bit must be '1' for the rx_ring_id field to be
29483          * configured.
29484          */
29485         #define HWRM_RING_ALLOC_INPUT_ENABLES_RX_RING_ID_VALID \
29486                 UINT32_C(0x40)
29487         /*
29488          * This bit must be '1' for the nq_ring_id field to be
29489          * configured.
29490          */
29491         #define HWRM_RING_ALLOC_INPUT_ENABLES_NQ_RING_ID_VALID \
29492                 UINT32_C(0x80)
29493         /*
29494          * This bit must be '1' for the rx_buf_size field to be
29495          * configured.
29496          */
29497         #define HWRM_RING_ALLOC_INPUT_ENABLES_RX_BUF_SIZE_VALID \
29498                 UINT32_C(0x100)
29499         /*
29500          * This bit must be '1' for the schq_id field to be
29501          * configured.
29502          */
29503         #define HWRM_RING_ALLOC_INPUT_ENABLES_SCHQ_ID \
29504                 UINT32_C(0x200)
29505         /*
29506          * This bit must be '1' for the mpc_chnls_type field to be
29507          * configured.
29508          */
29509         #define HWRM_RING_ALLOC_INPUT_ENABLES_MPC_CHNLS_TYPE \
29510                 UINT32_C(0x400)
29511         /* Ring Type. */
29512         uint8_t ring_type;
29513         /* L2 Completion Ring (CR) */
29514         #define HWRM_RING_ALLOC_INPUT_RING_TYPE_L2_CMPL   UINT32_C(0x0)
29515         /* TX Ring (TR) */
29516         #define HWRM_RING_ALLOC_INPUT_RING_TYPE_TX        UINT32_C(0x1)
29517         /* RX Ring (RR) */
29518         #define HWRM_RING_ALLOC_INPUT_RING_TYPE_RX        UINT32_C(0x2)
29519         /* RoCE Notification Completion Ring (ROCE_CR) */
29520         #define HWRM_RING_ALLOC_INPUT_RING_TYPE_ROCE_CMPL UINT32_C(0x3)
29521         /* RX Aggregation Ring */
29522         #define HWRM_RING_ALLOC_INPUT_RING_TYPE_RX_AGG    UINT32_C(0x4)
29523         /* Notification Queue */
29524         #define HWRM_RING_ALLOC_INPUT_RING_TYPE_NQ        UINT32_C(0x5)
29525         #define HWRM_RING_ALLOC_INPUT_RING_TYPE_LAST \
29526                 HWRM_RING_ALLOC_INPUT_RING_TYPE_NQ
29527         uint8_t unused_0;
29528         /* Ring allocation flags. */
29529         uint16_t        flags;
29530         /*
29531          * For Rx rings, the incoming packet data can be placed at either
29532          * a 0B or 2B offset from the start of the Rx packet buffer. When
29533          * '1', the received packet will be padded with 2B of zeros at the
29534          * front of the packet. Note that this flag is only used for
29535          * Rx rings and is ignored for all other rings included Rx
29536          * Aggregation rings.
29537          */
29538         #define HWRM_RING_ALLOC_INPUT_FLAGS_RX_SOP_PAD     UINT32_C(0x1)
29539         /*
29540          * This value is a pointer to the page table for the
29541          * Ring.
29542          */
29543         uint64_t        page_tbl_addr;
29544         /* First Byte Offset of the first entry in the first page. */
29545         uint32_t        fbo;
29546         /*
29547          * Actual page size in 2^page_size. The supported range is increments
29548          * in powers of 2 from 16 bytes to 1GB.
29549          * - 4 = 16 B
29550          *     Page size is 16 B.
29551          * - 12 = 4 KB
29552          *     Page size is 4 KB.
29553          * - 13 = 8 KB
29554          *     Page size is 8 KB.
29555          * - 16 = 64 KB
29556          *     Page size is 64 KB.
29557          * - 21 = 2 MB
29558          *     Page size is 2 MB.
29559          * - 22 = 4 MB
29560          *     Page size is 4 MB.
29561          * - 30 = 1 GB
29562          *     Page size is 1 GB.
29563          */
29564         uint8_t page_size;
29565         /*
29566          * This value indicates the depth of page table.
29567          * For this version of the specification, value other than 0 or
29568          * 1 shall be considered as an invalid value.
29569          * When the page_tbl_depth = 0, then it is treated as a
29570          * special case with the following.
29571          * 1. FBO and page size fields are not valid.
29572          * 2. page_tbl_addr is the physical address of the first
29573          *    element of the ring.
29574          */
29575         uint8_t page_tbl_depth;
29576         /* Used by a PF driver to associate a SCHQ with one of its TX rings. */
29577         uint16_t        schq_id;
29578         /*
29579          * Number of 16B units in the ring.  Minimum size for
29580          * a ring is 16 16B entries.
29581          */
29582         uint32_t        length;
29583         /*
29584          * Logical ring number for the ring to be allocated.
29585          * This value determines the position in the doorbell
29586          * area where the update to the ring will be made.
29587          *
29588          * For completion rings, this value is also the MSI-X
29589          * vector number for the function the completion ring is
29590          * associated with.
29591          */
29592         uint16_t        logical_id;
29593         /*
29594          * This field is used only when ring_type is a TX ring.
29595          * This value indicates what completion ring the TX ring
29596          * is associated with.
29597          */
29598         uint16_t        cmpl_ring_id;
29599         /*
29600          * This field is used only when ring_type is a TX ring.
29601          * This value indicates what CoS queue the TX ring
29602          * is associated with.
29603          */
29604         uint16_t        queue_id;
29605         /*
29606          * When allocating a Rx ring or Rx aggregation ring, this field
29607          * specifies the size of the buffer descriptors posted to the ring.
29608          */
29609         uint16_t        rx_buf_size;
29610         /*
29611          * When allocating an Rx aggregation ring, this field
29612          * specifies the associated Rx ring ID.
29613          */
29614         uint16_t        rx_ring_id;
29615         /*
29616          * When allocating a completion ring, this field
29617          * specifies the associated NQ ring ID.
29618          */
29619         uint16_t        nq_ring_id;
29620         /*
29621          * This field is used only when ring_type is a TX ring.
29622          * This field is used to configure arbitration related
29623          * parameters for a TX ring.
29624          */
29625         uint16_t        ring_arb_cfg;
29626         /* Arbitration policy used for the ring. */
29627         #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_MASK \
29628                 UINT32_C(0xf)
29629         #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_SFT       0
29630         /*
29631          * Use strict priority for the TX ring.
29632          * Priority value is specified in arb_policy_param
29633          */
29634         #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_SP \
29635                 UINT32_C(0x1)
29636         /*
29637          * Use weighted fair queue arbitration for the TX ring.
29638          * Weight is specified in arb_policy_param
29639          */
29640         #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_WFQ \
29641                 UINT32_C(0x2)
29642         #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_LAST \
29643                 HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_WFQ
29644         /* Reserved field. */
29645         #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_RSVD_MASK \
29646                 UINT32_C(0xf0)
29647         #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_RSVD_SFT             4
29648         /*
29649          * Arbitration policy specific parameter.
29650          * # For strict priority arbitration policy, this field
29651          * represents a priority value. If set to 0, then the priority
29652          * is not specified and the HWRM is allowed to select
29653          * any priority for this TX ring.
29654          * # For weighted fair queue arbitration policy, this field
29655          * represents a weight value. If set to 0, then the weight
29656          * is not specified and the HWRM is allowed to select
29657          * any weight for this TX ring.
29658          */
29659         #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_PARAM_MASK \
29660                 UINT32_C(0xff00)
29661         #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_PARAM_SFT 8
29662         uint16_t        unused_3;
29663         /*
29664          * This field is reserved for the future use.
29665          * It shall be set to 0.
29666          */
29667         uint32_t        reserved3;
29668         /*
29669          * This field is used only when ring_type is a TX ring.
29670          * This input indicates what statistics context this ring
29671          * should be associated with.
29672          */
29673         uint32_t        stat_ctx_id;
29674         /*
29675          * This field is reserved for the future use.
29676          * It shall be set to 0.
29677          */
29678         uint32_t        reserved4;
29679         /*
29680          * This field is used only when ring_type is a TX ring
29681          * to specify maximum BW allocated to the TX ring.
29682          * The HWRM will translate this value into byte counter and
29683          * time interval used for this ring inside the device.
29684          */
29685         uint32_t        max_bw;
29686         /* The bandwidth value. */
29687         #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_MASK \
29688                 UINT32_C(0xfffffff)
29689         #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_SFT              0
29690         /* The granularity of the value (bits or bytes). */
29691         #define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE \
29692                 UINT32_C(0x10000000)
29693         /* Value is in bits. */
29694         #define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BITS \
29695                 (UINT32_C(0x0) << 28)
29696         /* Value is in bytes. */
29697         #define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BYTES \
29698                 (UINT32_C(0x1) << 28)
29699         #define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_LAST \
29700                 HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BYTES
29701         /* bw_value_unit is 3 b */
29702         #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_MASK \
29703                 UINT32_C(0xe0000000)
29704         #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_SFT         29
29705         /* Value is in Mb or MB (base 10). */
29706         #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_MEGA \
29707                 (UINT32_C(0x0) << 29)
29708         /* Value is in Kb or KB (base 10). */
29709         #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_KILO \
29710                 (UINT32_C(0x2) << 29)
29711         /* Value is in bits or bytes. */
29712         #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_BASE \
29713                 (UINT32_C(0x4) << 29)
29714         /* Value is in Gb or GB (base 10). */
29715         #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_GIGA \
29716                 (UINT32_C(0x6) << 29)
29717         /* Value is in 1/100th of a percentage of total bandwidth. */
29718         #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
29719                 (UINT32_C(0x1) << 29)
29720         /* Invalid unit */
29721         #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID \
29722                 (UINT32_C(0x7) << 29)
29723         #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_LAST \
29724                 HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID
29725         /*
29726          * This field is used only when ring_type is a Completion ring.
29727          * This value indicates what interrupt mode should be used
29728          * on this completion ring.
29729          * Note: In the legacy interrupt mode, no more than 16
29730          * completion rings are allowed.
29731          */
29732         uint8_t int_mode;
29733         /* Legacy INTA */
29734         #define HWRM_RING_ALLOC_INPUT_INT_MODE_LEGACY UINT32_C(0x0)
29735         /* Reserved */
29736         #define HWRM_RING_ALLOC_INPUT_INT_MODE_RSVD   UINT32_C(0x1)
29737         /* MSI-X */
29738         #define HWRM_RING_ALLOC_INPUT_INT_MODE_MSIX   UINT32_C(0x2)
29739         /* No Interrupt - Polled mode */
29740         #define HWRM_RING_ALLOC_INPUT_INT_MODE_POLL   UINT32_C(0x3)
29741         #define HWRM_RING_ALLOC_INPUT_INT_MODE_LAST \
29742                 HWRM_RING_ALLOC_INPUT_INT_MODE_POLL
29743         /* Midpath channel type */
29744         uint8_t mpc_chnls_type;
29745         /*
29746          * Indicate the TX ring alloc MPC channel type is a MPC channel
29747          * with destination to the TX crypto engine block.
29748          */
29749         #define HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_TCE     UINT32_C(0x0)
29750         /*
29751          * Indicate the RX ring alloc MPC channel type is a MPC channel
29752          * with destination to the RX crypto engine block.
29753          */
29754         #define HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_RCE     UINT32_C(0x1)
29755         /*
29756          * Indicate the RX ring alloc MPC channel type is a MPC channel
29757          * with destination to the TX configurable flow processing block.
29758          */
29759         #define HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_TE_CFA  UINT32_C(0x2)
29760         /*
29761          * Indicate the RX ring alloc MPC channel type is a MPC channel
29762          * with destination to the RX configurable flow processing block.
29763          */
29764         #define HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_RE_CFA  UINT32_C(0x3)
29765         /*
29766          * Indicate the RX ring alloc MPC channel type is a MPC channel
29767          * with destination to the primate processor block.
29768          */
29769         #define HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_PRIMATE UINT32_C(0x4)
29770         #define HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_LAST \
29771                 HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_PRIMATE
29772         uint8_t unused_4[2];
29773         /*
29774          * The cq_handle is specified when allocating a completion ring. For
29775          * devices that support NQs, this cq_handle will be included in the
29776          * NQE to specify which CQ should be read to retrieve the completion
29777          * record.
29778          */
29779         uint64_t        cq_handle;
29780 } __rte_packed;
29781
29782 /* hwrm_ring_alloc_output (size:128b/16B) */
29783 struct hwrm_ring_alloc_output {
29784         /* The specific error status for the command. */
29785         uint16_t        error_code;
29786         /* The HWRM command request type. */
29787         uint16_t        req_type;
29788         /* The sequence ID from the original command. */
29789         uint16_t        seq_id;
29790         /* The length of the response data in number of bytes. */
29791         uint16_t        resp_len;
29792         /*
29793          * Physical number of ring allocated.
29794          * This value shall be unique for a ring type.
29795          */
29796         uint16_t        ring_id;
29797         /* Logical number of ring allocated. */
29798         uint16_t        logical_ring_id;
29799         uint8_t unused_0[3];
29800         /*
29801          * This field is used in Output records to indicate that the output
29802          * is completely written to RAM.  This field should be read as '1'
29803          * to indicate that the output has been completely written.
29804          * When writing a command completion or response to an internal processor,
29805          * the order of writes has to be such that this field is written last.
29806          */
29807         uint8_t valid;
29808 } __rte_packed;
29809
29810 /******************
29811  * hwrm_ring_free *
29812  ******************/
29813
29814
29815 /* hwrm_ring_free_input (size:192b/24B) */
29816 struct hwrm_ring_free_input {
29817         /* The HWRM command request type. */
29818         uint16_t        req_type;
29819         /*
29820          * The completion ring to send the completion event on. This should
29821          * be the NQ ID returned from the `nq_alloc` HWRM command.
29822          */
29823         uint16_t        cmpl_ring;
29824         /*
29825          * The sequence ID is used by the driver for tracking multiple
29826          * commands. This ID is treated as opaque data by the firmware and
29827          * the value is returned in the `hwrm_resp_hdr` upon completion.
29828          */
29829         uint16_t        seq_id;
29830         /*
29831          * The target ID of the command:
29832          * * 0x0-0xFFF8 - The function ID
29833          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
29834          * * 0xFFFD - Reserved for user-space HWRM interface
29835          * * 0xFFFF - HWRM
29836          */
29837         uint16_t        target_id;
29838         /*
29839          * A physical address pointer pointing to a host buffer that the
29840          * command's response data will be written. This can be either a host
29841          * physical address (HPA) or a guest physical address (GPA) and must
29842          * point to a physically contiguous block of memory.
29843          */
29844         uint64_t        resp_addr;
29845         /* Ring Type. */
29846         uint8_t ring_type;
29847         /* L2 Completion Ring (CR) */
29848         #define HWRM_RING_FREE_INPUT_RING_TYPE_L2_CMPL   UINT32_C(0x0)
29849         /* TX Ring (TR) */
29850         #define HWRM_RING_FREE_INPUT_RING_TYPE_TX        UINT32_C(0x1)
29851         /* RX Ring (RR) */
29852         #define HWRM_RING_FREE_INPUT_RING_TYPE_RX        UINT32_C(0x2)
29853         /* RoCE Notification Completion Ring (ROCE_CR) */
29854         #define HWRM_RING_FREE_INPUT_RING_TYPE_ROCE_CMPL UINT32_C(0x3)
29855         /* RX Aggregation Ring */
29856         #define HWRM_RING_FREE_INPUT_RING_TYPE_RX_AGG    UINT32_C(0x4)
29857         /* Notification Queue */
29858         #define HWRM_RING_FREE_INPUT_RING_TYPE_NQ        UINT32_C(0x5)
29859         #define HWRM_RING_FREE_INPUT_RING_TYPE_LAST \
29860                 HWRM_RING_FREE_INPUT_RING_TYPE_NQ
29861         uint8_t unused_0;
29862         /* Physical number of ring allocated. */
29863         uint16_t        ring_id;
29864         uint8_t unused_1[4];
29865 } __rte_packed;
29866
29867 /* hwrm_ring_free_output (size:128b/16B) */
29868 struct hwrm_ring_free_output {
29869         /* The specific error status for the command. */
29870         uint16_t        error_code;
29871         /* The HWRM command request type. */
29872         uint16_t        req_type;
29873         /* The sequence ID from the original command. */
29874         uint16_t        seq_id;
29875         /* The length of the response data in number of bytes. */
29876         uint16_t        resp_len;
29877         uint8_t unused_0[7];
29878         /*
29879          * This field is used in Output records to indicate that the output
29880          * is completely written to RAM.  This field should be read as '1'
29881          * to indicate that the output has been completely written.
29882          * When writing a command completion or response to an internal processor,
29883          * the order of writes has to be such that this field is written last.
29884          */
29885         uint8_t valid;
29886 } __rte_packed;
29887
29888 /*******************
29889  * hwrm_ring_reset *
29890  *******************/
29891
29892
29893 /* hwrm_ring_reset_input (size:192b/24B) */
29894 struct hwrm_ring_reset_input {
29895         /* The HWRM command request type. */
29896         uint16_t        req_type;
29897         /*
29898          * The completion ring to send the completion event on. This should
29899          * be the NQ ID returned from the `nq_alloc` HWRM command.
29900          */
29901         uint16_t        cmpl_ring;
29902         /*
29903          * The sequence ID is used by the driver for tracking multiple
29904          * commands. This ID is treated as opaque data by the firmware and
29905          * the value is returned in the `hwrm_resp_hdr` upon completion.
29906          */
29907         uint16_t        seq_id;
29908         /*
29909          * The target ID of the command:
29910          * * 0x0-0xFFF8 - The function ID
29911          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
29912          * * 0xFFFD - Reserved for user-space HWRM interface
29913          * * 0xFFFF - HWRM
29914          */
29915         uint16_t        target_id;
29916         /*
29917          * A physical address pointer pointing to a host buffer that the
29918          * command's response data will be written. This can be either a host
29919          * physical address (HPA) or a guest physical address (GPA) and must
29920          * point to a physically contiguous block of memory.
29921          */
29922         uint64_t        resp_addr;
29923         /* Ring Type. */
29924         uint8_t ring_type;
29925         /* L2 Completion Ring (CR) */
29926         #define HWRM_RING_RESET_INPUT_RING_TYPE_L2_CMPL     UINT32_C(0x0)
29927         /* TX Ring (TR) */
29928         #define HWRM_RING_RESET_INPUT_RING_TYPE_TX          UINT32_C(0x1)
29929         /* RX Ring (RR) */
29930         #define HWRM_RING_RESET_INPUT_RING_TYPE_RX          UINT32_C(0x2)
29931         /* RoCE Notification Completion Ring (ROCE_CR) */
29932         #define HWRM_RING_RESET_INPUT_RING_TYPE_ROCE_CMPL   UINT32_C(0x3)
29933         /*
29934          * Rx Ring Group.  This is to reset rx and aggregation in an atomic
29935          * operation. Completion ring associated with this ring group is
29936          * not reset.
29937          */
29938         #define HWRM_RING_RESET_INPUT_RING_TYPE_RX_RING_GRP UINT32_C(0x6)
29939         #define HWRM_RING_RESET_INPUT_RING_TYPE_LAST \
29940                 HWRM_RING_RESET_INPUT_RING_TYPE_RX_RING_GRP
29941         uint8_t unused_0;
29942         /*
29943          * Physical number of the ring. When ring type is rx_ring_grp, ring id
29944          * actually refers to ring group id.
29945          */
29946         uint16_t        ring_id;
29947         uint8_t unused_1[4];
29948 } __rte_packed;
29949
29950 /* hwrm_ring_reset_output (size:128b/16B) */
29951 struct hwrm_ring_reset_output {
29952         /* The specific error status for the command. */
29953         uint16_t        error_code;
29954         /* The HWRM command request type. */
29955         uint16_t        req_type;
29956         /* The sequence ID from the original command. */
29957         uint16_t        seq_id;
29958         /* The length of the response data in number of bytes. */
29959         uint16_t        resp_len;
29960         uint8_t unused_0[4];
29961         /* Position of consumer index after ring reset completes. */
29962         uint8_t consumer_idx[3];
29963         /*
29964          * This field is used in Output records to indicate that the output
29965          * is completely written to RAM.  This field should be read as '1'
29966          * to indicate that the output has been completely written.
29967          * When writing a command completion or response to an internal processor,
29968          * the order of writes has to be such that this field is written last.
29969          */
29970         uint8_t valid;
29971 } __rte_packed;
29972
29973 /*****************
29974  * hwrm_ring_cfg *
29975  *****************/
29976
29977
29978 /* hwrm_ring_cfg_input (size:256b/32B) */
29979 struct hwrm_ring_cfg_input {
29980         /* The HWRM command request type. */
29981         uint16_t        req_type;
29982         /*
29983          * The completion ring to send the completion event on. This should
29984          * be the NQ ID returned from the `nq_alloc` HWRM command.
29985          */
29986         uint16_t        cmpl_ring;
29987         /*
29988          * The sequence ID is used by the driver for tracking multiple
29989          * commands. This ID is treated as opaque data by the firmware and
29990          * the value is returned in the `hwrm_resp_hdr` upon completion.
29991          */
29992         uint16_t        seq_id;
29993         /*
29994          * The target ID of the command:
29995          * * 0x0-0xFFF8 - The function ID
29996          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
29997          * * 0xFFFD - Reserved for user-space HWRM interface
29998          * * 0xFFFF - HWRM
29999          */
30000         uint16_t        target_id;
30001         /*
30002          * A physical address pointer pointing to a host buffer that the
30003          * command's response data will be written. This can be either a host
30004          * physical address (HPA) or a guest physical address (GPA) and must
30005          * point to a physically contiguous block of memory.
30006          */
30007         uint64_t        resp_addr;
30008         /* Ring Type. */
30009         uint8_t ring_type;
30010         /* TX Ring (TR) */
30011         #define HWRM_RING_CFG_INPUT_RING_TYPE_TX UINT32_C(0x1)
30012         /* RX Ring (RR) */
30013         #define HWRM_RING_CFG_INPUT_RING_TYPE_RX UINT32_C(0x2)
30014         #define HWRM_RING_CFG_INPUT_RING_TYPE_LAST \
30015                 HWRM_RING_CFG_INPUT_RING_TYPE_RX
30016         uint8_t unused_0;
30017         /* Physical number of the ring. */
30018         uint16_t        ring_id;
30019         /* Ring config enable bits. */
30020         uint16_t        enables;
30021         /*
30022          * For Rx rings, the incoming packet data can be placed at either
30023          * a 0B, 2B, 10B or 12B offset from the start of the Rx packet
30024          * buffer.
30025          * When '1', the received packet will be padded with 2B, 10B or 12B
30026          * of zeros at the front of the packet. The exact offset is specified
30027          * by rx_sop_pad_bytes parameter.
30028          * When '0', the received packet will not be padded.
30029          * Note that this flag is only used for Rx rings and is ignored
30030          * for all other rings included Rx Aggregation rings.
30031          */
30032         #define HWRM_RING_CFG_INPUT_ENABLES_RX_SOP_PAD_ENABLE \
30033                 UINT32_C(0x1)
30034         /*
30035          * Proxy mode enable, for Tx, Rx and Rx aggregation rings only.
30036          * When rings are allocated, the PCI function on which driver issues
30037          * HWRM_RING_CFG command is assumed to own the rings. Hardware takes
30038          * the buffer descriptors (BDs) from those rings is assumed to issue
30039          * packet payload DMA using same PCI function. When proxy mode is
30040          * enabled, hardware can perform payload DMA using another PCI
30041          * function on same or different host.
30042          * When set to '0', the PCI function on which driver issues
30043          * HWRM_RING_CFG command is used for host payload DMA operation.
30044          * When set to '1', the host PCI function specified by proxy_fid is
30045          * used for host payload DMA operation.
30046          */
30047         #define HWRM_RING_CFG_INPUT_ENABLES_PROXY_MODE_ENABLE \
30048                 UINT32_C(0x2)
30049         /*
30050          * Tx ring packet source interface override, for Tx rings only.
30051          * When TX rings are allocated, the PCI function on which driver
30052          * issues HWRM_RING_CFG is assumed to be source interface of
30053          * packets sent from TX ring.
30054          * When set to '1', the host PCI function specified by proxy_fid
30055          * is used as source interface of the transmitted packets.
30056          */
30057         #define HWRM_RING_CFG_INPUT_ENABLES_TX_PROXY_SRC_INTF_OVERRIDE \
30058                 UINT32_C(0x4)
30059         /* The schq_id field is valid */
30060         #define HWRM_RING_CFG_INPUT_ENABLES_SCHQ_ID \
30061                 UINT32_C(0x8)
30062         /* Update completion ring ID associated with Tx or Rx ring. */
30063         #define HWRM_RING_CFG_INPUT_ENABLES_CMPL_RING_ID_UPDATE \
30064                 UINT32_C(0x10)
30065         /*
30066          * Proxy function FID value.
30067          * This value is only used when either proxy_mode_enable flag or
30068          * tx_proxy_svif_override is set to '1'.
30069          * When proxy_mode_enable is set to '1', it identifies a host PCI
30070          * function used for host payload DMA operations.
30071          * When tx_proxy_src_intf is set to '1', it identifies a host PCI
30072          * function as source interface for all transmitted packets from
30073          * the TX ring.
30074          */
30075         uint16_t        proxy_fid;
30076         /*
30077          * Identifies the new scheduler queue (SCHQ) to associate with the
30078          * ring. Only valid for Tx rings.
30079          * A value of zero indicates that the Tx ring should be associated
30080          * with the default scheduler queue (SCHQ).
30081          */
30082         uint16_t        schq_id;
30083         /*
30084          * This field is valid for TX or Rx rings. This value identifies the
30085          * new completion ring ID to associate with the TX or Rx ring.
30086          */
30087         uint16_t        cmpl_ring_id;
30088         /*
30089          * Rx SOP padding amount in bytes.
30090          * This value is only used when rx_sop_pad_enable flag is set to '1'.
30091          */
30092         uint8_t rx_sop_pad_bytes;
30093         uint8_t unused_1[3];
30094 } __rte_packed;
30095
30096 /* hwrm_ring_cfg_output (size:128b/16B) */
30097 struct hwrm_ring_cfg_output {
30098         /* The specific error status for the command. */
30099         uint16_t        error_code;
30100         /* The HWRM command request type. */
30101         uint16_t        req_type;
30102         /* The sequence ID from the original command. */
30103         uint16_t        seq_id;
30104         /* The length of the response data in number of bytes. */
30105         uint16_t        resp_len;
30106         uint8_t unused_0[7];
30107         /*
30108          * This field is used in Output records to indicate that the output
30109          * is completely written to RAM.  This field should be read as '1'
30110          * to indicate that the output has been completely written.
30111          * When writing a command completion or response to an internal
30112          * processor, the order of writes has to be such that this field is
30113          * written last.
30114          */
30115         uint8_t valid;
30116 } __rte_packed;
30117
30118 /******************
30119  * hwrm_ring_qcfg *
30120  ******************/
30121
30122
30123 /* hwrm_ring_qcfg_input (size:192b/24B) */
30124 struct hwrm_ring_qcfg_input {
30125         /* The HWRM command request type. */
30126         uint16_t        req_type;
30127         /*
30128          * The completion ring to send the completion event on. This should
30129          * be the NQ ID returned from the `nq_alloc` HWRM command.
30130          */
30131         uint16_t        cmpl_ring;
30132         /*
30133          * The sequence ID is used by the driver for tracking multiple
30134          * commands. This ID is treated as opaque data by the firmware and
30135          * the value is returned in the `hwrm_resp_hdr` upon completion.
30136          */
30137         uint16_t        seq_id;
30138         /*
30139          * The target ID of the command:
30140          * * 0x0-0xFFF8 - The function ID
30141          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30142          * * 0xFFFD - Reserved for user-space HWRM interface
30143          * * 0xFFFF - HWRM
30144          */
30145         uint16_t        target_id;
30146         /*
30147          * A physical address pointer pointing to a host buffer that the
30148          * command's response data will be written. This can be either a host
30149          * physical address (HPA) or a guest physical address (GPA) and must
30150          * point to a physically contiguous block of memory.
30151          */
30152         uint64_t        resp_addr;
30153         /* Ring Type. */
30154         uint8_t ring_type;
30155         /* TX Ring (TR) */
30156         #define HWRM_RING_QCFG_INPUT_RING_TYPE_TX UINT32_C(0x1)
30157         /* RX Ring (RR) */
30158         #define HWRM_RING_QCFG_INPUT_RING_TYPE_RX UINT32_C(0x2)
30159         #define HWRM_RING_QCFG_INPUT_RING_TYPE_LAST \
30160                 HWRM_RING_QCFG_INPUT_RING_TYPE_RX
30161         uint8_t unused_0[5];
30162         /* Physical number of the ring. */
30163         uint16_t        ring_id;
30164 } __rte_packed;
30165
30166 /* hwrm_ring_qcfg_output (size:192b/24B) */
30167 struct hwrm_ring_qcfg_output {
30168         /* The specific error status for the command. */
30169         uint16_t        error_code;
30170         /* The HWRM command request type. */
30171         uint16_t        req_type;
30172         /* The sequence ID from the original command. */
30173         uint16_t        seq_id;
30174         /* The length of the response data in number of bytes. */
30175         uint16_t        resp_len;
30176         /* Ring config enable bits. */
30177         uint16_t        enables;
30178         /*
30179          * For Rx rings, the incoming packet data can be placed at either
30180          * a 0B, 2B, 10B or 12B offset from the start of the Rx packet
30181          * buffer.
30182          * When '1', the received packet will be padded with 2B, 10B or 12B
30183          * of zeros at the front of the packet. The exact offset is specified
30184          * by rx_sop_pad_bytes parameter.
30185          * When '0', the received packet will not be padded.
30186          * Note that this flag is only used for Rx rings and is ignored
30187          * for all other rings included Rx Aggregation rings.
30188          */
30189         #define HWRM_RING_QCFG_OUTPUT_ENABLES_RX_SOP_PAD_ENABLE \
30190                 UINT32_C(0x1)
30191         /*
30192          * Proxy mode enable, for Tx, Rx and Rx aggregation rings only.
30193          * When rings are allocated, the PCI function on which driver issues
30194          * HWRM_RING_CFG command is assumed to own the rings. Hardware takes
30195          * the buffer descriptors (BDs) from those rings is assumed to issue
30196          * packet payload DMA using same PCI function. When proxy mode is
30197          * enabled, hardware can perform payload DMA using another PCI
30198          * function on same or different host.
30199          * When set to '0', the PCI function on which driver issues
30200          * HWRM_RING_CFG command is used for host payload DMA operation.
30201          * When set to '1', the host PCI function specified by proxy_fid is
30202          * used for host payload DMA operation.
30203          */
30204         #define HWRM_RING_QCFG_OUTPUT_ENABLES_PROXY_MODE_ENABLE \
30205                 UINT32_C(0x2)
30206         /*
30207          * Tx ring packet source interface override, for Tx rings only.
30208          * When TX rings are allocated, the PCI function on which driver
30209          * issues HWRM_RING_CFG is assumed to be source interface of
30210          * packets sent from TX ring.
30211          * When set to '1', the host PCI function specified by proxy_fid is
30212          * used as source interface of the transmitted packets.
30213          */
30214         #define HWRM_RING_QCFG_OUTPUT_ENABLES_TX_PROXY_SRC_INTF_OVERRIDE \
30215                 UINT32_C(0x4)
30216         /*
30217          * Proxy function FID value.
30218          * This value is only used when either proxy_mode_enable flag or
30219          * tx_proxy_svif_override is set to '1'.
30220          * When proxy_mode_enable is set to '1', it identifies a host PCI
30221          * function used for host payload DMA operations.
30222          * When tx_proxy_src_intf is set to '1', it identifies a host PCI
30223          * function as source interface for all transmitted packets from the TX
30224          * ring.
30225          */
30226         uint16_t        proxy_fid;
30227         /*
30228          * Identifies the new scheduler queue (SCHQ) to associate with the
30229          * ring. Only valid for Tx rings.
30230          * A value of zero indicates that the Tx ring should be associated with
30231          * the default scheduler queue (SCHQ).
30232          */
30233         uint16_t        schq_id;
30234         /*
30235          * This field is used when ring_type is a TX or Rx ring.
30236          * This value indicates what completion ring the TX or Rx ring
30237          * is associated with.
30238          */
30239         uint16_t        cmpl_ring_id;
30240         /*
30241          * Rx SOP padding amount in bytes.
30242          * This value is only used when rx_sop_pad_enable flag is set to '1'.
30243          */
30244         uint8_t rx_sop_pad_bytes;
30245         uint8_t unused_0[6];
30246         /*
30247          * This field is used in Output records to indicate that the output
30248          * is completely written to RAM.  This field should be read as '1'
30249          * to indicate that the output has been completely written.
30250          * When writing a command completion or response to an internal
30251          * processor, the order of writes has to be such that this field is
30252          * written last.
30253          */
30254         uint8_t valid;
30255 } __rte_packed;
30256
30257 /**************************
30258  * hwrm_ring_aggint_qcaps *
30259  **************************/
30260
30261
30262 /* hwrm_ring_aggint_qcaps_input (size:128b/16B) */
30263 struct hwrm_ring_aggint_qcaps_input {
30264         /* The HWRM command request type. */
30265         uint16_t        req_type;
30266         /*
30267          * The completion ring to send the completion event on. This should
30268          * be the NQ ID returned from the `nq_alloc` HWRM command.
30269          */
30270         uint16_t        cmpl_ring;
30271         /*
30272          * The sequence ID is used by the driver for tracking multiple
30273          * commands. This ID is treated as opaque data by the firmware and
30274          * the value is returned in the `hwrm_resp_hdr` upon completion.
30275          */
30276         uint16_t        seq_id;
30277         /*
30278          * The target ID of the command:
30279          * * 0x0-0xFFF8 - The function ID
30280          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30281          * * 0xFFFD - Reserved for user-space HWRM interface
30282          * * 0xFFFF - HWRM
30283          */
30284         uint16_t        target_id;
30285         /*
30286          * A physical address pointer pointing to a host buffer that the
30287          * command's response data will be written. This can be either a host
30288          * physical address (HPA) or a guest physical address (GPA) and must
30289          * point to a physically contiguous block of memory.
30290          */
30291         uint64_t        resp_addr;
30292 } __rte_packed;
30293
30294 /* hwrm_ring_aggint_qcaps_output (size:384b/48B) */
30295 struct hwrm_ring_aggint_qcaps_output {
30296         /* The specific error status for the command. */
30297         uint16_t        error_code;
30298         /* The HWRM command request type. */
30299         uint16_t        req_type;
30300         /* The sequence ID from the original command. */
30301         uint16_t        seq_id;
30302         /* The length of the response data in number of bytes. */
30303         uint16_t        resp_len;
30304         uint32_t        cmpl_params;
30305         /*
30306          * When this bit is set to '1', int_lat_tmr_min can be configured
30307          * on completion rings.
30308          */
30309         #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_INT_LAT_TMR_MIN \
30310                 UINT32_C(0x1)
30311         /*
30312          * When this bit is set to '1', int_lat_tmr_max can be configured
30313          * on completion rings.
30314          */
30315         #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_INT_LAT_TMR_MAX \
30316                 UINT32_C(0x2)
30317         /*
30318          * When this bit is set to '1', timer_reset can be enabled
30319          * on completion rings.
30320          */
30321         #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_TIMER_RESET \
30322                 UINT32_C(0x4)
30323         /*
30324          * When this bit is set to '1', ring_idle can be enabled
30325          * on completion rings.
30326          */
30327         #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_RING_IDLE \
30328                 UINT32_C(0x8)
30329         /*
30330          * When this bit is set to '1', num_cmpl_dma_aggr can be configured
30331          * on completion rings.
30332          */
30333         #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_NUM_CMPL_DMA_AGGR \
30334                 UINT32_C(0x10)
30335         /*
30336          * When this bit is set to '1', num_cmpl_dma_aggr_during_int can be configured
30337          * on completion rings.
30338          */
30339         #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_NUM_CMPL_DMA_AGGR_DURING_INT \
30340                 UINT32_C(0x20)
30341         /*
30342          * When this bit is set to '1', cmpl_aggr_dma_tmr can be configured
30343          * on completion rings.
30344          */
30345         #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_CMPL_AGGR_DMA_TMR \
30346                 UINT32_C(0x40)
30347         /*
30348          * When this bit is set to '1', cmpl_aggr_dma_tmr_during_int can be configured
30349          * on completion rings.
30350          */
30351         #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_CMPL_AGGR_DMA_TMR_DURING_INT \
30352                 UINT32_C(0x80)
30353         /*
30354          * When this bit is set to '1', num_cmpl_aggr_int can be configured
30355          * on completion rings.
30356          */
30357         #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_NUM_CMPL_AGGR_INT \
30358                 UINT32_C(0x100)
30359         uint32_t        nq_params;
30360         /*
30361          * When this bit is set to '1', int_lat_tmr_min can be configured
30362          * on notification queues.
30363          */
30364         #define HWRM_RING_AGGINT_QCAPS_OUTPUT_NQ_PARAMS_INT_LAT_TMR_MIN \
30365                 UINT32_C(0x1)
30366         /* Minimum value for num_cmpl_dma_aggr */
30367         uint16_t        num_cmpl_dma_aggr_min;
30368         /* Maximum value for num_cmpl_dma_aggr */
30369         uint16_t        num_cmpl_dma_aggr_max;
30370         /* Minimum value for num_cmpl_dma_aggr_during_int */
30371         uint16_t        num_cmpl_dma_aggr_during_int_min;
30372         /* Maximum value for num_cmpl_dma_aggr_during_int */
30373         uint16_t        num_cmpl_dma_aggr_during_int_max;
30374         /* Minimum value for cmpl_aggr_dma_tmr */
30375         uint16_t        cmpl_aggr_dma_tmr_min;
30376         /* Maximum value for cmpl_aggr_dma_tmr */
30377         uint16_t        cmpl_aggr_dma_tmr_max;
30378         /* Minimum value for cmpl_aggr_dma_tmr_during_int */
30379         uint16_t        cmpl_aggr_dma_tmr_during_int_min;
30380         /* Maximum value for cmpl_aggr_dma_tmr_during_int */
30381         uint16_t        cmpl_aggr_dma_tmr_during_int_max;
30382         /* Minimum value for int_lat_tmr_min */
30383         uint16_t        int_lat_tmr_min_min;
30384         /* Maximum value for int_lat_tmr_min */
30385         uint16_t        int_lat_tmr_min_max;
30386         /* Minimum value for int_lat_tmr_max */
30387         uint16_t        int_lat_tmr_max_min;
30388         /* Maximum value for int_lat_tmr_max */
30389         uint16_t        int_lat_tmr_max_max;
30390         /* Minimum value for num_cmpl_aggr_int */
30391         uint16_t        num_cmpl_aggr_int_min;
30392         /* Maximum value for num_cmpl_aggr_int */
30393         uint16_t        num_cmpl_aggr_int_max;
30394         /* The units for timer parameters, in nanoseconds. */
30395         uint16_t        timer_units;
30396         uint8_t unused_0[1];
30397         /*
30398          * This field is used in Output records to indicate that the output
30399          * is completely written to RAM.  This field should be read as '1'
30400          * to indicate that the output has been completely written.
30401          * When writing a command completion or response to an internal processor,
30402          * the order of writes has to be such that this field is written last.
30403          */
30404         uint8_t valid;
30405 } __rte_packed;
30406
30407 /**************************************
30408  * hwrm_ring_cmpl_ring_qaggint_params *
30409  **************************************/
30410
30411
30412 /* hwrm_ring_cmpl_ring_qaggint_params_input (size:192b/24B) */
30413 struct hwrm_ring_cmpl_ring_qaggint_params_input {
30414         /* The HWRM command request type. */
30415         uint16_t        req_type;
30416         /*
30417          * The completion ring to send the completion event on. This should
30418          * be the NQ ID returned from the `nq_alloc` HWRM command.
30419          */
30420         uint16_t        cmpl_ring;
30421         /*
30422          * The sequence ID is used by the driver for tracking multiple
30423          * commands. This ID is treated as opaque data by the firmware and
30424          * the value is returned in the `hwrm_resp_hdr` upon completion.
30425          */
30426         uint16_t        seq_id;
30427         /*
30428          * The target ID of the command:
30429          * * 0x0-0xFFF8 - The function ID
30430          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30431          * * 0xFFFD - Reserved for user-space HWRM interface
30432          * * 0xFFFF - HWRM
30433          */
30434         uint16_t        target_id;
30435         /*
30436          * A physical address pointer pointing to a host buffer that the
30437          * command's response data will be written. This can be either a host
30438          * physical address (HPA) or a guest physical address (GPA) and must
30439          * point to a physically contiguous block of memory.
30440          */
30441         uint64_t        resp_addr;
30442         /* Physical number of completion ring. */
30443         uint16_t        ring_id;
30444         uint16_t        flags;
30445         #define HWRM_RING_CMPL_RING_QAGGINT_PARAMS_INPUT_FLAGS_UNUSED_0_MASK \
30446                 UINT32_C(0x3)
30447         #define HWRM_RING_CMPL_RING_QAGGINT_PARAMS_INPUT_FLAGS_UNUSED_0_SFT 0
30448         /*
30449          * Set this flag to 1 when querying parameters on a notification
30450          * queue. Set this flag to 0 when querying parameters on a
30451          * completion queue or completion ring.
30452          */
30453         #define HWRM_RING_CMPL_RING_QAGGINT_PARAMS_INPUT_FLAGS_IS_NQ \
30454                 UINT32_C(0x4)
30455         uint8_t unused_0[4];
30456 } __rte_packed;
30457
30458 /* hwrm_ring_cmpl_ring_qaggint_params_output (size:256b/32B) */
30459 struct hwrm_ring_cmpl_ring_qaggint_params_output {
30460         /* The specific error status for the command. */
30461         uint16_t        error_code;
30462         /* The HWRM command request type. */
30463         uint16_t        req_type;
30464         /* The sequence ID from the original command. */
30465         uint16_t        seq_id;
30466         /* The length of the response data in number of bytes. */
30467         uint16_t        resp_len;
30468         uint16_t        flags;
30469         /*
30470          * When this bit is set to '1', interrupt max
30471          * timer is reset whenever a completion is received.
30472          */
30473         #define HWRM_RING_CMPL_RING_QAGGINT_PARAMS_OUTPUT_FLAGS_TIMER_RESET \
30474                 UINT32_C(0x1)
30475         /*
30476          * When this bit is set to '1', ring idle mode
30477          * aggregation will be enabled.
30478          */
30479         #define HWRM_RING_CMPL_RING_QAGGINT_PARAMS_OUTPUT_FLAGS_RING_IDLE \
30480                 UINT32_C(0x2)
30481         /*
30482          * Number of completions to aggregate before DMA
30483          * during the normal mode.
30484          */
30485         uint16_t        num_cmpl_dma_aggr;
30486         /*
30487          * Number of completions to aggregate before DMA
30488          * during the interrupt mode.
30489          */
30490         uint16_t        num_cmpl_dma_aggr_during_int;
30491         /*
30492          * Timer used to aggregate completions before
30493          * DMA during the normal mode (not in interrupt mode).
30494          */
30495         uint16_t        cmpl_aggr_dma_tmr;
30496         /*
30497          * Timer used to aggregate completions before
30498          * DMA when in interrupt mode.
30499          */
30500         uint16_t        cmpl_aggr_dma_tmr_during_int;
30501         /* Minimum time between two interrupts. */
30502         uint16_t        int_lat_tmr_min;
30503         /*
30504          * Maximum wait time spent aggregating
30505          * completions before signaling the interrupt after the
30506          * interrupt is enabled.
30507          */
30508         uint16_t        int_lat_tmr_max;
30509         /*
30510          * Minimum number of completions aggregated before signaling
30511          * an interrupt.
30512          */
30513         uint16_t        num_cmpl_aggr_int;
30514         uint8_t unused_0[7];
30515         /*
30516          * This field is used in Output records to indicate that the output
30517          * is completely written to RAM.  This field should be read as '1'
30518          * to indicate that the output has been completely written.
30519          * When writing a command completion or response to an internal processor,
30520          * the order of writes has to be such that this field is written last.
30521          */
30522         uint8_t valid;
30523 } __rte_packed;
30524
30525 /*****************************************
30526  * hwrm_ring_cmpl_ring_cfg_aggint_params *
30527  *****************************************/
30528
30529
30530 /* hwrm_ring_cmpl_ring_cfg_aggint_params_input (size:320b/40B) */
30531 struct hwrm_ring_cmpl_ring_cfg_aggint_params_input {
30532         /* The HWRM command request type. */
30533         uint16_t        req_type;
30534         /*
30535          * The completion ring to send the completion event on. This should
30536          * be the NQ ID returned from the `nq_alloc` HWRM command.
30537          */
30538         uint16_t        cmpl_ring;
30539         /*
30540          * The sequence ID is used by the driver for tracking multiple
30541          * commands. This ID is treated as opaque data by the firmware and
30542          * the value is returned in the `hwrm_resp_hdr` upon completion.
30543          */
30544         uint16_t        seq_id;
30545         /*
30546          * The target ID of the command:
30547          * * 0x0-0xFFF8 - The function ID
30548          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30549          * * 0xFFFD - Reserved for user-space HWRM interface
30550          * * 0xFFFF - HWRM
30551          */
30552         uint16_t        target_id;
30553         /*
30554          * A physical address pointer pointing to a host buffer that the
30555          * command's response data will be written. This can be either a host
30556          * physical address (HPA) or a guest physical address (GPA) and must
30557          * point to a physically contiguous block of memory.
30558          */
30559         uint64_t        resp_addr;
30560         /* Physical number of completion ring. */
30561         uint16_t        ring_id;
30562         uint16_t        flags;
30563         /*
30564          * When this bit is set to '1', interrupt latency max
30565          * timer is reset whenever a completion is received.
30566          */
30567         #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_TIMER_RESET \
30568                 UINT32_C(0x1)
30569         /*
30570          * When this bit is set to '1', ring idle mode
30571          * aggregation will be enabled.
30572          */
30573         #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_RING_IDLE \
30574                 UINT32_C(0x2)
30575         /*
30576          * Set this flag to 1 when configuring parameters on a
30577          * notification queue. Set this flag to 0 when configuring
30578          * parameters on a completion queue or completion ring.
30579          */
30580         #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_IS_NQ \
30581                 UINT32_C(0x4)
30582         /*
30583          * Number of completions to aggregate before DMA
30584          * during the normal mode.
30585          */
30586         uint16_t        num_cmpl_dma_aggr;
30587         /*
30588          * Number of completions to aggregate before DMA
30589          * during the interrupt mode.
30590          */
30591         uint16_t        num_cmpl_dma_aggr_during_int;
30592         /*
30593          * Timer used to aggregate completions before
30594          * DMA during the normal mode (not in interrupt mode).
30595          */
30596         uint16_t        cmpl_aggr_dma_tmr;
30597         /*
30598          * Timer used to aggregate completions before
30599          * DMA while in interrupt mode.
30600          */
30601         uint16_t        cmpl_aggr_dma_tmr_during_int;
30602         /* Minimum time between two interrupts. */
30603         uint16_t        int_lat_tmr_min;
30604         /*
30605          * Maximum wait time spent aggregating
30606          * completions before signaling the interrupt after the
30607          * interrupt is enabled.
30608          */
30609         uint16_t        int_lat_tmr_max;
30610         /*
30611          * Minimum number of completions aggregated before signaling
30612          * an interrupt.
30613          */
30614         uint16_t        num_cmpl_aggr_int;
30615         /*
30616          * Bitfield that indicates which parameters are to be applied. Only
30617          * required when configuring devices with notification queues, and
30618          * used in that case to set certain parameters on completion queues
30619          * and others on notification queues.
30620          */
30621         uint16_t        enables;
30622         /*
30623          * This bit must be '1' for the num_cmpl_dma_aggr field to be
30624          * configured.
30625          */
30626         #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_DMA_AGGR \
30627                 UINT32_C(0x1)
30628         /*
30629          * This bit must be '1' for the num_cmpl_dma_aggr_during_int field to be
30630          * configured.
30631          */
30632         #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_DMA_AGGR_DURING_INT \
30633                 UINT32_C(0x2)
30634         /*
30635          * This bit must be '1' for the cmpl_aggr_dma_tmr field to be
30636          * configured.
30637          */
30638         #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_CMPL_AGGR_DMA_TMR \
30639                 UINT32_C(0x4)
30640         /*
30641          * This bit must be '1' for the int_lat_tmr_min field to be
30642          * configured.
30643          */
30644         #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_INT_LAT_TMR_MIN \
30645                 UINT32_C(0x8)
30646         /*
30647          * This bit must be '1' for the int_lat_tmr_max field to be
30648          * configured.
30649          */
30650         #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_INT_LAT_TMR_MAX \
30651                 UINT32_C(0x10)
30652         /*
30653          * This bit must be '1' for the num_cmpl_aggr_int field to be
30654          * configured.
30655          */
30656         #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_AGGR_INT \
30657                 UINT32_C(0x20)
30658         uint8_t unused_0[4];
30659 } __rte_packed;
30660
30661 /* hwrm_ring_cmpl_ring_cfg_aggint_params_output (size:128b/16B) */
30662 struct hwrm_ring_cmpl_ring_cfg_aggint_params_output {
30663         /* The specific error status for the command. */
30664         uint16_t        error_code;
30665         /* The HWRM command request type. */
30666         uint16_t        req_type;
30667         /* The sequence ID from the original command. */
30668         uint16_t        seq_id;
30669         /* The length of the response data in number of bytes. */
30670         uint16_t        resp_len;
30671         uint8_t unused_0[7];
30672         /*
30673          * This field is used in Output records to indicate that the output
30674          * is completely written to RAM.  This field should be read as '1'
30675          * to indicate that the output has been completely written.
30676          * When writing a command completion or response to an internal processor,
30677          * the order of writes has to be such that this field is written last.
30678          */
30679         uint8_t valid;
30680 } __rte_packed;
30681
30682 /***********************
30683  * hwrm_ring_grp_alloc *
30684  ***********************/
30685
30686
30687 /* hwrm_ring_grp_alloc_input (size:192b/24B) */
30688 struct hwrm_ring_grp_alloc_input {
30689         /* The HWRM command request type. */
30690         uint16_t        req_type;
30691         /*
30692          * The completion ring to send the completion event on. This should
30693          * be the NQ ID returned from the `nq_alloc` HWRM command.
30694          */
30695         uint16_t        cmpl_ring;
30696         /*
30697          * The sequence ID is used by the driver for tracking multiple
30698          * commands. This ID is treated as opaque data by the firmware and
30699          * the value is returned in the `hwrm_resp_hdr` upon completion.
30700          */
30701         uint16_t        seq_id;
30702         /*
30703          * The target ID of the command:
30704          * * 0x0-0xFFF8 - The function ID
30705          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30706          * * 0xFFFD - Reserved for user-space HWRM interface
30707          * * 0xFFFF - HWRM
30708          */
30709         uint16_t        target_id;
30710         /*
30711          * A physical address pointer pointing to a host buffer that the
30712          * command's response data will be written. This can be either a host
30713          * physical address (HPA) or a guest physical address (GPA) and must
30714          * point to a physically contiguous block of memory.
30715          */
30716         uint64_t        resp_addr;
30717         /*
30718          * This value identifies the CR associated with the ring
30719          * group.
30720          */
30721         uint16_t        cr;
30722         /*
30723          * This value identifies the main RR associated with the ring
30724          * group.
30725          */
30726         uint16_t        rr;
30727         /*
30728          * This value identifies the aggregation RR associated with
30729          * the ring group.  If this value is 0xFF... (All Fs), then no
30730          * Aggregation ring will be set.
30731          */
30732         uint16_t        ar;
30733         /*
30734          * This value identifies the statistics context associated
30735          * with the ring group.
30736          */
30737         uint16_t        sc;
30738 } __rte_packed;
30739
30740 /* hwrm_ring_grp_alloc_output (size:128b/16B) */
30741 struct hwrm_ring_grp_alloc_output {
30742         /* The specific error status for the command. */
30743         uint16_t        error_code;
30744         /* The HWRM command request type. */
30745         uint16_t        req_type;
30746         /* The sequence ID from the original command. */
30747         uint16_t        seq_id;
30748         /* The length of the response data in number of bytes. */
30749         uint16_t        resp_len;
30750         /*
30751          * This is the ring group ID value.  Use this value to program
30752          * the default ring group for the VNIC or as table entries
30753          * in an RSS/COS context.
30754          */
30755         uint32_t        ring_group_id;
30756         uint8_t unused_0[3];
30757         /*
30758          * This field is used in Output records to indicate that the output
30759          * is completely written to RAM.  This field should be read as '1'
30760          * to indicate that the output has been completely written.
30761          * When writing a command completion or response to an internal processor,
30762          * the order of writes has to be such that this field is written last.
30763          */
30764         uint8_t valid;
30765 } __rte_packed;
30766
30767 /**********************
30768  * hwrm_ring_grp_free *
30769  **********************/
30770
30771
30772 /* hwrm_ring_grp_free_input (size:192b/24B) */
30773 struct hwrm_ring_grp_free_input {
30774         /* The HWRM command request type. */
30775         uint16_t        req_type;
30776         /*
30777          * The completion ring to send the completion event on. This should
30778          * be the NQ ID returned from the `nq_alloc` HWRM command.
30779          */
30780         uint16_t        cmpl_ring;
30781         /*
30782          * The sequence ID is used by the driver for tracking multiple
30783          * commands. This ID is treated as opaque data by the firmware and
30784          * the value is returned in the `hwrm_resp_hdr` upon completion.
30785          */
30786         uint16_t        seq_id;
30787         /*
30788          * The target ID of the command:
30789          * * 0x0-0xFFF8 - The function ID
30790          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30791          * * 0xFFFD - Reserved for user-space HWRM interface
30792          * * 0xFFFF - HWRM
30793          */
30794         uint16_t        target_id;
30795         /*
30796          * A physical address pointer pointing to a host buffer that the
30797          * command's response data will be written. This can be either a host
30798          * physical address (HPA) or a guest physical address (GPA) and must
30799          * point to a physically contiguous block of memory.
30800          */
30801         uint64_t        resp_addr;
30802         /* This is the ring group ID value. */
30803         uint32_t        ring_group_id;
30804         uint8_t unused_0[4];
30805 } __rte_packed;
30806
30807 /* hwrm_ring_grp_free_output (size:128b/16B) */
30808 struct hwrm_ring_grp_free_output {
30809         /* The specific error status for the command. */
30810         uint16_t        error_code;
30811         /* The HWRM command request type. */
30812         uint16_t        req_type;
30813         /* The sequence ID from the original command. */
30814         uint16_t        seq_id;
30815         /* The length of the response data in number of bytes. */
30816         uint16_t        resp_len;
30817         uint8_t unused_0[7];
30818         /*
30819          * This field is used in Output records to indicate that the output
30820          * is completely written to RAM.  This field should be read as '1'
30821          * to indicate that the output has been completely written.
30822          * When writing a command completion or response to an internal processor,
30823          * the order of writes has to be such that this field is written last.
30824          */
30825         uint8_t valid;
30826 } __rte_packed;
30827
30828 /************************
30829  * hwrm_ring_schq_alloc *
30830  ************************/
30831
30832
30833 /* hwrm_ring_schq_alloc_input (size:1088b/136B) */
30834 struct hwrm_ring_schq_alloc_input {
30835         /* The HWRM command request type. */
30836         uint16_t        req_type;
30837         /*
30838          * The completion ring to send the completion event on. This should
30839          * be the NQ ID returned from the `nq_alloc` HWRM command.
30840          */
30841         uint16_t        cmpl_ring;
30842         /*
30843          * The sequence ID is used by the driver for tracking multiple
30844          * commands. This ID is treated as opaque data by the firmware and
30845          * the value is returned in the `hwrm_resp_hdr` upon completion.
30846          */
30847         uint16_t        seq_id;
30848         /*
30849          * The target ID of the command:
30850          * * 0x0-0xFFF8 - The function ID
30851          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
30852          * * 0xFFFD - Reserved for user-space HWRM interface
30853          * * 0xFFFF - HWRM
30854          */
30855         uint16_t        target_id;
30856         /*
30857          * A physical address pointer pointing to a host buffer that the
30858          * command's response data will be written. This can be either a host
30859          * physical address (HPA) or a guest physical address (GPA) and must
30860          * point to a physically contiguous block of memory.
30861          */
30862         uint64_t        resp_addr;
30863         uint32_t        enables;
30864         /*
30865          * This bit must be '1' for the tqm_ring0 fields to be
30866          * configured.
30867          */
30868         #define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING0     UINT32_C(0x1)
30869         /*
30870          * This bit must be '1' for the tqm_ring1 fields to be
30871          * configured.
30872          */
30873         #define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING1     UINT32_C(0x2)
30874         /*
30875          * This bit must be '1' for the tqm_ring2 fields to be
30876          * configured.
30877          */
30878         #define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING2     UINT32_C(0x4)
30879         /*
30880          * This bit must be '1' for the tqm_ring3 fields to be
30881          * configured.
30882          */
30883         #define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING3     UINT32_C(0x8)
30884         /*
30885          * This bit must be '1' for the tqm_ring4 fields to be
30886          * configured.
30887          */
30888         #define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING4     UINT32_C(0x10)
30889         /*
30890          * This bit must be '1' for the tqm_ring5 fields to be
30891          * configured.
30892          */
30893         #define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING5     UINT32_C(0x20)
30894         /*
30895          * This bit must be '1' for the tqm_ring6 fields to be
30896          * configured.
30897          */
30898         #define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING6     UINT32_C(0x40)
30899         /*
30900          * This bit must be '1' for the tqm_ring7 fields to be
30901          * configured.
30902          */
30903         #define HWRM_RING_SCHQ_ALLOC_INPUT_ENABLES_TQM_RING7     UINT32_C(0x80)
30904         /* Reserved for future use. */
30905         uint32_t        reserved;
30906         /* TQM ring 0 page size and level. */
30907         uint8_t tqm_ring0_pg_size_tqm_ring0_lvl;
30908         /* TQM ring 0 PBL indirect levels. */
30909         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_LVL_MASK \
30910                 UINT32_C(0xf)
30911         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_LVL_SFT       0
30912         /* PBL pointer is physical start address. */
30913         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_LVL_LVL_0 \
30914                 UINT32_C(0x0)
30915         /* PBL pointer points to PTE table. */
30916         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_LVL_LVL_1 \
30917                 UINT32_C(0x1)
30918         /*
30919          * PBL pointer points to PDE table with each entry pointing to PTE
30920          * tables.
30921          */
30922         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_LVL_LVL_2 \
30923                 UINT32_C(0x2)
30924         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_LVL_LAST \
30925                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_LVL_LVL_2
30926         /* TQM ring 0 page size. */
30927         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_MASK \
30928                 UINT32_C(0xf0)
30929         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_SFT   4
30930         /* 4KB. */
30931         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_PG_4K \
30932                 (UINT32_C(0x0) << 4)
30933         /* 8KB. */
30934         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_PG_8K \
30935                 (UINT32_C(0x1) << 4)
30936         /* 64KB. */
30937         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_PG_64K \
30938                 (UINT32_C(0x2) << 4)
30939         /* 2MB. */
30940         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_PG_2M \
30941                 (UINT32_C(0x3) << 4)
30942         /* 8MB. */
30943         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_PG_8M \
30944                 (UINT32_C(0x4) << 4)
30945         /* 1GB. */
30946         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_PG_1G \
30947                 (UINT32_C(0x5) << 4)
30948         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_LAST \
30949                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING0_PG_SIZE_PG_1G
30950         /* TQM ring 1 page size and level. */
30951         uint8_t tqm_ring1_pg_size_tqm_ring1_lvl;
30952         /* TQM ring 1 PBL indirect levels. */
30953         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_LVL_MASK \
30954                 UINT32_C(0xf)
30955         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_LVL_SFT       0
30956         /* PBL pointer is physical start address. */
30957         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_LVL_LVL_0 \
30958                 UINT32_C(0x0)
30959         /* PBL pointer points to PTE table. */
30960         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_LVL_LVL_1 \
30961                 UINT32_C(0x1)
30962         /*
30963          * PBL pointer points to PDE table with each entry pointing to PTE
30964          * tables.
30965          */
30966         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_LVL_LVL_2 \
30967                 UINT32_C(0x2)
30968         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_LVL_LAST \
30969                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_LVL_LVL_2
30970         /* TQM ring 1 page size. */
30971         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_MASK \
30972                 UINT32_C(0xf0)
30973         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_SFT   4
30974         /* 4KB. */
30975         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_PG_4K \
30976                 (UINT32_C(0x0) << 4)
30977         /* 8KB. */
30978         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_PG_8K \
30979                 (UINT32_C(0x1) << 4)
30980         /* 64KB. */
30981         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_PG_64K \
30982                 (UINT32_C(0x2) << 4)
30983         /* 2MB. */
30984         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_PG_2M \
30985                 (UINT32_C(0x3) << 4)
30986         /* 8MB. */
30987         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_PG_8M \
30988                 (UINT32_C(0x4) << 4)
30989         /* 1GB. */
30990         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_PG_1G \
30991                 (UINT32_C(0x5) << 4)
30992         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_LAST \
30993                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING1_PG_SIZE_PG_1G
30994         /* TQM ring 2 page size and level. */
30995         uint8_t tqm_ring2_pg_size_tqm_ring2_lvl;
30996         /* TQM ring 2 PBL indirect levels. */
30997         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_LVL_MASK \
30998                 UINT32_C(0xf)
30999         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_LVL_SFT       0
31000         /* PBL pointer is physical start address. */
31001         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_LVL_LVL_0 \
31002                 UINT32_C(0x0)
31003         /* PBL pointer points to PTE table. */
31004         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_LVL_LVL_1 \
31005                 UINT32_C(0x1)
31006         /*
31007          * PBL pointer points to PDE table with each entry pointing to PTE
31008          * tables.
31009          */
31010         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_LVL_LVL_2 \
31011                 UINT32_C(0x2)
31012         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_LVL_LAST \
31013                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_LVL_LVL_2
31014         /* TQM ring 2 page size. */
31015         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_MASK \
31016                 UINT32_C(0xf0)
31017         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_SFT   4
31018         /* 4KB. */
31019         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_PG_4K \
31020                 (UINT32_C(0x0) << 4)
31021         /* 8KB. */
31022         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_PG_8K \
31023                 (UINT32_C(0x1) << 4)
31024         /* 64KB. */
31025         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_PG_64K \
31026                 (UINT32_C(0x2) << 4)
31027         /* 2MB. */
31028         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_PG_2M \
31029                 (UINT32_C(0x3) << 4)
31030         /* 8MB. */
31031         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_PG_8M \
31032                 (UINT32_C(0x4) << 4)
31033         /* 1GB. */
31034         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_PG_1G \
31035                 (UINT32_C(0x5) << 4)
31036         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_LAST \
31037                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING2_PG_SIZE_PG_1G
31038         /* TQM ring 3 page size and level. */
31039         uint8_t tqm_ring3_pg_size_tqm_ring3_lvl;
31040         /* TQM ring 3 PBL indirect levels. */
31041         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_LVL_MASK \
31042                 UINT32_C(0xf)
31043         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_LVL_SFT       0
31044         /* PBL pointer is physical start address. */
31045         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_LVL_LVL_0 \
31046                 UINT32_C(0x0)
31047         /* PBL pointer points to PTE table. */
31048         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_LVL_LVL_1 \
31049                 UINT32_C(0x1)
31050         /*
31051          * PBL pointer points to PDE table with each entry pointing to PTE
31052          * tables.
31053          */
31054         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_LVL_LVL_2 \
31055                 UINT32_C(0x2)
31056         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_LVL_LAST \
31057                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_LVL_LVL_2
31058         /* TQM ring 3 page size. */
31059         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_MASK \
31060                 UINT32_C(0xf0)
31061         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_SFT   4
31062         /* 4KB. */
31063         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_PG_4K \
31064                 (UINT32_C(0x0) << 4)
31065         /* 8KB. */
31066         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_PG_8K \
31067                 (UINT32_C(0x1) << 4)
31068         /* 64KB. */
31069         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_PG_64K \
31070                 (UINT32_C(0x2) << 4)
31071         /* 2MB. */
31072         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_PG_2M \
31073                 (UINT32_C(0x3) << 4)
31074         /* 8MB. */
31075         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_PG_8M \
31076                 (UINT32_C(0x4) << 4)
31077         /* 1GB. */
31078         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_PG_1G \
31079                 (UINT32_C(0x5) << 4)
31080         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_LAST \
31081                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING3_PG_SIZE_PG_1G
31082         /* TQM ring 4 page size and level. */
31083         uint8_t tqm_ring4_pg_size_tqm_ring4_lvl;
31084         /* TQM ring 4 PBL indirect levels. */
31085         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_LVL_MASK \
31086                 UINT32_C(0xf)
31087         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_LVL_SFT       0
31088         /* PBL pointer is physical start address. */
31089         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_LVL_LVL_0 \
31090                 UINT32_C(0x0)
31091         /* PBL pointer points to PTE table. */
31092         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_LVL_LVL_1 \
31093                 UINT32_C(0x1)
31094         /*
31095          * PBL pointer points to PDE table with each entry pointing to PTE
31096          * tables.
31097          */
31098         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_LVL_LVL_2 \
31099                 UINT32_C(0x2)
31100         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_LVL_LAST \
31101                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_LVL_LVL_2
31102         /* TQM ring 4 page size. */
31103         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_MASK \
31104                 UINT32_C(0xf0)
31105         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_SFT   4
31106         /* 4KB. */
31107         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_PG_4K \
31108                 (UINT32_C(0x0) << 4)
31109         /* 8KB. */
31110         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_PG_8K \
31111                 (UINT32_C(0x1) << 4)
31112         /* 64KB. */
31113         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_PG_64K \
31114                 (UINT32_C(0x2) << 4)
31115         /* 2MB. */
31116         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_PG_2M \
31117                 (UINT32_C(0x3) << 4)
31118         /* 8MB. */
31119         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_PG_8M \
31120                 (UINT32_C(0x4) << 4)
31121         /* 1GB. */
31122         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_PG_1G \
31123                 (UINT32_C(0x5) << 4)
31124         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_LAST \
31125                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING4_PG_SIZE_PG_1G
31126         /* TQM ring 5 page size and level. */
31127         uint8_t tqm_ring5_pg_size_tqm_ring5_lvl;
31128         /* TQM ring 5 PBL indirect levels. */
31129         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_LVL_MASK \
31130                 UINT32_C(0xf)
31131         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_LVL_SFT       0
31132         /* PBL pointer is physical start address. */
31133         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_LVL_LVL_0 \
31134                 UINT32_C(0x0)
31135         /* PBL pointer points to PTE table. */
31136         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_LVL_LVL_1 \
31137                 UINT32_C(0x1)
31138         /*
31139          * PBL pointer points to PDE table with each entry pointing to PTE
31140          * tables.
31141          */
31142         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_LVL_LVL_2 \
31143                 UINT32_C(0x2)
31144         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_LVL_LAST \
31145                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_LVL_LVL_2
31146         /* TQM ring 5 page size. */
31147         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_MASK \
31148                 UINT32_C(0xf0)
31149         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_SFT   4
31150         /* 4KB. */
31151         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_PG_4K \
31152                 (UINT32_C(0x0) << 4)
31153         /* 8KB. */
31154         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_PG_8K \
31155                 (UINT32_C(0x1) << 4)
31156         /* 64KB. */
31157         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_PG_64K \
31158                 (UINT32_C(0x2) << 4)
31159         /* 2MB. */
31160         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_PG_2M \
31161                 (UINT32_C(0x3) << 4)
31162         /* 8MB. */
31163         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_PG_8M \
31164                 (UINT32_C(0x4) << 4)
31165         /* 1GB. */
31166         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_PG_1G \
31167                 (UINT32_C(0x5) << 4)
31168         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_LAST \
31169                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING5_PG_SIZE_PG_1G
31170         /* TQM ring 6 page size and level. */
31171         uint8_t tqm_ring6_pg_size_tqm_ring6_lvl;
31172         /* TQM ring 6 PBL indirect levels. */
31173         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_LVL_MASK \
31174                 UINT32_C(0xf)
31175         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_LVL_SFT       0
31176         /* PBL pointer is physical start address. */
31177         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_LVL_LVL_0 \
31178                 UINT32_C(0x0)
31179         /* PBL pointer points to PTE table. */
31180         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_LVL_LVL_1 \
31181                 UINT32_C(0x1)
31182         /*
31183          * PBL pointer points to PDE table with each entry pointing to PTE
31184          * tables.
31185          */
31186         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_LVL_LVL_2 \
31187                 UINT32_C(0x2)
31188         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_LVL_LAST \
31189                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_LVL_LVL_2
31190         /* TQM ring 6 page size. */
31191         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_MASK \
31192                 UINT32_C(0xf0)
31193         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_SFT   4
31194         /* 4KB. */
31195         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_PG_4K \
31196                 (UINT32_C(0x0) << 4)
31197         /* 8KB. */
31198         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_PG_8K \
31199                 (UINT32_C(0x1) << 4)
31200         /* 64KB. */
31201         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_PG_64K \
31202                 (UINT32_C(0x2) << 4)
31203         /* 2MB. */
31204         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_PG_2M \
31205                 (UINT32_C(0x3) << 4)
31206         /* 8MB. */
31207         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_PG_8M \
31208                 (UINT32_C(0x4) << 4)
31209         /* 1GB. */
31210         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_PG_1G \
31211                 (UINT32_C(0x5) << 4)
31212         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_LAST \
31213                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING6_PG_SIZE_PG_1G
31214         /* TQM ring 7 page size and level. */
31215         uint8_t tqm_ring7_pg_size_tqm_ring7_lvl;
31216         /* TQM ring 7 PBL indirect levels. */
31217         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_LVL_MASK \
31218                 UINT32_C(0xf)
31219         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_LVL_SFT       0
31220         /* PBL pointer is physical start address. */
31221         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_LVL_LVL_0 \
31222                 UINT32_C(0x0)
31223         /* PBL pointer points to PTE table. */
31224         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_LVL_LVL_1 \
31225                 UINT32_C(0x1)
31226         /*
31227          * PBL pointer points to PDE table with each entry pointing to PTE
31228          * tables.
31229          */
31230         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_LVL_LVL_2 \
31231                 UINT32_C(0x2)
31232         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_LVL_LAST \
31233                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_LVL_LVL_2
31234         /* TQM ring 7 page size. */
31235         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_MASK \
31236                 UINT32_C(0xf0)
31237         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_SFT   4
31238         /* 4KB. */
31239         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_PG_4K \
31240                 (UINT32_C(0x0) << 4)
31241         /* 8KB. */
31242         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_PG_8K \
31243                 (UINT32_C(0x1) << 4)
31244         /* 64KB. */
31245         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_PG_64K \
31246                 (UINT32_C(0x2) << 4)
31247         /* 2MB. */
31248         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_PG_2M \
31249                 (UINT32_C(0x3) << 4)
31250         /* 8MB. */
31251         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_PG_8M \
31252                 (UINT32_C(0x4) << 4)
31253         /* 1GB. */
31254         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_PG_1G \
31255                 (UINT32_C(0x5) << 4)
31256         #define HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_LAST \
31257                 HWRM_RING_SCHQ_ALLOC_INPUT_TQM_RING7_PG_SIZE_PG_1G
31258         /* TQM ring 0 page directory. */
31259         uint64_t        tqm_ring0_page_dir;
31260         /* TQM ring 1 page directory. */
31261         uint64_t        tqm_ring1_page_dir;
31262         /* TQM ring 2 page directory. */
31263         uint64_t        tqm_ring2_page_dir;
31264         /* TQM ring 3 page directory. */
31265         uint64_t        tqm_ring3_page_dir;
31266         /* TQM ring 4 page directory. */
31267         uint64_t        tqm_ring4_page_dir;
31268         /* TQM ring 5 page directory. */
31269         uint64_t        tqm_ring5_page_dir;
31270         /* TQM ring 6 page directory. */
31271         uint64_t        tqm_ring6_page_dir;
31272         /* TQM ring 7 page directory. */
31273         uint64_t        tqm_ring7_page_dir;
31274         /*
31275          * Number of TQM ring 0 entries.
31276          *
31277          * TQM fastpath rings should be sized large enough to accommodate the
31278          * maximum number of QPs (either L2 or RoCE, or both if shared)
31279          * that can be enqueued to the TQM ring.
31280          *
31281          * Note that TQM ring sizes cannot be extended while the system is
31282          * operational. If a PF driver needs to extend a TQM ring, it needs
31283          * to delete the SCHQ and then reallocate it.
31284          */
31285         uint32_t        tqm_ring0_num_entries;
31286         /*
31287          * Number of TQM ring 1 entries.
31288          *
31289          * TQM fastpath rings should be sized large enough to accommodate the
31290          * maximum number of QPs (either L2 or RoCE, or both if shared)
31291          * that can be enqueued to the TQM ring.
31292          *
31293          * Note that TQM ring sizes cannot be extended while the system is
31294          * operational. If a PF driver needs to extend a TQM ring, it needs
31295          * to delete the SCHQ and then reallocate it.
31296          */
31297         uint32_t        tqm_ring1_num_entries;
31298         /*
31299          * Number of TQM ring 2 entries.
31300          *
31301          * TQM fastpath rings should be sized large enough to accommodate the
31302          * maximum number of QPs (either L2 or RoCE, or both if shared)
31303          * that can be enqueued to the TQM ring.
31304          *
31305          * Note that TQM ring sizes cannot be extended while the system is
31306          * operational. If a PF driver needs to extend a TQM ring, it needs
31307          * to delete the SCHQ and then reallocate it.
31308          */
31309         uint32_t        tqm_ring2_num_entries;
31310         /*
31311          * Number of TQM ring 3 entries.
31312          *
31313          * TQM fastpath rings should be sized large enough to accommodate the
31314          * maximum number of QPs (either L2 or RoCE, or both if shared)
31315          * that can be enqueued to the TQM ring.
31316          *
31317          * Note that TQM ring sizes cannot be extended while the system is
31318          * operational. If a PF driver needs to extend a TQM ring, it needs
31319          * to delete the SCHQ and then reallocate it.
31320          */
31321         uint32_t        tqm_ring3_num_entries;
31322         /*
31323          * Number of TQM ring 4 entries.
31324          *
31325          * TQM fastpath rings should be sized large enough to accommodate the
31326          * maximum number of QPs (either L2 or RoCE, or both if shared)
31327          * that can be enqueued to the TQM ring.
31328          *
31329          * Note that TQM ring sizes cannot be extended while the system is
31330          * operational. If a PF driver needs to extend a TQM ring, it needs
31331          * to delete the SCHQ and then reallocate it.
31332          */
31333         uint32_t        tqm_ring4_num_entries;
31334         /*
31335          * Number of TQM ring 5 entries.
31336          *
31337          * TQM fastpath rings should be sized large enough to accommodate the
31338          * maximum number of QPs (either L2 or RoCE, or both if shared)
31339          * that can be enqueued to the TQM ring.
31340          *
31341          * Note that TQM ring sizes cannot be extended while the system is
31342          * operational. If a PF driver needs to extend a TQM ring, it needs
31343          * to delete the SCHQ and then reallocate it.
31344          */
31345         uint32_t        tqm_ring5_num_entries;
31346         /*
31347          * Number of TQM ring 6 entries.
31348          *
31349          * TQM fastpath rings should be sized large enough to accommodate the
31350          * maximum number of QPs (either L2 or RoCE, or both if shared)
31351          * that can be enqueued to the TQM ring.
31352          *
31353          * Note that TQM ring sizes cannot be extended while the system is
31354          * operational. If a PF driver needs to extend a TQM ring, it needs
31355          * to delete the SCHQ and then reallocate it.
31356          */
31357         uint32_t        tqm_ring6_num_entries;
31358         /*
31359          * Number of TQM ring 7 entries.
31360          *
31361          * TQM fastpath rings should be sized large enough to accommodate the
31362          * maximum number of QPs (either L2 or RoCE, or both if shared)
31363          * that can be enqueued to the TQM ring.
31364          *
31365          * Note that TQM ring sizes cannot be extended while the system is
31366          * operational. If a PF driver needs to extend a TQM ring, it needs
31367          * to delete the SCHQ and then reallocate it.
31368          */
31369         uint32_t        tqm_ring7_num_entries;
31370         /* Number of bytes that have been allocated for each context entry. */
31371         uint16_t        tqm_entry_size;
31372         uint8_t unused_0[6];
31373 } __rte_packed;
31374
31375 /* hwrm_ring_schq_alloc_output (size:128b/16B) */
31376 struct hwrm_ring_schq_alloc_output {
31377         /* The specific error status for the command. */
31378         uint16_t        error_code;
31379         /* The HWRM command request type. */
31380         uint16_t        req_type;
31381         /* The sequence ID from the original command. */
31382         uint16_t        seq_id;
31383         /* The length of the response data in number of bytes. */
31384         uint16_t        resp_len;
31385         /*
31386          * This is an identifier for the SCHQ to be used in other HWRM commands
31387          * that need to reference this SCHQ. This value is greater than zero
31388          * (i.e. a schq_id of zero references the default SCHQ).
31389          */
31390         uint16_t        schq_id;
31391         uint8_t unused_0[5];
31392         /*
31393          * This field is used in Output records to indicate that the output
31394          * is completely written to RAM.  This field should be read as '1'
31395          * to indicate that the output has been completely written.
31396          * When writing a command completion or response to an internal processor,
31397          * the order of writes has to be such that this field is written last.
31398          */
31399         uint8_t valid;
31400 } __rte_packed;
31401
31402 /**********************
31403  * hwrm_ring_schq_cfg *
31404  **********************/
31405
31406
31407 /* hwrm_ring_schq_cfg_input (size:768b/96B) */
31408 struct hwrm_ring_schq_cfg_input {
31409         /* The HWRM command request type. */
31410         uint16_t        req_type;
31411         /*
31412          * The completion ring to send the completion event on. This should
31413          * be the NQ ID returned from the `nq_alloc` HWRM command.
31414          */
31415         uint16_t        cmpl_ring;
31416         /*
31417          * The sequence ID is used by the driver for tracking multiple
31418          * commands. This ID is treated as opaque data by the firmware and
31419          * the value is returned in the `hwrm_resp_hdr` upon completion.
31420          */
31421         uint16_t        seq_id;
31422         /*
31423          * The target ID of the command:
31424          * * 0x0-0xFFF8 - The function ID
31425          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
31426          * * 0xFFFD - Reserved for user-space HWRM interface
31427          * * 0xFFFF - HWRM
31428          */
31429         uint16_t        target_id;
31430         /*
31431          * A physical address pointer pointing to a host buffer that the
31432          * command's response data will be written. This can be either a host
31433          * physical address (HPA) or a guest physical address (GPA) and must
31434          * point to a physically contiguous block of memory.
31435          */
31436         uint64_t        resp_addr;
31437         /*
31438          * Identifies the SCHQ being configured. A schq_id of zero refers to
31439          * the default SCHQ.
31440          */
31441         uint16_t        schq_id;
31442         /*
31443          * This field is an 8 bit bitmap that indicates which TCs are enabled
31444          * in this SCHQ. Bit 0 represents traffic class 0 and bit 7 represents
31445          * traffic class 7.
31446          */
31447         uint8_t tc_enabled;
31448         uint8_t unused_0;
31449         uint32_t        flags;
31450         /* The tc_max_bw array and the max_bw parameters are valid */
31451         #define HWRM_RING_SCHQ_CFG_INPUT_FLAGS_TC_MAX_BW_ENABLED \
31452                 UINT32_C(0x1)
31453         /* The tc_min_bw array is valid */
31454         #define HWRM_RING_SCHQ_CFG_INPUT_FLAGS_TC_MIN_BW_ENABLED \
31455                 UINT32_C(0x2)
31456         /* Maximum bandwidth of the traffic class, specified in Mbps. */
31457         uint32_t        max_bw_tc0;
31458         /* Maximum bandwidth of the traffic class, specified in Mbps. */
31459         uint32_t        max_bw_tc1;
31460         /* Maximum bandwidth of the traffic class, specified in Mbps. */
31461         uint32_t        max_bw_tc2;
31462         /* Maximum bandwidth of the traffic class, specified in Mbps. */
31463         uint32_t        max_bw_tc3;
31464         /* Maximum bandwidth of the traffic class, specified in Mbps. */
31465         uint32_t        max_bw_tc4;
31466         /* Maximum bandwidth of the traffic class, specified in Mbps. */
31467         uint32_t        max_bw_tc5;
31468         /* Maximum bandwidth of the traffic class, specified in Mbps. */
31469         uint32_t        max_bw_tc6;
31470         /* Maximum bandwidth of the traffic class, specified in Mbps. */
31471         uint32_t        max_bw_tc7;
31472         /*
31473          * Bandwidth reservation for the traffic class, specified in Mbps.
31474          * A value of zero signifies that traffic belonging to this class
31475          * shares the bandwidth reservation for the same traffic class of
31476          * the default SCHQ.
31477          */
31478         uint32_t        min_bw_tc0;
31479         /*
31480          * Bandwidth reservation for the traffic class, specified in Mbps.
31481          * A value of zero signifies that traffic belonging to this class
31482          * shares the bandwidth reservation for the same traffic class of
31483          * the default SCHQ.
31484          */
31485         uint32_t        min_bw_tc1;
31486         /*
31487          * Bandwidth reservation for the traffic class, specified in Mbps.
31488          * A value of zero signifies that traffic belonging to this class
31489          * shares the bandwidth reservation for the same traffic class of
31490          * the default SCHQ.
31491          */
31492         uint32_t        min_bw_tc2;
31493         /*
31494          * Bandwidth reservation for the traffic class, specified in Mbps.
31495          * A value of zero signifies that traffic belonging to this class
31496          * shares the bandwidth reservation for the same traffic class of
31497          * the default SCHQ.
31498          */
31499         uint32_t        min_bw_tc3;
31500         /*
31501          * Bandwidth reservation for the traffic class, specified in Mbps.
31502          * A value of zero signifies that traffic belonging to this class
31503          * shares the bandwidth reservation for the same traffic class of
31504          * the default SCHQ.
31505          */
31506         uint32_t        min_bw_tc4;
31507         /*
31508          * Bandwidth reservation for the traffic class, specified in Mbps.
31509          * A value of zero signifies that traffic belonging to this class
31510          * shares the bandwidth reservation for the same traffic class of
31511          * the default SCHQ.
31512          */
31513         uint32_t        min_bw_tc5;
31514         /*
31515          * Bandwidth reservation for the traffic class, specified in Mbps.
31516          * A value of zero signifies that traffic belonging to this class
31517          * shares the bandwidth reservation for the same traffic class of
31518          * the default SCHQ.
31519          */
31520         uint32_t        min_bw_tc6;
31521         /*
31522          * Bandwidth reservation for the traffic class, specified in Mbps.
31523          * A value of zero signifies that traffic belonging to this class
31524          * shares the bandwidth reservation for the same traffic class of
31525          * the default SCHQ.
31526          */
31527         uint32_t        min_bw_tc7;
31528         /*
31529          * Indicates the max bandwidth for all enabled traffic classes in
31530          * this SCHQ, specified in Mbps.
31531          */
31532         uint32_t        max_bw;
31533         uint8_t unused_1[4];
31534 } __rte_packed;
31535
31536 /* hwrm_ring_schq_cfg_output (size:128b/16B) */
31537 struct hwrm_ring_schq_cfg_output {
31538         /* The specific error status for the command. */
31539         uint16_t        error_code;
31540         /* The HWRM command request type. */
31541         uint16_t        req_type;
31542         /* The sequence ID from the original command. */
31543         uint16_t        seq_id;
31544         /* The length of the response data in number of bytes. */
31545         uint16_t        resp_len;
31546         uint8_t unused_0[7];
31547         /*
31548          * This field is used in Output records to indicate that the output
31549          * is completely written to RAM.  This field should be read as '1'
31550          * to indicate that the output has been completely written.
31551          * When writing a command completion or response to an internal processor,
31552          * the order of writes has to be such that this field is written last.
31553          */
31554         uint8_t valid;
31555 } __rte_packed;
31556
31557 /***********************
31558  * hwrm_ring_schq_free *
31559  ***********************/
31560
31561
31562 /* hwrm_ring_schq_free_input (size:192b/24B) */
31563 struct hwrm_ring_schq_free_input {
31564         /* The HWRM command request type. */
31565         uint16_t        req_type;
31566         /*
31567          * The completion ring to send the completion event on. This should
31568          * be the NQ ID returned from the `nq_alloc` HWRM command.
31569          */
31570         uint16_t        cmpl_ring;
31571         /*
31572          * The sequence ID is used by the driver for tracking multiple
31573          * commands. This ID is treated as opaque data by the firmware and
31574          * the value is returned in the `hwrm_resp_hdr` upon completion.
31575          */
31576         uint16_t        seq_id;
31577         /*
31578          * The target ID of the command:
31579          * * 0x0-0xFFF8 - The function ID
31580          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
31581          * * 0xFFFD - Reserved for user-space HWRM interface
31582          * * 0xFFFF - HWRM
31583          */
31584         uint16_t        target_id;
31585         /*
31586          * A physical address pointer pointing to a host buffer that the
31587          * command's response data will be written. This can be either a host
31588          * physical address (HPA) or a guest physical address (GPA) and must
31589          * point to a physically contiguous block of memory.
31590          */
31591         uint64_t        resp_addr;
31592         /* Identifies the SCHQ being freed. */
31593         uint16_t        schq_id;
31594         uint8_t unused_0[6];
31595 } __rte_packed;
31596
31597 /* hwrm_ring_schq_free_output (size:128b/16B) */
31598 struct hwrm_ring_schq_free_output {
31599         /* The specific error status for the command. */
31600         uint16_t        error_code;
31601         /* The HWRM command request type. */
31602         uint16_t        req_type;
31603         /* The sequence ID from the original command. */
31604         uint16_t        seq_id;
31605         /* The length of the response data in number of bytes. */
31606         uint16_t        resp_len;
31607         uint8_t unused_0[7];
31608         /*
31609          * This field is used in Output records to indicate that the output
31610          * is completely written to RAM.  This field should be read as '1'
31611          * to indicate that the output has been completely written.
31612          * When writing a command completion or response to an internal processor,
31613          * the order of writes has to be such that this field is written last.
31614          */
31615         uint8_t valid;
31616 } __rte_packed;
31617 /*
31618  * special reserved flow ID to identify per function default
31619  * flows for vSwitch offload
31620  */
31621 #define DEFAULT_FLOW_ID 0xFFFFFFFFUL
31622 /*
31623  * special reserved flow ID to identify per function RoCEv1
31624  * flows
31625  */
31626 #define ROCEV1_FLOW_ID 0xFFFFFFFEUL
31627 /*
31628  * special reserved flow ID to identify per function RoCEv2
31629  * flows
31630  */
31631 #define ROCEV2_FLOW_ID 0xFFFFFFFDUL
31632 /*
31633  * special reserved flow ID to identify per function RoCEv2
31634  * CNP flows
31635  */
31636 #define ROCEV2_CNP_FLOW_ID 0xFFFFFFFCUL
31637
31638 /****************************
31639  * hwrm_cfa_l2_filter_alloc *
31640  ****************************/
31641
31642
31643 /* hwrm_cfa_l2_filter_alloc_input (size:768b/96B) */
31644 struct hwrm_cfa_l2_filter_alloc_input {
31645         /* The HWRM command request type. */
31646         uint16_t        req_type;
31647         /*
31648          * The completion ring to send the completion event on. This should
31649          * be the NQ ID returned from the `nq_alloc` HWRM command.
31650          */
31651         uint16_t        cmpl_ring;
31652         /*
31653          * The sequence ID is used by the driver for tracking multiple
31654          * commands. This ID is treated as opaque data by the firmware and
31655          * the value is returned in the `hwrm_resp_hdr` upon completion.
31656          */
31657         uint16_t        seq_id;
31658         /*
31659          * The target ID of the command:
31660          * * 0x0-0xFFF8 - The function ID
31661          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
31662          * * 0xFFFD - Reserved for user-space HWRM interface
31663          * * 0xFFFF - HWRM
31664          */
31665         uint16_t        target_id;
31666         /*
31667          * A physical address pointer pointing to a host buffer that the
31668          * command's response data will be written. This can be either a host
31669          * physical address (HPA) or a guest physical address (GPA) and must
31670          * point to a physically contiguous block of memory.
31671          */
31672         uint64_t        resp_addr;
31673         uint32_t        flags;
31674         /*
31675          * Enumeration denoting the RX, TX type of the resource.
31676          * This enumeration is used for resources that are similar for both
31677          * TX and RX paths of the chip.
31678          */
31679         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH \
31680                 UINT32_C(0x1)
31681         /* tx path */
31682         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_TX \
31683                 UINT32_C(0x0)
31684         /* rx path */
31685         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX \
31686                 UINT32_C(0x1)
31687         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_LAST \
31688                 HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX
31689         /* Setting of this flag indicates the applicability to the loopback path. */
31690         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK \
31691                 UINT32_C(0x2)
31692         /*
31693          * Setting of this flag indicates drop action. If this flag is not set,
31694          * then it should be considered accept action.
31695          */
31696         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_DROP \
31697                 UINT32_C(0x4)
31698         /*
31699          * If this flag is set, all t_l2_* fields are invalid
31700          * and they should not be specified.
31701          * If this flag is set, then l2_* fields refer to
31702          * fields of outermost L2 header.
31703          */
31704         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_OUTERMOST \
31705                 UINT32_C(0x8)
31706         /*
31707          * Enumeration denoting NO_ROCE_L2 to support old drivers.
31708          * New driver L2 for only L2 traffic, ROCE for roce and l2 traffic
31709          */
31710         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_MASK \
31711                 UINT32_C(0x30)
31712         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_SFT       4
31713         /* To support old drivers */
31714         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_NO_ROCE_L2 \
31715                 (UINT32_C(0x0) << 4)
31716         /* Only L2 traffic */
31717         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_L2 \
31718                 (UINT32_C(0x1) << 4)
31719         /* Roce & L2 traffic */
31720         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_ROCE \
31721                 (UINT32_C(0x2) << 4)
31722         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_LAST \
31723                 HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_ROCE
31724         /*
31725          * Setting of this flag indicates that no XDP filter is created with
31726          * L2 filter.
31727          * 0 - legacy behavior, XDP filter is created with L2 filter
31728          * 1 - XDP filter won't be created with L2 filter
31729          */
31730         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_XDP_DISABLE \
31731                 UINT32_C(0x40)
31732         /*
31733          * Setting this flag to 1 indicate the L2 fields in this command
31734          * pertain to source fields. Setting this flag to 0 indicate the
31735          * L2 fields in this command pertain to the destination fields
31736          * and this is the default/legacy behavior.
31737          */
31738         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_SOURCE_VALID \
31739                 UINT32_C(0x80)
31740         uint32_t        enables;
31741         /*
31742          * This bit must be '1' for the l2_addr field to be
31743          * configured.
31744          */
31745         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR \
31746                 UINT32_C(0x1)
31747         /*
31748          * This bit must be '1' for the l2_addr_mask field to be
31749          * configured.
31750          */
31751         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR_MASK \
31752                 UINT32_C(0x2)
31753         /*
31754          * This bit must be '1' for the l2_ovlan field to be
31755          * configured.
31756          */
31757         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_OVLAN \
31758                 UINT32_C(0x4)
31759         /*
31760          * This bit must be '1' for the l2_ovlan_mask field to be
31761          * configured.
31762          */
31763         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_OVLAN_MASK \
31764                 UINT32_C(0x8)
31765         /*
31766          * This bit must be '1' for the l2_ivlan field to be
31767          * configured.
31768          */
31769         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN \
31770                 UINT32_C(0x10)
31771         /*
31772          * This bit must be '1' for the l2_ivlan_mask field to be
31773          * configured.
31774          */
31775         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN_MASK \
31776                 UINT32_C(0x20)
31777         /*
31778          * This bit must be '1' for the t_l2_addr field to be
31779          * configured.
31780          */
31781         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_ADDR \
31782                 UINT32_C(0x40)
31783         /*
31784          * This bit must be '1' for the t_l2_addr_mask field to be
31785          * configured.
31786          */
31787         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_ADDR_MASK \
31788                 UINT32_C(0x80)
31789         /*
31790          * This bit must be '1' for the t_l2_ovlan field to be
31791          * configured.
31792          */
31793         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_OVLAN \
31794                 UINT32_C(0x100)
31795         /*
31796          * This bit must be '1' for the t_l2_ovlan_mask field to be
31797          * configured.
31798          */
31799         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_OVLAN_MASK \
31800                 UINT32_C(0x200)
31801         /*
31802          * This bit must be '1' for the t_l2_ivlan field to be
31803          * configured.
31804          */
31805         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_IVLAN \
31806                 UINT32_C(0x400)
31807         /*
31808          * This bit must be '1' for the t_l2_ivlan_mask field to be
31809          * configured.
31810          */
31811         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_IVLAN_MASK \
31812                 UINT32_C(0x800)
31813         /*
31814          * This bit must be '1' for the src_type field to be
31815          * configured.
31816          */
31817         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_SRC_TYPE \
31818                 UINT32_C(0x1000)
31819         /*
31820          * This bit must be '1' for the src_id field to be
31821          * configured.
31822          */
31823         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_SRC_ID \
31824                 UINT32_C(0x2000)
31825         /*
31826          * This bit must be '1' for the tunnel_type field to be
31827          * configured.
31828          */
31829         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
31830                 UINT32_C(0x4000)
31831         /*
31832          * This bit must be '1' for the dst_id field to be
31833          * configured.
31834          */
31835         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_DST_ID \
31836                 UINT32_C(0x8000)
31837         /*
31838          * This bit must be '1' for the mirror_vnic_id field to be
31839          * configured.
31840          */
31841         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
31842                 UINT32_C(0x10000)
31843         /*
31844          * This bit must be '1' for the num_vlans field to be
31845          * configured.
31846          */
31847         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_NUM_VLANS \
31848                 UINT32_C(0x20000)
31849         /*
31850          * This bit must be '1' for the t_num_vlans field to be
31851          * configured.
31852          */
31853         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_NUM_VLANS \
31854                 UINT32_C(0x40000)
31855         /*
31856          * This value sets the match value for the L2 MAC address.
31857          * Destination MAC address for RX path.
31858          * Source MAC address for TX path.
31859          */
31860         uint8_t l2_addr[6];
31861         /* This value sets the match value for the number of VLANs. */
31862         uint8_t num_vlans;
31863         /*
31864          * This value sets the match value for the number of VLANs
31865          * in the tunnel headers.
31866          */
31867         uint8_t t_num_vlans;
31868         /*
31869          * This value sets the mask value for the L2 address.
31870          * A value of 0 will mask the corresponding bit from
31871          * compare.
31872          */
31873         uint8_t l2_addr_mask[6];
31874         /* This value sets VLAN ID value for outer VLAN. */
31875         uint16_t        l2_ovlan;
31876         /*
31877          * This value sets the mask value for the ovlan id.
31878          * A value of 0 will mask the corresponding bit from
31879          * compare.
31880          */
31881         uint16_t        l2_ovlan_mask;
31882         /* This value sets VLAN ID value for inner VLAN. */
31883         uint16_t        l2_ivlan;
31884         /*
31885          * This value sets the mask value for the ivlan id.
31886          * A value of 0 will mask the corresponding bit from
31887          * compare.
31888          */
31889         uint16_t        l2_ivlan_mask;
31890         uint8_t unused_1[2];
31891         /*
31892          * This value sets the match value for the tunnel
31893          * L2 MAC address.
31894          * Destination MAC address for RX path.
31895          * Source MAC address for TX path.
31896          */
31897         uint8_t t_l2_addr[6];
31898         uint8_t unused_2[2];
31899         /*
31900          * This value sets the mask value for the tunnel L2
31901          * address.
31902          * A value of 0 will mask the corresponding bit from
31903          * compare.
31904          */
31905         uint8_t t_l2_addr_mask[6];
31906         /* This value sets VLAN ID value for tunnel outer VLAN. */
31907         uint16_t        t_l2_ovlan;
31908         /*
31909          * This value sets the mask value for the tunnel ovlan id.
31910          * A value of 0 will mask the corresponding bit from
31911          * compare.
31912          */
31913         uint16_t        t_l2_ovlan_mask;
31914         /* This value sets VLAN ID value for tunnel inner VLAN. */
31915         uint16_t        t_l2_ivlan;
31916         /*
31917          * This value sets the mask value for the tunnel ivlan id.
31918          * A value of 0 will mask the corresponding bit from
31919          * compare.
31920          */
31921         uint16_t        t_l2_ivlan_mask;
31922         /* This value identifies the type of source of the packet. */
31923         uint8_t src_type;
31924         /* Network port */
31925         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_NPORT UINT32_C(0x0)
31926         /* Physical function */
31927         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_PF    UINT32_C(0x1)
31928         /* Virtual function */
31929         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_VF    UINT32_C(0x2)
31930         /* Virtual NIC of a function */
31931         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_VNIC  UINT32_C(0x3)
31932         /* Embedded processor for CFA management */
31933         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_KONG  UINT32_C(0x4)
31934         /* Embedded processor for OOB management */
31935         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_APE   UINT32_C(0x5)
31936         /* Embedded processor for RoCE */
31937         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_BONO  UINT32_C(0x6)
31938         /* Embedded processor for network proxy functions */
31939         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_TANG  UINT32_C(0x7)
31940         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_LAST \
31941                 HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_TANG
31942         uint8_t unused_3;
31943         /*
31944          * This value is the id of the source.
31945          * For a network port, it represents port_id.
31946          * For a physical function, it represents fid.
31947          * For a virtual function, it represents vf_id.
31948          * For a vnic, it represents vnic_id.
31949          * For embedded processors, this id is not valid.
31950          *
31951          * Notes:
31952          * 1. The function ID is implied if it src_id is
31953          *    not provided for a src_type that is either
31954          */
31955         uint32_t        src_id;
31956         /* Tunnel Type. */
31957         uint8_t tunnel_type;
31958         /* Non-tunnel */
31959         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
31960                 UINT32_C(0x0)
31961         /* Virtual eXtensible Local Area Network (VXLAN) */
31962         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
31963                 UINT32_C(0x1)
31964         /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
31965         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
31966                 UINT32_C(0x2)
31967         /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
31968         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
31969                 UINT32_C(0x3)
31970         /* IP in IP */
31971         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
31972                 UINT32_C(0x4)
31973         /* Generic Network Virtualization Encapsulation (Geneve) */
31974         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
31975                 UINT32_C(0x5)
31976         /* Multi-Protocol Label Switching (MPLS) */
31977         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
31978                 UINT32_C(0x6)
31979         /* Stateless Transport Tunnel (STT) */
31980         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \
31981                 UINT32_C(0x7)
31982         /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
31983         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
31984                 UINT32_C(0x8)
31985         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
31986         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
31987                 UINT32_C(0x9)
31988         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
31989         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
31990                 UINT32_C(0xa)
31991         /* Use fixed layer 2 ether type of 0xFFFF */
31992         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
31993                 UINT32_C(0xb)
31994         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
31995         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
31996                 UINT32_C(0xc)
31997         /* Any tunneled traffic */
31998         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
31999                 UINT32_C(0xff)
32000         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \
32001                 HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
32002         uint8_t unused_4;
32003         /*
32004          * If set, this value shall represent the
32005          * Logical VNIC ID of the destination VNIC for the RX
32006          * path and network port id of the destination port for
32007          * the TX path.
32008          */
32009         uint16_t        dst_id;
32010         /*
32011          * Logical VNIC ID of the VNIC where traffic is
32012          * mirrored.
32013          */
32014         uint16_t        mirror_vnic_id;
32015         /*
32016          * This hint is provided to help in placing
32017          * the filter in the filter table.
32018          */
32019         uint8_t pri_hint;
32020         /* No preference */
32021         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_NO_PREFER \
32022                 UINT32_C(0x0)
32023         /* Above the given filter */
32024         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_ABOVE_FILTER \
32025                 UINT32_C(0x1)
32026         /* Below the given filter */
32027         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_BELOW_FILTER \
32028                 UINT32_C(0x2)
32029         /* As high as possible */
32030         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MAX \
32031                 UINT32_C(0x3)
32032         /* As low as possible */
32033         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MIN \
32034                 UINT32_C(0x4)
32035         #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_LAST \
32036                 HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MIN
32037         uint8_t unused_5;
32038         uint32_t        unused_6;
32039         /*
32040          * This is the ID of the filter that goes along with
32041          * the pri_hint.
32042          *
32043          * This field is valid only for the following values.
32044          * 1 - Above the given filter
32045          * 2 - Below the given filter
32046          */
32047         uint64_t        l2_filter_id_hint;
32048 } __rte_packed;
32049
32050 /* hwrm_cfa_l2_filter_alloc_output (size:192b/24B) */
32051 struct hwrm_cfa_l2_filter_alloc_output {
32052         /* The specific error status for the command. */
32053         uint16_t        error_code;
32054         /* The HWRM command request type. */
32055         uint16_t        req_type;
32056         /* The sequence ID from the original command. */
32057         uint16_t        seq_id;
32058         /* The length of the response data in number of bytes. */
32059         uint16_t        resp_len;
32060         /*
32061          * This value identifies a set of CFA data structures used for an L2
32062          * context.
32063          */
32064         uint64_t        l2_filter_id;
32065         /*
32066          * The flow id value in bit 0-29 is the actual ID of the flow
32067          * associated with this filter and it shall be used to match
32068          * and associate the flow identifier returned in completion
32069          * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
32070          * shall indicate no valid flow id.
32071          */
32072         uint32_t        flow_id;
32073         /* Indicate the flow id value. */
32074         #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
32075                 UINT32_C(0x3fffffff)
32076         #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
32077         /* Indicate type of the flow. */
32078         #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE \
32079                 UINT32_C(0x40000000)
32080         /*
32081          * If this bit set to 0, then it indicates that the flow is
32082          * internal flow.
32083          */
32084         #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
32085                 (UINT32_C(0x0) << 30)
32086         /*
32087          * If this bit is set to 1, then it indicates that the flow is
32088          * external flow.
32089          */
32090         #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
32091                 (UINT32_C(0x1) << 30)
32092         #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
32093                 HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
32094         /* Indicate the flow direction. */
32095         #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR \
32096                 UINT32_C(0x80000000)
32097         /* If this bit set to 0, then it indicates rx flow. */
32098         #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
32099                 (UINT32_C(0x0) << 31)
32100         /* If this bit is set to 1, then it indicates that tx flow. */
32101         #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
32102                 (UINT32_C(0x1) << 31)
32103         #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
32104                 HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX
32105         uint8_t unused_0[3];
32106         /*
32107          * This field is used in Output records to indicate that the output
32108          * is completely written to RAM. This field should be read as '1'
32109          * to indicate that the output has been completely written.
32110          * When writing a command completion or response to an internal processor,
32111          * the order of writes has to be such that this field is written last.
32112          */
32113         uint8_t valid;
32114 } __rte_packed;
32115
32116 /***************************
32117  * hwrm_cfa_l2_filter_free *
32118  ***************************/
32119
32120
32121 /* hwrm_cfa_l2_filter_free_input (size:192b/24B) */
32122 struct hwrm_cfa_l2_filter_free_input {
32123         /* The HWRM command request type. */
32124         uint16_t        req_type;
32125         /*
32126          * The completion ring to send the completion event on. This should
32127          * be the NQ ID returned from the `nq_alloc` HWRM command.
32128          */
32129         uint16_t        cmpl_ring;
32130         /*
32131          * The sequence ID is used by the driver for tracking multiple
32132          * commands. This ID is treated as opaque data by the firmware and
32133          * the value is returned in the `hwrm_resp_hdr` upon completion.
32134          */
32135         uint16_t        seq_id;
32136         /*
32137          * The target ID of the command:
32138          * * 0x0-0xFFF8 - The function ID
32139          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
32140          * * 0xFFFD - Reserved for user-space HWRM interface
32141          * * 0xFFFF - HWRM
32142          */
32143         uint16_t        target_id;
32144         /*
32145          * A physical address pointer pointing to a host buffer that the
32146          * command's response data will be written. This can be either a host
32147          * physical address (HPA) or a guest physical address (GPA) and must
32148          * point to a physically contiguous block of memory.
32149          */
32150         uint64_t        resp_addr;
32151         /*
32152          * This value identifies a set of CFA data structures used for an L2
32153          * context.
32154          */
32155         uint64_t        l2_filter_id;
32156 } __rte_packed;
32157
32158 /* hwrm_cfa_l2_filter_free_output (size:128b/16B) */
32159 struct hwrm_cfa_l2_filter_free_output {
32160         /* The specific error status for the command. */
32161         uint16_t        error_code;
32162         /* The HWRM command request type. */
32163         uint16_t        req_type;
32164         /* The sequence ID from the original command. */
32165         uint16_t        seq_id;
32166         /* The length of the response data in number of bytes. */
32167         uint16_t        resp_len;
32168         uint8_t unused_0[7];
32169         /*
32170          * This field is used in Output records to indicate that the output
32171          * is completely written to RAM. This field should be read as '1'
32172          * to indicate that the output has been completely written.
32173          * When writing a command completion or response to an internal processor,
32174          * the order of writes has to be such that this field is written last.
32175          */
32176         uint8_t valid;
32177 } __rte_packed;
32178
32179 /**************************
32180  * hwrm_cfa_l2_filter_cfg *
32181  **************************/
32182
32183
32184 /* hwrm_cfa_l2_filter_cfg_input (size:320b/40B) */
32185 struct hwrm_cfa_l2_filter_cfg_input {
32186         /* The HWRM command request type. */
32187         uint16_t        req_type;
32188         /*
32189          * The completion ring to send the completion event on. This should
32190          * be the NQ ID returned from the `nq_alloc` HWRM command.
32191          */
32192         uint16_t        cmpl_ring;
32193         /*
32194          * The sequence ID is used by the driver for tracking multiple
32195          * commands. This ID is treated as opaque data by the firmware and
32196          * the value is returned in the `hwrm_resp_hdr` upon completion.
32197          */
32198         uint16_t        seq_id;
32199         /*
32200          * The target ID of the command:
32201          * * 0x0-0xFFF8 - The function ID
32202          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
32203          * * 0xFFFD - Reserved for user-space HWRM interface
32204          * * 0xFFFF - HWRM
32205          */
32206         uint16_t        target_id;
32207         /*
32208          * A physical address pointer pointing to a host buffer that the
32209          * command's response data will be written. This can be either a host
32210          * physical address (HPA) or a guest physical address (GPA) and must
32211          * point to a physically contiguous block of memory.
32212          */
32213         uint64_t        resp_addr;
32214         uint32_t        flags;
32215         /*
32216          * Enumeration denoting the RX, TX type of the resource.
32217          * This enumeration is used for resources that are similar for both
32218          * TX and RX paths of the chip.
32219          */
32220         #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH \
32221                 UINT32_C(0x1)
32222         /* tx path */
32223         #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_TX \
32224                 UINT32_C(0x0)
32225         /* rx path */
32226         #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_RX \
32227                 UINT32_C(0x1)
32228         #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_LAST \
32229                 HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_RX
32230         /*
32231          * Setting of this flag indicates drop action. If this flag is not set,
32232          * then it should be considered accept action.
32233          */
32234         #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_DROP \
32235                 UINT32_C(0x2)
32236         /*
32237          * Enumeration denoting NO_ROCE_L2 to support old drivers.
32238          * New driver L2 for only L2 traffic, ROCE for roce and l2 traffic
32239          */
32240         #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_MASK \
32241                 UINT32_C(0xc)
32242         #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_SFT       2
32243         /* To support old drivers */
32244         #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_NO_ROCE_L2 \
32245                 (UINT32_C(0x0) << 2)
32246         /* Only L2 traffic */
32247         #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_L2 \
32248                 (UINT32_C(0x1) << 2)
32249         /* Roce & L2 traffic */
32250         #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_ROCE \
32251                 (UINT32_C(0x2) << 2)
32252         #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_LAST \
32253                 HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_ROCE
32254         uint32_t        enables;
32255         /*
32256          * This bit must be '1' for the dst_id field to be
32257          * configured.
32258          */
32259         #define HWRM_CFA_L2_FILTER_CFG_INPUT_ENABLES_DST_ID \
32260                 UINT32_C(0x1)
32261         /*
32262          * This bit must be '1' for the new_mirror_vnic_id field to be
32263          * configured.
32264          */
32265         #define HWRM_CFA_L2_FILTER_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID \
32266                 UINT32_C(0x2)
32267         /*
32268          * This value identifies a set of CFA data structures used for an L2
32269          * context.
32270          */
32271         uint64_t        l2_filter_id;
32272         /*
32273          * If set, this value shall represent the
32274          * Logical VNIC ID of the destination VNIC for the RX
32275          * path and network port id of the destination port for
32276          * the TX path.
32277          */
32278         uint32_t        dst_id;
32279         /*
32280          * New Logical VNIC ID of the VNIC where traffic is
32281          * mirrored.
32282          */
32283         uint32_t        new_mirror_vnic_id;
32284 } __rte_packed;
32285
32286 /* hwrm_cfa_l2_filter_cfg_output (size:128b/16B) */
32287 struct hwrm_cfa_l2_filter_cfg_output {
32288         /* The specific error status for the command. */
32289         uint16_t        error_code;
32290         /* The HWRM command request type. */
32291         uint16_t        req_type;
32292         /* The sequence ID from the original command. */
32293         uint16_t        seq_id;
32294         /* The length of the response data in number of bytes. */
32295         uint16_t        resp_len;
32296         uint8_t unused_0[7];
32297         /*
32298          * This field is used in Output records to indicate that the output
32299          * is completely written to RAM. This field should be read as '1'
32300          * to indicate that the output has been completely written.
32301          * When writing a command completion or response to an internal processor,
32302          * the order of writes has to be such that this field is written last.
32303          */
32304         uint8_t valid;
32305 } __rte_packed;
32306
32307 /***************************
32308  * hwrm_cfa_l2_set_rx_mask *
32309  ***************************/
32310
32311
32312 /* hwrm_cfa_l2_set_rx_mask_input (size:448b/56B) */
32313 struct hwrm_cfa_l2_set_rx_mask_input {
32314         /* The HWRM command request type. */
32315         uint16_t        req_type;
32316         /*
32317          * The completion ring to send the completion event on. This should
32318          * be the NQ ID returned from the `nq_alloc` HWRM command.
32319          */
32320         uint16_t        cmpl_ring;
32321         /*
32322          * The sequence ID is used by the driver for tracking multiple
32323          * commands. This ID is treated as opaque data by the firmware and
32324          * the value is returned in the `hwrm_resp_hdr` upon completion.
32325          */
32326         uint16_t        seq_id;
32327         /*
32328          * The target ID of the command:
32329          * * 0x0-0xFFF8 - The function ID
32330          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
32331          * * 0xFFFD - Reserved for user-space HWRM interface
32332          * * 0xFFFF - HWRM
32333          */
32334         uint16_t        target_id;
32335         /*
32336          * A physical address pointer pointing to a host buffer that the
32337          * command's response data will be written. This can be either a host
32338          * physical address (HPA) or a guest physical address (GPA) and must
32339          * point to a physically contiguous block of memory.
32340          */
32341         uint64_t        resp_addr;
32342         /* VNIC ID */
32343         uint32_t        vnic_id;
32344         uint32_t        mask;
32345         /*
32346          * When this bit is '1', the function is requested to accept
32347          * multi-cast packets specified by the multicast addr table.
32348          */
32349         #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_MCAST \
32350                 UINT32_C(0x2)
32351         /*
32352          * When this bit is '1', the function is requested to accept
32353          * all multi-cast packets.
32354          */
32355         #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ALL_MCAST \
32356                 UINT32_C(0x4)
32357         /*
32358          * When this bit is '1', the function is requested to accept
32359          * broadcast packets.
32360          */
32361         #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_BCAST \
32362                 UINT32_C(0x8)
32363         /*
32364          * When this bit is '1', the function is requested to be
32365          * put in the promiscuous mode.
32366          *
32367          * The HWRM should accept any function to set up
32368          * promiscuous mode.
32369          *
32370          * The HWRM shall follow the semantics below for the
32371          * promiscuous mode support.
32372          * # When partitioning is not enabled on a port
32373          * (i.e. single PF on the port), then the PF shall
32374          * be allowed to be in the promiscuous mode. When the
32375          * PF is in the promiscuous mode, then it shall
32376          * receive all host bound traffic on that port.
32377          * # When partitioning is enabled on a port
32378          * (i.e. multiple PFs per port) and a PF on that
32379          * port is in the promiscuous mode, then the PF
32380          * receives all traffic within that partition as
32381          * identified by a unique identifier for the
32382          * PF (e.g. S-Tag). If a unique outer VLAN
32383          * for the PF is specified, then the setting of
32384          * promiscuous mode on that PF shall result in the
32385          * PF receiving all host bound traffic with matching
32386          * outer VLAN.
32387          * # A VF shall can be set in the promiscuous mode.
32388          * In the promiscuous mode, the VF does not receive any
32389          * traffic unless a unique outer VLAN for the
32390          * VF is specified. If a unique outer VLAN
32391          * for the VF is specified, then the setting of
32392          * promiscuous mode on that VF shall result in the
32393          * VF receiving all host bound traffic with the
32394          * matching outer VLAN.
32395          * # The HWRM shall allow the setting of promiscuous
32396          * mode on a function independently from the
32397          * promiscuous mode settings on other functions.
32398          */
32399         #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_PROMISCUOUS \
32400                 UINT32_C(0x10)
32401         /*
32402          * If this flag is set, the corresponding RX
32403          * filters shall be set up to cover multicast/broadcast
32404          * filters for the outermost Layer 2 destination MAC
32405          * address field.
32406          */
32407         #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_OUTERMOST \
32408                 UINT32_C(0x20)
32409         /*
32410          * If this flag is set, the corresponding RX
32411          * filters shall be set up to cover multicast/broadcast
32412          * filters for the VLAN-tagged packets that match the
32413          * TPID and VID fields of VLAN tags in the VLAN tag
32414          * table specified in this command.
32415          */
32416         #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_VLANONLY \
32417                 UINT32_C(0x40)
32418         /*
32419          * If this flag is set, the corresponding RX
32420          * filters shall be set up to cover multicast/broadcast
32421          * filters for non-VLAN tagged packets and VLAN-tagged
32422          * packets that match the TPID and VID fields of VLAN
32423          * tags in the VLAN tag table specified in this command.
32424          */
32425         #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_VLAN_NONVLAN \
32426                 UINT32_C(0x80)
32427         /*
32428          * If this flag is set, the corresponding RX
32429          * filters shall be set up to cover multicast/broadcast
32430          * filters for non-VLAN tagged packets and VLAN-tagged
32431          * packets matching any VLAN tag.
32432          *
32433          * If this flag is set, then the HWRM shall ignore
32434          * VLAN tags specified in vlan_tag_tbl.
32435          *
32436          * If none of vlanonly, vlan_nonvlan, and anyvlan_nonvlan
32437          * flags is set, then the HWRM shall ignore
32438          * VLAN tags specified in vlan_tag_tbl.
32439          *
32440          * The HWRM client shall set at most one flag out of
32441          * vlanonly, vlan_nonvlan, and anyvlan_nonvlan.
32442          */
32443         #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ANYVLAN_NONVLAN \
32444                 UINT32_C(0x100)
32445         /* This is the address for mcast address tbl. */
32446         uint64_t        mc_tbl_addr;
32447         /*
32448          * This value indicates how many entries in mc_tbl are valid.
32449          * Each entry is 6 bytes.
32450          */
32451         uint32_t        num_mc_entries;
32452         uint8_t unused_0[4];
32453         /*
32454          * This is the address for VLAN tag table.
32455          * Each VLAN entry in the table is 4 bytes of a VLAN tag
32456          * including TPID, PCP, DEI, and VID fields in network byte
32457          * order.
32458          */
32459         uint64_t        vlan_tag_tbl_addr;
32460         /*
32461          * This value indicates how many entries in vlan_tag_tbl are
32462          * valid. Each entry is 4 bytes.
32463          */
32464         uint32_t        num_vlan_tags;
32465         uint8_t unused_1[4];
32466 } __rte_packed;
32467
32468 /* hwrm_cfa_l2_set_rx_mask_output (size:128b/16B) */
32469 struct hwrm_cfa_l2_set_rx_mask_output {
32470         /* The specific error status for the command. */
32471         uint16_t        error_code;
32472         /* The HWRM command request type. */
32473         uint16_t        req_type;
32474         /* The sequence ID from the original command. */
32475         uint16_t        seq_id;
32476         /* The length of the response data in number of bytes. */
32477         uint16_t        resp_len;
32478         uint8_t unused_0[7];
32479         /*
32480          * This field is used in Output records to indicate that the output
32481          * is completely written to RAM. This field should be read as '1'
32482          * to indicate that the output has been completely written.
32483          * When writing a command completion or response to an internal processor,
32484          * the order of writes has to be such that this field is written last.
32485          */
32486         uint8_t valid;
32487 } __rte_packed;
32488
32489 /* hwrm_cfa_l2_set_rx_mask_cmd_err (size:64b/8B) */
32490 struct hwrm_cfa_l2_set_rx_mask_cmd_err {
32491         /*
32492          * command specific error codes that goes to
32493          * the cmd_err field in Common HWRM Error Response.
32494          */
32495         uint8_t code;
32496         /* Unknown error */
32497         #define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_UNKNOWN \
32498                 UINT32_C(0x0)
32499         /* Unable to complete operation due to conflict with Ntuple Filter */
32500         #define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_NTUPLE_FILTER_CONFLICT_ERR \
32501                 UINT32_C(0x1)
32502         #define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_LAST \
32503                 HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_NTUPLE_FILTER_CONFLICT_ERR
32504         uint8_t unused_0[7];
32505 } __rte_packed;
32506
32507 /*******************************
32508  * hwrm_cfa_vlan_antispoof_cfg *
32509  *******************************/
32510
32511
32512 /* hwrm_cfa_vlan_antispoof_cfg_input (size:256b/32B) */
32513 struct hwrm_cfa_vlan_antispoof_cfg_input {
32514         /* The HWRM command request type. */
32515         uint16_t        req_type;
32516         /*
32517          * The completion ring to send the completion event on. This should
32518          * be the NQ ID returned from the `nq_alloc` HWRM command.
32519          */
32520         uint16_t        cmpl_ring;
32521         /*
32522          * The sequence ID is used by the driver for tracking multiple
32523          * commands. This ID is treated as opaque data by the firmware and
32524          * the value is returned in the `hwrm_resp_hdr` upon completion.
32525          */
32526         uint16_t        seq_id;
32527         /*
32528          * The target ID of the command:
32529          * * 0x0-0xFFF8 - The function ID
32530          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
32531          * * 0xFFFD - Reserved for user-space HWRM interface
32532          * * 0xFFFF - HWRM
32533          */
32534         uint16_t        target_id;
32535         /*
32536          * A physical address pointer pointing to a host buffer that the
32537          * command's response data will be written. This can be either a host
32538          * physical address (HPA) or a guest physical address (GPA) and must
32539          * point to a physically contiguous block of memory.
32540          */
32541         uint64_t        resp_addr;
32542         /*
32543          * Function ID of the function that is being configured.
32544          * Only valid for a VF FID configured by the PF.
32545          */
32546         uint16_t        fid;
32547         uint8_t unused_0[2];
32548         /* Number of VLAN entries in the vlan_tag_mask_tbl. */
32549         uint32_t        num_vlan_entries;
32550         /*
32551          * The vlan_tag_mask_tbl_addr is the DMA address of the VLAN
32552          * antispoof table. Each table entry contains the 16-bit TPID
32553          * (0x8100 or 0x88a8 only), 16-bit VLAN ID, and a 16-bit mask,
32554          * all in network order to match hwrm_cfa_l2_set_rx_mask.
32555          * For an individual VLAN entry, the mask value should be 0xfff
32556          * for the 12-bit VLAN ID.
32557          */
32558         uint64_t        vlan_tag_mask_tbl_addr;
32559 } __rte_packed;
32560
32561 /* hwrm_cfa_vlan_antispoof_cfg_output (size:128b/16B) */
32562 struct hwrm_cfa_vlan_antispoof_cfg_output {
32563         /* The specific error status for the command. */
32564         uint16_t        error_code;
32565         /* The HWRM command request type. */
32566         uint16_t        req_type;
32567         /* The sequence ID from the original command. */
32568         uint16_t        seq_id;
32569         /* The length of the response data in number of bytes. */
32570         uint16_t        resp_len;
32571         uint8_t unused_0[7];
32572         /*
32573          * This field is used in Output records to indicate that the output
32574          * is completely written to RAM. This field should be read as '1'
32575          * to indicate that the output has been completely written.
32576          * When writing a command completion or response to an internal processor,
32577          * the order of writes has to be such that this field is written last.
32578          */
32579         uint8_t valid;
32580 } __rte_packed;
32581
32582 /********************************
32583  * hwrm_cfa_vlan_antispoof_qcfg *
32584  ********************************/
32585
32586
32587 /* hwrm_cfa_vlan_antispoof_qcfg_input (size:256b/32B) */
32588 struct hwrm_cfa_vlan_antispoof_qcfg_input {
32589         /* The HWRM command request type. */
32590         uint16_t        req_type;
32591         /*
32592          * The completion ring to send the completion event on. This should
32593          * be the NQ ID returned from the `nq_alloc` HWRM command.
32594          */
32595         uint16_t        cmpl_ring;
32596         /*
32597          * The sequence ID is used by the driver for tracking multiple
32598          * commands. This ID is treated as opaque data by the firmware and
32599          * the value is returned in the `hwrm_resp_hdr` upon completion.
32600          */
32601         uint16_t        seq_id;
32602         /*
32603          * The target ID of the command:
32604          * * 0x0-0xFFF8 - The function ID
32605          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
32606          * * 0xFFFD - Reserved for user-space HWRM interface
32607          * * 0xFFFF - HWRM
32608          */
32609         uint16_t        target_id;
32610         /*
32611          * A physical address pointer pointing to a host buffer that the
32612          * command's response data will be written. This can be either a host
32613          * physical address (HPA) or a guest physical address (GPA) and must
32614          * point to a physically contiguous block of memory.
32615          */
32616         uint64_t        resp_addr;
32617         /*
32618          * Function ID of the function that is being queried.
32619          * Only valid for a VF FID queried by the PF.
32620          */
32621         uint16_t        fid;
32622         uint8_t unused_0[2];
32623         /*
32624          * Maximum number of VLAN entries the firmware is allowed to DMA
32625          * to vlan_tag_mask_tbl.
32626          */
32627         uint32_t        max_vlan_entries;
32628         /*
32629          * The vlan_tag_mask_tbl_addr is the DMA address of the VLAN
32630          * antispoof table to which firmware will DMA to. Each table
32631          * entry will contain the 16-bit TPID (0x8100 or 0x88a8 only),
32632          * 16-bit VLAN ID, and a 16-bit mask, all in network order to
32633          * match hwrm_cfa_l2_set_rx_mask. For an individual VLAN entry,
32634          * the mask value should be 0xfff for the 12-bit VLAN ID.
32635          */
32636         uint64_t        vlan_tag_mask_tbl_addr;
32637 } __rte_packed;
32638
32639 /* hwrm_cfa_vlan_antispoof_qcfg_output (size:128b/16B) */
32640 struct hwrm_cfa_vlan_antispoof_qcfg_output {
32641         /* The specific error status for the command. */
32642         uint16_t        error_code;
32643         /* The HWRM command request type. */
32644         uint16_t        req_type;
32645         /* The sequence ID from the original command. */
32646         uint16_t        seq_id;
32647         /* The length of the response data in number of bytes. */
32648         uint16_t        resp_len;
32649         /* Number of valid entries DMAd by firmware to vlan_tag_mask_tbl. */
32650         uint32_t        num_vlan_entries;
32651         uint8_t unused_0[3];
32652         /*
32653          * This field is used in Output records to indicate that the output
32654          * is completely written to RAM. This field should be read as '1'
32655          * to indicate that the output has been completely written.
32656          * When writing a command completion or response to an internal processor,
32657          * the order of writes has to be such that this field is written last.
32658          */
32659         uint8_t valid;
32660 } __rte_packed;
32661
32662 /********************************
32663  * hwrm_cfa_tunnel_filter_alloc *
32664  ********************************/
32665
32666
32667 /* hwrm_cfa_tunnel_filter_alloc_input (size:704b/88B) */
32668 struct hwrm_cfa_tunnel_filter_alloc_input {
32669         /* The HWRM command request type. */
32670         uint16_t        req_type;
32671         /*
32672          * The completion ring to send the completion event on. This should
32673          * be the NQ ID returned from the `nq_alloc` HWRM command.
32674          */
32675         uint16_t        cmpl_ring;
32676         /*
32677          * The sequence ID is used by the driver for tracking multiple
32678          * commands. This ID is treated as opaque data by the firmware and
32679          * the value is returned in the `hwrm_resp_hdr` upon completion.
32680          */
32681         uint16_t        seq_id;
32682         /*
32683          * The target ID of the command:
32684          * * 0x0-0xFFF8 - The function ID
32685          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
32686          * * 0xFFFD - Reserved for user-space HWRM interface
32687          * * 0xFFFF - HWRM
32688          */
32689         uint16_t        target_id;
32690         /*
32691          * A physical address pointer pointing to a host buffer that the
32692          * command's response data will be written. This can be either a host
32693          * physical address (HPA) or a guest physical address (GPA) and must
32694          * point to a physically contiguous block of memory.
32695          */
32696         uint64_t        resp_addr;
32697         uint32_t        flags;
32698         /* Setting of this flag indicates the applicability to the loopback path. */
32699         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK \
32700                 UINT32_C(0x1)
32701         uint32_t        enables;
32702         /*
32703          * This bit must be '1' for the l2_filter_id field to be
32704          * configured.
32705          */
32706         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L2_FILTER_ID \
32707                 UINT32_C(0x1)
32708         /*
32709          * This bit must be '1' for the l2_addr field to be
32710          * configured.
32711          */
32712         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR \
32713                 UINT32_C(0x2)
32714         /*
32715          * This bit must be '1' for the l2_ivlan field to be
32716          * configured.
32717          */
32718         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN \
32719                 UINT32_C(0x4)
32720         /*
32721          * This bit must be '1' for the l3_addr field to be
32722          * configured.
32723          */
32724         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L3_ADDR \
32725                 UINT32_C(0x8)
32726         /*
32727          * This bit must be '1' for the l3_addr_type field to be
32728          * configured.
32729          */
32730         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L3_ADDR_TYPE \
32731                 UINT32_C(0x10)
32732         /*
32733          * This bit must be '1' for the t_l3_addr_type field to be
32734          * configured.
32735          */
32736         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_T_L3_ADDR_TYPE \
32737                 UINT32_C(0x20)
32738         /*
32739          * This bit must be '1' for the t_l3_addr field to be
32740          * configured.
32741          */
32742         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_T_L3_ADDR \
32743                 UINT32_C(0x40)
32744         /*
32745          * This bit must be '1' for the tunnel_type field to be
32746          * configured.
32747          */
32748         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
32749                 UINT32_C(0x80)
32750         /*
32751          * This bit must be '1' for the vni field to be
32752          * configured.
32753          */
32754         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_VNI \
32755                 UINT32_C(0x100)
32756         /*
32757          * This bit must be '1' for the dst_vnic_id field to be
32758          * configured.
32759          */
32760         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_DST_VNIC_ID \
32761                 UINT32_C(0x200)
32762         /*
32763          * This bit must be '1' for the mirror_vnic_id field to be
32764          * configured.
32765          */
32766         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
32767                 UINT32_C(0x400)
32768         /*
32769          * This value identifies a set of CFA data structures used for an L2
32770          * context.
32771          */
32772         uint64_t        l2_filter_id;
32773         /*
32774          * This value sets the match value for the inner L2
32775          * MAC address.
32776          * Destination MAC address for RX path.
32777          * Source MAC address for TX path.
32778          */
32779         uint8_t l2_addr[6];
32780         /*
32781          * This value sets VLAN ID value for inner VLAN.
32782          * Only 12-bits of VLAN ID are used in setting the filter.
32783          */
32784         uint16_t        l2_ivlan;
32785         /*
32786          * The value of inner destination IP address to be used in filtering.
32787          * For IPv4, first four bytes represent the IP address.
32788          */
32789         uint32_t        l3_addr[4];
32790         /*
32791          * The value of tunnel destination IP address to be used in filtering.
32792          * For IPv4, first four bytes represent the IP address.
32793          */
32794         uint32_t        t_l3_addr[4];
32795         /*
32796          * This value indicates the type of inner IP address.
32797          * 4 - IPv4
32798          * 6 - IPv6
32799          * All others are invalid.
32800          */
32801         uint8_t l3_addr_type;
32802         /*
32803          * This value indicates the type of tunnel IP address.
32804          * 4 - IPv4
32805          * 6 - IPv6
32806          * All others are invalid.
32807          */
32808         uint8_t t_l3_addr_type;
32809         /* Tunnel Type. */
32810         uint8_t tunnel_type;
32811         /* Non-tunnel */
32812         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
32813                 UINT32_C(0x0)
32814         /* Virtual eXtensible Local Area Network (VXLAN) */
32815         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
32816                 UINT32_C(0x1)
32817         /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
32818         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
32819                 UINT32_C(0x2)
32820         /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
32821         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
32822                 UINT32_C(0x3)
32823         /* IP in IP */
32824         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
32825                 UINT32_C(0x4)
32826         /* Generic Network Virtualization Encapsulation (Geneve) */
32827         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
32828                 UINT32_C(0x5)
32829         /* Multi-Protocol Label Switching (MPLS) */
32830         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
32831                 UINT32_C(0x6)
32832         /* Stateless Transport Tunnel (STT) */
32833         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \
32834                 UINT32_C(0x7)
32835         /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
32836         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
32837                 UINT32_C(0x8)
32838         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
32839         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
32840                 UINT32_C(0x9)
32841         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
32842         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
32843                 UINT32_C(0xa)
32844         /* Use fixed layer 2 ether type of 0xFFFF */
32845         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
32846                 UINT32_C(0xb)
32847         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
32848         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
32849                 UINT32_C(0xc)
32850         /* Any tunneled traffic */
32851         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
32852                 UINT32_C(0xff)
32853         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \
32854                 HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
32855         /*
32856          * tunnel_flags allows the user to indicate the tunnel tag detection
32857          * for the tunnel type specified in tunnel_type.
32858          */
32859         uint8_t tunnel_flags;
32860         /*
32861          * If the tunnel_type is geneve, then this bit indicates if we
32862          * need to match the geneve OAM packet.
32863          * If the tunnel_type is nvgre or gre, then this bit indicates if
32864          * we need to detect checksum present bit in geneve header.
32865          * If the tunnel_type is mpls, then this bit indicates if we need
32866          * to match mpls packet with explicit IPV4/IPV6 null header.
32867          */
32868         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_FLAGS_TUN_FLAGS_OAM_CHECKSUM_EXPLHDR \
32869                 UINT32_C(0x1)
32870         /*
32871          * If the tunnel_type is geneve, then this bit indicates if we
32872          * need to detect the critical option bit set in the oam packet.
32873          * If the tunnel_type is nvgre or gre, then this bit indicates
32874          * if we need to match nvgre packets with key present bit set in
32875          * gre header.
32876          * If the tunnel_type is mpls, then this bit indicates if we
32877          * need to match mpls packet with S bit from inner/second label.
32878          */
32879         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_FLAGS_TUN_FLAGS_CRITICAL_OPT_S1 \
32880                 UINT32_C(0x2)
32881         /*
32882          * If the tunnel_type is geneve, then this bit indicates if we
32883          * need to match geneve packet with extended header bit set in
32884          * geneve header.
32885          * If the tunnel_type is nvgre or gre, then this bit indicates
32886          * if we need to match nvgre packets with sequence number
32887          * present bit set in gre header.
32888          * If the tunnel_type is mpls, then this bit indicates if we
32889          * need to match mpls packet with S bit from out/first label.
32890          */
32891         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_FLAGS_TUN_FLAGS_EXTHDR_SEQNUM_S0 \
32892                 UINT32_C(0x4)
32893         /*
32894          * Virtual Network Identifier (VNI). Only valid with
32895          * tunnel_types VXLAN, NVGRE, and Geneve.
32896          * Only lower 24-bits of VNI field are used
32897          * in setting up the filter.
32898          */
32899         uint32_t        vni;
32900         /* Logical VNIC ID of the destination VNIC. */
32901         uint32_t        dst_vnic_id;
32902         /*
32903          * Logical VNIC ID of the VNIC where traffic is
32904          * mirrored.
32905          */
32906         uint32_t        mirror_vnic_id;
32907 } __rte_packed;
32908
32909 /* hwrm_cfa_tunnel_filter_alloc_output (size:192b/24B) */
32910 struct hwrm_cfa_tunnel_filter_alloc_output {
32911         /* The specific error status for the command. */
32912         uint16_t        error_code;
32913         /* The HWRM command request type. */
32914         uint16_t        req_type;
32915         /* The sequence ID from the original command. */
32916         uint16_t        seq_id;
32917         /* The length of the response data in number of bytes. */
32918         uint16_t        resp_len;
32919         /* This value is an opaque id into CFA data structures. */
32920         uint64_t        tunnel_filter_id;
32921         /*
32922          * The flow id value in bit 0-29 is the actual ID of the flow
32923          * associated with this filter and it shall be used to match
32924          * and associate the flow identifier returned in completion
32925          * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
32926          * shall indicate no valid flow id.
32927          */
32928         uint32_t        flow_id;
32929         /* Indicate the flow id value. */
32930         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
32931                 UINT32_C(0x3fffffff)
32932         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
32933         /* Indicate type of the flow. */
32934         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE \
32935                 UINT32_C(0x40000000)
32936         /*
32937          * If this bit set to 0, then it indicates that the flow is
32938          * internal flow.
32939          */
32940         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
32941                 (UINT32_C(0x0) << 30)
32942         /*
32943          * If this bit is set to 1, then it indicates that the flow is
32944          * external flow.
32945          */
32946         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
32947                 (UINT32_C(0x1) << 30)
32948         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
32949                 HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
32950         /* Indicate the flow direction. */
32951         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR \
32952                 UINT32_C(0x80000000)
32953         /* If this bit set to 0, then it indicates rx flow. */
32954         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
32955                 (UINT32_C(0x0) << 31)
32956         /* If this bit is set to 1, then it indicates that tx flow. */
32957         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
32958                 (UINT32_C(0x1) << 31)
32959         #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
32960                 HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX
32961         uint8_t unused_0[3];
32962         /*
32963          * This field is used in Output records to indicate that the output
32964          * is completely written to RAM. This field should be read as '1'
32965          * to indicate that the output has been completely written.
32966          * When writing a command completion or response to an internal processor,
32967          * the order of writes has to be such that this field is written last.
32968          */
32969         uint8_t valid;
32970 } __rte_packed;
32971
32972 /*******************************
32973  * hwrm_cfa_tunnel_filter_free *
32974  *******************************/
32975
32976
32977 /* hwrm_cfa_tunnel_filter_free_input (size:192b/24B) */
32978 struct hwrm_cfa_tunnel_filter_free_input {
32979         /* The HWRM command request type. */
32980         uint16_t        req_type;
32981         /*
32982          * The completion ring to send the completion event on. This should
32983          * be the NQ ID returned from the `nq_alloc` HWRM command.
32984          */
32985         uint16_t        cmpl_ring;
32986         /*
32987          * The sequence ID is used by the driver for tracking multiple
32988          * commands. This ID is treated as opaque data by the firmware and
32989          * the value is returned in the `hwrm_resp_hdr` upon completion.
32990          */
32991         uint16_t        seq_id;
32992         /*
32993          * The target ID of the command:
32994          * * 0x0-0xFFF8 - The function ID
32995          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
32996          * * 0xFFFD - Reserved for user-space HWRM interface
32997          * * 0xFFFF - HWRM
32998          */
32999         uint16_t        target_id;
33000         /*
33001          * A physical address pointer pointing to a host buffer that the
33002          * command's response data will be written. This can be either a host
33003          * physical address (HPA) or a guest physical address (GPA) and must
33004          * point to a physically contiguous block of memory.
33005          */
33006         uint64_t        resp_addr;
33007         /* This value is an opaque id into CFA data structures. */
33008         uint64_t        tunnel_filter_id;
33009 } __rte_packed;
33010
33011 /* hwrm_cfa_tunnel_filter_free_output (size:128b/16B) */
33012 struct hwrm_cfa_tunnel_filter_free_output {
33013         /* The specific error status for the command. */
33014         uint16_t        error_code;
33015         /* The HWRM command request type. */
33016         uint16_t        req_type;
33017         /* The sequence ID from the original command. */
33018         uint16_t        seq_id;
33019         /* The length of the response data in number of bytes. */
33020         uint16_t        resp_len;
33021         uint8_t unused_0[7];
33022         /*
33023          * This field is used in Output records to indicate that the output
33024          * is completely written to RAM. This field should be read as '1'
33025          * to indicate that the output has been completely written.
33026          * When writing a command completion or response to an internal processor,
33027          * the order of writes has to be such that this field is written last.
33028          */
33029         uint8_t valid;
33030 } __rte_packed;
33031
33032 /***************************************
33033  * hwrm_cfa_redirect_tunnel_type_alloc *
33034  ***************************************/
33035
33036
33037 /* hwrm_cfa_redirect_tunnel_type_alloc_input (size:192b/24B) */
33038 struct hwrm_cfa_redirect_tunnel_type_alloc_input {
33039         /* The HWRM command request type. */
33040         uint16_t        req_type;
33041         /*
33042          * The completion ring to send the completion event on. This should
33043          * be the NQ ID returned from the `nq_alloc` HWRM command.
33044          */
33045         uint16_t        cmpl_ring;
33046         /*
33047          * The sequence ID is used by the driver for tracking multiple
33048          * commands. This ID is treated as opaque data by the firmware and
33049          * the value is returned in the `hwrm_resp_hdr` upon completion.
33050          */
33051         uint16_t        seq_id;
33052         /*
33053          * The target ID of the command:
33054          * * 0x0-0xFFF8 - The function ID
33055          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
33056          * * 0xFFFD - Reserved for user-space HWRM interface
33057          * * 0xFFFF - HWRM
33058          */
33059         uint16_t        target_id;
33060         /*
33061          * A physical address pointer pointing to a host buffer that the
33062          * command's response data will be written. This can be either a host
33063          * physical address (HPA) or a guest physical address (GPA) and must
33064          * point to a physically contiguous block of memory.
33065          */
33066         uint64_t        resp_addr;
33067         /* The destination function id, to whom the traffic is redirected. */
33068         uint16_t        dest_fid;
33069         /* Tunnel Type. */
33070         uint8_t tunnel_type;
33071         /* Non-tunnel */
33072         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
33073                 UINT32_C(0x0)
33074         /* Virtual eXtensible Local Area Network (VXLAN) */
33075         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
33076                 UINT32_C(0x1)
33077         /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
33078         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
33079                 UINT32_C(0x2)
33080         /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
33081         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
33082                 UINT32_C(0x3)
33083         /* IP in IP */
33084         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
33085                 UINT32_C(0x4)
33086         /* Generic Network Virtualization Encapsulation (Geneve) */
33087         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
33088                 UINT32_C(0x5)
33089         /* Multi-Protocol Label Switching (MPLS) */
33090         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
33091                 UINT32_C(0x6)
33092         /* Stateless Transport Tunnel (STT) */
33093         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_STT \
33094                 UINT32_C(0x7)
33095         /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
33096         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
33097                 UINT32_C(0x8)
33098         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
33099         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
33100                 UINT32_C(0x9)
33101         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
33102         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
33103                 UINT32_C(0xa)
33104         /* Use fixed layer 2 ether type of 0xFFFF */
33105         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
33106                 UINT32_C(0xb)
33107         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
33108         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
33109                 UINT32_C(0xc)
33110         /* Any tunneled traffic */
33111         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
33112                 UINT32_C(0xff)
33113         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_LAST \
33114                 HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
33115         /* Tunnel alloc flags. */
33116         uint8_t flags;
33117         /* Setting of this flag indicates modify existing redirect tunnel to new destination function ID. */
33118         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_FLAGS_MODIFY_DST \
33119                 UINT32_C(0x1)
33120         uint8_t unused_0[4];
33121 } __rte_packed;
33122
33123 /* hwrm_cfa_redirect_tunnel_type_alloc_output (size:128b/16B) */
33124 struct hwrm_cfa_redirect_tunnel_type_alloc_output {
33125         /* The specific error status for the command. */
33126         uint16_t        error_code;
33127         /* The HWRM command request type. */
33128         uint16_t        req_type;
33129         /* The sequence ID from the original command. */
33130         uint16_t        seq_id;
33131         /* The length of the response data in number of bytes. */
33132         uint16_t        resp_len;
33133         uint8_t unused_0[7];
33134         /*
33135          * This field is used in Output records to indicate that the output
33136          * is completely written to RAM. This field should be read as '1'
33137          * to indicate that the output has been completely written.
33138          * When writing a command completion or response to an internal processor,
33139          * the order of writes has to be such that this field is written last.
33140          */
33141         uint8_t valid;
33142 } __rte_packed;
33143
33144 /**************************************
33145  * hwrm_cfa_redirect_tunnel_type_free *
33146  **************************************/
33147
33148
33149 /* hwrm_cfa_redirect_tunnel_type_free_input (size:192b/24B) */
33150 struct hwrm_cfa_redirect_tunnel_type_free_input {
33151         /* The HWRM command request type. */
33152         uint16_t        req_type;
33153         /*
33154          * The completion ring to send the completion event on. This should
33155          * be the NQ ID returned from the `nq_alloc` HWRM command.
33156          */
33157         uint16_t        cmpl_ring;
33158         /*
33159          * The sequence ID is used by the driver for tracking multiple
33160          * commands. This ID is treated as opaque data by the firmware and
33161          * the value is returned in the `hwrm_resp_hdr` upon completion.
33162          */
33163         uint16_t        seq_id;
33164         /*
33165          * The target ID of the command:
33166          * * 0x0-0xFFF8 - The function ID
33167          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
33168          * * 0xFFFD - Reserved for user-space HWRM interface
33169          * * 0xFFFF - HWRM
33170          */
33171         uint16_t        target_id;
33172         /*
33173          * A physical address pointer pointing to a host buffer that the
33174          * command's response data will be written. This can be either a host
33175          * physical address (HPA) or a guest physical address (GPA) and must
33176          * point to a physically contiguous block of memory.
33177          */
33178         uint64_t        resp_addr;
33179         /* The destination function id, to whom the traffic is redirected. */
33180         uint16_t        dest_fid;
33181         /* Tunnel Type. */
33182         uint8_t tunnel_type;
33183         /* Non-tunnel */
33184         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_NONTUNNEL \
33185                 UINT32_C(0x0)
33186         /* Virtual eXtensible Local Area Network (VXLAN) */
33187         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_VXLAN \
33188                 UINT32_C(0x1)
33189         /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
33190         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_NVGRE \
33191                 UINT32_C(0x2)
33192         /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
33193         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_L2GRE \
33194                 UINT32_C(0x3)
33195         /* IP in IP */
33196         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_IPIP \
33197                 UINT32_C(0x4)
33198         /* Generic Network Virtualization Encapsulation (Geneve) */
33199         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_GENEVE \
33200                 UINT32_C(0x5)
33201         /* Multi-Protocol Label Switching (MPLS) */
33202         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_MPLS \
33203                 UINT32_C(0x6)
33204         /* Stateless Transport Tunnel (STT) */
33205         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_STT \
33206                 UINT32_C(0x7)
33207         /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
33208         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_IPGRE \
33209                 UINT32_C(0x8)
33210         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
33211         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_VXLAN_V4 \
33212                 UINT32_C(0x9)
33213         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
33214         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_IPGRE_V1 \
33215                 UINT32_C(0xa)
33216         /* Use fixed layer 2 ether type of 0xFFFF */
33217         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_L2_ETYPE \
33218                 UINT32_C(0xb)
33219         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
33220         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
33221                 UINT32_C(0xc)
33222         /* Any tunneled traffic */
33223         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_ANYTUNNEL \
33224                 UINT32_C(0xff)
33225         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_LAST \
33226                 HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_ANYTUNNEL
33227         uint8_t unused_0[5];
33228 } __rte_packed;
33229
33230 /* hwrm_cfa_redirect_tunnel_type_free_output (size:128b/16B) */
33231 struct hwrm_cfa_redirect_tunnel_type_free_output {
33232         /* The specific error status for the command. */
33233         uint16_t        error_code;
33234         /* The HWRM command request type. */
33235         uint16_t        req_type;
33236         /* The sequence ID from the original command. */
33237         uint16_t        seq_id;
33238         /* The length of the response data in number of bytes. */
33239         uint16_t        resp_len;
33240         uint8_t unused_0[7];
33241         /*
33242          * This field is used in Output records to indicate that the output
33243          * is completely written to RAM. This field should be read as '1'
33244          * to indicate that the output has been completely written.
33245          * When writing a command completion or response to an internal processor,
33246          * the order of writes has to be such that this field is written last.
33247          */
33248         uint8_t valid;
33249 } __rte_packed;
33250
33251 /**************************************
33252  * hwrm_cfa_redirect_tunnel_type_info *
33253  **************************************/
33254
33255
33256 /* hwrm_cfa_redirect_tunnel_type_info_input (size:192b/24B) */
33257 struct hwrm_cfa_redirect_tunnel_type_info_input {
33258         /* The HWRM command request type. */
33259         uint16_t        req_type;
33260         /*
33261          * The completion ring to send the completion event on. This should
33262          * be the NQ ID returned from the `nq_alloc` HWRM command.
33263          */
33264         uint16_t        cmpl_ring;
33265         /*
33266          * The sequence ID is used by the driver for tracking multiple
33267          * commands. This ID is treated as opaque data by the firmware and
33268          * the value is returned in the `hwrm_resp_hdr` upon completion.
33269          */
33270         uint16_t        seq_id;
33271         /*
33272          * The target ID of the command:
33273          * * 0x0-0xFFF8 - The function ID
33274          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
33275          * * 0xFFFD - Reserved for user-space HWRM interface
33276          * * 0xFFFF - HWRM
33277          */
33278         uint16_t        target_id;
33279         /*
33280          * A physical address pointer pointing to a host buffer that the
33281          * command's response data will be written. This can be either a host
33282          * physical address (HPA) or a guest physical address (GPA) and must
33283          * point to a physically contiguous block of memory.
33284          */
33285         uint64_t        resp_addr;
33286         /* The source function id. */
33287         uint16_t        src_fid;
33288         /* Tunnel Type. */
33289         uint8_t tunnel_type;
33290         /* Non-tunnel */
33291         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_NONTUNNEL \
33292                 UINT32_C(0x0)
33293         /* Virtual eXtensible Local Area Network (VXLAN) */
33294         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_VXLAN \
33295                 UINT32_C(0x1)
33296         /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
33297         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_NVGRE \
33298                 UINT32_C(0x2)
33299         /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
33300         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_L2GRE \
33301                 UINT32_C(0x3)
33302         /* IP in IP */
33303         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_IPIP \
33304                 UINT32_C(0x4)
33305         /* Generic Network Virtualization Encapsulation (Geneve) */
33306         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_GENEVE \
33307                 UINT32_C(0x5)
33308         /* Multi-Protocol Label Switching (MPLS) */
33309         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_MPLS \
33310                 UINT32_C(0x6)
33311         /* Stateless Transport Tunnel (STT) */
33312         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_STT \
33313                 UINT32_C(0x7)
33314         /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
33315         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_IPGRE \
33316                 UINT32_C(0x8)
33317         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
33318         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_VXLAN_V4 \
33319                 UINT32_C(0x9)
33320         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
33321         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_IPGRE_V1 \
33322                 UINT32_C(0xa)
33323         /* Use fixed layer 2 ether type of 0xFFFF */
33324         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_L2_ETYPE \
33325                 UINT32_C(0xb)
33326         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
33327         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
33328                 UINT32_C(0xc)
33329         /* Any tunneled traffic */
33330         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_ANYTUNNEL \
33331                 UINT32_C(0xff)
33332         #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_LAST \
33333                 HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_ANYTUNNEL
33334         uint8_t unused_0[5];
33335 } __rte_packed;
33336
33337 /* hwrm_cfa_redirect_tunnel_type_info_output (size:128b/16B) */
33338 struct hwrm_cfa_redirect_tunnel_type_info_output {
33339         /* The specific error status for the command. */
33340         uint16_t        error_code;
33341         /* The HWRM command request type. */
33342         uint16_t        req_type;
33343         /* The sequence ID from the original command. */
33344         uint16_t        seq_id;
33345         /* The length of the response data in number of bytes. */
33346         uint16_t        resp_len;
33347         /* The destination function id, to whom the traffic is redirected. */
33348         uint16_t        dest_fid;
33349         uint8_t unused_0[5];
33350         /*
33351          * This field is used in Output records to indicate that the output
33352          * is completely written to RAM. This field should be read as '1'
33353          * to indicate that the output has been completely written.
33354          * When writing a command completion or response to an internal processor,
33355          * the order of writes has to be such that this field is written last.
33356          */
33357         uint8_t valid;
33358 } __rte_packed;
33359
33360 /* hwrm_vxlan_ipv4_hdr (size:128b/16B) */
33361 struct hwrm_vxlan_ipv4_hdr {
33362         /* IPv4 version and header length. */
33363         uint8_t ver_hlen;
33364         /* IPv4 header length */
33365         #define HWRM_VXLAN_IPV4_HDR_VER_HLEN_HEADER_LENGTH_MASK UINT32_C(0xf)
33366         #define HWRM_VXLAN_IPV4_HDR_VER_HLEN_HEADER_LENGTH_SFT 0
33367         /* Version */
33368         #define HWRM_VXLAN_IPV4_HDR_VER_HLEN_VERSION_MASK      UINT32_C(0xf0)
33369         #define HWRM_VXLAN_IPV4_HDR_VER_HLEN_VERSION_SFT       4
33370         /* IPv4 type of service. */
33371         uint8_t tos;
33372         /* IPv4 identification. */
33373         uint16_t        ip_id;
33374         /* IPv4 flags and offset. */
33375         uint16_t        flags_frag_offset;
33376         /* IPv4 TTL. */
33377         uint8_t ttl;
33378         /* IPv4 protocol. */
33379         uint8_t protocol;
33380         /* IPv4 source address. */
33381         uint32_t        src_ip_addr;
33382         /* IPv4 destination address. */
33383         uint32_t        dest_ip_addr;
33384 } __rte_packed;
33385
33386 /* hwrm_vxlan_ipv6_hdr (size:320b/40B) */
33387 struct hwrm_vxlan_ipv6_hdr {
33388         /* IPv6 version, traffic class and flow label. */
33389         uint32_t        ver_tc_flow_label;
33390         /* IPv6 version shift */
33391         #define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_VER_SFT \
33392                 UINT32_C(0x1c)
33393         /* IPv6 version mask */
33394         #define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_VER_MASK \
33395                 UINT32_C(0xf0000000)
33396         /* IPv6 TC shift */
33397         #define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_TC_SFT \
33398                 UINT32_C(0x14)
33399         /* IPv6 TC mask */
33400         #define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_TC_MASK \
33401                 UINT32_C(0xff00000)
33402         /* IPv6 flow label shift */
33403         #define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_FLOW_LABEL_SFT \
33404                 UINT32_C(0x0)
33405         /* IPv6 flow label mask */
33406         #define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_FLOW_LABEL_MASK \
33407                 UINT32_C(0xfffff)
33408         #define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_LAST \
33409                 HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_FLOW_LABEL_MASK
33410         /* IPv6 payload length. */
33411         uint16_t        payload_len;
33412         /* IPv6 next header. */
33413         uint8_t next_hdr;
33414         /* IPv6 TTL. */
33415         uint8_t ttl;
33416         /* IPv6 source address. */
33417         uint32_t        src_ip_addr[4];
33418         /* IPv6 destination address. */
33419         uint32_t        dest_ip_addr[4];
33420 } __rte_packed;
33421
33422 /* hwrm_cfa_encap_data_vxlan (size:640b/80B) */
33423 struct hwrm_cfa_encap_data_vxlan {
33424         /* Source MAC address. */
33425         uint8_t src_mac_addr[6];
33426         /* reserved. */
33427         uint16_t        unused_0;
33428         /* Destination MAC address. */
33429         uint8_t dst_mac_addr[6];
33430         /* Number of VLAN tags. */
33431         uint8_t num_vlan_tags;
33432         /* reserved. */
33433         uint8_t unused_1;
33434         /* Outer VLAN TPID. */
33435         uint16_t        ovlan_tpid;
33436         /* Outer VLAN TCI. */
33437         uint16_t        ovlan_tci;
33438         /* Inner VLAN TPID. */
33439         uint16_t        ivlan_tpid;
33440         /* Inner VLAN TCI. */
33441         uint16_t        ivlan_tci;
33442         /* L3 header fields. */
33443         uint32_t        l3[10];
33444         /* IP version mask. */
33445         #define HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_MASK UINT32_C(0xf)
33446         /* IP version 4. */
33447         #define HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_IPV4 UINT32_C(0x4)
33448         /* IP version 6. */
33449         #define HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_IPV6 UINT32_C(0x6)
33450         #define HWRM_CFA_ENCAP_DATA_VXLAN_L3_LAST \
33451                 HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_IPV6
33452         /* UDP source port. */
33453         uint16_t        src_port;
33454         /* UDP destination port. */
33455         uint16_t        dst_port;
33456         /* VXLAN Network Identifier. */
33457         uint32_t        vni;
33458         /* 3 bytes VXLAN header reserve fields from 1st dword of the VXLAN header. */
33459         uint8_t hdr_rsvd0[3];
33460         /* 1 byte VXLAN header reserve field from 2nd dword of the VXLAN header. */
33461         uint8_t hdr_rsvd1;
33462         /* VXLAN header flags field. */
33463         uint8_t hdr_flags;
33464         uint8_t unused[3];
33465 } __rte_packed;
33466
33467 /*******************************
33468  * hwrm_cfa_encap_record_alloc *
33469  *******************************/
33470
33471
33472 /* hwrm_cfa_encap_record_alloc_input (size:832b/104B) */
33473 struct hwrm_cfa_encap_record_alloc_input {
33474         /* The HWRM command request type. */
33475         uint16_t        req_type;
33476         /*
33477          * The completion ring to send the completion event on. This should
33478          * be the NQ ID returned from the `nq_alloc` HWRM command.
33479          */
33480         uint16_t        cmpl_ring;
33481         /*
33482          * The sequence ID is used by the driver for tracking multiple
33483          * commands. This ID is treated as opaque data by the firmware and
33484          * the value is returned in the `hwrm_resp_hdr` upon completion.
33485          */
33486         uint16_t        seq_id;
33487         /*
33488          * The target ID of the command:
33489          * * 0x0-0xFFF8 - The function ID
33490          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
33491          * * 0xFFFD - Reserved for user-space HWRM interface
33492          * * 0xFFFF - HWRM
33493          */
33494         uint16_t        target_id;
33495         /*
33496          * A physical address pointer pointing to a host buffer that the
33497          * command's response data will be written. This can be either a host
33498          * physical address (HPA) or a guest physical address (GPA) and must
33499          * point to a physically contiguous block of memory.
33500          */
33501         uint64_t        resp_addr;
33502         uint32_t        flags;
33503         /* Setting of this flag indicates the applicability to the loopback path. */
33504         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_FLAGS_LOOPBACK \
33505                 UINT32_C(0x1)
33506         /*
33507          * Setting of this flag indicates this encap record is external encap record.
33508          * Resetting of this flag indicates this flag is internal encap record and
33509          * this is the default setting.
33510          */
33511         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_FLAGS_EXTERNAL \
33512                 UINT32_C(0x2)
33513         /* Encapsulation Type. */
33514         uint8_t encap_type;
33515         /* Virtual eXtensible Local Area Network (VXLAN) */
33516         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VXLAN \
33517                 UINT32_C(0x1)
33518         /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
33519         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_NVGRE \
33520                 UINT32_C(0x2)
33521         /* Generic Routing Encapsulation (GRE) after inside Ethernet payload */
33522         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_L2GRE \
33523                 UINT32_C(0x3)
33524         /* IP in IP */
33525         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_IPIP \
33526                 UINT32_C(0x4)
33527         /* Generic Network Virtualization Encapsulation (Geneve) */
33528         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_GENEVE \
33529                 UINT32_C(0x5)
33530         /* Multi-Protocol Label Switching (MPLS) */
33531         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_MPLS \
33532                 UINT32_C(0x6)
33533         /* VLAN */
33534         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VLAN \
33535                 UINT32_C(0x7)
33536         /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
33537         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_IPGRE \
33538                 UINT32_C(0x8)
33539         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
33540         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VXLAN_V4 \
33541                 UINT32_C(0x9)
33542         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
33543         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_IPGRE_V1 \
33544                 UINT32_C(0xa)
33545         /* Use fixed layer 2 ether type of 0xFFFF */
33546         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_L2_ETYPE \
33547                 UINT32_C(0xb)
33548         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
33549         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VXLAN_GPE_V6 \
33550                 UINT32_C(0xc)
33551         #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_LAST \
33552                 HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VXLAN_GPE_V6
33553         uint8_t unused_0[3];
33554         /* This value is encap data used for the given encap type. */
33555         uint32_t        encap_data[20];
33556 } __rte_packed;
33557
33558 /* hwrm_cfa_encap_record_alloc_output (size:128b/16B) */
33559 struct hwrm_cfa_encap_record_alloc_output {
33560         /* The specific error status for the command. */
33561         uint16_t        error_code;
33562         /* The HWRM command request type. */
33563         uint16_t        req_type;
33564         /* The sequence ID from the original command. */
33565         uint16_t        seq_id;
33566         /* The length of the response data in number of bytes. */
33567         uint16_t        resp_len;
33568         /* This value is an opaque id into CFA data structures. */
33569         uint32_t        encap_record_id;
33570         uint8_t unused_0[3];
33571         /*
33572          * This field is used in Output records to indicate that the output
33573          * is completely written to RAM. This field should be read as '1'
33574          * to indicate that the output has been completely written.
33575          * When writing a command completion or response to an internal processor,
33576          * the order of writes has to be such that this field is written last.
33577          */
33578         uint8_t valid;
33579 } __rte_packed;
33580
33581 /******************************
33582  * hwrm_cfa_encap_record_free *
33583  ******************************/
33584
33585
33586 /* hwrm_cfa_encap_record_free_input (size:192b/24B) */
33587 struct hwrm_cfa_encap_record_free_input {
33588         /* The HWRM command request type. */
33589         uint16_t        req_type;
33590         /*
33591          * The completion ring to send the completion event on. This should
33592          * be the NQ ID returned from the `nq_alloc` HWRM command.
33593          */
33594         uint16_t        cmpl_ring;
33595         /*
33596          * The sequence ID is used by the driver for tracking multiple
33597          * commands. This ID is treated as opaque data by the firmware and
33598          * the value is returned in the `hwrm_resp_hdr` upon completion.
33599          */
33600         uint16_t        seq_id;
33601         /*
33602          * The target ID of the command:
33603          * * 0x0-0xFFF8 - The function ID
33604          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
33605          * * 0xFFFD - Reserved for user-space HWRM interface
33606          * * 0xFFFF - HWRM
33607          */
33608         uint16_t        target_id;
33609         /*
33610          * A physical address pointer pointing to a host buffer that the
33611          * command's response data will be written. This can be either a host
33612          * physical address (HPA) or a guest physical address (GPA) and must
33613          * point to a physically contiguous block of memory.
33614          */
33615         uint64_t        resp_addr;
33616         /* This value is an opaque id into CFA data structures. */
33617         uint32_t        encap_record_id;
33618         uint8_t unused_0[4];
33619 } __rte_packed;
33620
33621 /* hwrm_cfa_encap_record_free_output (size:128b/16B) */
33622 struct hwrm_cfa_encap_record_free_output {
33623         /* The specific error status for the command. */
33624         uint16_t        error_code;
33625         /* The HWRM command request type. */
33626         uint16_t        req_type;
33627         /* The sequence ID from the original command. */
33628         uint16_t        seq_id;
33629         /* The length of the response data in number of bytes. */
33630         uint16_t        resp_len;
33631         uint8_t unused_0[7];
33632         /*
33633          * This field is used in Output records to indicate that the output
33634          * is completely written to RAM. This field should be read as '1'
33635          * to indicate that the output has been completely written.
33636          * When writing a command completion or response to an internal processor,
33637          * the order of writes has to be such that this field is written last.
33638          */
33639         uint8_t valid;
33640 } __rte_packed;
33641
33642 /********************************
33643  * hwrm_cfa_ntuple_filter_alloc *
33644  ********************************/
33645
33646
33647 /* hwrm_cfa_ntuple_filter_alloc_input (size:1024b/128B) */
33648 struct hwrm_cfa_ntuple_filter_alloc_input {
33649         /* The HWRM command request type. */
33650         uint16_t        req_type;
33651         /*
33652          * The completion ring to send the completion event on. This should
33653          * be the NQ ID returned from the `nq_alloc` HWRM command.
33654          */
33655         uint16_t        cmpl_ring;
33656         /*
33657          * The sequence ID is used by the driver for tracking multiple
33658          * commands. This ID is treated as opaque data by the firmware and
33659          * the value is returned in the `hwrm_resp_hdr` upon completion.
33660          */
33661         uint16_t        seq_id;
33662         /*
33663          * The target ID of the command:
33664          * * 0x0-0xFFF8 - The function ID
33665          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
33666          * * 0xFFFD - Reserved for user-space HWRM interface
33667          * * 0xFFFF - HWRM
33668          */
33669         uint16_t        target_id;
33670         /*
33671          * A physical address pointer pointing to a host buffer that the
33672          * command's response data will be written. This can be either a host
33673          * physical address (HPA) or a guest physical address (GPA) and must
33674          * point to a physically contiguous block of memory.
33675          */
33676         uint64_t        resp_addr;
33677         uint32_t        flags;
33678         /* Setting of this flag indicates the applicability to the loopback path. */
33679         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK \
33680                 UINT32_C(0x1)
33681         /*
33682          * Setting of this flag indicates drop action. If this flag is not set,
33683          * then it should be considered accept action.
33684          */
33685         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DROP \
33686                 UINT32_C(0x2)
33687         /*
33688          * Setting of this flag indicates that a meter is expected to be attached
33689          * to this flow. This hint can be used when choosing the action record
33690          * format required for the flow.
33691          */
33692         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_METER \
33693                 UINT32_C(0x4)
33694         /*
33695          * Setting of this flag indicates that the dst_id field contains function ID.
33696          * If this is not set it indicates dest_id is VNIC or VPORT.
33697          */
33698         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DEST_FID \
33699                 UINT32_C(0x8)
33700         /*
33701          * Setting of this flag indicates match on arp reply when ethertype is 0x0806.
33702          * If this is not set it indicates no specific arp opcode matching.
33703          */
33704         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_ARP_REPLY \
33705                 UINT32_C(0x10)
33706         /*
33707          * Setting of this flag indicates that the dst_id field contains RFS ring
33708          * table index. If this is not set it indicates dst_id is VNIC or VPORT
33709          * or function ID.  Note dest_fid and dest_rfs_ring_idx can’t be set at
33710          * the same time.
33711          */
33712         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DEST_RFS_RING_IDX \
33713                 UINT32_C(0x20)
33714         uint32_t        enables;
33715         /*
33716          * This bit must be '1' for the l2_filter_id field to be
33717          * configured.
33718          */
33719         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_L2_FILTER_ID \
33720                 UINT32_C(0x1)
33721         /*
33722          * This bit must be '1' for the ethertype field to be
33723          * configured.
33724          */
33725         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_ETHERTYPE \
33726                 UINT32_C(0x2)
33727         /*
33728          * This bit must be '1' for the tunnel_type field to be
33729          * configured.
33730          */
33731         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
33732                 UINT32_C(0x4)
33733         /*
33734          * This bit must be '1' for the src_macaddr field to be
33735          * configured.
33736          */
33737         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_MACADDR \
33738                 UINT32_C(0x8)
33739         /*
33740          * This bit must be '1' for the ipaddr_type field to be
33741          * configured.
33742          */
33743         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_IPADDR_TYPE \
33744                 UINT32_C(0x10)
33745         /*
33746          * This bit must be '1' for the src_ipaddr field to be
33747          * configured.
33748          */
33749         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR \
33750                 UINT32_C(0x20)
33751         /*
33752          * This bit must be '1' for the src_ipaddr_mask field to be
33753          * configured.
33754          */
33755         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR_MASK \
33756                 UINT32_C(0x40)
33757         /*
33758          * This bit must be '1' for the dst_ipaddr field to be
33759          * configured.
33760          */
33761         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR \
33762                 UINT32_C(0x80)
33763         /*
33764          * This bit must be '1' for the dst_ipaddr_mask field to be
33765          * configured.
33766          */
33767         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR_MASK \
33768                 UINT32_C(0x100)
33769         /*
33770          * This bit must be '1' for the ip_protocol field to be
33771          * configured.
33772          */
33773         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_IP_PROTOCOL \
33774                 UINT32_C(0x200)
33775         /*
33776          * This bit must be '1' for the src_port field to be
33777          * configured.
33778          */
33779         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT \
33780                 UINT32_C(0x400)
33781         /*
33782          * This bit must be '1' for the src_port_mask field to be
33783          * configured.
33784          */
33785         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT_MASK \
33786                 UINT32_C(0x800)
33787         /*
33788          * This bit must be '1' for the dst_port field to be
33789          * configured.
33790          */
33791         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_PORT \
33792                 UINT32_C(0x1000)
33793         /*
33794          * This bit must be '1' for the dst_port_mask field to be
33795          * configured.
33796          */
33797         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_PORT_MASK \
33798                 UINT32_C(0x2000)
33799         /*
33800          * This bit must be '1' for the pri_hint field to be
33801          * configured.
33802          */
33803         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_PRI_HINT \
33804                 UINT32_C(0x4000)
33805         /*
33806          * This bit must be '1' for the ntuple_filter_id field to be
33807          * configured.
33808          */
33809         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_NTUPLE_FILTER_ID \
33810                 UINT32_C(0x8000)
33811         /*
33812          * This bit must be '1' for the dst_id field to be
33813          * configured.
33814          */
33815         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_ID \
33816                 UINT32_C(0x10000)
33817         /*
33818          * This bit must be '1' for the mirror_vnic_id field to be
33819          * configured.
33820          */
33821         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
33822                 UINT32_C(0x20000)
33823         /*
33824          * This bit must be '1' for the dst_macaddr field to be
33825          * configured.
33826          */
33827         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_MACADDR \
33828                 UINT32_C(0x40000)
33829         /* This flag is deprecated. */
33830         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_RFS_RING_TBL_IDX \
33831                 UINT32_C(0x80000)
33832         /*
33833          * This value identifies a set of CFA data structures used for an L2
33834          * context.
33835          */
33836         uint64_t        l2_filter_id;
33837         /*
33838          * This value indicates the source MAC address in
33839          * the Ethernet header.
33840          */
33841         uint8_t src_macaddr[6];
33842         /* This value indicates the ethertype in the Ethernet header. */
33843         uint16_t        ethertype;
33844         /*
33845          * This value indicates the type of IP address.
33846          * 4 - IPv4
33847          * 6 - IPv6
33848          * All others are invalid.
33849          */
33850         uint8_t ip_addr_type;
33851         /* invalid */
33852         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN \
33853                 UINT32_C(0x0)
33854         /* IPv4 */
33855         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV4 \
33856                 UINT32_C(0x4)
33857         /* IPv6 */
33858         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6 \
33859                 UINT32_C(0x6)
33860         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_LAST \
33861                 HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6
33862         /*
33863          * The value of protocol filed in IP header.
33864          * Applies to UDP and TCP traffic.
33865          * 6 - TCP
33866          * 17 - UDP
33867          */
33868         uint8_t ip_protocol;
33869         /* invalid */
33870         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN \
33871                 UINT32_C(0x0)
33872         /* TCP */
33873         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_TCP \
33874                 UINT32_C(0x6)
33875         /* UDP */
33876         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP \
33877                 UINT32_C(0x11)
33878         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_LAST \
33879                 HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP
33880         /*
33881          * If set, this value shall represent the
33882          * Logical VNIC ID of the destination VNIC for the RX
33883          * path and network port id of the destination port for
33884          * the TX path.
33885          */
33886         uint16_t        dst_id;
33887         /*
33888          * Logical VNIC ID of the VNIC where traffic is
33889          * mirrored.
33890          */
33891         uint16_t        mirror_vnic_id;
33892         /*
33893          * This value indicates the tunnel type for this filter.
33894          * If this field is not specified, then the filter shall
33895          * apply to both non-tunneled and tunneled packets.
33896          * If this field conflicts with the tunnel_type specified
33897          * in the l2_filter_id, then the HWRM shall return an
33898          * error for this command.
33899          */
33900         uint8_t tunnel_type;
33901         /* Non-tunnel */
33902         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
33903                 UINT32_C(0x0)
33904         /* Virtual eXtensible Local Area Network (VXLAN) */
33905         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
33906                 UINT32_C(0x1)
33907         /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
33908         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
33909                 UINT32_C(0x2)
33910         /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
33911         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
33912                 UINT32_C(0x3)
33913         /* IP in IP */
33914         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
33915                 UINT32_C(0x4)
33916         /* Generic Network Virtualization Encapsulation (Geneve) */
33917         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
33918                 UINT32_C(0x5)
33919         /* Multi-Protocol Label Switching (MPLS) */
33920         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
33921                 UINT32_C(0x6)
33922         /* Stateless Transport Tunnel (STT) */
33923         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \
33924                 UINT32_C(0x7)
33925         /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
33926         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
33927                 UINT32_C(0x8)
33928         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
33929         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
33930                 UINT32_C(0x9)
33931         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
33932         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
33933                 UINT32_C(0xa)
33934         /* Use fixed layer 2 ether type of 0xFFFF */
33935         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
33936                 UINT32_C(0xb)
33937         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
33938         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
33939                 UINT32_C(0xc)
33940         /* Any tunneled traffic */
33941         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
33942                 UINT32_C(0xff)
33943         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \
33944                 HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
33945         /*
33946          * This hint is provided to help in placing
33947          * the filter in the filter table.
33948          */
33949         uint8_t pri_hint;
33950         /* No preference */
33951         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_NO_PREFER \
33952                 UINT32_C(0x0)
33953         /* Above the given filter */
33954         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_ABOVE \
33955                 UINT32_C(0x1)
33956         /* Below the given filter */
33957         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_BELOW \
33958                 UINT32_C(0x2)
33959         /* As high as possible */
33960         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_HIGHEST \
33961                 UINT32_C(0x3)
33962         /* As low as possible */
33963         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LOWEST \
33964                 UINT32_C(0x4)
33965         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LAST \
33966                 HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LOWEST
33967         /*
33968          * The value of source IP address to be used in filtering.
33969          * For IPv4, first four bytes represent the IP address.
33970          */
33971         uint32_t        src_ipaddr[4];
33972         /*
33973          * The value of source IP address mask to be used in
33974          * filtering.
33975          * For IPv4, first four bytes represent the IP address mask.
33976          */
33977         uint32_t        src_ipaddr_mask[4];
33978         /*
33979          * The value of destination IP address to be used in filtering.
33980          * For IPv4, first four bytes represent the IP address.
33981          */
33982         uint32_t        dst_ipaddr[4];
33983         /*
33984          * The value of destination IP address mask to be used in
33985          * filtering.
33986          * For IPv4, first four bytes represent the IP address mask.
33987          */
33988         uint32_t        dst_ipaddr_mask[4];
33989         /*
33990          * The value of source port to be used in filtering.
33991          * Applies to UDP and TCP traffic.
33992          */
33993         uint16_t        src_port;
33994         /*
33995          * The value of source port mask to be used in filtering.
33996          * Applies to UDP and TCP traffic.
33997          */
33998         uint16_t        src_port_mask;
33999         /*
34000          * The value of destination port to be used in filtering.
34001          * Applies to UDP and TCP traffic.
34002          */
34003         uint16_t        dst_port;
34004         /*
34005          * The value of destination port mask to be used in
34006          * filtering.
34007          * Applies to UDP and TCP traffic.
34008          */
34009         uint16_t        dst_port_mask;
34010         /*
34011          * This is the ID of the filter that goes along with
34012          * the pri_hint.
34013          */
34014         uint64_t        ntuple_filter_id_hint;
34015 } __rte_packed;
34016
34017 /* hwrm_cfa_ntuple_filter_alloc_output (size:192b/24B) */
34018 struct hwrm_cfa_ntuple_filter_alloc_output {
34019         /* The specific error status for the command. */
34020         uint16_t        error_code;
34021         /* The HWRM command request type. */
34022         uint16_t        req_type;
34023         /* The sequence ID from the original command. */
34024         uint16_t        seq_id;
34025         /* The length of the response data in number of bytes. */
34026         uint16_t        resp_len;
34027         /* This value is an opaque id into CFA data structures. */
34028         uint64_t        ntuple_filter_id;
34029         /*
34030          * The flow id value in bit 0-29 is the actual ID of the flow
34031          * associated with this filter and it shall be used to match
34032          * and associate the flow identifier returned in completion
34033          * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
34034          * shall indicate no valid flow id.
34035          */
34036         uint32_t        flow_id;
34037         /* Indicate the flow id value. */
34038         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
34039                 UINT32_C(0x3fffffff)
34040         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
34041         /* Indicate type of the flow. */
34042         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE \
34043                 UINT32_C(0x40000000)
34044         /*
34045          * If this bit set to 0, then it indicates that the flow is
34046          * internal flow.
34047          */
34048         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
34049                 (UINT32_C(0x0) << 30)
34050         /*
34051          * If this bit is set to 1, then it indicates that the flow is
34052          * external flow.
34053          */
34054         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
34055                 (UINT32_C(0x1) << 30)
34056         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
34057                 HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
34058         /* Indicate the flow direction. */
34059         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR \
34060                 UINT32_C(0x80000000)
34061         /* If this bit set to 0, then it indicates rx flow. */
34062         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
34063                 (UINT32_C(0x0) << 31)
34064         /* If this bit is set to 1, then it indicates that tx flow. */
34065         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
34066                 (UINT32_C(0x1) << 31)
34067         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
34068                 HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX
34069         uint8_t unused_0[3];
34070         /*
34071          * This field is used in Output records to indicate that the output
34072          * is completely written to RAM. This field should be read as '1'
34073          * to indicate that the output has been completely written.
34074          * When writing a command completion or response to an internal processor,
34075          * the order of writes has to be such that this field is written last.
34076          */
34077         uint8_t valid;
34078 } __rte_packed;
34079
34080 /* hwrm_cfa_ntuple_filter_alloc_cmd_err (size:64b/8B) */
34081 struct hwrm_cfa_ntuple_filter_alloc_cmd_err {
34082         /*
34083          * command specific error codes that goes to
34084          * the cmd_err field in Common HWRM Error Response.
34085          */
34086         uint8_t code;
34087         /* Unknown error */
34088         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_UNKNOWN \
34089                 UINT32_C(0x0)
34090         /* Unable to complete operation due to conflict with Rx Mask VLAN */
34091         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_RX_MASK_VLAN_CONFLICT_ERR \
34092                 UINT32_C(0x1)
34093         #define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_LAST \
34094                 HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_RX_MASK_VLAN_CONFLICT_ERR
34095         uint8_t unused_0[7];
34096 } __rte_packed;
34097
34098 /*******************************
34099  * hwrm_cfa_ntuple_filter_free *
34100  *******************************/
34101
34102
34103 /* hwrm_cfa_ntuple_filter_free_input (size:192b/24B) */
34104 struct hwrm_cfa_ntuple_filter_free_input {
34105         /* The HWRM command request type. */
34106         uint16_t        req_type;
34107         /*
34108          * The completion ring to send the completion event on. This should
34109          * be the NQ ID returned from the `nq_alloc` HWRM command.
34110          */
34111         uint16_t        cmpl_ring;
34112         /*
34113          * The sequence ID is used by the driver for tracking multiple
34114          * commands. This ID is treated as opaque data by the firmware and
34115          * the value is returned in the `hwrm_resp_hdr` upon completion.
34116          */
34117         uint16_t        seq_id;
34118         /*
34119          * The target ID of the command:
34120          * * 0x0-0xFFF8 - The function ID
34121          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
34122          * * 0xFFFD - Reserved for user-space HWRM interface
34123          * * 0xFFFF - HWRM
34124          */
34125         uint16_t        target_id;
34126         /*
34127          * A physical address pointer pointing to a host buffer that the
34128          * command's response data will be written. This can be either a host
34129          * physical address (HPA) or a guest physical address (GPA) and must
34130          * point to a physically contiguous block of memory.
34131          */
34132         uint64_t        resp_addr;
34133         /* This value is an opaque id into CFA data structures. */
34134         uint64_t        ntuple_filter_id;
34135 } __rte_packed;
34136
34137 /* hwrm_cfa_ntuple_filter_free_output (size:128b/16B) */
34138 struct hwrm_cfa_ntuple_filter_free_output {
34139         /* The specific error status for the command. */
34140         uint16_t        error_code;
34141         /* The HWRM command request type. */
34142         uint16_t        req_type;
34143         /* The sequence ID from the original command. */
34144         uint16_t        seq_id;
34145         /* The length of the response data in number of bytes. */
34146         uint16_t        resp_len;
34147         uint8_t unused_0[7];
34148         /*
34149          * This field is used in Output records to indicate that the output
34150          * is completely written to RAM. This field should be read as '1'
34151          * to indicate that the output has been completely written.
34152          * When writing a command completion or response to an internal processor,
34153          * the order of writes has to be such that this field is written last.
34154          */
34155         uint8_t valid;
34156 } __rte_packed;
34157
34158 /******************************
34159  * hwrm_cfa_ntuple_filter_cfg *
34160  ******************************/
34161
34162
34163 /* hwrm_cfa_ntuple_filter_cfg_input (size:384b/48B) */
34164 struct hwrm_cfa_ntuple_filter_cfg_input {
34165         /* The HWRM command request type. */
34166         uint16_t        req_type;
34167         /*
34168          * The completion ring to send the completion event on. This should
34169          * be the NQ ID returned from the `nq_alloc` HWRM command.
34170          */
34171         uint16_t        cmpl_ring;
34172         /*
34173          * The sequence ID is used by the driver for tracking multiple
34174          * commands. This ID is treated as opaque data by the firmware and
34175          * the value is returned in the `hwrm_resp_hdr` upon completion.
34176          */
34177         uint16_t        seq_id;
34178         /*
34179          * The target ID of the command:
34180          * * 0x0-0xFFF8 - The function ID
34181          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
34182          * * 0xFFFD - Reserved for user-space HWRM interface
34183          * * 0xFFFF - HWRM
34184          */
34185         uint16_t        target_id;
34186         /*
34187          * A physical address pointer pointing to a host buffer that the
34188          * command's response data will be written. This can be either a host
34189          * physical address (HPA) or a guest physical address (GPA) and must
34190          * point to a physically contiguous block of memory.
34191          */
34192         uint64_t        resp_addr;
34193         uint32_t        enables;
34194         /*
34195          * This bit must be '1' for the new_dst_id field to be
34196          * configured.
34197          */
34198         #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_DST_ID \
34199                 UINT32_C(0x1)
34200         /*
34201          * This bit must be '1' for the new_mirror_vnic_id field to be
34202          * configured.
34203          */
34204         #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID \
34205                 UINT32_C(0x2)
34206         /*
34207          * This bit must be '1' for the new_meter_instance_id field to be
34208          * configured.
34209          */
34210         #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_METER_INSTANCE_ID \
34211                 UINT32_C(0x4)
34212         uint32_t        flags;
34213         /*
34214          * Setting this bit to 1 indicates that dest_id field contains FID.
34215          * Setting this to 0 indicates that dest_id field contains VNIC or VPORT.
34216          */
34217         #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_FLAGS_DEST_FID \
34218                 UINT32_C(0x1)
34219         /*
34220          * Setting of this flag indicates that the new_dst_id field contains
34221          * RFS ring table index. If this is not set it indicates new_dst_id is
34222          * VNIC or VPORT or function ID.  Note dest_fid and dest_rfs_ring_idx
34223          * can’t be set at the same time.
34224          */
34225         #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_FLAGS_DEST_RFS_RING_IDX \
34226                 UINT32_C(0x2)
34227         /* This value is an opaque id into CFA data structures. */
34228         uint64_t        ntuple_filter_id;
34229         /*
34230          * If set, this value shall represent the new
34231          * Logical VNIC ID of the destination VNIC for the RX
34232          * path and new network port id of the destination port for
34233          * the TX path.
34234          */
34235         uint32_t        new_dst_id;
34236         /*
34237          * New Logical VNIC ID of the VNIC where traffic is
34238          * mirrored.
34239          */
34240         uint32_t        new_mirror_vnic_id;
34241         /*
34242          * New meter to attach to the flow. Specifying the
34243          * invalid instance ID is used to remove any existing
34244          * meter from the flow.
34245          */
34246         uint16_t        new_meter_instance_id;
34247         /*
34248          * A value of 0xfff is considered invalid and implies the
34249          * instance is not configured.
34250          */
34251         #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID \
34252                 UINT32_C(0xffff)
34253         #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_LAST \
34254                 HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID
34255         uint8_t unused_1[6];
34256 } __rte_packed;
34257
34258 /* hwrm_cfa_ntuple_filter_cfg_output (size:128b/16B) */
34259 struct hwrm_cfa_ntuple_filter_cfg_output {
34260         /* The specific error status for the command. */
34261         uint16_t        error_code;
34262         /* The HWRM command request type. */
34263         uint16_t        req_type;
34264         /* The sequence ID from the original command. */
34265         uint16_t        seq_id;
34266         /* The length of the response data in number of bytes. */
34267         uint16_t        resp_len;
34268         uint8_t unused_0[7];
34269         /*
34270          * This field is used in Output records to indicate that the output
34271          * is completely written to RAM. This field should be read as '1'
34272          * to indicate that the output has been completely written.
34273          * When writing a command completion or response to an internal processor,
34274          * the order of writes has to be such that this field is written last.
34275          */
34276         uint8_t valid;
34277 } __rte_packed;
34278
34279 /**************************
34280  * hwrm_cfa_em_flow_alloc *
34281  **************************/
34282
34283
34284 /* hwrm_cfa_em_flow_alloc_input (size:896b/112B) */
34285 struct hwrm_cfa_em_flow_alloc_input {
34286         /* The HWRM command request type. */
34287         uint16_t        req_type;
34288         /*
34289          * The completion ring to send the completion event on. This should
34290          * be the NQ ID returned from the `nq_alloc` HWRM command.
34291          */
34292         uint16_t        cmpl_ring;
34293         /*
34294          * The sequence ID is used by the driver for tracking multiple
34295          * commands. This ID is treated as opaque data by the firmware and
34296          * the value is returned in the `hwrm_resp_hdr` upon completion.
34297          */
34298         uint16_t        seq_id;
34299         /*
34300          * The target ID of the command:
34301          * * 0x0-0xFFF8 - The function ID
34302          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
34303          * * 0xFFFD - Reserved for user-space HWRM interface
34304          * * 0xFFFF - HWRM
34305          */
34306         uint16_t        target_id;
34307         /*
34308          * A physical address pointer pointing to a host buffer that the
34309          * command's response data will be written. This can be either a host
34310          * physical address (HPA) or a guest physical address (GPA) and must
34311          * point to a physically contiguous block of memory.
34312          */
34313         uint64_t        resp_addr;
34314         uint32_t        flags;
34315         /*
34316          * Enumeration denoting the RX, TX type of the resource.
34317          * This enumeration is used for resources that are similar for both
34318          * TX and RX paths of the chip.
34319          */
34320         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH         UINT32_C(0x1)
34321         /* tx path */
34322         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_TX        UINT32_C(0x0)
34323         /* rx path */
34324         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_RX        UINT32_C(0x1)
34325         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_LAST \
34326                 HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_RX
34327         /*
34328          * Setting of this flag indicates enabling of a byte counter for a given
34329          * flow.
34330          */
34331         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_BYTE_CTR     UINT32_C(0x2)
34332         /*
34333          * Setting of this flag indicates enabling of a packet counter for a given
34334          * flow.
34335          */
34336         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PKT_CTR      UINT32_C(0x4)
34337         /* Setting of this flag indicates de-capsulation action for the given flow. */
34338         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_DECAP        UINT32_C(0x8)
34339         /* Setting of this flag indicates encapsulation action for the given flow. */
34340         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_ENCAP        UINT32_C(0x10)
34341         /*
34342          * Setting of this flag indicates drop action. If this flag is not set,
34343          * then it should be considered accept action.
34344          */
34345         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_DROP         UINT32_C(0x20)
34346         /*
34347          * Setting of this flag indicates that a meter is expected to be attached
34348          * to this flow. This hint can be used when choosing the action record
34349          * format required for the flow.
34350          */
34351         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_METER        UINT32_C(0x40)
34352         uint32_t        enables;
34353         /*
34354          * This bit must be '1' for the l2_filter_id field to be
34355          * configured.
34356          */
34357         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_L2_FILTER_ID \
34358                 UINT32_C(0x1)
34359         /*
34360          * This bit must be '1' for the tunnel_type field to be
34361          * configured.
34362          */
34363         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
34364                 UINT32_C(0x2)
34365         /*
34366          * This bit must be '1' for the tunnel_id field to be
34367          * configured.
34368          */
34369         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_TUNNEL_ID \
34370                 UINT32_C(0x4)
34371         /*
34372          * This bit must be '1' for the src_macaddr field to be
34373          * configured.
34374          */
34375         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_MACADDR \
34376                 UINT32_C(0x8)
34377         /*
34378          * This bit must be '1' for the dst_macaddr field to be
34379          * configured.
34380          */
34381         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_MACADDR \
34382                 UINT32_C(0x10)
34383         /*
34384          * This bit must be '1' for the ovlan_vid field to be
34385          * configured.
34386          */
34387         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_OVLAN_VID \
34388                 UINT32_C(0x20)
34389         /*
34390          * This bit must be '1' for the ivlan_vid field to be
34391          * configured.
34392          */
34393         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IVLAN_VID \
34394                 UINT32_C(0x40)
34395         /*
34396          * This bit must be '1' for the ethertype field to be
34397          * configured.
34398          */
34399         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_ETHERTYPE \
34400                 UINT32_C(0x80)
34401         /*
34402          * This bit must be '1' for the src_ipaddr field to be
34403          * configured.
34404          */
34405         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_IPADDR \
34406                 UINT32_C(0x100)
34407         /*
34408          * This bit must be '1' for the dst_ipaddr field to be
34409          * configured.
34410          */
34411         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_IPADDR \
34412                 UINT32_C(0x200)
34413         /*
34414          * This bit must be '1' for the ipaddr_type field to be
34415          * configured.
34416          */
34417         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IPADDR_TYPE \
34418                 UINT32_C(0x400)
34419         /*
34420          * This bit must be '1' for the ip_protocol field to be
34421          * configured.
34422          */
34423         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IP_PROTOCOL \
34424                 UINT32_C(0x800)
34425         /*
34426          * This bit must be '1' for the src_port field to be
34427          * configured.
34428          */
34429         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_PORT \
34430                 UINT32_C(0x1000)
34431         /*
34432          * This bit must be '1' for the dst_port field to be
34433          * configured.
34434          */
34435         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_PORT \
34436                 UINT32_C(0x2000)
34437         /*
34438          * This bit must be '1' for the dst_id field to be
34439          * configured.
34440          */
34441         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_ID \
34442                 UINT32_C(0x4000)
34443         /*
34444          * This bit must be '1' for the mirror_vnic_id field to be
34445          * configured.
34446          */
34447         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
34448                 UINT32_C(0x8000)
34449         /*
34450          * This bit must be '1' for the encap_record_id field to be
34451          * configured.
34452          */
34453         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_ENCAP_RECORD_ID \
34454                 UINT32_C(0x10000)
34455         /*
34456          * This bit must be '1' for the meter_instance_id field to be
34457          * configured.
34458          */
34459         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_METER_INSTANCE_ID \
34460                 UINT32_C(0x20000)
34461         /*
34462          * This value identifies a set of CFA data structures used for an L2
34463          * context.
34464          */
34465         uint64_t        l2_filter_id;
34466         /* Tunnel Type. */
34467         uint8_t tunnel_type;
34468         /* Non-tunnel */
34469         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
34470                 UINT32_C(0x0)
34471         /* Virtual eXtensible Local Area Network (VXLAN) */
34472         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
34473                 UINT32_C(0x1)
34474         /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
34475         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
34476                 UINT32_C(0x2)
34477         /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
34478         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
34479                 UINT32_C(0x3)
34480         /* IP in IP */
34481         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
34482                 UINT32_C(0x4)
34483         /* Generic Network Virtualization Encapsulation (Geneve) */
34484         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
34485                 UINT32_C(0x5)
34486         /* Multi-Protocol Label Switching (MPLS) */
34487         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
34488                 UINT32_C(0x6)
34489         /* Stateless Transport Tunnel (STT) */
34490         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_STT \
34491                 UINT32_C(0x7)
34492         /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
34493         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
34494                 UINT32_C(0x8)
34495         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
34496         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
34497                 UINT32_C(0x9)
34498         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
34499         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
34500                 UINT32_C(0xa)
34501         /* Use fixed layer 2 ether type of 0xFFFF */
34502         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
34503                 UINT32_C(0xb)
34504         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
34505         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
34506                 UINT32_C(0xc)
34507         /* Any tunneled traffic */
34508         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
34509                 UINT32_C(0xff)
34510         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_LAST \
34511                 HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
34512         uint8_t unused_0[3];
34513         /*
34514          * Tunnel identifier.
34515          * Virtual Network Identifier (VNI). Only valid with
34516          * tunnel_types VXLAN, NVGRE, and Geneve.
34517          * Only lower 24-bits of VNI field are used
34518          * in setting up the filter.
34519          */
34520         uint32_t        tunnel_id;
34521         /*
34522          * This value indicates the source MAC address in
34523          * the Ethernet header.
34524          */
34525         uint8_t src_macaddr[6];
34526         /* The meter instance to attach to the flow. */
34527         uint16_t        meter_instance_id;
34528         /*
34529          * A value of 0xfff is considered invalid and implies the
34530          * instance is not configured.
34531          */
34532         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_INVALID \
34533                 UINT32_C(0xffff)
34534         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_LAST \
34535                 HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_INVALID
34536         /*
34537          * This value indicates the destination MAC address in
34538          * the Ethernet header.
34539          */
34540         uint8_t dst_macaddr[6];
34541         /*
34542          * This value indicates the VLAN ID of the outer VLAN tag
34543          * in the Ethernet header.
34544          */
34545         uint16_t        ovlan_vid;
34546         /*
34547          * This value indicates the VLAN ID of the inner VLAN tag
34548          * in the Ethernet header.
34549          */
34550         uint16_t        ivlan_vid;
34551         /* This value indicates the ethertype in the Ethernet header. */
34552         uint16_t        ethertype;
34553         /*
34554          * This value indicates the type of IP address.
34555          * 4 - IPv4
34556          * 6 - IPv6
34557          * All others are invalid.
34558          */
34559         uint8_t ip_addr_type;
34560         /* invalid */
34561         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN UINT32_C(0x0)
34562         /* IPv4 */
34563         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV4    UINT32_C(0x4)
34564         /* IPv6 */
34565         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV6    UINT32_C(0x6)
34566         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_LAST \
34567                 HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV6
34568         /*
34569          * The value of protocol filed in IP header.
34570          * Applies to UDP and TCP traffic.
34571          * 6 - TCP
34572          * 17 - UDP
34573          */
34574         uint8_t ip_protocol;
34575         /* invalid */
34576         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN UINT32_C(0x0)
34577         /* TCP */
34578         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_TCP     UINT32_C(0x6)
34579         /* UDP */
34580         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UDP     UINT32_C(0x11)
34581         #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_LAST \
34582                 HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UDP
34583         uint8_t unused_1[2];
34584         /*
34585          * The value of source IP address to be used in filtering.
34586          * For IPv4, first four bytes represent the IP address.
34587          */
34588         uint32_t        src_ipaddr[4];
34589         /*
34590          * big_endian = True
34591          *     The value of destination IP address to be used in filtering.
34592          *     For IPv4, first four bytes represent the IP address.
34593          */
34594         uint32_t        dst_ipaddr[4];
34595         /*
34596          * The value of source port to be used in filtering.
34597          * Applies to UDP and TCP traffic.
34598          */
34599         uint16_t        src_port;
34600         /*
34601          * The value of destination port to be used in filtering.
34602          * Applies to UDP and TCP traffic.
34603          */
34604         uint16_t        dst_port;
34605         /*
34606          * If set, this value shall represent the
34607          * Logical VNIC ID of the destination VNIC for the RX
34608          * path and network port id of the destination port for
34609          * the TX path.
34610          */
34611         uint16_t        dst_id;
34612         /*
34613          * Logical VNIC ID of the VNIC where traffic is
34614          * mirrored.
34615          */
34616         uint16_t        mirror_vnic_id;
34617         /* Logical ID of the encapsulation record. */
34618         uint32_t        encap_record_id;
34619         uint8_t unused_2[4];
34620 } __rte_packed;
34621
34622 /* hwrm_cfa_em_flow_alloc_output (size:192b/24B) */
34623 struct hwrm_cfa_em_flow_alloc_output {
34624         /* The specific error status for the command. */
34625         uint16_t        error_code;
34626         /* The HWRM command request type. */
34627         uint16_t        req_type;
34628         /* The sequence ID from the original command. */
34629         uint16_t        seq_id;
34630         /* The length of the response data in number of bytes. */
34631         uint16_t        resp_len;
34632         /* This value is an opaque id into CFA data structures. */
34633         uint64_t        em_filter_id;
34634         /*
34635          * The flow id value in bit 0-29 is the actual ID of the flow
34636          * associated with this filter and it shall be used to match
34637          * and associate the flow identifier returned in completion
34638          * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
34639          * shall indicate no valid flow id.
34640          */
34641         uint32_t        flow_id;
34642         /* Indicate the flow id value. */
34643         #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
34644                 UINT32_C(0x3fffffff)
34645         #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
34646         /* Indicate type of the flow. */
34647         #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE \
34648                 UINT32_C(0x40000000)
34649         /*
34650          * If this bit set to 0, then it indicates that the flow is
34651          * internal flow.
34652          */
34653         #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
34654                 (UINT32_C(0x0) << 30)
34655         /*
34656          * If this bit is set to 1, then it indicates that the flow is
34657          * external flow.
34658          */
34659         #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
34660                 (UINT32_C(0x1) << 30)
34661         #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
34662                 HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
34663         /* Indicate the flow direction. */
34664         #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR \
34665                 UINT32_C(0x80000000)
34666         /* If this bit set to 0, then it indicates rx flow. */
34667         #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
34668                 (UINT32_C(0x0) << 31)
34669         /* If this bit is set to 1, then it indicates that tx flow. */
34670         #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
34671                 (UINT32_C(0x1) << 31)
34672         #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
34673                 HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_TX
34674         uint8_t unused_0[3];
34675         /*
34676          * This field is used in Output records to indicate that the output
34677          * is completely written to RAM. This field should be read as '1'
34678          * to indicate that the output has been completely written.
34679          * When writing a command completion or response to an internal processor,
34680          * the order of writes has to be such that this field is written last.
34681          */
34682         uint8_t valid;
34683 } __rte_packed;
34684
34685 /*************************
34686  * hwrm_cfa_em_flow_free *
34687  *************************/
34688
34689
34690 /* hwrm_cfa_em_flow_free_input (size:192b/24B) */
34691 struct hwrm_cfa_em_flow_free_input {
34692         /* The HWRM command request type. */
34693         uint16_t        req_type;
34694         /*
34695          * The completion ring to send the completion event on. This should
34696          * be the NQ ID returned from the `nq_alloc` HWRM command.
34697          */
34698         uint16_t        cmpl_ring;
34699         /*
34700          * The sequence ID is used by the driver for tracking multiple
34701          * commands. This ID is treated as opaque data by the firmware and
34702          * the value is returned in the `hwrm_resp_hdr` upon completion.
34703          */
34704         uint16_t        seq_id;
34705         /*
34706          * The target ID of the command:
34707          * * 0x0-0xFFF8 - The function ID
34708          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
34709          * * 0xFFFD - Reserved for user-space HWRM interface
34710          * * 0xFFFF - HWRM
34711          */
34712         uint16_t        target_id;
34713         /*
34714          * A physical address pointer pointing to a host buffer that the
34715          * command's response data will be written. This can be either a host
34716          * physical address (HPA) or a guest physical address (GPA) and must
34717          * point to a physically contiguous block of memory.
34718          */
34719         uint64_t        resp_addr;
34720         /* This value is an opaque id into CFA data structures. */
34721         uint64_t        em_filter_id;
34722 } __rte_packed;
34723
34724 /* hwrm_cfa_em_flow_free_output (size:128b/16B) */
34725 struct hwrm_cfa_em_flow_free_output {
34726         /* The specific error status for the command. */
34727         uint16_t        error_code;
34728         /* The HWRM command request type. */
34729         uint16_t        req_type;
34730         /* The sequence ID from the original command. */
34731         uint16_t        seq_id;
34732         /* The length of the response data in number of bytes. */
34733         uint16_t        resp_len;
34734         uint8_t unused_0[7];
34735         /*
34736          * This field is used in Output records to indicate that the output
34737          * is completely written to RAM. This field should be read as '1'
34738          * to indicate that the output has been completely written.
34739          * When writing a command completion or response to an internal processor,
34740          * the order of writes has to be such that this field is written last.
34741          */
34742         uint8_t valid;
34743 } __rte_packed;
34744
34745 /************************
34746  * hwrm_cfa_meter_qcaps *
34747  ************************/
34748
34749
34750 /* hwrm_cfa_meter_qcaps_input (size:128b/16B) */
34751 struct hwrm_cfa_meter_qcaps_input {
34752         /* The HWRM command request type. */
34753         uint16_t        req_type;
34754         /*
34755          * The completion ring to send the completion event on. This should
34756          * be the NQ ID returned from the `nq_alloc` HWRM command.
34757          */
34758         uint16_t        cmpl_ring;
34759         /*
34760          * The sequence ID is used by the driver for tracking multiple
34761          * commands. This ID is treated as opaque data by the firmware and
34762          * the value is returned in the `hwrm_resp_hdr` upon completion.
34763          */
34764         uint16_t        seq_id;
34765         /*
34766          * The target ID of the command:
34767          * * 0x0-0xFFF8 - The function ID
34768          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
34769          * * 0xFFFD - Reserved for user-space HWRM interface
34770          * * 0xFFFF - HWRM
34771          */
34772         uint16_t        target_id;
34773         /*
34774          * A physical address pointer pointing to a host buffer that the
34775          * command's response data will be written. This can be either a host
34776          * physical address (HPA) or a guest physical address (GPA) and must
34777          * point to a physically contiguous block of memory.
34778          */
34779         uint64_t        resp_addr;
34780 } __rte_packed;
34781
34782 /* hwrm_cfa_meter_qcaps_output (size:320b/40B) */
34783 struct hwrm_cfa_meter_qcaps_output {
34784         /* The specific error status for the command. */
34785         uint16_t        error_code;
34786         /* The HWRM command request type. */
34787         uint16_t        req_type;
34788         /* The sequence ID from the original command. */
34789         uint16_t        seq_id;
34790         /* The length of the response data in number of bytes. */
34791         uint16_t        resp_len;
34792         uint32_t        flags;
34793         /*
34794          * Enumeration denoting the clock at which the Meter is running with.
34795          * This enumeration is used for resources that are similar for both
34796          * TX and RX paths of the chip.
34797          */
34798         #define HWRM_CFA_METER_QCAPS_OUTPUT_FLAGS_CLOCK_MASK  UINT32_C(0xf)
34799         #define HWRM_CFA_METER_QCAPS_OUTPUT_FLAGS_CLOCK_SFT   0
34800         /* 375 MHz */
34801         #define HWRM_CFA_METER_QCAPS_OUTPUT_FLAGS_CLOCK_375MHZ  UINT32_C(0x0)
34802         /* 625 MHz */
34803         #define HWRM_CFA_METER_QCAPS_OUTPUT_FLAGS_CLOCK_625MHZ  UINT32_C(0x1)
34804         #define HWRM_CFA_METER_QCAPS_OUTPUT_FLAGS_CLOCK_LAST \
34805                 HWRM_CFA_METER_QCAPS_OUTPUT_FLAGS_CLOCK_625MHZ
34806         uint8_t unused_0[4];
34807         /*
34808          * The minimum guaranteed number of tx meter profiles supported
34809          * for this function.
34810          */
34811         uint16_t        min_tx_profile;
34812         /*
34813          * The maximum non-guaranteed number of tx meter profiles supported
34814          * for this function.
34815          */
34816         uint16_t        max_tx_profile;
34817         /*
34818          * The minimum guaranteed number of rx meter profiles supported
34819          * for this function.
34820          */
34821         uint16_t        min_rx_profile;
34822         /*
34823          * The maximum non-guaranteed number of rx meter profiles supported
34824          * for this function.
34825          */
34826         uint16_t        max_rx_profile;
34827         /*
34828          * The minimum guaranteed number of tx meter instances supported
34829          * for this function.
34830          */
34831         uint16_t        min_tx_instance;
34832         /*
34833          * The maximum non-guaranteed number of tx meter instances supported
34834          * for this function.
34835          */
34836         uint16_t        max_tx_instance;
34837         /*
34838          * The minimum guaranteed number of rx meter instances supported
34839          * for this function.
34840          */
34841         uint16_t        min_rx_instance;
34842         /*
34843          * The maximum non-guaranteed number of rx meter instances supported
34844          * for this function.
34845          */
34846         uint16_t        max_rx_instance;
34847         uint8_t unused_1[7];
34848         /*
34849          * This field is used in Output records to indicate that the output
34850          * is completely written to RAM. This field should be read as '1'
34851          * to indicate that the output has been completely written.
34852          * When writing a command completion or response to an internal processor,
34853          * the order of writes has to be such that this field is written last.
34854          */
34855         uint8_t valid;
34856 } __rte_packed;
34857
34858 /********************************
34859  * hwrm_cfa_meter_profile_alloc *
34860  ********************************/
34861
34862
34863 /* hwrm_cfa_meter_profile_alloc_input (size:320b/40B) */
34864 struct hwrm_cfa_meter_profile_alloc_input {
34865         /* The HWRM command request type. */
34866         uint16_t        req_type;
34867         /*
34868          * The completion ring to send the completion event on. This should
34869          * be the NQ ID returned from the `nq_alloc` HWRM command.
34870          */
34871         uint16_t        cmpl_ring;
34872         /*
34873          * The sequence ID is used by the driver for tracking multiple
34874          * commands. This ID is treated as opaque data by the firmware and
34875          * the value is returned in the `hwrm_resp_hdr` upon completion.
34876          */
34877         uint16_t        seq_id;
34878         /*
34879          * The target ID of the command:
34880          * * 0x0-0xFFF8 - The function ID
34881          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
34882          * * 0xFFFD - Reserved for user-space HWRM interface
34883          * * 0xFFFF - HWRM
34884          */
34885         uint16_t        target_id;
34886         /*
34887          * A physical address pointer pointing to a host buffer that the
34888          * command's response data will be written. This can be either a host
34889          * physical address (HPA) or a guest physical address (GPA) and must
34890          * point to a physically contiguous block of memory.
34891          */
34892         uint64_t        resp_addr;
34893         uint8_t flags;
34894         /*
34895          * Enumeration denoting the RX, TX type of the resource.
34896          * This enumeration is used for resources that are similar for both
34897          * TX and RX paths of the chip.
34898          */
34899         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH     UINT32_C(0x1)
34900         /* tx path */
34901         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH_TX \
34902                 UINT32_C(0x0)
34903         /* rx path */
34904         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH_RX \
34905                 UINT32_C(0x1)
34906         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH_LAST \
34907                 HWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH_RX
34908         /* The meter algorithm type. */
34909         uint8_t meter_type;
34910         /* RFC 2697 (srTCM) */
34911         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_RFC2697 \
34912                 UINT32_C(0x0)
34913         /* RFC 2698 (trTCM) */
34914         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_RFC2698 \
34915                 UINT32_C(0x1)
34916         /* RFC 4115 (trTCM) */
34917         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_RFC4115 \
34918                 UINT32_C(0x2)
34919         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_LAST \
34920                 HWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_RFC4115
34921         /*
34922          * This field is reserved for the future use.
34923          * It shall be set to 0.
34924          */
34925         uint16_t        reserved1;
34926         /*
34927          * This field is reserved for the future use.
34928          * It shall be set to 0.
34929          */
34930         uint32_t        reserved2;
34931         /* A meter rate specified in bytes-per-second. */
34932         uint32_t        commit_rate;
34933         /* The bandwidth value. */
34934         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_MASK \
34935                 UINT32_C(0xfffffff)
34936         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_SFT \
34937                 0
34938         /* The granularity of the value (bits or bytes). */
34939         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE \
34940                 UINT32_C(0x10000000)
34941         /* Value is in bits. */
34942         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE_BITS \
34943                 (UINT32_C(0x0) << 28)
34944         /* Value is in bytes. */
34945         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE_BYTES \
34946                 (UINT32_C(0x1) << 28)
34947         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE_LAST \
34948                 HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE_BYTES
34949         /* bw_value_unit is 3 b */
34950         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_MASK \
34951                 UINT32_C(0xe0000000)
34952         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_SFT \
34953                 29
34954         /* Value is in Mb or MB (base 10). */
34955         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_MEGA \
34956                 (UINT32_C(0x0) << 29)
34957         /* Value is in Kb or KB (base 10). */
34958         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_KILO \
34959                 (UINT32_C(0x2) << 29)
34960         /* Value is in bits or bytes. */
34961         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_BASE \
34962                 (UINT32_C(0x4) << 29)
34963         /* Value is in Gb or GB (base 10). */
34964         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_GIGA \
34965                 (UINT32_C(0x6) << 29)
34966         /* Value is in 1/100th of a percentage of total bandwidth. */
34967         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_PERCENT1_100 \
34968                 (UINT32_C(0x1) << 29)
34969         /* Raw value */
34970         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_RAW \
34971                 (UINT32_C(0x7) << 29)
34972         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_LAST \
34973                 HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_RAW
34974         /* A meter burst size specified in bytes. */
34975         uint32_t        commit_burst;
34976         /* The bandwidth value. */
34977         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_MASK \
34978                 UINT32_C(0xfffffff)
34979         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_SFT \
34980                 0
34981         /* The granularity of the value (bits or bytes). */
34982         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE \
34983                 UINT32_C(0x10000000)
34984         /* Value is in bits. */
34985         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE_BITS \
34986                 (UINT32_C(0x0) << 28)
34987         /* Value is in bytes. */
34988         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE_BYTES \
34989                 (UINT32_C(0x1) << 28)
34990         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE_LAST \
34991                 HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE_BYTES
34992         /* bw_value_unit is 3 b */
34993         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_MASK \
34994                 UINT32_C(0xe0000000)
34995         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_SFT \
34996                 29
34997         /* Value is in Mb or MB (base 10). */
34998         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_MEGA \
34999                 (UINT32_C(0x0) << 29)
35000         /* Value is in Kb or KB (base 10). */
35001         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_KILO \
35002                 (UINT32_C(0x2) << 29)
35003         /* Value is in bits or bytes. */
35004         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_BASE \
35005                 (UINT32_C(0x4) << 29)
35006         /* Value is in Gb or GB (base 10). */
35007         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_GIGA \
35008                 (UINT32_C(0x6) << 29)
35009         /* Value is in 1/100th of a percentage of total bandwidth. */
35010         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_PERCENT1_100 \
35011                 (UINT32_C(0x1) << 29)
35012         /* Invalid value */
35013         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_INVALID \
35014                 (UINT32_C(0x7) << 29)
35015         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_LAST \
35016                 HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_INVALID
35017         /* A meter rate specified in bytes-per-second. */
35018         uint32_t        excess_peak_rate;
35019         /* The bandwidth value. */
35020         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_MASK \
35021                 UINT32_C(0xfffffff)
35022         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_SFT \
35023                 0
35024         /* The granularity of the value (bits or bytes). */
35025         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE \
35026                 UINT32_C(0x10000000)
35027         /* Value is in bits. */
35028         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE_BITS \
35029                 (UINT32_C(0x0) << 28)
35030         /* Value is in bytes. */
35031         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE_BYTES \
35032                 (UINT32_C(0x1) << 28)
35033         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE_LAST \
35034                 HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE_BYTES
35035         /* bw_value_unit is 3 b */
35036         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_MASK \
35037                 UINT32_C(0xe0000000)
35038         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_SFT \
35039                 29
35040         /* Value is in Mb or MB (base 10). */
35041         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_MEGA \
35042                 (UINT32_C(0x0) << 29)
35043         /* Value is in Kb or KB (base 10). */
35044         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_KILO \
35045                 (UINT32_C(0x2) << 29)
35046         /* Value is in bits or bytes. */
35047         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_BASE \
35048                 (UINT32_C(0x4) << 29)
35049         /* Value is in Gb or GB (base 10). */
35050         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_GIGA \
35051                 (UINT32_C(0x6) << 29)
35052         /* Value is in 1/100th of a percentage of total bandwidth. */
35053         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_PERCENT1_100 \
35054                 (UINT32_C(0x1) << 29)
35055         /* Raw unit */
35056         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_RAW \
35057                 (UINT32_C(0x7) << 29)
35058         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_LAST \
35059                 HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_RAW
35060         /* A meter burst size specified in bytes. */
35061         uint32_t        excess_peak_burst;
35062         /* The bandwidth value. */
35063         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_MASK \
35064                 UINT32_C(0xfffffff)
35065         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_SFT \
35066                 0
35067         /* The granularity of the value (bits or bytes). */
35068         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE \
35069                 UINT32_C(0x10000000)
35070         /* Value is in bits. */
35071         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE_BITS \
35072                 (UINT32_C(0x0) << 28)
35073         /* Value is in bytes. */
35074         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE_BYTES \
35075                 (UINT32_C(0x1) << 28)
35076         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE_LAST \
35077                 HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE_BYTES
35078         /* bw_value_unit is 3 b */
35079         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_MASK \
35080                 UINT32_C(0xe0000000)
35081         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_SFT \
35082                 29
35083         /* Value is in Mb or MB (base 10). */
35084         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_MEGA \
35085                 (UINT32_C(0x0) << 29)
35086         /* Value is in Kb or KB (base 10). */
35087         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_KILO \
35088                 (UINT32_C(0x2) << 29)
35089         /* Value is in bits or bytes. */
35090         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_BASE \
35091                 (UINT32_C(0x4) << 29)
35092         /* Value is in Gb or GB (base 10). */
35093         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_GIGA \
35094                 (UINT32_C(0x6) << 29)
35095         /* Value is in 1/100th of a percentage of total bandwidth. */
35096         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_PERCENT1_100 \
35097                 (UINT32_C(0x1) << 29)
35098         /* Invalid unit */
35099         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_INVALID \
35100                 (UINT32_C(0x7) << 29)
35101         #define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_LAST \
35102                 HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_INVALID
35103 } __rte_packed;
35104
35105 /* hwrm_cfa_meter_profile_alloc_output (size:128b/16B) */
35106 struct hwrm_cfa_meter_profile_alloc_output {
35107         /* The specific error status for the command. */
35108         uint16_t        error_code;
35109         /* The HWRM command request type. */
35110         uint16_t        req_type;
35111         /* The sequence ID from the original command. */
35112         uint16_t        seq_id;
35113         /* The length of the response data in number of bytes. */
35114         uint16_t        resp_len;
35115         /* This value identifies a meter profile in CFA. */
35116         uint16_t        meter_profile_id;
35117         /*
35118          * A value of 0xfff is considered invalid and implies the
35119          * profile is not configured.
35120          */
35121         #define HWRM_CFA_METER_PROFILE_ALLOC_OUTPUT_METER_PROFILE_ID_INVALID \
35122                 UINT32_C(0xffff)
35123         #define HWRM_CFA_METER_PROFILE_ALLOC_OUTPUT_METER_PROFILE_ID_LAST \
35124                 HWRM_CFA_METER_PROFILE_ALLOC_OUTPUT_METER_PROFILE_ID_INVALID
35125         uint8_t unused_0[5];
35126         /*
35127          * This field is used in Output records to indicate that the output
35128          * is completely written to RAM. This field should be read as '1'
35129          * to indicate that the output has been completely written.
35130          * When writing a command completion or response to an internal processor,
35131          * the order of writes has to be such that this field is written last.
35132          */
35133         uint8_t valid;
35134 } __rte_packed;
35135
35136 /*******************************
35137  * hwrm_cfa_meter_profile_free *
35138  *******************************/
35139
35140
35141 /* hwrm_cfa_meter_profile_free_input (size:192b/24B) */
35142 struct hwrm_cfa_meter_profile_free_input {
35143         /* The HWRM command request type. */
35144         uint16_t        req_type;
35145         /*
35146          * The completion ring to send the completion event on. This should
35147          * be the NQ ID returned from the `nq_alloc` HWRM command.
35148          */
35149         uint16_t        cmpl_ring;
35150         /*
35151          * The sequence ID is used by the driver for tracking multiple
35152          * commands. This ID is treated as opaque data by the firmware and
35153          * the value is returned in the `hwrm_resp_hdr` upon completion.
35154          */
35155         uint16_t        seq_id;
35156         /*
35157          * The target ID of the command:
35158          * * 0x0-0xFFF8 - The function ID
35159          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
35160          * * 0xFFFD - Reserved for user-space HWRM interface
35161          * * 0xFFFF - HWRM
35162          */
35163         uint16_t        target_id;
35164         /*
35165          * A physical address pointer pointing to a host buffer that the
35166          * command's response data will be written. This can be either a host
35167          * physical address (HPA) or a guest physical address (GPA) and must
35168          * point to a physically contiguous block of memory.
35169          */
35170         uint64_t        resp_addr;
35171         uint8_t flags;
35172         /*
35173          * Enumeration denoting the RX, TX type of the resource.
35174          * This enumeration is used for resources that are similar for both
35175          * TX and RX paths of the chip.
35176          */
35177         #define HWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH     UINT32_C(0x1)
35178         /* tx path */
35179         #define HWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH_TX \
35180                 UINT32_C(0x0)
35181         /* rx path */
35182         #define HWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH_RX \
35183                 UINT32_C(0x1)
35184         #define HWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH_LAST \
35185                 HWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH_RX
35186         uint8_t unused_0;
35187         /* This value identifies a meter profile in CFA. */
35188         uint16_t        meter_profile_id;
35189         /*
35190          * A value of 0xfff is considered invalid and implies the
35191          * profile is not configured.
35192          */
35193         #define HWRM_CFA_METER_PROFILE_FREE_INPUT_METER_PROFILE_ID_INVALID \
35194                 UINT32_C(0xffff)
35195         #define HWRM_CFA_METER_PROFILE_FREE_INPUT_METER_PROFILE_ID_LAST \
35196                 HWRM_CFA_METER_PROFILE_FREE_INPUT_METER_PROFILE_ID_INVALID
35197         uint8_t unused_1[4];
35198 } __rte_packed;
35199
35200 /* hwrm_cfa_meter_profile_free_output (size:128b/16B) */
35201 struct hwrm_cfa_meter_profile_free_output {
35202         /* The specific error status for the command. */
35203         uint16_t        error_code;
35204         /* The HWRM command request type. */
35205         uint16_t        req_type;
35206         /* The sequence ID from the original command. */
35207         uint16_t        seq_id;
35208         /* The length of the response data in number of bytes. */
35209         uint16_t        resp_len;
35210         uint8_t unused_0[7];
35211         /*
35212          * This field is used in Output records to indicate that the output
35213          * is completely written to RAM. This field should be read as '1'
35214          * to indicate that the output has been completely written.
35215          * When writing a command completion or response to an internal processor,
35216          * the order of writes has to be such that this field is written last.
35217          */
35218         uint8_t valid;
35219 } __rte_packed;
35220
35221 /******************************
35222  * hwrm_cfa_meter_profile_cfg *
35223  ******************************/
35224
35225
35226 /* hwrm_cfa_meter_profile_cfg_input (size:320b/40B) */
35227 struct hwrm_cfa_meter_profile_cfg_input {
35228         /* The HWRM command request type. */
35229         uint16_t        req_type;
35230         /*
35231          * The completion ring to send the completion event on. This should
35232          * be the NQ ID returned from the `nq_alloc` HWRM command.
35233          */
35234         uint16_t        cmpl_ring;
35235         /*
35236          * The sequence ID is used by the driver for tracking multiple
35237          * commands. This ID is treated as opaque data by the firmware and
35238          * the value is returned in the `hwrm_resp_hdr` upon completion.
35239          */
35240         uint16_t        seq_id;
35241         /*
35242          * The target ID of the command:
35243          * * 0x0-0xFFF8 - The function ID
35244          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
35245          * * 0xFFFD - Reserved for user-space HWRM interface
35246          * * 0xFFFF - HWRM
35247          */
35248         uint16_t        target_id;
35249         /*
35250          * A physical address pointer pointing to a host buffer that the
35251          * command's response data will be written. This can be either a host
35252          * physical address (HPA) or a guest physical address (GPA) and must
35253          * point to a physically contiguous block of memory.
35254          */
35255         uint64_t        resp_addr;
35256         uint8_t flags;
35257         /*
35258          * Enumeration denoting the RX, TX type of the resource.
35259          * This enumeration is used for resources that are similar for both
35260          * TX and RX paths of the chip.
35261          */
35262         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH     UINT32_C(0x1)
35263         /* tx path */
35264         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)
35265         /* rx path */
35266         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)
35267         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH_LAST \
35268                 HWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH_RX
35269         /* The meter algorithm type. */
35270         uint8_t meter_type;
35271         /* RFC 2697 (srTCM) */
35272         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_RFC2697 \
35273                 UINT32_C(0x0)
35274         /* RFC 2698 (trTCM) */
35275         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_RFC2698 \
35276                 UINT32_C(0x1)
35277         /* RFC 4115 (trTCM) */
35278         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_RFC4115 \
35279                 UINT32_C(0x2)
35280         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_LAST \
35281                 HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_RFC4115
35282         /* This value identifies a meter profile in CFA. */
35283         uint16_t        meter_profile_id;
35284         /*
35285          * A value of 0xfff is considered invalid and implies the
35286          * profile is not configured.
35287          */
35288         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_PROFILE_ID_INVALID \
35289                 UINT32_C(0xffff)
35290         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_PROFILE_ID_LAST \
35291                 HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_PROFILE_ID_INVALID
35292         /*
35293          * This field is reserved for the future use.
35294          * It shall be set to 0.
35295          */
35296         uint32_t        reserved;
35297         /* A meter rate specified in bytes-per-second. */
35298         uint32_t        commit_rate;
35299         /* The bandwidth value. */
35300         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_MASK \
35301                 UINT32_C(0xfffffff)
35302         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_SFT \
35303                 0
35304         /* The granularity of the value (bits or bytes). */
35305         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE \
35306                 UINT32_C(0x10000000)
35307         /* Value is in bits. */
35308         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE_BITS \
35309                 (UINT32_C(0x0) << 28)
35310         /* Value is in bytes. */
35311         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE_BYTES \
35312                 (UINT32_C(0x1) << 28)
35313         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE_LAST \
35314                 HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE_BYTES
35315         /* bw_value_unit is 3 b */
35316         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_MASK \
35317                 UINT32_C(0xe0000000)
35318         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_SFT \
35319                 29
35320         /* Value is in Mb or MB (base 10). */
35321         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_MEGA \
35322                 (UINT32_C(0x0) << 29)
35323         /* Value is in Kb or KB (base 10). */
35324         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_KILO \
35325                 (UINT32_C(0x2) << 29)
35326         /* Value is in bits or bytes. */
35327         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_BASE \
35328                 (UINT32_C(0x4) << 29)
35329         /* Value is in Gb or GB (base 10). */
35330         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_GIGA \
35331                 (UINT32_C(0x6) << 29)
35332         /* Value is in 1/100th of a percentage of total bandwidth. */
35333         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_PERCENT1_100 \
35334                 (UINT32_C(0x1) << 29)
35335         /* Raw value */
35336         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_RAW \
35337                 (UINT32_C(0x7) << 29)
35338         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_LAST \
35339                 HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_RAW
35340         /* A meter burst size specified in bytes. */
35341         uint32_t        commit_burst;
35342         /* The bandwidth value. */
35343         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_MASK \
35344                 UINT32_C(0xfffffff)
35345         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_SFT \
35346                 0
35347         /* The granularity of the value (bits or bytes). */
35348         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE \
35349                 UINT32_C(0x10000000)
35350         /* Value is in bits. */
35351         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE_BITS \
35352                 (UINT32_C(0x0) << 28)
35353         /* Value is in bytes. */
35354         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE_BYTES \
35355                 (UINT32_C(0x1) << 28)
35356         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE_LAST \
35357                 HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE_BYTES
35358         /* bw_value_unit is 3 b */
35359         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_MASK \
35360                 UINT32_C(0xe0000000)
35361         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_SFT \
35362                 29
35363         /* Value is in Mb or MB (base 10). */
35364         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_MEGA \
35365                 (UINT32_C(0x0) << 29)
35366         /* Value is in Kb or KB (base 10). */
35367         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_KILO \
35368                 (UINT32_C(0x2) << 29)
35369         /* Value is in bits or bytes. */
35370         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_BASE \
35371                 (UINT32_C(0x4) << 29)
35372         /* Value is in Gb or GB (base 10). */
35373         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_GIGA \
35374                 (UINT32_C(0x6) << 29)
35375         /* Value is in 1/100th of a percentage of total bandwidth. */
35376         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_PERCENT1_100 \
35377                 (UINT32_C(0x1) << 29)
35378         /* Invalid value */
35379         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_INVALID \
35380                 (UINT32_C(0x7) << 29)
35381         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_LAST \
35382                 HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_INVALID
35383         /* A meter rate specified in bytes-per-second. */
35384         uint32_t        excess_peak_rate;
35385         /* The bandwidth value. */
35386         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_MASK \
35387                 UINT32_C(0xfffffff)
35388         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_SFT \
35389                 0
35390         /* The granularity of the value (bits or bytes). */
35391         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE \
35392                 UINT32_C(0x10000000)
35393         /* Value is in bits. */
35394         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE_BITS \
35395                 (UINT32_C(0x0) << 28)
35396         /* Value is in bytes. */
35397         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE_BYTES \
35398                 (UINT32_C(0x1) << 28)
35399         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE_LAST \
35400                 HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE_BYTES
35401         /* bw_value_unit is 3 b */
35402         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_MASK \
35403                 UINT32_C(0xe0000000)
35404         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_SFT \
35405                 29
35406         /* Value is in Mb or MB (base 10). */
35407         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_MEGA \
35408                 (UINT32_C(0x0) << 29)
35409         /* Value is in Kb or KB (base 10). */
35410         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_KILO \
35411                 (UINT32_C(0x2) << 29)
35412         /* Value is in bits or bytes. */
35413         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_BASE \
35414                 (UINT32_C(0x4) << 29)
35415         /* Value is in Gb or GB (base 10). */
35416         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_GIGA \
35417                 (UINT32_C(0x6) << 29)
35418         /* Value is in 1/100th of a percentage of total bandwidth. */
35419         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_PERCENT1_100 \
35420                 (UINT32_C(0x1) << 29)
35421         /* Raw unit */
35422         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_RAW \
35423                 (UINT32_C(0x7) << 29)
35424         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_LAST \
35425                 HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_RAW
35426         /* A meter burst size specified in bytes. */
35427         uint32_t        excess_peak_burst;
35428         /* The bandwidth value. */
35429         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_MASK \
35430                 UINT32_C(0xfffffff)
35431         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_SFT \
35432                 0
35433         /* The granularity of the value (bits or bytes). */
35434         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE \
35435                 UINT32_C(0x10000000)
35436         /* Value is in bits. */
35437         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE_BITS \
35438                 (UINT32_C(0x0) << 28)
35439         /* Value is in bytes. */
35440         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE_BYTES \
35441                 (UINT32_C(0x1) << 28)
35442         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE_LAST \
35443                 HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE_BYTES
35444         /* bw_value_unit is 3 b */
35445         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_MASK \
35446                 UINT32_C(0xe0000000)
35447         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_SFT \
35448                 29
35449         /* Value is in Mb or MB (base 10). */
35450         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_MEGA \
35451                 (UINT32_C(0x0) << 29)
35452         /* Value is in Kb or KB (base 10). */
35453         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_KILO \
35454                 (UINT32_C(0x2) << 29)
35455         /* Value is in bits or bytes. */
35456         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_BASE \
35457                 (UINT32_C(0x4) << 29)
35458         /* Value is in Gb or GB (base 10). */
35459         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_GIGA \
35460                 (UINT32_C(0x6) << 29)
35461         /* Value is in 1/100th of a percentage of total bandwidth. */
35462         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_PERCENT1_100 \
35463                 (UINT32_C(0x1) << 29)
35464         /* Invalid unit */
35465         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_INVALID \
35466                 (UINT32_C(0x7) << 29)
35467         #define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_LAST \
35468                 HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_INVALID
35469 } __rte_packed;
35470
35471 /* hwrm_cfa_meter_profile_cfg_output (size:128b/16B) */
35472 struct hwrm_cfa_meter_profile_cfg_output {
35473         /* The specific error status for the command. */
35474         uint16_t        error_code;
35475         /* The HWRM command request type. */
35476         uint16_t        req_type;
35477         /* The sequence ID from the original command. */
35478         uint16_t        seq_id;
35479         /* The length of the response data in number of bytes. */
35480         uint16_t        resp_len;
35481         uint8_t unused_0[7];
35482         /*
35483          * This field is used in Output records to indicate that the output
35484          * is completely written to RAM. This field should be read as '1'
35485          * to indicate that the output has been completely written.
35486          * When writing a command completion or response to an internal processor,
35487          * the order of writes has to be such that this field is written last.
35488          */
35489         uint8_t valid;
35490 } __rte_packed;
35491
35492 /*********************************
35493  * hwrm_cfa_meter_instance_alloc *
35494  *********************************/
35495
35496
35497 /* hwrm_cfa_meter_instance_alloc_input (size:192b/24B) */
35498 struct hwrm_cfa_meter_instance_alloc_input {
35499         /* The HWRM command request type. */
35500         uint16_t        req_type;
35501         /*
35502          * The completion ring to send the completion event on. This should
35503          * be the NQ ID returned from the `nq_alloc` HWRM command.
35504          */
35505         uint16_t        cmpl_ring;
35506         /*
35507          * The sequence ID is used by the driver for tracking multiple
35508          * commands. This ID is treated as opaque data by the firmware and
35509          * the value is returned in the `hwrm_resp_hdr` upon completion.
35510          */
35511         uint16_t        seq_id;
35512         /*
35513          * The target ID of the command:
35514          * * 0x0-0xFFF8 - The function ID
35515          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
35516          * * 0xFFFD - Reserved for user-space HWRM interface
35517          * * 0xFFFF - HWRM
35518          */
35519         uint16_t        target_id;
35520         /*
35521          * A physical address pointer pointing to a host buffer that the
35522          * command's response data will be written. This can be either a host
35523          * physical address (HPA) or a guest physical address (GPA) and must
35524          * point to a physically contiguous block of memory.
35525          */
35526         uint64_t        resp_addr;
35527         uint8_t flags;
35528         /*
35529          * Enumeration denoting the RX, TX type of the resource.
35530          * This enumeration is used for resources that are similar for both
35531          * TX and RX paths of the chip.
35532          */
35533         #define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH \
35534                 UINT32_C(0x1)
35535         /* tx path */
35536         #define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH_TX \
35537                 UINT32_C(0x0)
35538         /* rx path */
35539         #define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH_RX \
35540                 UINT32_C(0x1)
35541         #define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH_LAST \
35542                 HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH_RX
35543         uint8_t unused_0;
35544         /* This value identifies a meter profile in CFA. */
35545         uint16_t        meter_profile_id;
35546         /*
35547          * A value of 0xffff is considered invalid and implies the
35548          * profile is not configured.
35549          */
35550         #define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_METER_PROFILE_ID_INVALID \
35551                 UINT32_C(0xffff)
35552         #define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_METER_PROFILE_ID_LAST \
35553                 HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_METER_PROFILE_ID_INVALID
35554         uint8_t unused_1[4];
35555 } __rte_packed;
35556
35557 /* hwrm_cfa_meter_instance_alloc_output (size:128b/16B) */
35558 struct hwrm_cfa_meter_instance_alloc_output {
35559         /* The specific error status for the command. */
35560         uint16_t        error_code;
35561         /* The HWRM command request type. */
35562         uint16_t        req_type;
35563         /* The sequence ID from the original command. */
35564         uint16_t        seq_id;
35565         /* The length of the response data in number of bytes. */
35566         uint16_t        resp_len;
35567         /* This value identifies a meter instance in CFA. */
35568         uint16_t        meter_instance_id;
35569         /*
35570          * A value of 0xffff is considered invalid and implies the
35571          * instance is not configured.
35572          */
35573         #define HWRM_CFA_METER_INSTANCE_ALLOC_OUTPUT_METER_INSTANCE_ID_INVALID \
35574                 UINT32_C(0xffff)
35575         #define HWRM_CFA_METER_INSTANCE_ALLOC_OUTPUT_METER_INSTANCE_ID_LAST \
35576                 HWRM_CFA_METER_INSTANCE_ALLOC_OUTPUT_METER_INSTANCE_ID_INVALID
35577         uint8_t unused_0[5];
35578         /*
35579          * This field is used in Output records to indicate that the output
35580          * is completely written to RAM. This field should be read as '1'
35581          * to indicate that the output has been completely written.
35582          * When writing a command completion or response to an internal processor,
35583          * the order of writes has to be such that this field is written last.
35584          */
35585         uint8_t valid;
35586 } __rte_packed;
35587
35588 /*******************************
35589  * hwrm_cfa_meter_instance_cfg *
35590  *******************************/
35591
35592
35593 /* hwrm_cfa_meter_instance_cfg_input (size:192b/24B) */
35594 struct hwrm_cfa_meter_instance_cfg_input {
35595         /* The HWRM command request type. */
35596         uint16_t        req_type;
35597         /*
35598          * The completion ring to send the completion event on. This should
35599          * be the NQ ID returned from the `nq_alloc` HWRM command.
35600          */
35601         uint16_t        cmpl_ring;
35602         /*
35603          * The sequence ID is used by the driver for tracking multiple
35604          * commands. This ID is treated as opaque data by the firmware and
35605          * the value is returned in the `hwrm_resp_hdr` upon completion.
35606          */
35607         uint16_t        seq_id;
35608         /*
35609          * The target ID of the command:
35610          * * 0x0-0xFFF8 - The function ID
35611          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
35612          * * 0xFFFD - Reserved for user-space HWRM interface
35613          * * 0xFFFF - HWRM
35614          */
35615         uint16_t        target_id;
35616         /*
35617          * A physical address pointer pointing to a host buffer that the
35618          * command's response data will be written. This can be either a host
35619          * physical address (HPA) or a guest physical address (GPA) and must
35620          * point to a physically contiguous block of memory.
35621          */
35622         uint64_t        resp_addr;
35623         uint8_t flags;
35624         /*
35625          * Enumeration denoting the RX, TX type of the resource.
35626          * This enumeration is used for resources that are similar for both
35627          * TX and RX paths of the chip.
35628          */
35629         #define HWRM_CFA_METER_INSTANCE_CFG_INPUT_FLAGS_PATH     UINT32_C(0x1)
35630         /* tx path */
35631         #define HWRM_CFA_METER_INSTANCE_CFG_INPUT_FLAGS_PATH_TX \
35632                 UINT32_C(0x0)
35633         /* rx path */
35634         #define HWRM_CFA_METER_INSTANCE_CFG_INPUT_FLAGS_PATH_RX \
35635                 UINT32_C(0x1)
35636         #define HWRM_CFA_METER_INSTANCE_CFG_INPUT_FLAGS_PATH_LAST \
35637                 HWRM_CFA_METER_INSTANCE_CFG_INPUT_FLAGS_PATH_RX
35638         uint8_t unused_0;
35639         /*
35640          * This value identifies a new meter profile to be associated with
35641          * the meter instance specified in this command.
35642          */
35643         uint16_t        meter_profile_id;
35644         /*
35645          * A value of 0xffff is considered invalid and implies the
35646          * profile is not configured.
35647          */
35648         #define HWRM_CFA_METER_INSTANCE_CFG_INPUT_METER_PROFILE_ID_INVALID \
35649                 UINT32_C(0xffff)
35650         #define HWRM_CFA_METER_INSTANCE_CFG_INPUT_METER_PROFILE_ID_LAST \
35651                 HWRM_CFA_METER_INSTANCE_CFG_INPUT_METER_PROFILE_ID_INVALID
35652         /*
35653          * This value identifies the ID of a meter instance that needs to be updated with
35654          * a new meter profile specified in this command.
35655          */
35656         uint16_t        meter_instance_id;
35657         uint8_t unused_1[2];
35658 } __rte_packed;
35659
35660 /* hwrm_cfa_meter_instance_cfg_output (size:128b/16B) */
35661 struct hwrm_cfa_meter_instance_cfg_output {
35662         /* The specific error status for the command. */
35663         uint16_t        error_code;
35664         /* The HWRM command request type. */
35665         uint16_t        req_type;
35666         /* The sequence ID from the original command. */
35667         uint16_t        seq_id;
35668         /* The length of the response data in number of bytes. */
35669         uint16_t        resp_len;
35670         uint8_t unused_0[7];
35671         /*
35672          * This field is used in Output records to indicate that the output
35673          * is completely written to RAM. This field should be read as '1'
35674          * to indicate that the output has been completely written.
35675          * When writing a command completion or response to an internal processor,
35676          * the order of writes has to be such that this field is written last.
35677          */
35678         uint8_t valid;
35679 } __rte_packed;
35680
35681 /********************************
35682  * hwrm_cfa_meter_instance_free *
35683  ********************************/
35684
35685
35686 /* hwrm_cfa_meter_instance_free_input (size:192b/24B) */
35687 struct hwrm_cfa_meter_instance_free_input {
35688         /* The HWRM command request type. */
35689         uint16_t        req_type;
35690         /*
35691          * The completion ring to send the completion event on. This should
35692          * be the NQ ID returned from the `nq_alloc` HWRM command.
35693          */
35694         uint16_t        cmpl_ring;
35695         /*
35696          * The sequence ID is used by the driver for tracking multiple
35697          * commands. This ID is treated as opaque data by the firmware and
35698          * the value is returned in the `hwrm_resp_hdr` upon completion.
35699          */
35700         uint16_t        seq_id;
35701         /*
35702          * The target ID of the command:
35703          * * 0x0-0xFFF8 - The function ID
35704          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
35705          * * 0xFFFD - Reserved for user-space HWRM interface
35706          * * 0xFFFF - HWRM
35707          */
35708         uint16_t        target_id;
35709         /*
35710          * A physical address pointer pointing to a host buffer that the
35711          * command's response data will be written. This can be either a host
35712          * physical address (HPA) or a guest physical address (GPA) and must
35713          * point to a physically contiguous block of memory.
35714          */
35715         uint64_t        resp_addr;
35716         uint8_t flags;
35717         /*
35718          * Enumeration denoting the RX, TX type of the resource.
35719          * This enumeration is used for resources that are similar for both
35720          * TX and RX paths of the chip.
35721          */
35722         #define HWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH     UINT32_C(0x1)
35723         /* tx path */
35724         #define HWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH_TX \
35725                 UINT32_C(0x0)
35726         /* rx path */
35727         #define HWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH_RX \
35728                 UINT32_C(0x1)
35729         #define HWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH_LAST \
35730                 HWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH_RX
35731         uint8_t unused_0;
35732         /* This value identifies a meter instance in CFA. */
35733         uint16_t        meter_instance_id;
35734         /*
35735          * A value of 0xfff is considered invalid and implies the
35736          * instance is not configured.
35737          */
35738         #define HWRM_CFA_METER_INSTANCE_FREE_INPUT_METER_INSTANCE_ID_INVALID \
35739                 UINT32_C(0xffff)
35740         #define HWRM_CFA_METER_INSTANCE_FREE_INPUT_METER_INSTANCE_ID_LAST \
35741                 HWRM_CFA_METER_INSTANCE_FREE_INPUT_METER_INSTANCE_ID_INVALID
35742         uint8_t unused_1[4];
35743 } __rte_packed;
35744
35745 /* hwrm_cfa_meter_instance_free_output (size:128b/16B) */
35746 struct hwrm_cfa_meter_instance_free_output {
35747         /* The specific error status for the command. */
35748         uint16_t        error_code;
35749         /* The HWRM command request type. */
35750         uint16_t        req_type;
35751         /* The sequence ID from the original command. */
35752         uint16_t        seq_id;
35753         /* The length of the response data in number of bytes. */
35754         uint16_t        resp_len;
35755         uint8_t unused_0[7];
35756         /*
35757          * This field is used in Output records to indicate that the output
35758          * is completely written to RAM. This field should be read as '1'
35759          * to indicate that the output has been completely written.
35760          * When writing a command completion or response to an internal processor,
35761          * the order of writes has to be such that this field is written last.
35762          */
35763         uint8_t valid;
35764 } __rte_packed;
35765
35766 /*******************************
35767  * hwrm_cfa_decap_filter_alloc *
35768  *******************************/
35769
35770
35771 /* hwrm_cfa_decap_filter_alloc_input (size:832b/104B) */
35772 struct hwrm_cfa_decap_filter_alloc_input {
35773         /* The HWRM command request type. */
35774         uint16_t        req_type;
35775         /*
35776          * The completion ring to send the completion event on. This should
35777          * be the NQ ID returned from the `nq_alloc` HWRM command.
35778          */
35779         uint16_t        cmpl_ring;
35780         /*
35781          * The sequence ID is used by the driver for tracking multiple
35782          * commands. This ID is treated as opaque data by the firmware and
35783          * the value is returned in the `hwrm_resp_hdr` upon completion.
35784          */
35785         uint16_t        seq_id;
35786         /*
35787          * The target ID of the command:
35788          * * 0x0-0xFFF8 - The function ID
35789          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
35790          * * 0xFFFD - Reserved for user-space HWRM interface
35791          * * 0xFFFF - HWRM
35792          */
35793         uint16_t        target_id;
35794         /*
35795          * A physical address pointer pointing to a host buffer that the
35796          * command's response data will be written. This can be either a host
35797          * physical address (HPA) or a guest physical address (GPA) and must
35798          * point to a physically contiguous block of memory.
35799          */
35800         uint64_t        resp_addr;
35801         uint32_t        flags;
35802         /* ovs_tunnel is 1 b */
35803         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_FLAGS_OVS_TUNNEL \
35804                 UINT32_C(0x1)
35805         uint32_t        enables;
35806         /*
35807          * This bit must be '1' for the tunnel_type field to be
35808          * configured.
35809          */
35810         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
35811                 UINT32_C(0x1)
35812         /*
35813          * This bit must be '1' for the tunnel_id field to be
35814          * configured.
35815          */
35816         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_ID \
35817                 UINT32_C(0x2)
35818         /*
35819          * This bit must be '1' for the src_macaddr field to be
35820          * configured.
35821          */
35822         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_SRC_MACADDR \
35823                 UINT32_C(0x4)
35824         /*
35825          * This bit must be '1' for the dst_macaddr field to be
35826          * configured.
35827          */
35828         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_MACADDR \
35829                 UINT32_C(0x8)
35830         /*
35831          * This bit must be '1' for the ovlan_vid field to be
35832          * configured.
35833          */
35834         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_OVLAN_VID \
35835                 UINT32_C(0x10)
35836         /*
35837          * This bit must be '1' for the ivlan_vid field to be
35838          * configured.
35839          */
35840         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_IVLAN_VID \
35841                 UINT32_C(0x20)
35842         /*
35843          * This bit must be '1' for the t_ovlan_vid field to be
35844          * configured.
35845          */
35846         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_T_OVLAN_VID \
35847                 UINT32_C(0x40)
35848         /*
35849          * This bit must be '1' for the t_ivlan_vid field to be
35850          * configured.
35851          */
35852         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_T_IVLAN_VID \
35853                 UINT32_C(0x80)
35854         /*
35855          * This bit must be '1' for the ethertype field to be
35856          * configured.
35857          */
35858         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_ETHERTYPE \
35859                 UINT32_C(0x100)
35860         /*
35861          * This bit must be '1' for the src_ipaddr field to be
35862          * configured.
35863          */
35864         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR \
35865                 UINT32_C(0x200)
35866         /*
35867          * This bit must be '1' for the dst_ipaddr field to be
35868          * configured.
35869          */
35870         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR \
35871                 UINT32_C(0x400)
35872         /*
35873          * This bit must be '1' for the ipaddr_type field to be
35874          * configured.
35875          */
35876         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_IPADDR_TYPE \
35877                 UINT32_C(0x800)
35878         /*
35879          * This bit must be '1' for the ip_protocol field to be
35880          * configured.
35881          */
35882         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_IP_PROTOCOL \
35883                 UINT32_C(0x1000)
35884         /*
35885          * This bit must be '1' for the src_port field to be
35886          * configured.
35887          */
35888         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT \
35889                 UINT32_C(0x2000)
35890         /*
35891          * This bit must be '1' for the dst_port field to be
35892          * configured.
35893          */
35894         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_PORT \
35895                 UINT32_C(0x4000)
35896         /*
35897          * This bit must be '1' for the dst_id field to be
35898          * configured.
35899          */
35900         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_ID \
35901                 UINT32_C(0x8000)
35902         /*
35903          * This bit must be '1' for the mirror_vnic_id field to be
35904          * configured.
35905          */
35906         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
35907                 UINT32_C(0x10000)
35908         /*
35909          * Tunnel identifier.
35910          * Virtual Network Identifier (VNI). Only valid with
35911          * tunnel_types VXLAN, NVGRE, and Geneve.
35912          * Only lower 24-bits of VNI field are used
35913          * in setting up the filter.
35914          */
35915         uint32_t        tunnel_id;
35916         /* Tunnel Type. */
35917         uint8_t tunnel_type;
35918         /* Non-tunnel */
35919         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
35920                 UINT32_C(0x0)
35921         /* Virtual eXtensible Local Area Network (VXLAN) */
35922         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
35923                 UINT32_C(0x1)
35924         /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
35925         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
35926                 UINT32_C(0x2)
35927         /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
35928         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
35929                 UINT32_C(0x3)
35930         /* IP in IP */
35931         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
35932                 UINT32_C(0x4)
35933         /* Generic Network Virtualization Encapsulation (Geneve) */
35934         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
35935                 UINT32_C(0x5)
35936         /* Multi-Protocol Label Switching (MPLS) */
35937         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
35938                 UINT32_C(0x6)
35939         /* Stateless Transport Tunnel (STT) */
35940         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \
35941                 UINT32_C(0x7)
35942         /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
35943         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
35944                 UINT32_C(0x8)
35945         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
35946         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
35947                 UINT32_C(0x9)
35948         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
35949         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
35950                 UINT32_C(0xa)
35951         /* Use fixed layer 2 ether type of 0xFFFF */
35952         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
35953                 UINT32_C(0xb)
35954         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
35955         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
35956                 UINT32_C(0xc)
35957         /* Any tunneled traffic */
35958         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
35959                 UINT32_C(0xff)
35960         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \
35961                 HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
35962         uint8_t unused_0;
35963         uint16_t        unused_1;
35964         /*
35965          * This value indicates the source MAC address in
35966          * the Ethernet header.
35967          */
35968         uint8_t src_macaddr[6];
35969         uint8_t unused_2[2];
35970         /*
35971          * This value indicates the destination MAC address in
35972          * the Ethernet header.
35973          */
35974         uint8_t dst_macaddr[6];
35975         /*
35976          * This value indicates the VLAN ID of the outer VLAN tag
35977          * in the Ethernet header.
35978          */
35979         uint16_t        ovlan_vid;
35980         /*
35981          * This value indicates the VLAN ID of the inner VLAN tag
35982          * in the Ethernet header.
35983          */
35984         uint16_t        ivlan_vid;
35985         /*
35986          * This value indicates the VLAN ID of the outer VLAN tag
35987          * in the tunnel Ethernet header.
35988          */
35989         uint16_t        t_ovlan_vid;
35990         /*
35991          * This value indicates the VLAN ID of the inner VLAN tag
35992          * in the tunnel Ethernet header.
35993          */
35994         uint16_t        t_ivlan_vid;
35995         /* This value indicates the ethertype in the Ethernet header. */
35996         uint16_t        ethertype;
35997         /*
35998          * This value indicates the type of IP address.
35999          * 4 - IPv4
36000          * 6 - IPv6
36001          * All others are invalid.
36002          */
36003         uint8_t ip_addr_type;
36004         /* invalid */
36005         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN \
36006                 UINT32_C(0x0)
36007         /* IPv4 */
36008         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV4 \
36009                 UINT32_C(0x4)
36010         /* IPv6 */
36011         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6 \
36012                 UINT32_C(0x6)
36013         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_LAST \
36014                 HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6
36015         /*
36016          * The value of protocol filed in IP header.
36017          * Applies to UDP and TCP traffic.
36018          * 6 - TCP
36019          * 17 - UDP
36020          */
36021         uint8_t ip_protocol;
36022         /* invalid */
36023         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN \
36024                 UINT32_C(0x0)
36025         /* TCP */
36026         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_TCP \
36027                 UINT32_C(0x6)
36028         /* UDP */
36029         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP \
36030                 UINT32_C(0x11)
36031         #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_LAST \
36032                 HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP
36033         uint16_t        unused_3;
36034         uint32_t        unused_4;
36035         /*
36036          * The value of source IP address to be used in filtering.
36037          * For IPv4, first four bytes represent the IP address.
36038          */
36039         uint32_t        src_ipaddr[4];
36040         /*
36041          * The value of destination IP address to be used in filtering.
36042          * For IPv4, first four bytes represent the IP address.
36043          */
36044         uint32_t        dst_ipaddr[4];
36045         /*
36046          * The value of source port to be used in filtering.
36047          * Applies to UDP and TCP traffic.
36048          */
36049         uint16_t        src_port;
36050         /*
36051          * The value of destination port to be used in filtering.
36052          * Applies to UDP and TCP traffic.
36053          */
36054         uint16_t        dst_port;
36055         /*
36056          * If set, this value shall represent the
36057          * Logical VNIC ID of the destination VNIC for the RX
36058          * path.
36059          */
36060         uint16_t        dst_id;
36061         /*
36062          * If set, this value shall represent the L2 context that matches the L2
36063          * information of the decap filter.
36064          */
36065         uint16_t        l2_ctxt_ref_id;
36066 } __rte_packed;
36067
36068 /* hwrm_cfa_decap_filter_alloc_output (size:128b/16B) */
36069 struct hwrm_cfa_decap_filter_alloc_output {
36070         /* The specific error status for the command. */
36071         uint16_t        error_code;
36072         /* The HWRM command request type. */
36073         uint16_t        req_type;
36074         /* The sequence ID from the original command. */
36075         uint16_t        seq_id;
36076         /* The length of the response data in number of bytes. */
36077         uint16_t        resp_len;
36078         /* This value is an opaque id into CFA data structures. */
36079         uint32_t        decap_filter_id;
36080         uint8_t unused_0[3];
36081         /*
36082          * This field is used in Output records to indicate that the output
36083          * is completely written to RAM. This field should be read as '1'
36084          * to indicate that the output has been completely written.
36085          * When writing a command completion or response to an internal processor,
36086          * the order of writes has to be such that this field is written last.
36087          */
36088         uint8_t valid;
36089 } __rte_packed;
36090
36091 /******************************
36092  * hwrm_cfa_decap_filter_free *
36093  ******************************/
36094
36095
36096 /* hwrm_cfa_decap_filter_free_input (size:192b/24B) */
36097 struct hwrm_cfa_decap_filter_free_input {
36098         /* The HWRM command request type. */
36099         uint16_t        req_type;
36100         /*
36101          * The completion ring to send the completion event on. This should
36102          * be the NQ ID returned from the `nq_alloc` HWRM command.
36103          */
36104         uint16_t        cmpl_ring;
36105         /*
36106          * The sequence ID is used by the driver for tracking multiple
36107          * commands. This ID is treated as opaque data by the firmware and
36108          * the value is returned in the `hwrm_resp_hdr` upon completion.
36109          */
36110         uint16_t        seq_id;
36111         /*
36112          * The target ID of the command:
36113          * * 0x0-0xFFF8 - The function ID
36114          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
36115          * * 0xFFFD - Reserved for user-space HWRM interface
36116          * * 0xFFFF - HWRM
36117          */
36118         uint16_t        target_id;
36119         /*
36120          * A physical address pointer pointing to a host buffer that the
36121          * command's response data will be written. This can be either a host
36122          * physical address (HPA) or a guest physical address (GPA) and must
36123          * point to a physically contiguous block of memory.
36124          */
36125         uint64_t        resp_addr;
36126         /* This value is an opaque id into CFA data structures. */
36127         uint32_t        decap_filter_id;
36128         uint8_t unused_0[4];
36129 } __rte_packed;
36130
36131 /* hwrm_cfa_decap_filter_free_output (size:128b/16B) */
36132 struct hwrm_cfa_decap_filter_free_output {
36133         /* The specific error status for the command. */
36134         uint16_t        error_code;
36135         /* The HWRM command request type. */
36136         uint16_t        req_type;
36137         /* The sequence ID from the original command. */
36138         uint16_t        seq_id;
36139         /* The length of the response data in number of bytes. */
36140         uint16_t        resp_len;
36141         uint8_t unused_0[7];
36142         /*
36143          * This field is used in Output records to indicate that the output
36144          * is completely written to RAM. This field should be read as '1'
36145          * to indicate that the output has been completely written.
36146          * When writing a command completion or response to an internal processor,
36147          * the order of writes has to be such that this field is written last.
36148          */
36149         uint8_t valid;
36150 } __rte_packed;
36151
36152 /***********************
36153  * hwrm_cfa_flow_alloc *
36154  ***********************/
36155
36156
36157 /* hwrm_cfa_flow_alloc_input (size:1024b/128B) */
36158 struct hwrm_cfa_flow_alloc_input {
36159         /* The HWRM command request type. */
36160         uint16_t        req_type;
36161         /*
36162          * The completion ring to send the completion event on. This should
36163          * be the NQ ID returned from the `nq_alloc` HWRM command.
36164          */
36165         uint16_t        cmpl_ring;
36166         /*
36167          * The sequence ID is used by the driver for tracking multiple
36168          * commands. This ID is treated as opaque data by the firmware and
36169          * the value is returned in the `hwrm_resp_hdr` upon completion.
36170          */
36171         uint16_t        seq_id;
36172         /*
36173          * The target ID of the command:
36174          * * 0x0-0xFFF8 - The function ID
36175          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
36176          * * 0xFFFD - Reserved for user-space HWRM interface
36177          * * 0xFFFF - HWRM
36178          */
36179         uint16_t        target_id;
36180         /*
36181          * A physical address pointer pointing to a host buffer that the
36182          * command's response data will be written. This can be either a host
36183          * physical address (HPA) or a guest physical address (GPA) and must
36184          * point to a physically contiguous block of memory.
36185          */
36186         uint64_t        resp_addr;
36187         uint16_t        flags;
36188         /* tunnel is 1 b */
36189         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_TUNNEL \
36190                 UINT32_C(0x1)
36191         /* num_vlan is 2 b */
36192         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_MASK \
36193                 UINT32_C(0x6)
36194         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_SFT           1
36195         /* no tags */
36196         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_NONE \
36197                 (UINT32_C(0x0) << 1)
36198         /* 1 tag */
36199         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_ONE \
36200                 (UINT32_C(0x1) << 1)
36201         /* 2 tags */
36202         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_TWO \
36203                 (UINT32_C(0x2) << 1)
36204         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_LAST \
36205                 HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_TWO
36206         /* Enumeration denoting the Flow Type. */
36207         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_MASK \
36208                 UINT32_C(0x38)
36209         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_SFT           3
36210         /* L2 flow */
36211         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_L2 \
36212                 (UINT32_C(0x0) << 3)
36213         /* IPV4 flow */
36214         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_IPV4 \
36215                 (UINT32_C(0x1) << 3)
36216         /* IPV6 flow */
36217         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_IPV6 \
36218                 (UINT32_C(0x2) << 3)
36219         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_LAST \
36220                 HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_IPV6
36221         /*
36222          * when set to 1, indicates TX flow offload for function specified in src_fid and
36223          * the dst_fid should be set to invalid value. To indicate a VM to VM flow, both
36224          * of the path_tx and path_rx flags need to be set. For virtio vSwitch offload
36225          * case, the src_fid and dst_fid is set to the same fid value. For the SRIOV
36226          * vSwitch offload case, the src_fid and dst_fid must be set to the same VF FID
36227          * belong to the children VFs of the same PF to indicate VM to VM flow.
36228          */
36229         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_PATH_TX \
36230                 UINT32_C(0x40)
36231         /*
36232          * when set to 1, indicates RX flow offload for function specified in dst_fid and
36233          * the src_fid should be set to invalid value.
36234          */
36235         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_PATH_RX \
36236                 UINT32_C(0x80)
36237         /*
36238          * Set to 1 to indicate matching of VXLAN VNI from the custom vxlan header is
36239          * required and the VXLAN VNI value is stored in the first 24 bits of the dmac field.
36240          * This flag is only valid when the flow direction is RX.
36241          */
36242         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_MATCH_VXLAN_IP_VNI \
36243                 UINT32_C(0x100)
36244         /* Set to 1 to indicate vhost_id is specified in the outer_vlan_tci field. */
36245         #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_VHOST_ID_USE_VLAN \
36246                 UINT32_C(0x200)
36247         /*
36248          * Tx Flow: vf fid.
36249          * Rx Flow: pf fid.
36250          */
36251         uint16_t        src_fid;
36252         /* Tunnel handle valid when tunnel flag is set. */
36253         uint32_t        tunnel_handle;
36254         uint16_t        action_flags;
36255         /*
36256          * Setting of this flag indicates drop action. If this flag is not set,
36257          * then it should be considered accept action.
36258          */
36259         #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_FWD \
36260                 UINT32_C(0x1)
36261         /* recycle is 1 b */
36262         #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_RECYCLE \
36263                 UINT32_C(0x2)
36264         /*
36265          * Setting of this flag indicates drop action. If this flag is not set,
36266          * then it should be considered accept action.
36267          */
36268         #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_DROP \
36269                 UINT32_C(0x4)
36270         /* meter is 1 b */
36271         #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_METER \
36272                 UINT32_C(0x8)
36273         /* tunnel is 1 b */
36274         #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_TUNNEL \
36275                 UINT32_C(0x10)
36276         /* nat_src is 1 b */
36277         #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NAT_SRC \
36278                 UINT32_C(0x20)
36279         /* nat_dest is 1 b */
36280         #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NAT_DEST \
36281                 UINT32_C(0x40)
36282         /* nat_ipv4_address is 1 b */
36283         #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NAT_IPV4_ADDRESS \
36284                 UINT32_C(0x80)
36285         /* l2_header_rewrite is 1 b */
36286         #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_L2_HEADER_REWRITE \
36287                 UINT32_C(0x100)
36288         /* ttl_decrement is 1 b */
36289         #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_TTL_DECREMENT \
36290                 UINT32_C(0x200)
36291         /*
36292          * If set to 1 and flow direction is TX, it indicates decap of L2 header
36293          * and encap of tunnel header. If set to 1 and flow direction is RX, it
36294          * indicates decap of tunnel header and encap L2 header. The type of tunnel
36295          * is specified in the tunnel_type field.
36296          */
36297         #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_TUNNEL_IP \
36298                 UINT32_C(0x400)
36299         /* If set to 1, flow aging is enabled for this flow. */
36300         #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_FLOW_AGING_ENABLED \
36301                 UINT32_C(0x800)
36302         /*
36303          * If set to 1 an attempt will be made to try to offload this flow to the
36304          * most optimal flow table resource. If set to 0, the flow will be
36305          * placed to the default flow table resource.
36306          */
36307         #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_PRI_HINT \
36308                 UINT32_C(0x1000)
36309         /*
36310          * If set to 1 there will be no attempt to allocate an on-chip try to
36311          * offload this flow. If set to 0, which will keep compatibility with the
36312          * older drivers, will cause the FW to attempt to allocate an on-chip flow
36313          * counter for the newly created flow. This will keep the existing behavior
36314          * with EM flows which always had an associated flow counter.
36315          */
36316         #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NO_FLOW_COUNTER_ALLOC \
36317                 UINT32_C(0x2000)
36318         /*
36319          * Tx Flow: pf or vf fid.
36320          * Rx Flow: vf fid.
36321          */
36322         uint16_t        dst_fid;
36323         /* VLAN tpid, valid when push_vlan flag is set. */
36324         uint16_t        l2_rewrite_vlan_tpid;
36325         /* VLAN tci, valid when push_vlan flag is set. */
36326         uint16_t        l2_rewrite_vlan_tci;
36327         /* Meter id, valid when meter flag is set. */
36328         uint16_t        act_meter_id;
36329         /* Flow with the same l2 context tcam key. */
36330         uint16_t        ref_flow_handle;
36331         /* This value sets the match value for the ethertype. */
36332         uint16_t        ethertype;
36333         /* valid when num tags is 1 or 2. */
36334         uint16_t        outer_vlan_tci;
36335         /* This value sets the match value for the Destination MAC address. */
36336         uint16_t        dmac[3];
36337         /* valid when num tags is 2. */
36338         uint16_t        inner_vlan_tci;
36339         /* This value sets the match value for the Source MAC address. */
36340         uint16_t        smac[3];
36341         /* The bit length of destination IP address mask. */
36342         uint8_t ip_dst_mask_len;
36343         /* The bit length of source IP address mask. */
36344         uint8_t ip_src_mask_len;
36345         /* The value of destination IPv4/IPv6 address. */
36346         uint32_t        ip_dst[4];
36347         /* The source IPv4/IPv6 address. */
36348         uint32_t        ip_src[4];
36349         /*
36350          * The value of source port.
36351          * Applies to UDP and TCP traffic.
36352          */
36353         uint16_t        l4_src_port;
36354         /*
36355          * The value of source port mask.
36356          * Applies to UDP and TCP traffic.
36357          */
36358         uint16_t        l4_src_port_mask;
36359         /*
36360          * The value of destination port.
36361          * Applies to UDP and TCP traffic.
36362          */
36363         uint16_t        l4_dst_port;
36364         /*
36365          * The value of destination port mask.
36366          * Applies to UDP and TCP traffic.
36367          */
36368         uint16_t        l4_dst_port_mask;
36369         /*
36370          * NAT IPv4/6 address based on address type flag.
36371          * 0 values are ignored.
36372          */
36373         uint32_t        nat_ip_address[4];
36374         /* L2 header re-write Destination MAC address. */
36375         uint16_t        l2_rewrite_dmac[3];
36376         /*
36377          * The NAT source/destination port based on direction flag.
36378          * Applies to UDP and TCP traffic.
36379          * 0 values are ignored.
36380          */
36381         uint16_t        nat_port;
36382         /* L2 header re-write Source MAC address. */
36383         uint16_t        l2_rewrite_smac[3];
36384         /* The value of ip protocol. */
36385         uint8_t ip_proto;
36386         /* Tunnel Type. */
36387         uint8_t tunnel_type;
36388         /* Non-tunnel */
36389         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
36390                 UINT32_C(0x0)
36391         /* Virtual eXtensible Local Area Network (VXLAN) */
36392         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
36393                 UINT32_C(0x1)
36394         /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
36395         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
36396                 UINT32_C(0x2)
36397         /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
36398         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
36399                 UINT32_C(0x3)
36400         /* IP in IP */
36401         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
36402                 UINT32_C(0x4)
36403         /* Generic Network Virtualization Encapsulation (Geneve) */
36404         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
36405                 UINT32_C(0x5)
36406         /* Multi-Protocol Label Switching (MPLS) */
36407         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
36408                 UINT32_C(0x6)
36409         /* Stateless Transport Tunnel (STT) */
36410         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_STT \
36411                 UINT32_C(0x7)
36412         /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
36413         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
36414                 UINT32_C(0x8)
36415         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
36416         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
36417                 UINT32_C(0x9)
36418         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
36419         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
36420                 UINT32_C(0xa)
36421         /* Use fixed layer 2 ether type of 0xFFFF */
36422         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
36423                 UINT32_C(0xb)
36424         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
36425         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
36426                 UINT32_C(0xc)
36427         /* Any tunneled traffic */
36428         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
36429                 UINT32_C(0xff)
36430         #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_LAST \
36431                 HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
36432 } __rte_packed;
36433
36434 /* hwrm_cfa_flow_alloc_output (size:256b/32B) */
36435 struct hwrm_cfa_flow_alloc_output {
36436         /* The specific error status for the command. */
36437         uint16_t        error_code;
36438         /* The HWRM command request type. */
36439         uint16_t        req_type;
36440         /* The sequence ID from the original command. */
36441         uint16_t        seq_id;
36442         /* The length of the response data in number of bytes. */
36443         uint16_t        resp_len;
36444         /* Flow record index. */
36445         uint16_t        flow_handle;
36446         uint8_t unused_0[2];
36447         /*
36448          * The flow id value in bit 0-29 is the actual ID of the flow
36449          * associated with this filter and it shall be used to match
36450          * and associate the flow identifier returned in completion
36451          * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
36452          * shall indicate no valid flow id.
36453          */
36454         uint32_t        flow_id;
36455         /* Indicate the flow id value. */
36456         #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
36457                 UINT32_C(0x3fffffff)
36458         #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
36459         /* Indicate type of the flow. */
36460         #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE \
36461                 UINT32_C(0x40000000)
36462         /*
36463          * If this bit set to 0, then it indicates that the flow is
36464          * internal flow.
36465          */
36466         #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
36467                 (UINT32_C(0x0) << 30)
36468         /*
36469          * If this bit is set to 1, then it indicates that the flow is
36470          * external flow.
36471          */
36472         #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
36473                 (UINT32_C(0x1) << 30)
36474         #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
36475                 HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
36476         /* Indicate the flow direction. */
36477         #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR \
36478                 UINT32_C(0x80000000)
36479         /* If this bit set to 0, then it indicates rx flow. */
36480         #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
36481                 (UINT32_C(0x0) << 31)
36482         /* If this bit is set to 1, then it indicates that tx flow. */
36483         #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
36484                 (UINT32_C(0x1) << 31)
36485         #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
36486                 HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_TX
36487         /* This value identifies a set of CFA data structures used for a flow. */
36488         uint64_t        ext_flow_handle;
36489         uint32_t        flow_counter_id;
36490         uint8_t unused_1[3];
36491         /*
36492          * This field is used in Output records to indicate that the output
36493          * is completely written to RAM. This field should be read as '1'
36494          * to indicate that the output has been completely written.
36495          * When writing a command completion or response to an internal processor,
36496          * the order of writes has to be such that this field is written last.
36497          */
36498         uint8_t valid;
36499 } __rte_packed;
36500
36501 /* hwrm_cfa_flow_alloc_cmd_err (size:64b/8B) */
36502 struct hwrm_cfa_flow_alloc_cmd_err {
36503         /*
36504          * command specific error codes that goes to
36505          * the cmd_err field in Common HWRM Error Response.
36506          */
36507         uint8_t code;
36508         /* Unknown error */
36509         #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_UNKNOWN         UINT32_C(0x0)
36510         /* No more L2 Context TCAM */
36511         #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_L2_CONTEXT_TCAM UINT32_C(0x1)
36512         /* No more action records */
36513         #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_ACTION_RECORD   UINT32_C(0x2)
36514         /* No more flow counters */
36515         #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_FLOW_COUNTER    UINT32_C(0x3)
36516         /* No more wild-card TCAM */
36517         #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_WILD_CARD_TCAM  UINT32_C(0x4)
36518         /* Hash collsion in exact match tables */
36519         #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_HASH_COLLISION  UINT32_C(0x5)
36520         /* Key is already installed */
36521         #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_KEY_EXISTS      UINT32_C(0x6)
36522         /* Flow Context DB is out of resource */
36523         #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_FLOW_CTXT_DB    UINT32_C(0x7)
36524         #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_LAST \
36525                 HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_FLOW_CTXT_DB
36526         uint8_t unused_0[7];
36527 } __rte_packed;
36528
36529 /**********************
36530  * hwrm_cfa_flow_free *
36531  **********************/
36532
36533
36534 /* hwrm_cfa_flow_free_input (size:256b/32B) */
36535 struct hwrm_cfa_flow_free_input {
36536         /* The HWRM command request type. */
36537         uint16_t        req_type;
36538         /*
36539          * The completion ring to send the completion event on. This should
36540          * be the NQ ID returned from the `nq_alloc` HWRM command.
36541          */
36542         uint16_t        cmpl_ring;
36543         /*
36544          * The sequence ID is used by the driver for tracking multiple
36545          * commands. This ID is treated as opaque data by the firmware and
36546          * the value is returned in the `hwrm_resp_hdr` upon completion.
36547          */
36548         uint16_t        seq_id;
36549         /*
36550          * The target ID of the command:
36551          * * 0x0-0xFFF8 - The function ID
36552          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
36553          * * 0xFFFD - Reserved for user-space HWRM interface
36554          * * 0xFFFF - HWRM
36555          */
36556         uint16_t        target_id;
36557         /*
36558          * A physical address pointer pointing to a host buffer that the
36559          * command's response data will be written. This can be either a host
36560          * physical address (HPA) or a guest physical address (GPA) and must
36561          * point to a physically contiguous block of memory.
36562          */
36563         uint64_t        resp_addr;
36564         /* Flow record index. */
36565         uint16_t        flow_handle;
36566         uint16_t        unused_0;
36567         /* Flow counter id to be freed. */
36568         uint32_t        flow_counter_id;
36569         /* This value identifies a set of CFA data structures used for a flow. */
36570         uint64_t        ext_flow_handle;
36571 } __rte_packed;
36572
36573 /* hwrm_cfa_flow_free_output (size:256b/32B) */
36574 struct hwrm_cfa_flow_free_output {
36575         /* The specific error status for the command. */
36576         uint16_t        error_code;
36577         /* The HWRM command request type. */
36578         uint16_t        req_type;
36579         /* The sequence ID from the original command. */
36580         uint16_t        seq_id;
36581         /* The length of the response data in number of bytes. */
36582         uint16_t        resp_len;
36583         /* packet is 64 b */
36584         uint64_t        packet;
36585         /* byte is 64 b */
36586         uint64_t        byte;
36587         uint8_t unused_0[7];
36588         /*
36589          * This field is used in Output records to indicate that the output
36590          * is completely written to RAM. This field should be read as '1'
36591          * to indicate that the output has been completely written.
36592          * When writing a command completion or response to an internal processor,
36593          * the order of writes has to be such that this field is written last.
36594          */
36595         uint8_t valid;
36596 } __rte_packed;
36597
36598 /* hwrm_cfa_flow_action_data (size:960b/120B) */
36599 struct hwrm_cfa_flow_action_data {
36600         uint16_t        action_flags;
36601         /* Setting of this flag indicates accept action. */
36602         #define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_FWD \
36603                 UINT32_C(0x1)
36604         /* Setting of this flag indicates recycle action. */
36605         #define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_RECYCLE \
36606                 UINT32_C(0x2)
36607         /* Setting of this flag indicates drop action. */
36608         #define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_DROP \
36609                 UINT32_C(0x4)
36610         /* Setting of this flag indicates meter action. */
36611         #define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_METER \
36612                 UINT32_C(0x8)
36613         /* Setting of this flag indicates tunnel action. */
36614         #define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_TUNNEL \
36615                 UINT32_C(0x10)
36616         /*
36617          * If set to 1 and flow direction is TX, it indicates decap of L2 header
36618          * and encap of tunnel header. If set to 1 and flow direction is RX, it
36619          * indicates decap of tunnel header and encap L2 header.
36620          */
36621         #define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_TUNNEL_IP \
36622                 UINT32_C(0x20)
36623         /* Setting of this flag indicates ttl decrement action. */
36624         #define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_TTL_DECREMENT \
36625                 UINT32_C(0x40)
36626         /* If set to 1, flow aging is enabled for this flow. */
36627         #define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_FLOW_AGING_ENABLED \
36628                 UINT32_C(0x80)
36629         /* Setting of this flag indicates encap action. */
36630         #define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_ENCAP \
36631                 UINT32_C(0x100)
36632         /* Setting of this flag indicates decap action. */
36633         #define HWRM_CFA_FLOW_ACTION_DATA_ACTION_FLAGS_DECAP \
36634                 UINT32_C(0x200)
36635         /* Meter id. */
36636         uint16_t        act_meter_id;
36637         /* VNIC id. */
36638         uint16_t        vnic_id;
36639         /* vport number. */
36640         uint16_t        vport_id;
36641         /* The NAT source/destination. */
36642         uint16_t        nat_port;
36643         uint16_t        unused_0[3];
36644         /* NAT IPv4/IPv6 address. */
36645         uint32_t        nat_ip_address[4];
36646         /* Encapsulation Type. */
36647         uint8_t encap_type;
36648         /* Virtual eXtensible Local Area Network (VXLAN) */
36649         #define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_VXLAN        UINT32_C(0x1)
36650         /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
36651         #define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_NVGRE        UINT32_C(0x2)
36652         /* Generic Routing Encapsulation (GRE) after inside Ethernet payload */
36653         #define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_L2GRE        UINT32_C(0x3)
36654         /* IP in IP */
36655         #define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_IPIP         UINT32_C(0x4)
36656         /* Generic Network Virtualization Encapsulation (Geneve) */
36657         #define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_GENEVE       UINT32_C(0x5)
36658         /* Multi-Protocol Label Switching (MPLS) */
36659         #define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_MPLS         UINT32_C(0x6)
36660         /* VLAN */
36661         #define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_VLAN         UINT32_C(0x7)
36662         /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
36663         #define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_IPGRE        UINT32_C(0x8)
36664         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
36665         #define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_VXLAN_V4     UINT32_C(0x9)
36666         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
36667         #define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_IPGRE_V1     UINT32_C(0xa)
36668         /* Use fixed layer 2 ether type of 0xFFFF */
36669         #define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_L2_ETYPE     UINT32_C(0xb)
36670         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
36671         #define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_VXLAN_GPE_V6 UINT32_C(0xc)
36672         #define HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_LAST \
36673                 HWRM_CFA_FLOW_ACTION_DATA_ENCAP_TYPE_VXLAN_GPE_V6
36674         uint8_t unused[7];
36675         /* This value is encap data for the associated encap type. */
36676         uint32_t        encap_data[20];
36677 } __rte_packed;
36678
36679 /* hwrm_cfa_flow_tunnel_hdr_data (size:64b/8B) */
36680 struct hwrm_cfa_flow_tunnel_hdr_data {
36681         /* Tunnel Type. */
36682         uint8_t tunnel_type;
36683         /* Non-tunnel */
36684         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_NONTUNNEL \
36685                 UINT32_C(0x0)
36686         /* Virtual eXtensible Local Area Network (VXLAN) */
36687         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_VXLAN \
36688                 UINT32_C(0x1)
36689         /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
36690         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_NVGRE \
36691                 UINT32_C(0x2)
36692         /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
36693         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_L2GRE \
36694                 UINT32_C(0x3)
36695         /* IP in IP */
36696         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_IPIP \
36697                 UINT32_C(0x4)
36698         /* Generic Network Virtualization Encapsulation (Geneve) */
36699         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_GENEVE \
36700                 UINT32_C(0x5)
36701         /* Multi-Protocol Label Switching (MPLS) */
36702         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_MPLS \
36703                 UINT32_C(0x6)
36704         /* Stateless Transport Tunnel (STT) */
36705         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_STT \
36706                 UINT32_C(0x7)
36707         /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
36708         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_IPGRE \
36709                 UINT32_C(0x8)
36710         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
36711         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_VXLAN_V4 \
36712                 UINT32_C(0x9)
36713         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
36714         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_IPGRE_V1 \
36715                 UINT32_C(0xa)
36716         /* Use fixed layer 2 ether type of 0xFFFF */
36717         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_L2_ETYPE \
36718                 UINT32_C(0xb)
36719         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
36720         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_VXLAN_GPE_V6 \
36721                 UINT32_C(0xc)
36722         /* Any tunneled traffic */
36723         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_ANYTUNNEL \
36724                 UINT32_C(0xff)
36725         #define HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_LAST \
36726                 HWRM_CFA_FLOW_TUNNEL_HDR_DATA_TUNNEL_TYPE_ANYTUNNEL
36727         uint8_t unused[3];
36728         /*
36729          * Tunnel identifier.
36730          * Virtual Network Identifier (VNI).
36731          */
36732         uint32_t        tunnel_id;
36733 } __rte_packed;
36734
36735 /* hwrm_cfa_flow_l4_key_data (size:64b/8B) */
36736 struct hwrm_cfa_flow_l4_key_data {
36737         /* The value of source port. */
36738         uint16_t        l4_src_port;
36739         /* The value of destination port. */
36740         uint16_t        l4_dst_port;
36741         uint32_t        unused;
36742 } __rte_packed;
36743
36744 /* hwrm_cfa_flow_l3_key_data (size:512b/64B) */
36745 struct hwrm_cfa_flow_l3_key_data {
36746         /* The value of ip protocol. */
36747         uint8_t ip_protocol;
36748         uint8_t unused_0[7];
36749         /* The value of destination IPv4/IPv6 address. */
36750         uint32_t        ip_dst[4];
36751         /* The source IPv4/IPv6 address. */
36752         uint32_t        ip_src[4];
36753         /* NAT IPv4/IPv6 address. */
36754         uint32_t        nat_ip_address[4];
36755         uint32_t        unused[2];
36756 } __rte_packed;
36757
36758 /* hwrm_cfa_flow_l2_key_data (size:448b/56B) */
36759 struct hwrm_cfa_flow_l2_key_data {
36760         /* Destination MAC address. */
36761         uint16_t        dmac[3];
36762         uint16_t        unused_0;
36763         /* Source MAC address. */
36764         uint16_t        smac[3];
36765         uint16_t        unused_1;
36766         /* L2 header re-write Destination MAC address. */
36767         uint16_t        l2_rewrite_dmac[3];
36768         uint16_t        unused_2;
36769         /* L2 header re-write Source MAC address. */
36770         uint16_t        l2_rewrite_smac[3];
36771         /* Ethertype. */
36772         uint16_t        ethertype;
36773         /* Number of VLAN tags. */
36774         uint16_t        num_vlan_tags;
36775         /* VLAN tpid. */
36776         uint16_t        l2_rewrite_vlan_tpid;
36777         /* VLAN tci. */
36778         uint16_t        l2_rewrite_vlan_tci;
36779         uint8_t unused_3[2];
36780         /* Outer VLAN TPID. */
36781         uint16_t        ovlan_tpid;
36782         /* Outer VLAN TCI. */
36783         uint16_t        ovlan_tci;
36784         /* Inner VLAN TPID. */
36785         uint16_t        ivlan_tpid;
36786         /* Inner VLAN TCI. */
36787         uint16_t        ivlan_tci;
36788         uint8_t unused[8];
36789 } __rte_packed;
36790
36791 /* hwrm_cfa_flow_key_data (size:4160b/520B) */
36792 struct hwrm_cfa_flow_key_data {
36793         /* Flow associated tunnel L2 header key info. */
36794         uint32_t        t_l2_key_data[14];
36795         /* Flow associated tunnel L2 header mask info. */
36796         uint32_t        t_l2_key_mask[14];
36797         /* Flow associated tunnel L3 header key info. */
36798         uint32_t        t_l3_key_data[16];
36799         /* Flow associated tunnel L3 header mask info. */
36800         uint32_t        t_l3_key_mask[16];
36801         /* Flow associated tunnel L4 header key info. */
36802         uint32_t        t_l4_key_data[2];
36803         /* Flow associated tunnel L4 header mask info. */
36804         uint32_t        t_l4_key_mask[2];
36805         /* Flow associated tunnel header info. */
36806         uint32_t        tunnel_hdr[2];
36807         /* Flow associated L2 header key info. */
36808         uint32_t        l2_key_data[14];
36809         /* Flow associated L2 header mask info. */
36810         uint32_t        l2_key_mask[14];
36811         /* Flow associated L3 header key info. */
36812         uint32_t        l3_key_data[16];
36813         /* Flow associated L3 header mask info. */
36814         uint32_t        l3_key_mask[16];
36815         /* Flow associated L4 header key info. */
36816         uint32_t        l4_key_data[2];
36817         /* Flow associated L4 header mask info. */
36818         uint32_t        l4_key_mask[2];
36819 } __rte_packed;
36820
36821 /**********************
36822  * hwrm_cfa_flow_info *
36823  **********************/
36824
36825
36826 /* hwrm_cfa_flow_info_input (size:256b/32B) */
36827 struct hwrm_cfa_flow_info_input {
36828         /* The HWRM command request type. */
36829         uint16_t        req_type;
36830         /*
36831          * The completion ring to send the completion event on. This should
36832          * be the NQ ID returned from the `nq_alloc` HWRM command.
36833          */
36834         uint16_t        cmpl_ring;
36835         /*
36836          * The sequence ID is used by the driver for tracking multiple
36837          * commands. This ID is treated as opaque data by the firmware and
36838          * the value is returned in the `hwrm_resp_hdr` upon completion.
36839          */
36840         uint16_t        seq_id;
36841         /*
36842          * The target ID of the command:
36843          * * 0x0-0xFFF8 - The function ID
36844          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
36845          * * 0xFFFD - Reserved for user-space HWRM interface
36846          * * 0xFFFF - HWRM
36847          */
36848         uint16_t        target_id;
36849         /*
36850          * A physical address pointer pointing to a host buffer that the
36851          * command's response data will be written. This can be either a host
36852          * physical address (HPA) or a guest physical address (GPA) and must
36853          * point to a physically contiguous block of memory.
36854          */
36855         uint64_t        resp_addr;
36856         /* Flow record index. */
36857         uint16_t        flow_handle;
36858         /* Max flow handle */
36859         #define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_MAX_MASK \
36860                 UINT32_C(0xfff)
36861         #define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_MAX_SFT        0
36862         /* CNP flow handle */
36863         #define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_CNP_CNT \
36864                 UINT32_C(0x1000)
36865         /* RoCEv1 flow handle */
36866         #define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_ROCEV1_CNT \
36867                 UINT32_C(0x2000)
36868         /* RoCEv2 flow handle */
36869         #define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_ROCEV2_CNT \
36870                 UINT32_C(0x4000)
36871         /* Direction rx = 1 */
36872         #define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_DIR_RX \
36873                 UINT32_C(0x8000)
36874         uint8_t unused_0[6];
36875         /* This value identifies a set of CFA data structures used for a flow. */
36876         uint64_t        ext_flow_handle;
36877 } __rte_packed;
36878
36879 /* hwrm_cfa_flow_info_output (size:5632b/704B) */
36880 struct hwrm_cfa_flow_info_output {
36881         /* The specific error status for the command. */
36882         uint16_t        error_code;
36883         /* The HWRM command request type. */
36884         uint16_t        req_type;
36885         /* The sequence ID from the original command. */
36886         uint16_t        seq_id;
36887         /* The length of the response data in number of bytes. */
36888         uint16_t        resp_len;
36889         uint8_t flags;
36890         /* When set to 1, indicates the configuration is the TX flow. */
36891         #define HWRM_CFA_FLOW_INFO_OUTPUT_FLAGS_PATH_TX     UINT32_C(0x1)
36892         /* When set to 1, indicates the configuration is the RX flow. */
36893         #define HWRM_CFA_FLOW_INFO_OUTPUT_FLAGS_PATH_RX     UINT32_C(0x2)
36894         /* profile is 8 b */
36895         uint8_t profile;
36896         /* src_fid is 16 b */
36897         uint16_t        src_fid;
36898         /* dst_fid is 16 b */
36899         uint16_t        dst_fid;
36900         /* l2_ctxt_id is 16 b */
36901         uint16_t        l2_ctxt_id;
36902         /* em_info is 64 b */
36903         uint64_t        em_info;
36904         /* tcam_info is 64 b */
36905         uint64_t        tcam_info;
36906         /* vfp_tcam_info is 64 b */
36907         uint64_t        vfp_tcam_info;
36908         /* ar_id is 16 b */
36909         uint16_t        ar_id;
36910         /* flow_handle is 16 b */
36911         uint16_t        flow_handle;
36912         /* tunnel_handle is 32 b */
36913         uint32_t        tunnel_handle;
36914         /* The flow aging timer for the flow, the unit is 100 milliseconds */
36915         uint16_t        flow_timer;
36916         uint8_t unused_0[6];
36917         /* Flow associated L2, L3 and L4 headers info. */
36918         uint32_t        flow_key_data[130];
36919         /* Flow associated action record info. */
36920         uint32_t        flow_action_info[30];
36921         uint8_t unused_1[7];
36922         /*
36923          * This field is used in Output records to indicate that the output
36924          * is completely written to RAM. This field should be read as '1'
36925          * to indicate that the output has been completely written.
36926          * When writing a command completion or response to an internal processor,
36927          * the order of writes has to be such that this field is written last.
36928          */
36929         uint8_t valid;
36930 } __rte_packed;
36931
36932 /***********************
36933  * hwrm_cfa_flow_flush *
36934  ***********************/
36935
36936
36937 /* hwrm_cfa_flow_flush_input (size:256b/32B) */
36938 struct hwrm_cfa_flow_flush_input {
36939         /* The HWRM command request type. */
36940         uint16_t        req_type;
36941         /*
36942          * The completion ring to send the completion event on. This should
36943          * be the NQ ID returned from the `nq_alloc` HWRM command.
36944          */
36945         uint16_t        cmpl_ring;
36946         /*
36947          * The sequence ID is used by the driver for tracking multiple
36948          * commands. This ID is treated as opaque data by the firmware and
36949          * the value is returned in the `hwrm_resp_hdr` upon completion.
36950          */
36951         uint16_t        seq_id;
36952         /*
36953          * The target ID of the command:
36954          * * 0x0-0xFFF8 - The function ID
36955          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
36956          * * 0xFFFD - Reserved for user-space HWRM interface
36957          * * 0xFFFF - HWRM
36958          */
36959         uint16_t        target_id;
36960         /*
36961          * A physical address pointer pointing to a host buffer that the
36962          * command's response data will be written. This can be either a host
36963          * physical address (HPA) or a guest physical address (GPA) and must
36964          * point to a physically contiguous block of memory.
36965          */
36966         uint64_t        resp_addr;
36967         /* flags is 32 b */
36968         uint32_t        flags;
36969         /*
36970          * Set to 1 to indicate the page size, page layers, and flow_handle_table_dma_addr
36971          * fields are valid. The flow flush operation should only flush the flows from the
36972          * flow table specified. This flag is set to 0 by older driver. For older firmware,
36973          * setting this flag has no effect.
36974          */
36975         #define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_TABLE_VALID \
36976                 UINT32_C(0x1)
36977         /*
36978          * Set to 1 to indicate flow flush operation to cleanup all the flows, meters, CFA
36979          * context memory tables etc. This flag is set to 0 by older driver. For older firmware,
36980          * setting this flag has no effect.
36981          */
36982         #define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_RESET_ALL \
36983                 UINT32_C(0x2)
36984         /*
36985          * Set to 1 to indicate flow flush operation to cleanup all the flows by the caller.
36986          * This flag is set to 0 by older driver. For older firmware, setting this flag has no effect.
36987          */
36988         #define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_RESET_PORT \
36989                 UINT32_C(0x4)
36990         /* Set to 1 to indicate the flow counter IDs are included in the flow table. */
36991         #define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_INCL_FC \
36992                 UINT32_C(0x8000000)
36993         /*
36994          * This specifies the size of flow handle entries provided by the driver
36995          * in the flow table specified below. Only two flow handle size enums are defined.
36996          */
36997         #define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_ENTRY_SIZE_MASK \
36998                 UINT32_C(0xc0000000)
36999         #define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_ENTRY_SIZE_SFT \
37000                 30
37001         /* The flow handle is 16bit */
37002         #define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_ENTRY_SIZE_FLOW_HND_16BIT \
37003                 (UINT32_C(0x0) << 30)
37004         /* The flow handle is 64bit */
37005         #define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_ENTRY_SIZE_FLOW_HND_64BIT \
37006                 (UINT32_C(0x1) << 30)
37007         #define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_ENTRY_SIZE_LAST \
37008                 HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_ENTRY_SIZE_FLOW_HND_64BIT
37009         /* Specify page size of the flow table memory. */
37010         uint8_t page_size;
37011         /* The page size is 4K */
37012         #define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_4K   UINT32_C(0x0)
37013         /* The page size is 8K */
37014         #define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_8K   UINT32_C(0x1)
37015         /* The page size is 64K */
37016         #define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_64K  UINT32_C(0x4)
37017         /* The page size is 256K */
37018         #define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_256K UINT32_C(0x6)
37019         /* The page size is 1M */
37020         #define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_1M   UINT32_C(0x8)
37021         /* The page size is 2M */
37022         #define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_2M   UINT32_C(0x9)
37023         /* The page size is 4M */
37024         #define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_4M   UINT32_C(0xa)
37025         /* The page size is 1G */
37026         #define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_1G   UINT32_C(0x12)
37027         #define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_LAST \
37028                 HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_SIZE_1G
37029         /* FLow table memory indirect levels. */
37030         uint8_t page_level;
37031         /* PBL pointer is physical start address. */
37032         #define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_LEVEL_LVL_0 UINT32_C(0x0)
37033         /* PBL pointer points to PTE table. */
37034         #define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_LEVEL_LVL_1 UINT32_C(0x1)
37035         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
37036         #define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_LEVEL_LVL_2 UINT32_C(0x2)
37037         #define HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_LEVEL_LAST \
37038                 HWRM_CFA_FLOW_FLUSH_INPUT_PAGE_LEVEL_LVL_2
37039         /* number of flows in the flow table */
37040         uint16_t        num_flows;
37041         /* Pointer to the PBL, or PDL depending on number of levels */
37042         uint64_t        page_dir;
37043 } __rte_packed;
37044
37045 /* hwrm_cfa_flow_flush_output (size:128b/16B) */
37046 struct hwrm_cfa_flow_flush_output {
37047         /* The specific error status for the command. */
37048         uint16_t        error_code;
37049         /* The HWRM command request type. */
37050         uint16_t        req_type;
37051         /* The sequence ID from the original command. */
37052         uint16_t        seq_id;
37053         /* The length of the response data in number of bytes. */
37054         uint16_t        resp_len;
37055         uint8_t unused_0[7];
37056         /*
37057          * This field is used in Output records to indicate that the output
37058          * is completely written to RAM. This field should be read as '1'
37059          * to indicate that the output has been completely written.
37060          * When writing a command completion or response to an internal processor,
37061          * the order of writes has to be such that this field is written last.
37062          */
37063         uint8_t valid;
37064 } __rte_packed;
37065
37066 /***********************
37067  * hwrm_cfa_flow_stats *
37068  ***********************/
37069
37070
37071 /* hwrm_cfa_flow_stats_input (size:640b/80B) */
37072 struct hwrm_cfa_flow_stats_input {
37073         /* The HWRM command request type. */
37074         uint16_t        req_type;
37075         /*
37076          * The completion ring to send the completion event on. This should
37077          * be the NQ ID returned from the `nq_alloc` HWRM command.
37078          */
37079         uint16_t        cmpl_ring;
37080         /*
37081          * The sequence ID is used by the driver for tracking multiple
37082          * commands. This ID is treated as opaque data by the firmware and
37083          * the value is returned in the `hwrm_resp_hdr` upon completion.
37084          */
37085         uint16_t        seq_id;
37086         /*
37087          * The target ID of the command:
37088          * * 0x0-0xFFF8 - The function ID
37089          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37090          * * 0xFFFD - Reserved for user-space HWRM interface
37091          * * 0xFFFF - HWRM
37092          */
37093         uint16_t        target_id;
37094         /*
37095          * A physical address pointer pointing to a host buffer that the
37096          * command's response data will be written. This can be either a host
37097          * physical address (HPA) or a guest physical address (GPA) and must
37098          * point to a physically contiguous block of memory.
37099          */
37100         uint64_t        resp_addr;
37101         /* Flow handle. */
37102         uint16_t        num_flows;
37103         /* Flow handle. */
37104         uint16_t        flow_handle_0;
37105         /* Flow handle. */
37106         uint16_t        flow_handle_1;
37107         /* Flow handle. */
37108         uint16_t        flow_handle_2;
37109         /* Flow handle. */
37110         uint16_t        flow_handle_3;
37111         /* Flow handle. */
37112         uint16_t        flow_handle_4;
37113         /* Flow handle. */
37114         uint16_t        flow_handle_5;
37115         /* Flow handle. */
37116         uint16_t        flow_handle_6;
37117         /* Flow handle. */
37118         uint16_t        flow_handle_7;
37119         /* Flow handle. */
37120         uint16_t        flow_handle_8;
37121         /* Flow handle. */
37122         uint16_t        flow_handle_9;
37123         uint8_t unused_0[2];
37124         /* Flow ID of a flow. */
37125         uint32_t        flow_id_0;
37126         /* Flow ID of a flow. */
37127         uint32_t        flow_id_1;
37128         /* Flow ID of a flow. */
37129         uint32_t        flow_id_2;
37130         /* Flow ID of a flow. */
37131         uint32_t        flow_id_3;
37132         /* Flow ID of a flow. */
37133         uint32_t        flow_id_4;
37134         /* Flow ID of a flow. */
37135         uint32_t        flow_id_5;
37136         /* Flow ID of a flow. */
37137         uint32_t        flow_id_6;
37138         /* Flow ID of a flow. */
37139         uint32_t        flow_id_7;
37140         /* Flow ID of a flow. */
37141         uint32_t        flow_id_8;
37142         /* Flow ID of a flow. */
37143         uint32_t        flow_id_9;
37144 } __rte_packed;
37145
37146 /* hwrm_cfa_flow_stats_output (size:1408b/176B) */
37147 struct hwrm_cfa_flow_stats_output {
37148         /* The specific error status for the command. */
37149         uint16_t        error_code;
37150         /* The HWRM command request type. */
37151         uint16_t        req_type;
37152         /* The sequence ID from the original command. */
37153         uint16_t        seq_id;
37154         /* The length of the response data in number of bytes. */
37155         uint16_t        resp_len;
37156         /* packet_0 is 64 b */
37157         uint64_t        packet_0;
37158         /* packet_1 is 64 b */
37159         uint64_t        packet_1;
37160         /* packet_2 is 64 b */
37161         uint64_t        packet_2;
37162         /* packet_3 is 64 b */
37163         uint64_t        packet_3;
37164         /* packet_4 is 64 b */
37165         uint64_t        packet_4;
37166         /* packet_5 is 64 b */
37167         uint64_t        packet_5;
37168         /* packet_6 is 64 b */
37169         uint64_t        packet_6;
37170         /* packet_7 is 64 b */
37171         uint64_t        packet_7;
37172         /* packet_8 is 64 b */
37173         uint64_t        packet_8;
37174         /* packet_9 is 64 b */
37175         uint64_t        packet_9;
37176         /* byte_0 is 64 b */
37177         uint64_t        byte_0;
37178         /* byte_1 is 64 b */
37179         uint64_t        byte_1;
37180         /* byte_2 is 64 b */
37181         uint64_t        byte_2;
37182         /* byte_3 is 64 b */
37183         uint64_t        byte_3;
37184         /* byte_4 is 64 b */
37185         uint64_t        byte_4;
37186         /* byte_5 is 64 b */
37187         uint64_t        byte_5;
37188         /* byte_6 is 64 b */
37189         uint64_t        byte_6;
37190         /* byte_7 is 64 b */
37191         uint64_t        byte_7;
37192         /* byte_8 is 64 b */
37193         uint64_t        byte_8;
37194         /* byte_9 is 64 b */
37195         uint64_t        byte_9;
37196         uint8_t unused_0[7];
37197         /*
37198          * This field is used in Output records to indicate that the output
37199          * is completely written to RAM. This field should be read as '1'
37200          * to indicate that the output has been completely written.
37201          * When writing a command completion or response to an internal processor,
37202          * the order of writes has to be such that this field is written last.
37203          */
37204         uint8_t valid;
37205 } __rte_packed;
37206
37207 /***********************************
37208  * hwrm_cfa_flow_aging_timer_reset *
37209  ***********************************/
37210
37211
37212 /* hwrm_cfa_flow_aging_timer_reset_input (size:256b/32B) */
37213 struct hwrm_cfa_flow_aging_timer_reset_input {
37214         /* The HWRM command request type. */
37215         uint16_t        req_type;
37216         /*
37217          * The completion ring to send the completion event on. This should
37218          * be the NQ ID returned from the `nq_alloc` HWRM command.
37219          */
37220         uint16_t        cmpl_ring;
37221         /*
37222          * The sequence ID is used by the driver for tracking multiple
37223          * commands. This ID is treated as opaque data by the firmware and
37224          * the value is returned in the `hwrm_resp_hdr` upon completion.
37225          */
37226         uint16_t        seq_id;
37227         /*
37228          * The target ID of the command:
37229          * * 0x0-0xFFF8 - The function ID
37230          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37231          * * 0xFFFD - Reserved for user-space HWRM interface
37232          * * 0xFFFF - HWRM
37233          */
37234         uint16_t        target_id;
37235         /*
37236          * A physical address pointer pointing to a host buffer that the
37237          * command's response data will be written. This can be either a host
37238          * physical address (HPA) or a guest physical address (GPA) and must
37239          * point to a physically contiguous block of memory.
37240          */
37241         uint64_t        resp_addr;
37242         /* Flow record index. */
37243         uint16_t        flow_handle;
37244         uint8_t unused_0[2];
37245         /*
37246          * New flow timer value for the flow specified in the ext_flow_handle.
37247          * The flow timer unit is 100ms.
37248          */
37249         uint32_t        flow_timer;
37250         /* This value identifies a set of CFA data structures used for a flow. */
37251         uint64_t        ext_flow_handle;
37252 } __rte_packed;
37253
37254 /* hwrm_cfa_flow_aging_timer_reset_output (size:128b/16B) */
37255 struct hwrm_cfa_flow_aging_timer_reset_output {
37256         /* The specific error status for the command. */
37257         uint16_t        error_code;
37258         /* The HWRM command request type. */
37259         uint16_t        req_type;
37260         /* The sequence ID from the original command. */
37261         uint16_t        seq_id;
37262         /* The length of the response data in number of bytes. */
37263         uint16_t        resp_len;
37264         uint8_t unused_0[7];
37265         /*
37266          * This field is used in Output records to indicate that the output
37267          * is completely written to RAM. This field should be read as '1'
37268          * to indicate that the output has been completely written.
37269          * When writing a command completion or response to an internal processor,
37270          * the order of writes has to be such that this field is written last.
37271          */
37272         uint8_t valid;
37273 } __rte_packed;
37274
37275 /***************************
37276  * hwrm_cfa_flow_aging_cfg *
37277  ***************************/
37278
37279
37280 /* hwrm_cfa_flow_aging_cfg_input (size:384b/48B) */
37281 struct hwrm_cfa_flow_aging_cfg_input {
37282         /* The HWRM command request type. */
37283         uint16_t        req_type;
37284         /*
37285          * The completion ring to send the completion event on. This should
37286          * be the NQ ID returned from the `nq_alloc` HWRM command.
37287          */
37288         uint16_t        cmpl_ring;
37289         /*
37290          * The sequence ID is used by the driver for tracking multiple
37291          * commands. This ID is treated as opaque data by the firmware and
37292          * the value is returned in the `hwrm_resp_hdr` upon completion.
37293          */
37294         uint16_t        seq_id;
37295         /*
37296          * The target ID of the command:
37297          * * 0x0-0xFFF8 - The function ID
37298          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37299          * * 0xFFFD - Reserved for user-space HWRM interface
37300          * * 0xFFFF - HWRM
37301          */
37302         uint16_t        target_id;
37303         /*
37304          * A physical address pointer pointing to a host buffer that the
37305          * command's response data will be written. This can be either a host
37306          * physical address (HPA) or a guest physical address (GPA) and must
37307          * point to a physically contiguous block of memory.
37308          */
37309         uint64_t        resp_addr;
37310         /* The bit field to enable per flow aging configuration. */
37311         uint16_t        enables;
37312         /* This bit must be '1' for the tcp flow timer field to be configured */
37313         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_TCP_FLOW_TIMER \
37314                 UINT32_C(0x1)
37315         /* This bit must be '1' for the tcp finish timer field to be configured */
37316         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_TCP_FIN_TIMER \
37317                 UINT32_C(0x2)
37318         /* This bit must be '1' for the udp flow timer field to be configured */
37319         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_UDP_FLOW_TIMER \
37320                 UINT32_C(0x4)
37321         /* This bit must be '1' for the eem dma interval field to be configured */
37322         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_DMA_INTERVAL \
37323                 UINT32_C(0x8)
37324         /* This bit must be '1' for the eem notice interval field to be configured */
37325         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_NOTICE_INTERVAL \
37326                 UINT32_C(0x10)
37327         /* This bit must be '1' for the eem context memory maximum entries field to be configured */
37328         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_CTX_MAX_ENTRIES \
37329                 UINT32_C(0x20)
37330         /* This bit must be '1' for the eem context memory ID field to be configured */
37331         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_CTX_ID \
37332                 UINT32_C(0x40)
37333         /* This bit must be '1' for the eem context memory type field to be configured */
37334         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_CTX_MEM_TYPE \
37335                 UINT32_C(0x80)
37336         uint8_t flags;
37337         /* Enumeration denoting the RX, TX type of the resource. */
37338         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH       UINT32_C(0x1)
37339         /* tx path */
37340         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH_TX      UINT32_C(0x0)
37341         /* rx path */
37342         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH_RX      UINT32_C(0x1)
37343         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH_LAST \
37344                 HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH_RX
37345         /* Enumeration denoting the enable, disable eem flow aging configuration. */
37346         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM        UINT32_C(0x2)
37347         /* tx path */
37348         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM_DISABLE \
37349                 (UINT32_C(0x0) << 1)
37350         /* rx path */
37351         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM_ENABLE \
37352                 (UINT32_C(0x1) << 1)
37353         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM_LAST \
37354                 HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM_ENABLE
37355         uint8_t unused_0;
37356         /* The flow aging timer for all TCP flows, the unit is 100 milliseconds. */
37357         uint32_t        tcp_flow_timer;
37358         /* The TCP finished timer for all TCP flows, the unit is 100 milliseconds. */
37359         uint32_t        tcp_fin_timer;
37360         /* The flow aging timer for all UDP flows, the unit is 100 milliseconds. */
37361         uint32_t        udp_flow_timer;
37362         /* The interval to dma eem ejection data to host memory, the unit is milliseconds. */
37363         uint16_t        eem_dma_interval;
37364         /* The interval to notify driver to read the eem ejection data, the unit is milliseconds. */
37365         uint16_t        eem_notice_interval;
37366         /* The maximum entries number in the eem context memory. */
37367         uint32_t        eem_ctx_max_entries;
37368         /* The context memory ID for eem flow aging. */
37369         uint16_t        eem_ctx_id;
37370         uint16_t        eem_ctx_mem_type;
37371         /* The content of context memory is eem ejection data, the size of each entry is 4 bytes. */
37372         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_EEM_CTX_MEM_TYPE_EJECTION_DATA \
37373                 UINT32_C(0x0)
37374         #define HWRM_CFA_FLOW_AGING_CFG_INPUT_EEM_CTX_MEM_TYPE_LAST \
37375                 HWRM_CFA_FLOW_AGING_CFG_INPUT_EEM_CTX_MEM_TYPE_EJECTION_DATA
37376         uint8_t unused_1[4];
37377 } __rte_packed;
37378
37379 /* hwrm_cfa_flow_aging_cfg_output (size:128b/16B) */
37380 struct hwrm_cfa_flow_aging_cfg_output {
37381         /* The specific error status for the command. */
37382         uint16_t        error_code;
37383         /* The HWRM command request type. */
37384         uint16_t        req_type;
37385         /* The sequence ID from the original command. */
37386         uint16_t        seq_id;
37387         /* The length of the response data in number of bytes. */
37388         uint16_t        resp_len;
37389         uint8_t unused_0[7];
37390         /*
37391          * This field is used in Output records to indicate that the output
37392          * is completely written to RAM. This field should be read as '1'
37393          * to indicate that the output has been completely written.
37394          * When writing a command completion or response to an internal processor,
37395          * the order of writes has to be such that this field is written last.
37396          */
37397         uint8_t valid;
37398 } __rte_packed;
37399
37400 /****************************
37401  * hwrm_cfa_flow_aging_qcfg *
37402  ****************************/
37403
37404
37405 /* hwrm_cfa_flow_aging_qcfg_input (size:192b/24B) */
37406 struct hwrm_cfa_flow_aging_qcfg_input {
37407         /* The HWRM command request type. */
37408         uint16_t        req_type;
37409         /*
37410          * The completion ring to send the completion event on. This should
37411          * be the NQ ID returned from the `nq_alloc` HWRM command.
37412          */
37413         uint16_t        cmpl_ring;
37414         /*
37415          * The sequence ID is used by the driver for tracking multiple
37416          * commands. This ID is treated as opaque data by the firmware and
37417          * the value is returned in the `hwrm_resp_hdr` upon completion.
37418          */
37419         uint16_t        seq_id;
37420         /*
37421          * The target ID of the command:
37422          * * 0x0-0xFFF8 - The function ID
37423          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37424          * * 0xFFFD - Reserved for user-space HWRM interface
37425          * * 0xFFFF - HWRM
37426          */
37427         uint16_t        target_id;
37428         /*
37429          * A physical address pointer pointing to a host buffer that the
37430          * command's response data will be written. This can be either a host
37431          * physical address (HPA) or a guest physical address (GPA) and must
37432          * point to a physically contiguous block of memory.
37433          */
37434         uint64_t        resp_addr;
37435         /* The direction for the flow aging configuration, 1 is rx path, 2 is tx path. */
37436         uint8_t flags;
37437         /* Enumeration denoting the RX, TX type of the resource. */
37438         #define HWRM_CFA_FLOW_AGING_QCFG_INPUT_FLAGS_PATH     UINT32_C(0x1)
37439         /* tx path */
37440         #define HWRM_CFA_FLOW_AGING_QCFG_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)
37441         /* rx path */
37442         #define HWRM_CFA_FLOW_AGING_QCFG_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)
37443         #define HWRM_CFA_FLOW_AGING_QCFG_INPUT_FLAGS_PATH_LAST \
37444                 HWRM_CFA_FLOW_AGING_QCFG_INPUT_FLAGS_PATH_RX
37445         uint8_t unused_0[7];
37446 } __rte_packed;
37447
37448 /* hwrm_cfa_flow_aging_qcfg_output (size:320b/40B) */
37449 struct hwrm_cfa_flow_aging_qcfg_output {
37450         /* The specific error status for the command. */
37451         uint16_t        error_code;
37452         /* The HWRM command request type. */
37453         uint16_t        req_type;
37454         /* The sequence ID from the original command. */
37455         uint16_t        seq_id;
37456         /* The length of the response data in number of bytes. */
37457         uint16_t        resp_len;
37458         /* The current flow aging timer for all TCP flows, the unit is 100 millisecond. */
37459         uint32_t        tcp_flow_timer;
37460         /* The current TCP finished timer for all TCP flows, the unit is 100 millisecond. */
37461         uint32_t        tcp_fin_timer;
37462         /* The current flow aging timer for all UDP flows, the unit is 100 millisecond. */
37463         uint32_t        udp_flow_timer;
37464         /* The interval to dma eem ejection data to host memory, the unit is milliseconds. */
37465         uint16_t        eem_dma_interval;
37466         /* The interval to notify driver to read the eem ejection data, the unit is milliseconds. */
37467         uint16_t        eem_notice_interval;
37468         /* The maximum entries number in the eem context memory. */
37469         uint32_t        eem_ctx_max_entries;
37470         /* The context memory ID for eem flow aging. */
37471         uint16_t        eem_ctx_id;
37472         /* The context memory type for eem flow aging. */
37473         uint16_t        eem_ctx_mem_type;
37474         uint8_t unused_0[7];
37475         /*
37476          * This field is used in Output records to indicate that the output
37477          * is completely written to RAM. This field should be read as '1'
37478          * to indicate that the output has been completely written.
37479          * When writing a command completion or response to an internal processor,
37480          * the order of writes has to be such that this field is written last.
37481          */
37482         uint8_t valid;
37483 } __rte_packed;
37484
37485 /*****************************
37486  * hwrm_cfa_flow_aging_qcaps *
37487  *****************************/
37488
37489
37490 /* hwrm_cfa_flow_aging_qcaps_input (size:192b/24B) */
37491 struct hwrm_cfa_flow_aging_qcaps_input {
37492         /* The HWRM command request type. */
37493         uint16_t        req_type;
37494         /*
37495          * The completion ring to send the completion event on. This should
37496          * be the NQ ID returned from the `nq_alloc` HWRM command.
37497          */
37498         uint16_t        cmpl_ring;
37499         /*
37500          * The sequence ID is used by the driver for tracking multiple
37501          * commands. This ID is treated as opaque data by the firmware and
37502          * the value is returned in the `hwrm_resp_hdr` upon completion.
37503          */
37504         uint16_t        seq_id;
37505         /*
37506          * The target ID of the command:
37507          * * 0x0-0xFFF8 - The function ID
37508          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37509          * * 0xFFFD - Reserved for user-space HWRM interface
37510          * * 0xFFFF - HWRM
37511          */
37512         uint16_t        target_id;
37513         /*
37514          * A physical address pointer pointing to a host buffer that the
37515          * command's response data will be written. This can be either a host
37516          * physical address (HPA) or a guest physical address (GPA) and must
37517          * point to a physically contiguous block of memory.
37518          */
37519         uint64_t        resp_addr;
37520         /* The direction for the flow aging configuration, 1 is rx path, 2 is tx path. */
37521         uint8_t flags;
37522         /* Enumeration denoting the RX, TX type of the resource. */
37523         #define HWRM_CFA_FLOW_AGING_QCAPS_INPUT_FLAGS_PATH     UINT32_C(0x1)
37524         /* tx path */
37525         #define HWRM_CFA_FLOW_AGING_QCAPS_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)
37526         /* rx path */
37527         #define HWRM_CFA_FLOW_AGING_QCAPS_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)
37528         #define HWRM_CFA_FLOW_AGING_QCAPS_INPUT_FLAGS_PATH_LAST \
37529                 HWRM_CFA_FLOW_AGING_QCAPS_INPUT_FLAGS_PATH_RX
37530         uint8_t unused_0[7];
37531 } __rte_packed;
37532
37533 /* hwrm_cfa_flow_aging_qcaps_output (size:256b/32B) */
37534 struct hwrm_cfa_flow_aging_qcaps_output {
37535         /* The specific error status for the command. */
37536         uint16_t        error_code;
37537         /* The HWRM command request type. */
37538         uint16_t        req_type;
37539         /* The sequence ID from the original command. */
37540         uint16_t        seq_id;
37541         /* The length of the response data in number of bytes. */
37542         uint16_t        resp_len;
37543         /* The maximum flow aging timer for all TCP flows, the unit is 100 millisecond. */
37544         uint32_t        max_tcp_flow_timer;
37545         /* The maximum TCP finished timer for all TCP flows, the unit is 100 millisecond. */
37546         uint32_t        max_tcp_fin_timer;
37547         /* The maximum flow aging timer for all UDP flows, the unit is 100 millisecond. */
37548         uint32_t        max_udp_flow_timer;
37549         /* The maximum aging flows that HW can support. */
37550         uint32_t        max_aging_flows;
37551         uint8_t unused_0[7];
37552         /*
37553          * This field is used in Output records to indicate that the output
37554          * is completely written to RAM. This field should be read as '1'
37555          * to indicate that the output has been completely written.
37556          * When writing a command completion or response to an internal processor,
37557          * the order of writes has to be such that this field is written last.
37558          */
37559         uint8_t valid;
37560 } __rte_packed;
37561
37562 /**********************************
37563  * hwrm_cfa_tcp_flag_process_qcfg *
37564  **********************************/
37565
37566
37567 /* hwrm_cfa_tcp_flag_process_qcfg_input (size:128b/16B) */
37568 struct hwrm_cfa_tcp_flag_process_qcfg_input {
37569         /* The HWRM command request type. */
37570         uint16_t        req_type;
37571         /*
37572          * The completion ring to send the completion event on. This should
37573          * be the NQ ID returned from the `nq_alloc` HWRM command.
37574          */
37575         uint16_t        cmpl_ring;
37576         /*
37577          * The sequence ID is used by the driver for tracking multiple
37578          * commands. This ID is treated as opaque data by the firmware and
37579          * the value is returned in the `hwrm_resp_hdr` upon completion.
37580          */
37581         uint16_t        seq_id;
37582         /*
37583          * The target ID of the command:
37584          * * 0x0-0xFFF8 - The function ID
37585          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37586          * * 0xFFFD - Reserved for user-space HWRM interface
37587          * * 0xFFFF - HWRM
37588          */
37589         uint16_t        target_id;
37590         /*
37591          * A physical address pointer pointing to a host buffer that the
37592          * command's response data will be written. This can be either a host
37593          * physical address (HPA) or a guest physical address (GPA) and must
37594          * point to a physically contiguous block of memory.
37595          */
37596         uint64_t        resp_addr;
37597 } __rte_packed;
37598
37599 /* hwrm_cfa_tcp_flag_process_qcfg_output (size:192b/24B) */
37600 struct hwrm_cfa_tcp_flag_process_qcfg_output {
37601         /* The specific error status for the command. */
37602         uint16_t        error_code;
37603         /* The HWRM command request type. */
37604         uint16_t        req_type;
37605         /* The sequence ID from the original command. */
37606         uint16_t        seq_id;
37607         /* The length of the response data in number of bytes. */
37608         uint16_t        resp_len;
37609         /* The port 0 RX mirror action record ID. */
37610         uint16_t        rx_ar_id_port0;
37611         /* The port 1 RX mirror action record ID. */
37612         uint16_t        rx_ar_id_port1;
37613         /* The port 0 RX action record ID for TX TCP flag packets from loopback path. */
37614         uint16_t        tx_ar_id_port0;
37615         /* The port 1 RX action record ID for TX TCP flag packets from loopback path. */
37616         uint16_t        tx_ar_id_port1;
37617         uint8_t unused_0[7];
37618         /*
37619          * This field is used in Output records to indicate that the output
37620          * is completely written to RAM. This field should be read as '1'
37621          * to indicate that the output has been completely written.
37622          * When writing a command completion or response to an internal processor,
37623          * the order of writes has to be such that this field is written last.
37624          */
37625         uint8_t valid;
37626 } __rte_packed;
37627
37628 /**************************
37629  * hwrm_cfa_vf_pair_alloc *
37630  **************************/
37631
37632
37633 /* hwrm_cfa_vf_pair_alloc_input (size:448b/56B) */
37634 struct hwrm_cfa_vf_pair_alloc_input {
37635         /* The HWRM command request type. */
37636         uint16_t        req_type;
37637         /*
37638          * The completion ring to send the completion event on. This should
37639          * be the NQ ID returned from the `nq_alloc` HWRM command.
37640          */
37641         uint16_t        cmpl_ring;
37642         /*
37643          * The sequence ID is used by the driver for tracking multiple
37644          * commands. This ID is treated as opaque data by the firmware and
37645          * the value is returned in the `hwrm_resp_hdr` upon completion.
37646          */
37647         uint16_t        seq_id;
37648         /*
37649          * The target ID of the command:
37650          * * 0x0-0xFFF8 - The function ID
37651          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37652          * * 0xFFFD - Reserved for user-space HWRM interface
37653          * * 0xFFFF - HWRM
37654          */
37655         uint16_t        target_id;
37656         /*
37657          * A physical address pointer pointing to a host buffer that the
37658          * command's response data will be written. This can be either a host
37659          * physical address (HPA) or a guest physical address (GPA) and must
37660          * point to a physically contiguous block of memory.
37661          */
37662         uint64_t        resp_addr;
37663         /* Logical VF number (range: 0 -> MAX_VFS -1). */
37664         uint16_t        vf_a_id;
37665         /* Logical VF number (range: 0 -> MAX_VFS -1). */
37666         uint16_t        vf_b_id;
37667         uint8_t unused_0[4];
37668         /* VF Pair name (32 byte string). */
37669         char    pair_name[32];
37670 } __rte_packed;
37671
37672 /* hwrm_cfa_vf_pair_alloc_output (size:128b/16B) */
37673 struct hwrm_cfa_vf_pair_alloc_output {
37674         /* The specific error status for the command. */
37675         uint16_t        error_code;
37676         /* The HWRM command request type. */
37677         uint16_t        req_type;
37678         /* The sequence ID from the original command. */
37679         uint16_t        seq_id;
37680         /* The length of the response data in number of bytes. */
37681         uint16_t        resp_len;
37682         uint8_t unused_0[7];
37683         /*
37684          * This field is used in Output records to indicate that the output
37685          * is completely written to RAM. This field should be read as '1'
37686          * to indicate that the output has been completely written.
37687          * When writing a command completion or response to an internal processor,
37688          * the order of writes has to be such that this field is written last.
37689          */
37690         uint8_t valid;
37691 } __rte_packed;
37692
37693 /*************************
37694  * hwrm_cfa_vf_pair_free *
37695  *************************/
37696
37697
37698 /* hwrm_cfa_vf_pair_free_input (size:384b/48B) */
37699 struct hwrm_cfa_vf_pair_free_input {
37700         /* The HWRM command request type. */
37701         uint16_t        req_type;
37702         /*
37703          * The completion ring to send the completion event on. This should
37704          * be the NQ ID returned from the `nq_alloc` HWRM command.
37705          */
37706         uint16_t        cmpl_ring;
37707         /*
37708          * The sequence ID is used by the driver for tracking multiple
37709          * commands. This ID is treated as opaque data by the firmware and
37710          * the value is returned in the `hwrm_resp_hdr` upon completion.
37711          */
37712         uint16_t        seq_id;
37713         /*
37714          * The target ID of the command:
37715          * * 0x0-0xFFF8 - The function ID
37716          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37717          * * 0xFFFD - Reserved for user-space HWRM interface
37718          * * 0xFFFF - HWRM
37719          */
37720         uint16_t        target_id;
37721         /*
37722          * A physical address pointer pointing to a host buffer that the
37723          * command's response data will be written. This can be either a host
37724          * physical address (HPA) or a guest physical address (GPA) and must
37725          * point to a physically contiguous block of memory.
37726          */
37727         uint64_t        resp_addr;
37728         /* VF Pair name (32 byte string). */
37729         char    pair_name[32];
37730 } __rte_packed;
37731
37732 /* hwrm_cfa_vf_pair_free_output (size:128b/16B) */
37733 struct hwrm_cfa_vf_pair_free_output {
37734         /* The specific error status for the command. */
37735         uint16_t        error_code;
37736         /* The HWRM command request type. */
37737         uint16_t        req_type;
37738         /* The sequence ID from the original command. */
37739         uint16_t        seq_id;
37740         /* The length of the response data in number of bytes. */
37741         uint16_t        resp_len;
37742         uint8_t unused_0[7];
37743         /*
37744          * This field is used in Output records to indicate that the output
37745          * is completely written to RAM. This field should be read as '1'
37746          * to indicate that the output has been completely written.
37747          * When writing a command completion or response to an internal processor,
37748          * the order of writes has to be such that this field is written last.
37749          */
37750         uint8_t valid;
37751 } __rte_packed;
37752
37753 /*************************
37754  * hwrm_cfa_vf_pair_info *
37755  *************************/
37756
37757
37758 /* hwrm_cfa_vf_pair_info_input (size:448b/56B) */
37759 struct hwrm_cfa_vf_pair_info_input {
37760         /* The HWRM command request type. */
37761         uint16_t        req_type;
37762         /*
37763          * The completion ring to send the completion event on. This should
37764          * be the NQ ID returned from the `nq_alloc` HWRM command.
37765          */
37766         uint16_t        cmpl_ring;
37767         /*
37768          * The sequence ID is used by the driver for tracking multiple
37769          * commands. This ID is treated as opaque data by the firmware and
37770          * the value is returned in the `hwrm_resp_hdr` upon completion.
37771          */
37772         uint16_t        seq_id;
37773         /*
37774          * The target ID of the command:
37775          * * 0x0-0xFFF8 - The function ID
37776          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37777          * * 0xFFFD - Reserved for user-space HWRM interface
37778          * * 0xFFFF - HWRM
37779          */
37780         uint16_t        target_id;
37781         /*
37782          * A physical address pointer pointing to a host buffer that the
37783          * command's response data will be written. This can be either a host
37784          * physical address (HPA) or a guest physical address (GPA) and must
37785          * point to a physically contiguous block of memory.
37786          */
37787         uint64_t        resp_addr;
37788         uint32_t        flags;
37789         /* If this flag is set, lookup by name else lookup by index. */
37790         #define HWRM_CFA_VF_PAIR_INFO_INPUT_FLAGS_LOOKUP_TYPE     UINT32_C(0x1)
37791         /* vf pair table index. */
37792         uint16_t        vf_pair_index;
37793         uint8_t unused_0[2];
37794         /* VF Pair name (32 byte string). */
37795         char    vf_pair_name[32];
37796 } __rte_packed;
37797
37798 /* hwrm_cfa_vf_pair_info_output (size:512b/64B) */
37799 struct hwrm_cfa_vf_pair_info_output {
37800         /* The specific error status for the command. */
37801         uint16_t        error_code;
37802         /* The HWRM command request type. */
37803         uint16_t        req_type;
37804         /* The sequence ID from the original command. */
37805         uint16_t        seq_id;
37806         /* The length of the response data in number of bytes. */
37807         uint16_t        resp_len;
37808         /* vf pair table index. */
37809         uint16_t        next_vf_pair_index;
37810         /* vf pair member a's vf_fid. */
37811         uint16_t        vf_a_fid;
37812         /* vf pair member a's Linux logical VF number. */
37813         uint16_t        vf_a_index;
37814         /* vf pair member b's vf_fid. */
37815         uint16_t        vf_b_fid;
37816         /* vf pair member a's Linux logical VF number. */
37817         uint16_t        vf_b_index;
37818         /* vf pair state. */
37819         uint8_t pair_state;
37820         /* Pair has been allocated */
37821         #define HWRM_CFA_VF_PAIR_INFO_OUTPUT_PAIR_STATE_ALLOCATED UINT32_C(0x1)
37822         /* Both pair members are active */
37823         #define HWRM_CFA_VF_PAIR_INFO_OUTPUT_PAIR_STATE_ACTIVE    UINT32_C(0x2)
37824         #define HWRM_CFA_VF_PAIR_INFO_OUTPUT_PAIR_STATE_LAST \
37825                 HWRM_CFA_VF_PAIR_INFO_OUTPUT_PAIR_STATE_ACTIVE
37826         uint8_t unused_0[5];
37827         /* VF Pair name (32 byte string). */
37828         char    pair_name[32];
37829         uint8_t unused_1[7];
37830         /*
37831          * This field is used in Output records to indicate that the output
37832          * is completely written to RAM. This field should be read as '1'
37833          * to indicate that the output has been completely written.
37834          * When writing a command completion or response to an internal processor,
37835          * the order of writes has to be such that this field is written last.
37836          */
37837         uint8_t valid;
37838 } __rte_packed;
37839
37840 /***********************
37841  * hwrm_cfa_pair_alloc *
37842  ***********************/
37843
37844
37845 /* hwrm_cfa_pair_alloc_input (size:576b/72B) */
37846 struct hwrm_cfa_pair_alloc_input {
37847         /* The HWRM command request type. */
37848         uint16_t        req_type;
37849         /*
37850          * The completion ring to send the completion event on. This should
37851          * be the NQ ID returned from the `nq_alloc` HWRM command.
37852          */
37853         uint16_t        cmpl_ring;
37854         /*
37855          * The sequence ID is used by the driver for tracking multiple
37856          * commands. This ID is treated as opaque data by the firmware and
37857          * the value is returned in the `hwrm_resp_hdr` upon completion.
37858          */
37859         uint16_t        seq_id;
37860         /*
37861          * The target ID of the command:
37862          * * 0x0-0xFFF8 - The function ID
37863          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
37864          * * 0xFFFD - Reserved for user-space HWRM interface
37865          * * 0xFFFF - HWRM
37866          */
37867         uint16_t        target_id;
37868         /*
37869          * A physical address pointer pointing to a host buffer that the
37870          * command's response data will be written. This can be either a host
37871          * physical address (HPA) or a guest physical address (GPA) and must
37872          * point to a physically contiguous block of memory.
37873          */
37874         uint64_t        resp_addr;
37875         /*
37876          * Pair mode (0-vf2fn, 1-rep2fn, 2-rep2rep, 3-proxy, 4-pfpair,
37877          *            5-rep2fn_mod, 6-rep2fn_modall, 7-rep2fn_truflow).
37878          */
37879         uint16_t        pair_mode;
37880         /* Pair between VF on local host with PF or VF on specified host. */
37881         #define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_VF2FN \
37882                 UINT32_C(0x0)
37883         /* Pair between REP on local host with PF or VF on specified host. */
37884         #define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2FN \
37885                 UINT32_C(0x1)
37886         /* Pair between REP on local host with REP on specified host. */
37887         #define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2REP \
37888                 UINT32_C(0x2)
37889         /* Pair for the proxy interface. */
37890         #define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_PROXY \
37891                 UINT32_C(0x3)
37892         /* Pair for the PF interface. */
37893         #define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_PFPAIR \
37894                 UINT32_C(0x4)
37895         /* Modify existing rep2fn pair and move pair to new PF. */
37896         #define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2FN_MOD \
37897                 UINT32_C(0x5)
37898         /* Modify existing rep2fn pairs paired with same PF and move pairs to new PF. */
37899         #define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2FN_MODALL \
37900                 UINT32_C(0x6)
37901         /* Truflow pair between REP on local host with PF or VF on specified host. */
37902         #define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2FN_TRUFLOW \
37903                 UINT32_C(0x7)
37904         #define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_LAST \
37905                 HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2FN_TRUFLOW
37906         /* Logical VF number (range: 0 -> MAX_VFS -1). */
37907         uint16_t        vf_a_id;
37908         /* Logical Host (0xff-local host). */
37909         uint8_t host_b_id;
37910         /* Logical PF (0xff-PF for command channel). */
37911         uint8_t pf_b_id;
37912         /* Logical VF number (range: 0 -> MAX_VFS -1). */
37913         uint16_t        vf_b_id;
37914         /* Loopback port (0xff-internal loopback), valid for mode-3. */
37915         uint8_t port_id;
37916         /* Priority used for encap of loopback packets valid for mode-3. */
37917         uint8_t pri;
37918         /* New PF for rep2fn modify, valid for mode 5. */
37919         uint16_t        new_pf_fid;
37920         uint32_t        enables;
37921         /*
37922          * This bit must be '1' for the q_ab field to be
37923          * configured.
37924          */
37925         #define HWRM_CFA_PAIR_ALLOC_INPUT_ENABLES_Q_AB_VALID      UINT32_C(0x1)
37926         /*
37927          * This bit must be '1' for the q_ba field to be
37928          * configured.
37929          */
37930         #define HWRM_CFA_PAIR_ALLOC_INPUT_ENABLES_Q_BA_VALID      UINT32_C(0x2)
37931         /*
37932          * This bit must be '1' for the fc_ab field to be
37933          * configured.
37934          */
37935         #define HWRM_CFA_PAIR_ALLOC_INPUT_ENABLES_FC_AB_VALID     UINT32_C(0x4)
37936         /*
37937          * This bit must be '1' for the fc_ba field to be
37938          * configured.
37939          */
37940         #define HWRM_CFA_PAIR_ALLOC_INPUT_ENABLES_FC_BA_VALID     UINT32_C(0x8)
37941         /* VF Pair name (32 byte string). */
37942         char    pair_name[32];
37943         /*
37944          * The q_ab value specifies the logical index of the TX/RX CoS
37945          * queue to be assigned for traffic in the A to B direction of
37946          * the interface pair. The default value is 0.
37947          */
37948         uint8_t q_ab;
37949         /*
37950          * The q_ba value specifies the logical index of the TX/RX CoS
37951          * queue to be assigned for traffic in the B to A direction of
37952          * the interface pair. The default value is 1.
37953          */
37954         uint8_t q_ba;
37955         /*
37956          * Specifies whether RX ring flow control is disabled (0) or enabled
37957          * (1) in the A to B direction. The default value is 0, meaning that
37958          * packets will be dropped when the B-side RX rings are full.
37959          */
37960         uint8_t fc_ab;
37961         /*
37962          * Specifies whether RX ring flow control is disabled (0) or enabled
37963          * (1) in the B to A direction. The default value is 1, meaning that
37964          * the RX CoS queue will be flow controlled when the A-side RX rings
37965          * are full.
37966          */
37967         uint8_t fc_ba;
37968         uint8_t unused_1[4];
37969 } __rte_packed;
37970
37971 /* hwrm_cfa_pair_alloc_output (size:192b/24B) */
37972 struct hwrm_cfa_pair_alloc_output {
37973         /* The specific error status for the command. */
37974         uint16_t        error_code;
37975         /* The HWRM command request type. */
37976         uint16_t        req_type;
37977         /* The sequence ID from the original command. */
37978         uint16_t        seq_id;
37979         /* The length of the response data in number of bytes. */
37980         uint16_t        resp_len;
37981         /* Only valid for modes 1 and 2. */
37982         uint16_t        rx_cfa_code_a;
37983         /* Only valid for modes 1 and 2. */
37984         uint16_t        tx_cfa_action_a;
37985         /* Only valid for mode 2. */
37986         uint16_t        rx_cfa_code_b;
37987         /* Only valid for mode 2. */
37988         uint16_t        tx_cfa_action_b;
37989         uint8_t unused_0[7];
37990         /*
37991          * This field is used in Output records to indicate that the output
37992          * is completely written to RAM. This field should be read as '1'
37993          * to indicate that the output has been completely written.
37994          * When writing a command completion or response to an internal processor,
37995          * the order of writes has to be such that this field is written last.
37996          */
37997         uint8_t valid;
37998 } __rte_packed;
37999
38000 /**********************
38001  * hwrm_cfa_pair_free *
38002  **********************/
38003
38004
38005 /* hwrm_cfa_pair_free_input (size:448b/56B) */
38006 struct hwrm_cfa_pair_free_input {
38007         /* The HWRM command request type. */
38008         uint16_t        req_type;
38009         /*
38010          * The completion ring to send the completion event on. This should
38011          * be the NQ ID returned from the `nq_alloc` HWRM command.
38012          */
38013         uint16_t        cmpl_ring;
38014         /*
38015          * The sequence ID is used by the driver for tracking multiple
38016          * commands. This ID is treated as opaque data by the firmware and
38017          * the value is returned in the `hwrm_resp_hdr` upon completion.
38018          */
38019         uint16_t        seq_id;
38020         /*
38021          * The target ID of the command:
38022          * * 0x0-0xFFF8 - The function ID
38023          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38024          * * 0xFFFD - Reserved for user-space HWRM interface
38025          * * 0xFFFF - HWRM
38026          */
38027         uint16_t        target_id;
38028         /*
38029          * A physical address pointer pointing to a host buffer that the
38030          * command's response data will be written. This can be either a host
38031          * physical address (HPA) or a guest physical address (GPA) and must
38032          * point to a physically contiguous block of memory.
38033          */
38034         uint64_t        resp_addr;
38035         /* VF Pair name (32 byte string). */
38036         char    pair_name[32];
38037         /* Logical PF (0xff-PF for command channel). */
38038         uint8_t pf_b_id;
38039         uint8_t unused_0[3];
38040         /* Logical VF number (range: 0 -> MAX_VFS -1). */
38041         uint16_t        vf_id;
38042         /*
38043          * Pair mode (0-vf2fn, 1-rep2fn, 2-rep2rep, 3-proxy, 4-pfpair,
38044          *            5-rep2fn_mod, 6-rep2fn_modall, 7-rep2fn_truflow).
38045          */
38046         uint16_t        pair_mode;
38047         /* Pair between VF on local host with PF or VF on specified host. */
38048         #define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_VF2FN          UINT32_C(0x0)
38049         /* Pair between REP on local host with PF or VF on specified host. */
38050         #define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_REP2FN         UINT32_C(0x1)
38051         /* Pair between REP on local host with REP on specified host. */
38052         #define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_REP2REP        UINT32_C(0x2)
38053         /* Pair for the proxy interface. */
38054         #define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_PROXY          UINT32_C(0x3)
38055         /* Pair for the PF interface. */
38056         #define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_PFPAIR         UINT32_C(0x4)
38057         /* Modify existing rep2fn pair and move pair to new PF. */
38058         #define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_REP2FN_MOD     UINT32_C(0x5)
38059         /* Modify existing rep2fn pairs paired with same PF and move pairs to new PF. */
38060         #define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_REP2FN_MODALL  UINT32_C(0x6)
38061         /* Truflow pair between REP on local host with PF or VF on specified host. */
38062         #define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_REP2FN_TRUFLOW UINT32_C(0x7)
38063         #define HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_LAST \
38064                 HWRM_CFA_PAIR_FREE_INPUT_PAIR_MODE_REP2FN_TRUFLOW
38065 } __rte_packed;
38066
38067 /* hwrm_cfa_pair_free_output (size:128b/16B) */
38068 struct hwrm_cfa_pair_free_output {
38069         /* The specific error status for the command. */
38070         uint16_t        error_code;
38071         /* The HWRM command request type. */
38072         uint16_t        req_type;
38073         /* The sequence ID from the original command. */
38074         uint16_t        seq_id;
38075         /* The length of the response data in number of bytes. */
38076         uint16_t        resp_len;
38077         uint8_t unused_0[7];
38078         /*
38079          * This field is used in Output records to indicate that the output
38080          * is completely written to RAM. This field should be read as '1'
38081          * to indicate that the output has been completely written.
38082          * When writing a command completion or response to an internal processor,
38083          * the order of writes has to be such that this field is written last.
38084          */
38085         uint8_t valid;
38086 } __rte_packed;
38087
38088 /**********************
38089  * hwrm_cfa_pair_info *
38090  **********************/
38091
38092
38093 /* hwrm_cfa_pair_info_input (size:448b/56B) */
38094 struct hwrm_cfa_pair_info_input {
38095         /* The HWRM command request type. */
38096         uint16_t        req_type;
38097         /*
38098          * The completion ring to send the completion event on. This should
38099          * be the NQ ID returned from the `nq_alloc` HWRM command.
38100          */
38101         uint16_t        cmpl_ring;
38102         /*
38103          * The sequence ID is used by the driver for tracking multiple
38104          * commands. This ID is treated as opaque data by the firmware and
38105          * the value is returned in the `hwrm_resp_hdr` upon completion.
38106          */
38107         uint16_t        seq_id;
38108         /*
38109          * The target ID of the command:
38110          * * 0x0-0xFFF8 - The function ID
38111          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38112          * * 0xFFFD - Reserved for user-space HWRM interface
38113          * * 0xFFFF - HWRM
38114          */
38115         uint16_t        target_id;
38116         /*
38117          * A physical address pointer pointing to a host buffer that the
38118          * command's response data will be written. This can be either a host
38119          * physical address (HPA) or a guest physical address (GPA) and must
38120          * point to a physically contiguous block of memory.
38121          */
38122         uint64_t        resp_addr;
38123         uint32_t        flags;
38124         /* If this flag is set, lookup by name else lookup by index. */
38125         #define HWRM_CFA_PAIR_INFO_INPUT_FLAGS_LOOKUP_TYPE      UINT32_C(0x1)
38126         /* If this flag is set, lookup by PF id and VF id. */
38127         #define HWRM_CFA_PAIR_INFO_INPUT_FLAGS_LOOKUP_REPRE     UINT32_C(0x2)
38128         /* Pair table index. */
38129         uint16_t        pair_index;
38130         /* Pair pf index. */
38131         uint8_t pair_pfid;
38132         /* Pair vf index. */
38133         uint8_t pair_vfid;
38134         /* Pair name (32 byte string). */
38135         char    pair_name[32];
38136 } __rte_packed;
38137
38138 /* hwrm_cfa_pair_info_output (size:576b/72B) */
38139 struct hwrm_cfa_pair_info_output {
38140         /* The specific error status for the command. */
38141         uint16_t        error_code;
38142         /* The HWRM command request type. */
38143         uint16_t        req_type;
38144         /* The sequence ID from the original command. */
38145         uint16_t        seq_id;
38146         /* The length of the response data in number of bytes. */
38147         uint16_t        resp_len;
38148         /* Pair table index. */
38149         uint16_t        next_pair_index;
38150         /* Pair member a's fid. */
38151         uint16_t        a_fid;
38152         /* Logical host number. */
38153         uint8_t host_a_index;
38154         /* Logical PF number. */
38155         uint8_t pf_a_index;
38156         /* Pair member a's Linux logical VF number. */
38157         uint16_t        vf_a_index;
38158         /* Rx CFA code. */
38159         uint16_t        rx_cfa_code_a;
38160         /* Tx CFA action. */
38161         uint16_t        tx_cfa_action_a;
38162         /* Pair member b's fid. */
38163         uint16_t        b_fid;
38164         /* Logical host number. */
38165         uint8_t host_b_index;
38166         /* Logical PF number. */
38167         uint8_t pf_b_index;
38168         /* Pair member a's Linux logical VF number. */
38169         uint16_t        vf_b_index;
38170         /* Rx CFA code. */
38171         uint16_t        rx_cfa_code_b;
38172         /* Tx CFA action. */
38173         uint16_t        tx_cfa_action_b;
38174         /* Pair mode (0-vf2fn, 1-rep2fn, 2-rep2rep, 3-proxy, 4-pfpair). */
38175         uint8_t pair_mode;
38176         /* Pair between VF on local host with PF or VF on specified host. */
38177         #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_VF2FN   UINT32_C(0x0)
38178         /* Pair between REP on local host with PF or VF on specified host. */
38179         #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_REP2FN  UINT32_C(0x1)
38180         /* Pair between REP on local host with REP on specified host. */
38181         #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_REP2REP UINT32_C(0x2)
38182         /* Pair for the proxy interface. */
38183         #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_PROXY   UINT32_C(0x3)
38184         /* Pair for the PF interface. */
38185         #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_PFPAIR  UINT32_C(0x4)
38186         #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_LAST \
38187                 HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_PFPAIR
38188         /* Pair state. */
38189         uint8_t pair_state;
38190         /* Pair has been allocated */
38191         #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_ALLOCATED UINT32_C(0x1)
38192         /* Both pair members are active */
38193         #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_ACTIVE    UINT32_C(0x2)
38194         #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_LAST \
38195                 HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_ACTIVE
38196         /* Pair name (32 byte string). */
38197         char    pair_name[32];
38198         uint8_t unused_0[7];
38199         /*
38200          * This field is used in Output records to indicate that the output
38201          * is completely written to RAM. This field should be read as '1'
38202          * to indicate that the output has been completely written.
38203          * When writing a command completion or response to an internal processor,
38204          * the order of writes has to be such that this field is written last.
38205          */
38206         uint8_t valid;
38207 } __rte_packed;
38208
38209 /**********************
38210  * hwrm_cfa_vfr_alloc *
38211  **********************/
38212
38213
38214 /* hwrm_cfa_vfr_alloc_input (size:448b/56B) */
38215 struct hwrm_cfa_vfr_alloc_input {
38216         /* The HWRM command request type. */
38217         uint16_t        req_type;
38218         /*
38219          * The completion ring to send the completion event on. This should
38220          * be the NQ ID returned from the `nq_alloc` HWRM command.
38221          */
38222         uint16_t        cmpl_ring;
38223         /*
38224          * The sequence ID is used by the driver for tracking multiple
38225          * commands. This ID is treated as opaque data by the firmware and
38226          * the value is returned in the `hwrm_resp_hdr` upon completion.
38227          */
38228         uint16_t        seq_id;
38229         /*
38230          * The target ID of the command:
38231          * * 0x0-0xFFF8 - The function ID
38232          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38233          * * 0xFFFD - Reserved for user-space HWRM interface
38234          * * 0xFFFF - HWRM
38235          */
38236         uint16_t        target_id;
38237         /*
38238          * A physical address pointer pointing to a host buffer that the
38239          * command's response data will be written. This can be either a host
38240          * physical address (HPA) or a guest physical address (GPA) and must
38241          * point to a physically contiguous block of memory.
38242          */
38243         uint64_t        resp_addr;
38244         /* Logical VF number (range: 0 -> MAX_VFS -1). */
38245         uint16_t        vf_id;
38246         /*
38247          * This field is reserved for the future use.
38248          * It shall be set to 0.
38249          */
38250         uint16_t        reserved;
38251         uint8_t unused_0[4];
38252         /* VF Representor name (32 byte string). */
38253         char    vfr_name[32];
38254 } __rte_packed;
38255
38256 /* hwrm_cfa_vfr_alloc_output (size:128b/16B) */
38257 struct hwrm_cfa_vfr_alloc_output {
38258         /* The specific error status for the command. */
38259         uint16_t        error_code;
38260         /* The HWRM command request type. */
38261         uint16_t        req_type;
38262         /* The sequence ID from the original command. */
38263         uint16_t        seq_id;
38264         /* The length of the response data in number of bytes. */
38265         uint16_t        resp_len;
38266         /* Rx CFA code. */
38267         uint16_t        rx_cfa_code;
38268         /* Tx CFA action. */
38269         uint16_t        tx_cfa_action;
38270         uint8_t unused_0[3];
38271         /*
38272          * This field is used in Output records to indicate that the output
38273          * is completely written to RAM. This field should be read as '1'
38274          * to indicate that the output has been completely written.
38275          * When writing a command completion or response to an internal processor,
38276          * the order of writes has to be such that this field is written last.
38277          */
38278         uint8_t valid;
38279 } __rte_packed;
38280
38281 /*********************
38282  * hwrm_cfa_vfr_free *
38283  *********************/
38284
38285
38286 /* hwrm_cfa_vfr_free_input (size:448b/56B) */
38287 struct hwrm_cfa_vfr_free_input {
38288         /* The HWRM command request type. */
38289         uint16_t        req_type;
38290         /*
38291          * The completion ring to send the completion event on. This should
38292          * be the NQ ID returned from the `nq_alloc` HWRM command.
38293          */
38294         uint16_t        cmpl_ring;
38295         /*
38296          * The sequence ID is used by the driver for tracking multiple
38297          * commands. This ID is treated as opaque data by the firmware and
38298          * the value is returned in the `hwrm_resp_hdr` upon completion.
38299          */
38300         uint16_t        seq_id;
38301         /*
38302          * The target ID of the command:
38303          * * 0x0-0xFFF8 - The function ID
38304          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38305          * * 0xFFFD - Reserved for user-space HWRM interface
38306          * * 0xFFFF - HWRM
38307          */
38308         uint16_t        target_id;
38309         /*
38310          * A physical address pointer pointing to a host buffer that the
38311          * command's response data will be written. This can be either a host
38312          * physical address (HPA) or a guest physical address (GPA) and must
38313          * point to a physically contiguous block of memory.
38314          */
38315         uint64_t        resp_addr;
38316         /* VF Representor name (32 byte string). */
38317         char    vfr_name[32];
38318         /* Logical VF number (range: 0 -> MAX_VFS -1). */
38319         uint16_t        vf_id;
38320         /*
38321          * This field is reserved for the future use.
38322          * It shall be set to 0.
38323          */
38324         uint16_t        reserved;
38325         uint8_t unused_0[4];
38326 } __rte_packed;
38327
38328 /* hwrm_cfa_vfr_free_output (size:128b/16B) */
38329 struct hwrm_cfa_vfr_free_output {
38330         /* The specific error status for the command. */
38331         uint16_t        error_code;
38332         /* The HWRM command request type. */
38333         uint16_t        req_type;
38334         /* The sequence ID from the original command. */
38335         uint16_t        seq_id;
38336         /* The length of the response data in number of bytes. */
38337         uint16_t        resp_len;
38338         uint8_t unused_0[7];
38339         /*
38340          * This field is used in Output records to indicate that the output
38341          * is completely written to RAM. This field should be read as '1'
38342          * to indicate that the output has been completely written.
38343          * When writing a command completion or response to an internal processor,
38344          * the order of writes has to be such that this field is written last.
38345          */
38346         uint8_t valid;
38347 } __rte_packed;
38348
38349 /***************************************
38350  * hwrm_cfa_redirect_query_tunnel_type *
38351  ***************************************/
38352
38353
38354 /* hwrm_cfa_redirect_query_tunnel_type_input (size:192b/24B) */
38355 struct hwrm_cfa_redirect_query_tunnel_type_input {
38356         /* The HWRM command request type. */
38357         uint16_t        req_type;
38358         /*
38359          * The completion ring to send the completion event on. This should
38360          * be the NQ ID returned from the `nq_alloc` HWRM command.
38361          */
38362         uint16_t        cmpl_ring;
38363         /*
38364          * The sequence ID is used by the driver for tracking multiple
38365          * commands. This ID is treated as opaque data by the firmware and
38366          * the value is returned in the `hwrm_resp_hdr` upon completion.
38367          */
38368         uint16_t        seq_id;
38369         /*
38370          * The target ID of the command:
38371          * * 0x0-0xFFF8 - The function ID
38372          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38373          * * 0xFFFD - Reserved for user-space HWRM interface
38374          * * 0xFFFF - HWRM
38375          */
38376         uint16_t        target_id;
38377         /*
38378          * A physical address pointer pointing to a host buffer that the
38379          * command's response data will be written. This can be either a host
38380          * physical address (HPA) or a guest physical address (GPA) and must
38381          * point to a physically contiguous block of memory.
38382          */
38383         uint64_t        resp_addr;
38384         /* The source function id. */
38385         uint16_t        src_fid;
38386         uint8_t unused_0[6];
38387 } __rte_packed;
38388
38389 /* hwrm_cfa_redirect_query_tunnel_type_output (size:128b/16B) */
38390 struct hwrm_cfa_redirect_query_tunnel_type_output {
38391         /* The specific error status for the command. */
38392         uint16_t        error_code;
38393         /* The HWRM command request type. */
38394         uint16_t        req_type;
38395         /* The sequence ID from the original command. */
38396         uint16_t        seq_id;
38397         /* The length of the response data in number of bytes. */
38398         uint16_t        resp_len;
38399         /* Tunnel Mask. */
38400         uint32_t        tunnel_mask;
38401         /* Non-tunnel */
38402         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_NONTUNNEL \
38403                 UINT32_C(0x1)
38404         /* Virtual eXtensible Local Area Network (VXLAN) */
38405         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_VXLAN \
38406                 UINT32_C(0x2)
38407         /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
38408         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_NVGRE \
38409                 UINT32_C(0x4)
38410         /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
38411         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_L2GRE \
38412                 UINT32_C(0x8)
38413         /* IP in IP */
38414         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_IPIP \
38415                 UINT32_C(0x10)
38416         /* Generic Network Virtualization Encapsulation (Geneve) */
38417         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_GENEVE \
38418                 UINT32_C(0x20)
38419         /* Multi-Protocol Label Switching (MPLS) */
38420         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_MPLS \
38421                 UINT32_C(0x40)
38422         /* Stateless Transport Tunnel (STT) */
38423         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_STT \
38424                 UINT32_C(0x80)
38425         /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
38426         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_IPGRE \
38427                 UINT32_C(0x100)
38428         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
38429         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_VXLAN_V4 \
38430                 UINT32_C(0x200)
38431         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
38432         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_IPGRE_V1 \
38433                 UINT32_C(0x400)
38434         /* Any tunneled traffic */
38435         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_ANYTUNNEL \
38436                 UINT32_C(0x800)
38437         /* Use fixed layer 2 ether type of 0xFFFF */
38438         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_L2_ETYPE \
38439                 UINT32_C(0x1000)
38440         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
38441         #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_VXLAN_GPE_V6 \
38442                 UINT32_C(0x2000)
38443         uint8_t unused_0[3];
38444         /*
38445          * This field is used in Output records to indicate that the output
38446          * is completely written to RAM. This field should be read as '1'
38447          * to indicate that the output has been completely written.
38448          * When writing a command completion or response to an internal processor,
38449          * the order of writes has to be such that this field is written last.
38450          */
38451         uint8_t valid;
38452 } __rte_packed;
38453
38454 /*************************
38455  * hwrm_cfa_ctx_mem_rgtr *
38456  *************************/
38457
38458
38459 /* hwrm_cfa_ctx_mem_rgtr_input (size:256b/32B) */
38460 struct hwrm_cfa_ctx_mem_rgtr_input {
38461         /* The HWRM command request type. */
38462         uint16_t        req_type;
38463         /*
38464          * The completion ring to send the completion event on. This should
38465          * be the NQ ID returned from the `nq_alloc` HWRM command.
38466          */
38467         uint16_t        cmpl_ring;
38468         /*
38469          * The sequence ID is used by the driver for tracking multiple
38470          * commands. This ID is treated as opaque data by the firmware and
38471          * the value is returned in the `hwrm_resp_hdr` upon completion.
38472          */
38473         uint16_t        seq_id;
38474         /*
38475          * The target ID of the command:
38476          * * 0x0-0xFFF8 - The function ID
38477          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38478          * * 0xFFFD - Reserved for user-space HWRM interface
38479          * * 0xFFFF - HWRM
38480          */
38481         uint16_t        target_id;
38482         /*
38483          * A physical address pointer pointing to a host buffer that the
38484          * command's response data will be written. This can be either a host
38485          * physical address (HPA) or a guest physical address (GPA) and must
38486          * point to a physically contiguous block of memory.
38487          */
38488         uint64_t        resp_addr;
38489         uint16_t        flags;
38490         /* Counter PBL indirect levels. */
38491         uint8_t page_level;
38492         /* PBL pointer is physical start address. */
38493         #define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_0 UINT32_C(0x0)
38494         /* PBL pointer points to PTE table. */
38495         #define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_1 UINT32_C(0x1)
38496         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
38497         #define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_2 UINT32_C(0x2)
38498         #define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_LEVEL_LAST \
38499                 HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_2
38500         /* Page size. */
38501         uint8_t page_size;
38502         /* 4KB page size. */
38503         #define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_4K   UINT32_C(0x0)
38504         /* 8KB page size. */
38505         #define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_8K   UINT32_C(0x1)
38506         /* 64KB page size. */
38507         #define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_64K  UINT32_C(0x4)
38508         /* 256KB page size. */
38509         #define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_256K UINT32_C(0x6)
38510         /* 1MB page size. */
38511         #define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_1M   UINT32_C(0x8)
38512         /* 2MB page size. */
38513         #define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_2M   UINT32_C(0x9)
38514         /* 4MB page size. */
38515         #define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_4M   UINT32_C(0xa)
38516         /* 1GB page size. */
38517         #define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_1G   UINT32_C(0x12)
38518         #define HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_LAST \
38519                 HWRM_CFA_CTX_MEM_RGTR_INPUT_PAGE_SIZE_1G
38520         uint32_t        unused_0;
38521         /* Pointer to the PBL, or PDL depending on number of levels */
38522         uint64_t        page_dir;
38523 } __rte_packed;
38524
38525 /* hwrm_cfa_ctx_mem_rgtr_output (size:128b/16B) */
38526 struct hwrm_cfa_ctx_mem_rgtr_output {
38527         /* The specific error status for the command. */
38528         uint16_t        error_code;
38529         /* The HWRM command request type. */
38530         uint16_t        req_type;
38531         /* The sequence ID from the original command. */
38532         uint16_t        seq_id;
38533         /* The length of the response data in number of bytes. */
38534         uint16_t        resp_len;
38535         /*
38536          * Id/Handle to the recently register context memory. This handle is passed
38537          * to the CFA feature.
38538          */
38539         uint16_t        ctx_id;
38540         uint8_t unused_0[5];
38541         /*
38542          * This field is used in Output records to indicate that the output
38543          * is completely written to RAM. This field should be read as '1'
38544          * to indicate that the output has been completely written.
38545          * When writing a command completion or response to an internal processor,
38546          * the order of writes has to be such that this field is written last.
38547          */
38548         uint8_t valid;
38549 } __rte_packed;
38550
38551 /***************************
38552  * hwrm_cfa_ctx_mem_unrgtr *
38553  ***************************/
38554
38555
38556 /* hwrm_cfa_ctx_mem_unrgtr_input (size:192b/24B) */
38557 struct hwrm_cfa_ctx_mem_unrgtr_input {
38558         /* The HWRM command request type. */
38559         uint16_t        req_type;
38560         /*
38561          * The completion ring to send the completion event on. This should
38562          * be the NQ ID returned from the `nq_alloc` HWRM command.
38563          */
38564         uint16_t        cmpl_ring;
38565         /*
38566          * The sequence ID is used by the driver for tracking multiple
38567          * commands. This ID is treated as opaque data by the firmware and
38568          * the value is returned in the `hwrm_resp_hdr` upon completion.
38569          */
38570         uint16_t        seq_id;
38571         /*
38572          * The target ID of the command:
38573          * * 0x0-0xFFF8 - The function ID
38574          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38575          * * 0xFFFD - Reserved for user-space HWRM interface
38576          * * 0xFFFF - HWRM
38577          */
38578         uint16_t        target_id;
38579         /*
38580          * A physical address pointer pointing to a host buffer that the
38581          * command's response data will be written. This can be either a host
38582          * physical address (HPA) or a guest physical address (GPA) and must
38583          * point to a physically contiguous block of memory.
38584          */
38585         uint64_t        resp_addr;
38586         /*
38587          * Id/Handle to the recently register context memory. This handle is passed
38588          * to the CFA feature.
38589          */
38590         uint16_t        ctx_id;
38591         uint8_t unused_0[6];
38592 } __rte_packed;
38593
38594 /* hwrm_cfa_ctx_mem_unrgtr_output (size:128b/16B) */
38595 struct hwrm_cfa_ctx_mem_unrgtr_output {
38596         /* The specific error status for the command. */
38597         uint16_t        error_code;
38598         /* The HWRM command request type. */
38599         uint16_t        req_type;
38600         /* The sequence ID from the original command. */
38601         uint16_t        seq_id;
38602         /* The length of the response data in number of bytes. */
38603         uint16_t        resp_len;
38604         uint8_t unused_0[7];
38605         /*
38606          * This field is used in Output records to indicate that the output
38607          * is completely written to RAM. This field should be read as '1'
38608          * to indicate that the output has been completely written.
38609          * When writing a command completion or response to an internal processor,
38610          * the order of writes has to be such that this field is written last.
38611          */
38612         uint8_t valid;
38613 } __rte_packed;
38614
38615 /*************************
38616  * hwrm_cfa_ctx_mem_qctx *
38617  *************************/
38618
38619
38620 /* hwrm_cfa_ctx_mem_qctx_input (size:192b/24B) */
38621 struct hwrm_cfa_ctx_mem_qctx_input {
38622         /* The HWRM command request type. */
38623         uint16_t        req_type;
38624         /*
38625          * The completion ring to send the completion event on. This should
38626          * be the NQ ID returned from the `nq_alloc` HWRM command.
38627          */
38628         uint16_t        cmpl_ring;
38629         /*
38630          * The sequence ID is used by the driver for tracking multiple
38631          * commands. This ID is treated as opaque data by the firmware and
38632          * the value is returned in the `hwrm_resp_hdr` upon completion.
38633          */
38634         uint16_t        seq_id;
38635         /*
38636          * The target ID of the command:
38637          * * 0x0-0xFFF8 - The function ID
38638          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38639          * * 0xFFFD - Reserved for user-space HWRM interface
38640          * * 0xFFFF - HWRM
38641          */
38642         uint16_t        target_id;
38643         /*
38644          * A physical address pointer pointing to a host buffer that the
38645          * command's response data will be written. This can be either a host
38646          * physical address (HPA) or a guest physical address (GPA) and must
38647          * point to a physically contiguous block of memory.
38648          */
38649         uint64_t        resp_addr;
38650         /*
38651          * Id/Handle to the recently register context memory. This handle is passed
38652          * to the CFA feature.
38653          */
38654         uint16_t        ctx_id;
38655         uint8_t unused_0[6];
38656 } __rte_packed;
38657
38658 /* hwrm_cfa_ctx_mem_qctx_output (size:256b/32B) */
38659 struct hwrm_cfa_ctx_mem_qctx_output {
38660         /* The specific error status for the command. */
38661         uint16_t        error_code;
38662         /* The HWRM command request type. */
38663         uint16_t        req_type;
38664         /* The sequence ID from the original command. */
38665         uint16_t        seq_id;
38666         /* The length of the response data in number of bytes. */
38667         uint16_t        resp_len;
38668         uint16_t        flags;
38669         /* Counter PBL indirect levels. */
38670         uint8_t page_level;
38671         /* PBL pointer is physical start address. */
38672         #define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_LEVEL_LVL_0 UINT32_C(0x0)
38673         /* PBL pointer points to PTE table. */
38674         #define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_LEVEL_LVL_1 UINT32_C(0x1)
38675         /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
38676         #define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_LEVEL_LVL_2 UINT32_C(0x2)
38677         #define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_LEVEL_LAST \
38678                 HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_LEVEL_LVL_2
38679         /* Page size. */
38680         uint8_t page_size;
38681         /* 4KB page size. */
38682         #define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_4K   UINT32_C(0x0)
38683         /* 8KB page size. */
38684         #define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_8K   UINT32_C(0x1)
38685         /* 64KB page size. */
38686         #define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_64K  UINT32_C(0x4)
38687         /* 256KB page size. */
38688         #define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_256K UINT32_C(0x6)
38689         /* 1MB page size. */
38690         #define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_1M   UINT32_C(0x8)
38691         /* 2MB page size. */
38692         #define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_2M   UINT32_C(0x9)
38693         /* 4MB page size. */
38694         #define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_4M   UINT32_C(0xa)
38695         /* 1GB page size. */
38696         #define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_1G   UINT32_C(0x12)
38697         #define HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_LAST \
38698                 HWRM_CFA_CTX_MEM_QCTX_OUTPUT_PAGE_SIZE_1G
38699         uint8_t unused_0[4];
38700         /* Pointer to the PBL, or PDL depending on number of levels */
38701         uint64_t        page_dir;
38702         uint8_t unused_1[7];
38703         /*
38704          * This field is used in Output records to indicate that the output
38705          * is completely written to RAM. This field should be read as '1'
38706          * to indicate that the output has been completely written.
38707          * When writing a command completion or response to an internal processor,
38708          * the order of writes has to be such that this field is written last.
38709          */
38710         uint8_t valid;
38711 } __rte_packed;
38712
38713 /**************************
38714  * hwrm_cfa_ctx_mem_qcaps *
38715  **************************/
38716
38717
38718 /* hwrm_cfa_ctx_mem_qcaps_input (size:128b/16B) */
38719 struct hwrm_cfa_ctx_mem_qcaps_input {
38720         /* The HWRM command request type. */
38721         uint16_t        req_type;
38722         /*
38723          * The completion ring to send the completion event on. This should
38724          * be the NQ ID returned from the `nq_alloc` HWRM command.
38725          */
38726         uint16_t        cmpl_ring;
38727         /*
38728          * The sequence ID is used by the driver for tracking multiple
38729          * commands. This ID is treated as opaque data by the firmware and
38730          * the value is returned in the `hwrm_resp_hdr` upon completion.
38731          */
38732         uint16_t        seq_id;
38733         /*
38734          * The target ID of the command:
38735          * * 0x0-0xFFF8 - The function ID
38736          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38737          * * 0xFFFD - Reserved for user-space HWRM interface
38738          * * 0xFFFF - HWRM
38739          */
38740         uint16_t        target_id;
38741         /*
38742          * A physical address pointer pointing to a host buffer that the
38743          * command's response data will be written. This can be either a host
38744          * physical address (HPA) or a guest physical address (GPA) and must
38745          * point to a physically contiguous block of memory.
38746          */
38747         uint64_t        resp_addr;
38748 } __rte_packed;
38749
38750 /* hwrm_cfa_ctx_mem_qcaps_output (size:128b/16B) */
38751 struct hwrm_cfa_ctx_mem_qcaps_output {
38752         /* The specific error status for the command. */
38753         uint16_t        error_code;
38754         /* The HWRM command request type. */
38755         uint16_t        req_type;
38756         /* The sequence ID from the original command. */
38757         uint16_t        seq_id;
38758         /* The length of the response data in number of bytes. */
38759         uint16_t        resp_len;
38760         /* Indicates the maximum number of context memory which can be registered. */
38761         uint16_t        max_entries;
38762         uint8_t unused_0[5];
38763         /*
38764          * This field is used in Output records to indicate that the output
38765          * is completely written to RAM. This field should be read as '1'
38766          * to indicate that the output has been completely written.
38767          * When writing a command completion or response to an internal processor,
38768          * the order of writes has to be such that this field is written last.
38769          */
38770         uint8_t valid;
38771 } __rte_packed;
38772
38773 /**************************
38774  * hwrm_cfa_counter_qcaps *
38775  **************************/
38776
38777
38778 /* hwrm_cfa_counter_qcaps_input (size:128b/16B) */
38779 struct hwrm_cfa_counter_qcaps_input {
38780         /* The HWRM command request type. */
38781         uint16_t        req_type;
38782         /*
38783          * The completion ring to send the completion event on. This should
38784          * be the NQ ID returned from the `nq_alloc` HWRM command.
38785          */
38786         uint16_t        cmpl_ring;
38787         /*
38788          * The sequence ID is used by the driver for tracking multiple
38789          * commands. This ID is treated as opaque data by the firmware and
38790          * the value is returned in the `hwrm_resp_hdr` upon completion.
38791          */
38792         uint16_t        seq_id;
38793         /*
38794          * The target ID of the command:
38795          * * 0x0-0xFFF8 - The function ID
38796          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38797          * * 0xFFFD - Reserved for user-space HWRM interface
38798          * * 0xFFFF - HWRM
38799          */
38800         uint16_t        target_id;
38801         /*
38802          * A physical address pointer pointing to a host buffer that the
38803          * command's response data will be written. This can be either a host
38804          * physical address (HPA) or a guest physical address (GPA) and must
38805          * point to a physically contiguous block of memory.
38806          */
38807         uint64_t        resp_addr;
38808 } __rte_packed;
38809
38810 /* hwrm_cfa_counter_qcaps_output (size:576b/72B) */
38811 struct hwrm_cfa_counter_qcaps_output {
38812         /* The specific error status for the command. */
38813         uint16_t        error_code;
38814         /* The HWRM command request type. */
38815         uint16_t        req_type;
38816         /* The sequence ID from the original command. */
38817         uint16_t        seq_id;
38818         /* The length of the response data in number of bytes. */
38819         uint16_t        resp_len;
38820         uint32_t        flags;
38821         /* Enumeration denoting the supported CFA counter format. */
38822         #define HWRM_CFA_COUNTER_QCAPS_OUTPUT_FLAGS_COUNTER_FORMAT \
38823                 UINT32_C(0x1)
38824         /* CFA counter types are not supported. */
38825         #define HWRM_CFA_COUNTER_QCAPS_OUTPUT_FLAGS_COUNTER_FORMAT_NONE \
38826                 UINT32_C(0x0)
38827         /* 64-bit packet counters followed by 64-bit byte counters format. */
38828         #define HWRM_CFA_COUNTER_QCAPS_OUTPUT_FLAGS_COUNTER_FORMAT_64_BIT \
38829                 UINT32_C(0x1)
38830         #define HWRM_CFA_COUNTER_QCAPS_OUTPUT_FLAGS_COUNTER_FORMAT_LAST \
38831                 HWRM_CFA_COUNTER_QCAPS_OUTPUT_FLAGS_COUNTER_FORMAT_64_BIT
38832         uint32_t        unused_0;
38833         /*
38834          * Minimum guaranteed number of flow counters supported for this function,
38835          * in RX direction.
38836          */
38837         uint32_t        min_rx_fc;
38838         /*
38839          * Maximum non-guaranteed number of flow counters supported for this function,
38840          * in RX direction.
38841          */
38842         uint32_t        max_rx_fc;
38843         /*
38844          * Minimum guaranteed number of flow counters supported for this function,
38845          * in TX direction.
38846          */
38847         uint32_t        min_tx_fc;
38848         /*
38849          * Maximum non-guaranteed number of flow counters supported for this function,
38850          * in TX direction.
38851          */
38852         uint32_t        max_tx_fc;
38853         /*
38854          * Minimum guaranteed number of extension flow counters supported for this
38855          * function, in RX direction.
38856          */
38857         uint32_t        min_rx_efc;
38858         /*
38859          * Maximum non-guaranteed number of extension flow counters supported for
38860          * this function, in RX direction.
38861          */
38862         uint32_t        max_rx_efc;
38863         /*
38864          * Minimum guaranteed number of extension flow counters supported for this
38865          * function, in TX direction.
38866          */
38867         uint32_t        min_tx_efc;
38868         /*
38869          * Maximum non-guaranteed number of extension flow counters supported for
38870          * this function, in TX direction.
38871          */
38872         uint32_t        max_tx_efc;
38873         /*
38874          * Minimum guaranteed number of meter drop counters supported for this
38875          * function, in RX direction.
38876          */
38877         uint32_t        min_rx_mdc;
38878         /*
38879          * Maximum non-guaranteed number of meter drop counters supported for this
38880          * function, in RX direction.
38881          */
38882         uint32_t        max_rx_mdc;
38883         /*
38884          * Minimum guaranteed number of meter drop counters supported for this
38885          * function, in TX direction.
38886          */
38887         uint32_t        min_tx_mdc;
38888         /*
38889          * Maximum non-guaranteed number of meter drop counters supported for this
38890          * function, in TX direction.
38891          */
38892         uint32_t        max_tx_mdc;
38893         /* Maximum guaranteed number of flow counters which can be used during flow alloc. */
38894         uint32_t        max_flow_alloc_fc;
38895         uint8_t unused_1[3];
38896         /*
38897          * This field is used in Output records to indicate that the output
38898          * is completely written to RAM. This field should be read as '1'
38899          * to indicate that the output has been completely written.
38900          * When writing a command completion or response to an internal processor,
38901          * the order of writes has to be such that this field is written last.
38902          */
38903         uint8_t valid;
38904 } __rte_packed;
38905
38906 /************************
38907  * hwrm_cfa_counter_cfg *
38908  ************************/
38909
38910
38911 /* hwrm_cfa_counter_cfg_input (size:256b/32B) */
38912 struct hwrm_cfa_counter_cfg_input {
38913         /* The HWRM command request type. */
38914         uint16_t        req_type;
38915         /*
38916          * The completion ring to send the completion event on. This should
38917          * be the NQ ID returned from the `nq_alloc` HWRM command.
38918          */
38919         uint16_t        cmpl_ring;
38920         /*
38921          * The sequence ID is used by the driver for tracking multiple
38922          * commands. This ID is treated as opaque data by the firmware and
38923          * the value is returned in the `hwrm_resp_hdr` upon completion.
38924          */
38925         uint16_t        seq_id;
38926         /*
38927          * The target ID of the command:
38928          * * 0x0-0xFFF8 - The function ID
38929          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
38930          * * 0xFFFD - Reserved for user-space HWRM interface
38931          * * 0xFFFF - HWRM
38932          */
38933         uint16_t        target_id;
38934         /*
38935          * A physical address pointer pointing to a host buffer that the
38936          * command's response data will be written. This can be either a host
38937          * physical address (HPA) or a guest physical address (GPA) and must
38938          * point to a physically contiguous block of memory.
38939          */
38940         uint64_t        resp_addr;
38941         uint16_t        flags;
38942         /* Enumeration denoting the configuration mode. */
38943         #define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_CFG_MODE \
38944                 UINT32_C(0x1)
38945         /* Disable the configuration mode. */
38946         #define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_CFG_MODE_DISABLE \
38947                 UINT32_C(0x0)
38948         /* Enable the configuration mode. */
38949         #define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_CFG_MODE_ENABLE \
38950                 UINT32_C(0x1)
38951         #define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_CFG_MODE_LAST \
38952                 HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_CFG_MODE_ENABLE
38953         /* Enumeration denoting the RX, TX type of the resource. */
38954         #define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_PATH \
38955                 UINT32_C(0x2)
38956         /* Tx path. */
38957         #define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_PATH_TX \
38958                 (UINT32_C(0x0) << 1)
38959         /* Rx path. */
38960         #define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_PATH_RX \
38961                 (UINT32_C(0x1) << 1)
38962         #define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_PATH_LAST \
38963                 HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_PATH_RX
38964         /* Enumeration denoting the data transfer mode. */
38965         #define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_DATA_TRANSFER_MODE_MASK \
38966                 UINT32_C(0xc)
38967         #define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_DATA_TRANSFER_MODE_SFT       2
38968         /* Push mode. */
38969         #define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_DATA_TRANSFER_MODE_PUSH \
38970                 (UINT32_C(0x0) << 2)
38971         /* Pull mode. */
38972         #define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_DATA_TRANSFER_MODE_PULL \
38973                 (UINT32_C(0x1) << 2)
38974         /* Pull on async update. */
38975         #define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_DATA_TRANSFER_MODE_PULL_ASYNC \
38976                 (UINT32_C(0x2) << 2)
38977         #define HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_DATA_TRANSFER_MODE_LAST \
38978                 HWRM_CFA_COUNTER_CFG_INPUT_FLAGS_DATA_TRANSFER_MODE_PULL_ASYNC
38979         uint16_t        counter_type;
38980         /* Flow counters. */
38981         #define HWRM_CFA_COUNTER_CFG_INPUT_COUNTER_TYPE_FC  UINT32_C(0x0)
38982         /* Extended flow counters. */
38983         #define HWRM_CFA_COUNTER_CFG_INPUT_COUNTER_TYPE_EFC UINT32_C(0x1)
38984         /* Meter drop counters. */
38985         #define HWRM_CFA_COUNTER_CFG_INPUT_COUNTER_TYPE_MDC UINT32_C(0x2)
38986         #define HWRM_CFA_COUNTER_CFG_INPUT_COUNTER_TYPE_LAST \
38987                 HWRM_CFA_COUNTER_CFG_INPUT_COUNTER_TYPE_MDC
38988         /* Ctx memory handle to be used for the counter. */
38989         uint16_t        ctx_id;
38990         /* Counter update cadence hint (only in Push mode). */
38991         uint16_t        update_tmr_ms;
38992         /* Total number of entries. */
38993         uint32_t        num_entries;
38994         uint32_t        unused_0;
38995 } __rte_packed;
38996
38997 /* hwrm_cfa_counter_cfg_output (size:128b/16B) */
38998 struct hwrm_cfa_counter_cfg_output {
38999         /* The specific error status for the command. */
39000         uint16_t        error_code;
39001         /* The HWRM command request type. */
39002         uint16_t        req_type;
39003         /* The sequence ID from the original command. */
39004         uint16_t        seq_id;
39005         /* The length of the response data in number of bytes. */
39006         uint16_t        resp_len;
39007         uint8_t unused_0[7];
39008         /*
39009          * This field is used in Output records to indicate that the output
39010          * is completely written to RAM. This field should be read as '1'
39011          * to indicate that the output has been completely written.
39012          * When writing a command completion or response to an internal processor,
39013          * the order of writes has to be such that this field is written last.
39014          */
39015         uint8_t valid;
39016 } __rte_packed;
39017
39018 /***************************
39019  * hwrm_cfa_counter_qstats *
39020  ***************************/
39021
39022
39023 /* hwrm_cfa_counter_qstats_input (size:320b/40B) */
39024 struct hwrm_cfa_counter_qstats_input {
39025         /* The HWRM command request type. */
39026         uint16_t        req_type;
39027         /*
39028          * The completion ring to send the completion event on. This should
39029          * be the NQ ID returned from the `nq_alloc` HWRM command.
39030          */
39031         uint16_t        cmpl_ring;
39032         /*
39033          * The sequence ID is used by the driver for tracking multiple
39034          * commands. This ID is treated as opaque data by the firmware and
39035          * the value is returned in the `hwrm_resp_hdr` upon completion.
39036          */
39037         uint16_t        seq_id;
39038         /*
39039          * The target ID of the command:
39040          * * 0x0-0xFFF8 - The function ID
39041          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39042          * * 0xFFFD - Reserved for user-space HWRM interface
39043          * * 0xFFFF - HWRM
39044          */
39045         uint16_t        target_id;
39046         /*
39047          * A physical address pointer pointing to a host buffer that the
39048          * command's response data will be written. This can be either a host
39049          * physical address (HPA) or a guest physical address (GPA) and must
39050          * point to a physically contiguous block of memory.
39051          */
39052         uint64_t        resp_addr;
39053         uint16_t        flags;
39054         /* Enumeration denoting the RX, TX type of the resource. */
39055         #define HWRM_CFA_COUNTER_QSTATS_INPUT_FLAGS_PATH     UINT32_C(0x1)
39056         /* Tx path. */
39057         #define HWRM_CFA_COUNTER_QSTATS_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)
39058         /* Rx path. */
39059         #define HWRM_CFA_COUNTER_QSTATS_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)
39060         #define HWRM_CFA_COUNTER_QSTATS_INPUT_FLAGS_PATH_LAST \
39061                 HWRM_CFA_COUNTER_QSTATS_INPUT_FLAGS_PATH_RX
39062         uint16_t        counter_type;
39063         uint16_t        input_flow_ctx_id;
39064         uint16_t        num_entries;
39065         uint16_t        delta_time_ms;
39066         uint16_t        meter_instance_id;
39067         uint16_t        mdc_ctx_id;
39068         uint8_t unused_0[2];
39069         uint64_t        expected_count;
39070 } __rte_packed;
39071
39072 /* hwrm_cfa_counter_qstats_output (size:128b/16B) */
39073 struct hwrm_cfa_counter_qstats_output {
39074         /* The specific error status for the command. */
39075         uint16_t        error_code;
39076         /* The HWRM command request type. */
39077         uint16_t        req_type;
39078         /* The sequence ID from the original command. */
39079         uint16_t        seq_id;
39080         /* The length of the response data in number of bytes. */
39081         uint16_t        resp_len;
39082         uint8_t unused_0[7];
39083         /*
39084          * This field is used in Output records to indicate that the output
39085          * is completely written to RAM. This field should be read as '1'
39086          * to indicate that the output has been completely written.
39087          * When writing a command completion or response to an internal processor,
39088          * the order of writes has to be such that this field is written last.
39089          */
39090         uint8_t valid;
39091 } __rte_packed;
39092
39093 /**********************
39094  * hwrm_cfa_eem_qcaps *
39095  **********************/
39096
39097
39098 /* hwrm_cfa_eem_qcaps_input (size:192b/24B) */
39099 struct hwrm_cfa_eem_qcaps_input {
39100         /* The HWRM command request type. */
39101         uint16_t        req_type;
39102         /*
39103          * The completion ring to send the completion event on. This should
39104          * be the NQ ID returned from the `nq_alloc` HWRM command.
39105          */
39106         uint16_t        cmpl_ring;
39107         /*
39108          * The sequence ID is used by the driver for tracking multiple
39109          * commands. This ID is treated as opaque data by the firmware and
39110          * the value is returned in the `hwrm_resp_hdr` upon completion.
39111          */
39112         uint16_t        seq_id;
39113         /*
39114          * The target ID of the command:
39115          * * 0x0-0xFFF8 - The function ID
39116          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39117          * * 0xFFFD - Reserved for user-space HWRM interface
39118          * * 0xFFFF - HWRM
39119          */
39120         uint16_t        target_id;
39121         /*
39122          * A physical address pointer pointing to a host buffer that the
39123          * command's response data will be written. This can be either a host
39124          * physical address (HPA) or a guest physical address (GPA) and must
39125          * point to a physically contiguous block of memory.
39126          */
39127         uint64_t        resp_addr;
39128         uint32_t        flags;
39129         /*
39130          * When set to 1, indicates the configuration will apply to TX flows
39131          * which are to be offloaded.
39132          * Note if this bit is set then the path_rx bit can't be set.
39133          */
39134         #define HWRM_CFA_EEM_QCAPS_INPUT_FLAGS_PATH_TX \
39135                 UINT32_C(0x1)
39136         /*
39137          * When set to 1, indicates the configuration will apply to RX flows
39138          * which are to be offloaded.
39139          * Note if this bit is set then the path_tx bit can't be set.
39140          */
39141         #define HWRM_CFA_EEM_QCAPS_INPUT_FLAGS_PATH_RX \
39142                 UINT32_C(0x2)
39143         /* When set to 1, all offloaded flows will be sent to EEM. */
39144         #define HWRM_CFA_EEM_QCAPS_INPUT_FLAGS_PREFERRED_OFFLOAD \
39145                 UINT32_C(0x4)
39146         uint32_t        unused_0;
39147 } __rte_packed;
39148
39149 /* hwrm_cfa_eem_qcaps_output (size:320b/40B) */
39150 struct hwrm_cfa_eem_qcaps_output {
39151         /* The specific error status for the command. */
39152         uint16_t        error_code;
39153         /* The HWRM command request type. */
39154         uint16_t        req_type;
39155         /* The sequence ID from the original command. */
39156         uint16_t        seq_id;
39157         /* The length of the response data in number of bytes. */
39158         uint16_t        resp_len;
39159         uint32_t        flags;
39160         /*
39161          * When set to 1, indicates the configuration will apply to TX flows
39162          * which are to be offloaded.
39163          * Note if this bit is set then the path_rx bit can't be set.
39164          */
39165         #define HWRM_CFA_EEM_QCAPS_OUTPUT_FLAGS_PATH_TX \
39166                 UINT32_C(0x1)
39167         /*
39168          * When set to 1, indicates the configuration will apply to RX flows
39169          * which are to be offloaded.
39170          * Note if this bit is set then the path_tx bit can't be set.
39171          */
39172         #define HWRM_CFA_EEM_QCAPS_OUTPUT_FLAGS_PATH_RX \
39173                 UINT32_C(0x2)
39174         /*
39175          * When set to 1, indicates the FW supports the Centralized
39176          * Memory Model. The concept designates one entity for the
39177          * memory allocation while all others ‘subscribe’ to it.
39178          */
39179         #define HWRM_CFA_EEM_QCAPS_OUTPUT_FLAGS_CENTRALIZED_MEMORY_MODEL_SUPPORTED \
39180                 UINT32_C(0x4)
39181         /*
39182          * When set to 1, indicates the FW supports the Detached
39183          * Centralized Memory Model. The memory is allocated and managed
39184          * as a separate entity. All PFs and VFs will be granted direct
39185          * or semi-direct access to the allocated memory while none of
39186          * which can interfere with the management of the memory.
39187          */
39188         #define HWRM_CFA_EEM_QCAPS_OUTPUT_FLAGS_DETACHED_CENTRALIZED_MEMORY_MODEL_SUPPORTED \
39189                 UINT32_C(0x8)
39190         uint32_t        unused_0;
39191         uint32_t        supported;
39192         /*
39193          * If set to 1, then EEM KEY0 table is supported using crc32 hash.
39194          * If set to 0, EEM KEY0 table is not supported.
39195          */
39196         #define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_KEY0_TABLE \
39197                 UINT32_C(0x1)
39198         /*
39199          * If set to 1, then EEM KEY1 table is supported using lookup3 hash.
39200          * If set to 0, EEM KEY1 table is not supported.
39201          */
39202         #define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_KEY1_TABLE \
39203                 UINT32_C(0x2)
39204         /*
39205          * If set to 1, then EEM External Record table is supported.
39206          * If set to 0, EEM External Record table is not supported.
39207          * (This table includes action record, EFC pointers, encap pointers)
39208          */
39209         #define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_EXTERNAL_RECORD_TABLE \
39210                 UINT32_C(0x4)
39211         /*
39212          * If set to 1, then EEM External Flow Counters table is supported.
39213          * If set to 0, EEM External Flow Counters table is not supported.
39214          */
39215         #define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_EXTERNAL_FLOW_COUNTERS_TABLE \
39216                 UINT32_C(0x8)
39217         /*
39218          * If set to 1, then FID table used for implicit flow flush is supported.
39219          * If set to 0, then FID table used for implicit flow flush is not supported.
39220          */
39221         #define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_FID_TABLE \
39222                 UINT32_C(0x10)
39223         /*
39224          * The maximum number of entries supported by EEM. When configuring the host memory
39225          * the number of numbers of entries that can supported are -
39226          *      32k, 64k 128k, 256k, 512k, 1M, 2M, 4M, 8M, 32M, 64M, 128M entries.
39227          * Any value that are not these values, the FW will round down to the closest support
39228          * number of entries.
39229          */
39230         uint32_t        max_entries_supported;
39231         /* The entry size in bytes of each entry in the EEM KEY0/KEY1 tables. */
39232         uint16_t        key_entry_size;
39233         /* The entry size in bytes of each entry in the EEM RECORD tables. */
39234         uint16_t        record_entry_size;
39235         /* The entry size in bytes of each entry in the EEM EFC tables. */
39236         uint16_t        efc_entry_size;
39237         /* The FID size in bytes of each entry in the EEM FID tables. */
39238         uint16_t        fid_entry_size;
39239         uint8_t unused_1[7];
39240         /*
39241          * This field is used in Output records to indicate that the output
39242          * is completely written to RAM. This field should be read as '1'
39243          * to indicate that the output has been completely written.
39244          * When writing a command completion or response to an internal processor,
39245          * the order of writes has to be such that this field is written last.
39246          */
39247         uint8_t valid;
39248 } __rte_packed;
39249
39250 /********************
39251  * hwrm_cfa_eem_cfg *
39252  ********************/
39253
39254
39255 /* hwrm_cfa_eem_cfg_input (size:384b/48B) */
39256 struct hwrm_cfa_eem_cfg_input {
39257         /* The HWRM command request type. */
39258         uint16_t        req_type;
39259         /*
39260          * The completion ring to send the completion event on. This should
39261          * be the NQ ID returned from the `nq_alloc` HWRM command.
39262          */
39263         uint16_t        cmpl_ring;
39264         /*
39265          * The sequence ID is used by the driver for tracking multiple
39266          * commands. This ID is treated as opaque data by the firmware and
39267          * the value is returned in the `hwrm_resp_hdr` upon completion.
39268          */
39269         uint16_t        seq_id;
39270         /*
39271          * The target ID of the command:
39272          * * 0x0-0xFFF8 - The function ID
39273          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39274          * * 0xFFFD - Reserved for user-space HWRM interface
39275          * * 0xFFFF - HWRM
39276          */
39277         uint16_t        target_id;
39278         /*
39279          * A physical address pointer pointing to a host buffer that the
39280          * command's response data will be written. This can be either a host
39281          * physical address (HPA) or a guest physical address (GPA) and must
39282          * point to a physically contiguous block of memory.
39283          */
39284         uint64_t        resp_addr;
39285         uint32_t        flags;
39286         /*
39287          * When set to 1, indicates the configuration will apply to TX flows
39288          * which are to be offloaded.
39289          * Note if this bit is set then the path_rx bit can't be set.
39290          */
39291         #define HWRM_CFA_EEM_CFG_INPUT_FLAGS_PATH_TX \
39292                 UINT32_C(0x1)
39293         /*
39294          * When set to 1, indicates the configuration will apply to RX flows
39295          * which are to be offloaded.
39296          * Note if this bit is set then the path_tx bit can't be set.
39297          */
39298         #define HWRM_CFA_EEM_CFG_INPUT_FLAGS_PATH_RX \
39299                 UINT32_C(0x2)
39300         /* When set to 1, all offloaded flows will be sent to EEM. */
39301         #define HWRM_CFA_EEM_CFG_INPUT_FLAGS_PREFERRED_OFFLOAD \
39302                 UINT32_C(0x4)
39303         /* When set to 1, secondary, 0 means primary. */
39304         #define HWRM_CFA_EEM_CFG_INPUT_FLAGS_SECONDARY_PF \
39305                 UINT32_C(0x8)
39306         /*
39307          * Group_id which used by Firmware to identify memory pools belonging
39308          * to certain group.
39309          */
39310         uint16_t        group_id;
39311         uint16_t        unused_0;
39312         /*
39313          * Configured EEM with the given number of entries. All the EEM tables KEY0, KEY1,
39314          * RECORD, EFC all have the same number of entries and all tables will be configured
39315          * using this value. Current minimum value is 32k. Current maximum value is 128M.
39316          */
39317         uint32_t        num_entries;
39318         uint32_t        unused_1;
39319         /* Configured EEM with the given context if for KEY0 table. */
39320         uint16_t        key0_ctx_id;
39321         /* Configured EEM with the given context if for KEY1 table. */
39322         uint16_t        key1_ctx_id;
39323         /* Configured EEM with the given context if for RECORD table. */
39324         uint16_t        record_ctx_id;
39325         /* Configured EEM with the given context if for EFC table. */
39326         uint16_t        efc_ctx_id;
39327         /* Configured EEM with the given context if for EFC table. */
39328         uint16_t        fid_ctx_id;
39329         uint16_t        unused_2;
39330         uint32_t        unused_3;
39331 } __rte_packed;
39332
39333 /* hwrm_cfa_eem_cfg_output (size:128b/16B) */
39334 struct hwrm_cfa_eem_cfg_output {
39335         /* The specific error status for the command. */
39336         uint16_t        error_code;
39337         /* The HWRM command request type. */
39338         uint16_t        req_type;
39339         /* The sequence ID from the original command. */
39340         uint16_t        seq_id;
39341         /* The length of the response data in number of bytes. */
39342         uint16_t        resp_len;
39343         uint8_t unused_0[7];
39344         /*
39345          * This field is used in Output records to indicate that the output
39346          * is completely written to RAM. This field should be read as '1'
39347          * to indicate that the output has been completely written.
39348          * When writing a command completion or response to an internal processor,
39349          * the order of writes has to be such that this field is written last.
39350          */
39351         uint8_t valid;
39352 } __rte_packed;
39353
39354 /*********************
39355  * hwrm_cfa_eem_qcfg *
39356  *********************/
39357
39358
39359 /* hwrm_cfa_eem_qcfg_input (size:192b/24B) */
39360 struct hwrm_cfa_eem_qcfg_input {
39361         /* The HWRM command request type. */
39362         uint16_t        req_type;
39363         /*
39364          * The completion ring to send the completion event on. This should
39365          * be the NQ ID returned from the `nq_alloc` HWRM command.
39366          */
39367         uint16_t        cmpl_ring;
39368         /*
39369          * The sequence ID is used by the driver for tracking multiple
39370          * commands. This ID is treated as opaque data by the firmware and
39371          * the value is returned in the `hwrm_resp_hdr` upon completion.
39372          */
39373         uint16_t        seq_id;
39374         /*
39375          * The target ID of the command:
39376          * * 0x0-0xFFF8 - The function ID
39377          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39378          * * 0xFFFD - Reserved for user-space HWRM interface
39379          * * 0xFFFF - HWRM
39380          */
39381         uint16_t        target_id;
39382         /*
39383          * A physical address pointer pointing to a host buffer that the
39384          * command's response data will be written. This can be either a host
39385          * physical address (HPA) or a guest physical address (GPA) and must
39386          * point to a physically contiguous block of memory.
39387          */
39388         uint64_t        resp_addr;
39389         uint32_t        flags;
39390         /* When set to 1, indicates the configuration is the TX flow. */
39391         #define HWRM_CFA_EEM_QCFG_INPUT_FLAGS_PATH_TX     UINT32_C(0x1)
39392         /* When set to 1, indicates the configuration is the RX flow. */
39393         #define HWRM_CFA_EEM_QCFG_INPUT_FLAGS_PATH_RX     UINT32_C(0x2)
39394         uint32_t        unused_0;
39395 } __rte_packed;
39396
39397 /* hwrm_cfa_eem_qcfg_output (size:256b/32B) */
39398 struct hwrm_cfa_eem_qcfg_output {
39399         /* The specific error status for the command. */
39400         uint16_t        error_code;
39401         /* The HWRM command request type. */
39402         uint16_t        req_type;
39403         /* The sequence ID from the original command. */
39404         uint16_t        seq_id;
39405         /* The length of the response data in number of bytes. */
39406         uint16_t        resp_len;
39407         uint32_t        flags;
39408         /* When set to 1, indicates the configuration is the TX flow. */
39409         #define HWRM_CFA_EEM_QCFG_OUTPUT_FLAGS_PATH_TX \
39410                 UINT32_C(0x1)
39411         /* When set to 1, indicates the configuration is the RX flow. */
39412         #define HWRM_CFA_EEM_QCFG_OUTPUT_FLAGS_PATH_RX \
39413                 UINT32_C(0x2)
39414         /* When set to 1, all offloaded flows will be sent to EEM. */
39415         #define HWRM_CFA_EEM_QCFG_OUTPUT_FLAGS_PREFERRED_OFFLOAD \
39416                 UINT32_C(0x4)
39417         /* The number of entries the FW has configured for EEM. */
39418         uint32_t        num_entries;
39419         /* Configured EEM with the given context if for KEY0 table. */
39420         uint16_t        key0_ctx_id;
39421         /* Configured EEM with the given context if for KEY1 table. */
39422         uint16_t        key1_ctx_id;
39423         /* Configured EEM with the given context if for RECORD table. */
39424         uint16_t        record_ctx_id;
39425         /* Configured EEM with the given context if for EFC table. */
39426         uint16_t        efc_ctx_id;
39427         /* Configured EEM with the given context if for EFC table. */
39428         uint16_t        fid_ctx_id;
39429         uint8_t unused_2[5];
39430         /*
39431          * This field is used in Output records to indicate that the output
39432          * is completely written to RAM. This field should be read as '1'
39433          * to indicate that the output has been completely written.
39434          * When writing a command completion or response to an internal processor,
39435          * the order of writes has to be such that this field is written last.
39436          */
39437         uint8_t valid;
39438 } __rte_packed;
39439
39440 /*******************
39441  * hwrm_cfa_eem_op *
39442  *******************/
39443
39444
39445 /* hwrm_cfa_eem_op_input (size:192b/24B) */
39446 struct hwrm_cfa_eem_op_input {
39447         /* The HWRM command request type. */
39448         uint16_t        req_type;
39449         /*
39450          * The completion ring to send the completion event on. This should
39451          * be the NQ ID returned from the `nq_alloc` HWRM command.
39452          */
39453         uint16_t        cmpl_ring;
39454         /*
39455          * The sequence ID is used by the driver for tracking multiple
39456          * commands. This ID is treated as opaque data by the firmware and
39457          * the value is returned in the `hwrm_resp_hdr` upon completion.
39458          */
39459         uint16_t        seq_id;
39460         /*
39461          * The target ID of the command:
39462          * * 0x0-0xFFF8 - The function ID
39463          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39464          * * 0xFFFD - Reserved for user-space HWRM interface
39465          * * 0xFFFF - HWRM
39466          */
39467         uint16_t        target_id;
39468         /*
39469          * A physical address pointer pointing to a host buffer that the
39470          * command's response data will be written. This can be either a host
39471          * physical address (HPA) or a guest physical address (GPA) and must
39472          * point to a physically contiguous block of memory.
39473          */
39474         uint64_t        resp_addr;
39475         uint32_t        flags;
39476         /*
39477          * When set to 1, indicates the host memory which is passed will be
39478          * used for the TX flow offload function specified in fid.
39479          * Note if this bit is set then the path_rx bit can't be set.
39480          */
39481         #define HWRM_CFA_EEM_OP_INPUT_FLAGS_PATH_TX     UINT32_C(0x1)
39482         /*
39483          * When set to 1, indicates the host memory which is passed will be
39484          * used for the RX flow offload function specified in fid.
39485          * Note if this bit is set then the path_tx bit can't be set.
39486          */
39487         #define HWRM_CFA_EEM_OP_INPUT_FLAGS_PATH_RX     UINT32_C(0x2)
39488         uint16_t        unused_0;
39489         /* The number of EEM key table entries to be configured. */
39490         uint16_t        op;
39491         /* This value is reserved and should not be used. */
39492         #define HWRM_CFA_EEM_OP_INPUT_OP_RESERVED    UINT32_C(0x0)
39493         /*
39494          * To properly stop EEM and ensure there are no DMA's, the caller
39495          * must disable EEM for the given PF, using this call. This will
39496          * safely disable EEM and ensure that all DMA'ed to the
39497          * keys/records/efc have been completed.
39498          */
39499         #define HWRM_CFA_EEM_OP_INPUT_OP_EEM_DISABLE UINT32_C(0x1)
39500         /*
39501          * Once the EEM host memory has been configured, EEM options have
39502          * been configured. Then the caller should enable EEM for the given
39503          * PF. Note once this call has been made, then the EEM mechanism
39504          * will be active and DMA's will occur as packets are processed.
39505          */
39506         #define HWRM_CFA_EEM_OP_INPUT_OP_EEM_ENABLE  UINT32_C(0x2)
39507         /*
39508          * Clear EEM settings for the given PF so that the register values
39509          * are reset back to there initial state.
39510          */
39511         #define HWRM_CFA_EEM_OP_INPUT_OP_EEM_CLEANUP UINT32_C(0x3)
39512         #define HWRM_CFA_EEM_OP_INPUT_OP_LAST \
39513                 HWRM_CFA_EEM_OP_INPUT_OP_EEM_CLEANUP
39514 } __rte_packed;
39515
39516 /* hwrm_cfa_eem_op_output (size:128b/16B) */
39517 struct hwrm_cfa_eem_op_output {
39518         /* The specific error status for the command. */
39519         uint16_t        error_code;
39520         /* The HWRM command request type. */
39521         uint16_t        req_type;
39522         /* The sequence ID from the original command. */
39523         uint16_t        seq_id;
39524         /* The length of the response data in number of bytes. */
39525         uint16_t        resp_len;
39526         uint8_t unused_0[7];
39527         /*
39528          * This field is used in Output records to indicate that the output
39529          * is completely written to RAM. This field should be read as '1'
39530          * to indicate that the output has been completely written.
39531          * When writing a command completion or response to an internal processor,
39532          * the order of writes has to be such that this field is written last.
39533          */
39534         uint8_t valid;
39535 } __rte_packed;
39536
39537 /********************************
39538  * hwrm_cfa_adv_flow_mgnt_qcaps *
39539  ********************************/
39540
39541
39542 /* hwrm_cfa_adv_flow_mgnt_qcaps_input (size:256b/32B) */
39543 struct hwrm_cfa_adv_flow_mgnt_qcaps_input {
39544         /* The HWRM command request type. */
39545         uint16_t        req_type;
39546         /*
39547          * The completion ring to send the completion event on. This should
39548          * be the NQ ID returned from the `nq_alloc` HWRM command.
39549          */
39550         uint16_t        cmpl_ring;
39551         /*
39552          * The sequence ID is used by the driver for tracking multiple
39553          * commands. This ID is treated as opaque data by the firmware and
39554          * the value is returned in the `hwrm_resp_hdr` upon completion.
39555          */
39556         uint16_t        seq_id;
39557         /*
39558          * The target ID of the command:
39559          * * 0x0-0xFFF8 - The function ID
39560          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39561          * * 0xFFFD - Reserved for user-space HWRM interface
39562          * * 0xFFFF - HWRM
39563          */
39564         uint16_t        target_id;
39565         /*
39566          * A physical address pointer pointing to a host buffer that the
39567          * command's response data will be written. This can be either a host
39568          * physical address (HPA) or a guest physical address (GPA) and must
39569          * point to a physically contiguous block of memory.
39570          */
39571         uint64_t        resp_addr;
39572         uint32_t        unused_0[4];
39573 } __rte_packed;
39574
39575 /* hwrm_cfa_adv_flow_mgnt_qcaps_output (size:128b/16B) */
39576 struct hwrm_cfa_adv_flow_mgnt_qcaps_output {
39577         /* The specific error status for the command. */
39578         uint16_t        error_code;
39579         /* The HWRM command request type. */
39580         uint16_t        req_type;
39581         /* The sequence ID from the original command. */
39582         uint16_t        seq_id;
39583         /* The length of the response data in number of bytes. */
39584         uint16_t        resp_len;
39585         uint32_t        flags;
39586         /*
39587          * Value of 1 to indicate firmware support 16-bit flow handle.
39588          * Value of 0 to indicate firmware not support 16-bit flow handle.
39589          */
39590         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_HND_16BIT_SUPPORTED \
39591                 UINT32_C(0x1)
39592         /*
39593          * Value of 1 to indicate firmware support 64-bit flow handle.
39594          * Value of 0 to indicate firmware not support 64-bit flow handle.
39595          */
39596         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_HND_64BIT_SUPPORTED \
39597                 UINT32_C(0x2)
39598         /*
39599          * Value of 1 to indicate firmware support flow batch delete operation through
39600          * HWRM_CFA_FLOW_FLUSH command.
39601          * Value of 0 to indicate that the firmware does not support flow batch delete
39602          * operation.
39603          */
39604         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_BATCH_DELETE_SUPPORTED \
39605                 UINT32_C(0x4)
39606         /*
39607          * Value of 1 to indicate that the firmware support flow reset all operation through
39608          * HWRM_CFA_FLOW_FLUSH command.
39609          * Value of 0 indicates firmware does not support flow reset all operation.
39610          */
39611         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_RESET_ALL_SUPPORTED \
39612                 UINT32_C(0x8)
39613         /*
39614          * Value of 1 to indicate that firmware supports use of FID as dest_id in
39615          * HWRM_CFA_NTUPLE_ALLOC/CFG commands.
39616          * Value of 0 indicates firmware does not support use of FID as dest_id.
39617          */
39618         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_NTUPLE_FLOW_DEST_FUNC_SUPPORTED \
39619                 UINT32_C(0x10)
39620         /*
39621          * Value of 1 to indicate that firmware supports TX EEM flows.
39622          * Value of 0 indicates firmware does not support TX EEM flows.
39623          */
39624         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_TX_EEM_FLOW_SUPPORTED \
39625                 UINT32_C(0x20)
39626         /*
39627          * Value of 1 to indicate that firmware supports RX EEM flows.
39628          * Value of 0 indicates firmware does not support RX EEM flows.
39629          */
39630         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_RX_EEM_FLOW_SUPPORTED \
39631                 UINT32_C(0x40)
39632         /*
39633          * Value of 1 to indicate that firmware supports the dynamic allocation of an
39634          * on-chip flow counter which can be used for EEM flows.
39635          * Value of 0 indicates firmware does not support the dynamic allocation of an
39636          * on-chip flow counter.
39637          */
39638         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_COUNTER_ALLOC_SUPPORTED \
39639                 UINT32_C(0x80)
39640         /*
39641          * Value of 1 to indicate that firmware supports setting of
39642          * rfs_ring_tbl_idx in HWRM_CFA_NTUPLE_ALLOC command.
39643          * Value of 0 indicates firmware does not support rfs_ring_tbl_idx.
39644          */
39645         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_RFS_RING_TBL_IDX_SUPPORTED \
39646                 UINT32_C(0x100)
39647         /*
39648          * Value of 1 to indicate that firmware supports untagged matching
39649          * criteria on HWRM_CFA_L2_FILTER_ALLOC command. Value of 0
39650          * indicates firmware does not support untagged matching.
39651          */
39652         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_UNTAGGED_VLAN_SUPPORTED \
39653                 UINT32_C(0x200)
39654         /*
39655          * Value of 1 to indicate that firmware supports XDP filter. Value
39656          * of 0 indicates firmware does not support XDP filter.
39657          */
39658         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_XDP_SUPPORTED \
39659                 UINT32_C(0x400)
39660         /*
39661          * Value of 1 to indicate that the firmware support L2 header source
39662          * fields matching criteria on HWRM_CFA_L2_FILTER_ALLOC command.
39663          * Value of 0 indicates firmware does not support L2 header source
39664          * fields matching.
39665          */
39666         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_L2_HEADER_SOURCE_FIELDS_SUPPORTED \
39667                 UINT32_C(0x800)
39668         /*
39669          * If set to 1, firmware is capable of supporting ARP ethertype as
39670          * matching criteria for HWRM_CFA_NTUPLE_FILTER_ALLOC command on the
39671          * RX direction. By default, this flag should be 0 for older version
39672          * of firmware.
39673          */
39674         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_NTUPLE_FLOW_RX_ARP_SUPPORTED \
39675                 UINT32_C(0x1000)
39676         /*
39677          * Value of 1 to indicate that firmware supports setting of
39678          * rfs_ring_tbl_idx in dst_id field of the HWRM_CFA_NTUPLE_ALLOC
39679          * command. Value of 0 indicates firmware does not support
39680          * rfs_ring_tbl_idx in dst_id field.
39681          */
39682         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_RFS_RING_TBL_IDX_V2_SUPPORTED \
39683                 UINT32_C(0x2000)
39684         /*
39685          * If set to 1, firmware is capable of supporting IPv4/IPv6 as
39686          * ethertype in HWRM_CFA_NTUPLE_FILTER_ALLOC command on the RX
39687          * direction. By default, this flag should be 0 for older version
39688          * of firmware.
39689          */
39690         #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_NTUPLE_FLOW_RX_ETHERTYPE_IP_SUPPORTED \
39691                 UINT32_C(0x4000)
39692         uint8_t unused_0[3];
39693         /*
39694          * This field is used in Output records to indicate that the output
39695          * is completely written to RAM. This field should be read as '1'
39696          * to indicate that the output has been completely written.
39697          * When writing a command completion or response to an internal processor,
39698          * the order of writes has to be such that this field is written last.
39699          */
39700         uint8_t valid;
39701 } __rte_packed;
39702
39703 /******************
39704  * hwrm_cfa_tflib *
39705  ******************/
39706
39707
39708 /* hwrm_cfa_tflib_input (size:1024b/128B) */
39709 struct hwrm_cfa_tflib_input {
39710         /* The HWRM command request type. */
39711         uint16_t        req_type;
39712         /*
39713          * The completion ring to send the completion event on. This should
39714          * be the NQ ID returned from the `nq_alloc` HWRM command.
39715          */
39716         uint16_t        cmpl_ring;
39717         /*
39718          * The sequence ID is used by the driver for tracking multiple
39719          * commands. This ID is treated as opaque data by the firmware and
39720          * the value is returned in the `hwrm_resp_hdr` upon completion.
39721          */
39722         uint16_t        seq_id;
39723         /*
39724          * The target ID of the command:
39725          * * 0x0-0xFFF8 - The function ID
39726          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39727          * * 0xFFFD - Reserved for user-space HWRM interface
39728          * * 0xFFFF - HWRM
39729          */
39730         uint16_t        target_id;
39731         /*
39732          * A physical address pointer pointing to a host buffer that the
39733          * command's response data will be written. This can be either a host
39734          * physical address (HPA) or a guest physical address (GPA) and must
39735          * point to a physically contiguous block of memory.
39736          */
39737         uint64_t        resp_addr;
39738         /* TFLIB message type. */
39739         uint16_t        tf_type;
39740         /* TFLIB message subtype. */
39741         uint16_t        tf_subtype;
39742         /* unused. */
39743         uint8_t unused0[4];
39744         /* TFLIB request data. */
39745         uint32_t        tf_req[26];
39746 } __rte_packed;
39747
39748 /* hwrm_cfa_tflib_output (size:5632b/704B) */
39749 struct hwrm_cfa_tflib_output {
39750         /* The specific error status for the command. */
39751         uint16_t        error_code;
39752         /* The HWRM command request type. */
39753         uint16_t        req_type;
39754         /* The sequence ID from the original command. */
39755         uint16_t        seq_id;
39756         /* The length of the response data in number of bytes. */
39757         uint16_t        resp_len;
39758         /* TFLIB message type. */
39759         uint16_t        tf_type;
39760         /* TFLIB message subtype. */
39761         uint16_t        tf_subtype;
39762         /* TFLIB response code */
39763         uint32_t        tf_resp_code;
39764         /* TFLIB response data. */
39765         uint32_t        tf_resp[170];
39766         /* unused. */
39767         uint8_t unused1[7];
39768         /*
39769          * This field is used in Output records to indicate that the output
39770          * is completely written to RAM. This field should be read as '1'
39771          * to indicate that the output has been completely written.
39772          * When writing a command completion or response to an internal processor,
39773          * the order of writes has to be such that this field is written last.
39774          */
39775         uint8_t valid;
39776 } __rte_packed;
39777
39778 /***********
39779  * hwrm_tf *
39780  ***********/
39781
39782
39783 /* hwrm_tf_input (size:1024b/128B) */
39784 struct hwrm_tf_input {
39785         /* The HWRM command request type. */
39786         uint16_t        req_type;
39787         /*
39788          * The completion ring to send the completion event on. This should
39789          * be the NQ ID returned from the `nq_alloc` HWRM command.
39790          */
39791         uint16_t        cmpl_ring;
39792         /*
39793          * The sequence ID is used by the driver for tracking multiple
39794          * commands. This ID is treated as opaque data by the firmware and
39795          * the value is returned in the `hwrm_resp_hdr` upon completion.
39796          */
39797         uint16_t        seq_id;
39798         /*
39799          * The target ID of the command:
39800          * * 0x0-0xFFF8 - The function ID
39801          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39802          * * 0xFFFD - Reserved for user-space HWRM interface
39803          * * 0xFFFF - HWRM
39804          */
39805         uint16_t        target_id;
39806         /*
39807          * A physical address pointer pointing to a host buffer that the
39808          * command's response data will be written. This can be either a host
39809          * physical address (HPA) or a guest physical address (GPA) and must
39810          * point to a physically contiguous block of memory.
39811          */
39812         uint64_t        resp_addr;
39813         /* TF message type. */
39814         uint16_t        type;
39815         /* TF message subtype. */
39816         uint16_t        subtype;
39817         /* unused. */
39818         uint8_t unused0[4];
39819         /* TF request data. */
39820         uint32_t        req[26];
39821 } __rte_packed;
39822
39823 /* hwrm_tf_output (size:5632b/704B) */
39824 struct hwrm_tf_output {
39825         /* The specific error status for the command. */
39826         uint16_t        error_code;
39827         /* The HWRM command request type. */
39828         uint16_t        req_type;
39829         /* The sequence ID from the original command. */
39830         uint16_t        seq_id;
39831         /* The length of the response data in number of bytes. */
39832         uint16_t        resp_len;
39833         /* TF message type. */
39834         uint16_t        type;
39835         /* TF message subtype. */
39836         uint16_t        subtype;
39837         /* TF response code */
39838         uint32_t        resp_code;
39839         /* TF response data. */
39840         uint32_t        resp[170];
39841         /* unused. */
39842         uint8_t unused1[7];
39843         /*
39844          * This field is used in Output records to indicate that the
39845          * output is completely written to RAM. This field should be
39846          * read as '1' to indicate that the output has been
39847          * completely written.  When writing a command completion or
39848          * response to an internal processor, the order of writes has
39849          * to be such that this field is written last.
39850          */
39851         uint8_t valid;
39852 } __rte_packed;
39853
39854 /***********************
39855  * hwrm_tf_version_get *
39856  ***********************/
39857
39858
39859 /* hwrm_tf_version_get_input (size:128b/16B) */
39860 struct hwrm_tf_version_get_input {
39861         /* The HWRM command request type. */
39862         uint16_t        req_type;
39863         /*
39864          * The completion ring to send the completion event on. This should
39865          * be the NQ ID returned from the `nq_alloc` HWRM command.
39866          */
39867         uint16_t        cmpl_ring;
39868         /*
39869          * The sequence ID is used by the driver for tracking multiple
39870          * commands. This ID is treated as opaque data by the firmware and
39871          * the value is returned in the `hwrm_resp_hdr` upon completion.
39872          */
39873         uint16_t        seq_id;
39874         /*
39875          * The target ID of the command:
39876          * * 0x0-0xFFF8 - The function ID
39877          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39878          * * 0xFFFD - Reserved for user-space HWRM interface
39879          * * 0xFFFF - HWRM
39880          */
39881         uint16_t        target_id;
39882         /*
39883          * A physical address pointer pointing to a host buffer that the
39884          * command's response data will be written. This can be either a host
39885          * physical address (HPA) or a guest physical address (GPA) and must
39886          * point to a physically contiguous block of memory.
39887          */
39888         uint64_t        resp_addr;
39889 } __rte_packed;
39890
39891 /* hwrm_tf_version_get_output (size:128b/16B) */
39892 struct hwrm_tf_version_get_output {
39893         /* The specific error status for the command. */
39894         uint16_t        error_code;
39895         /* The HWRM command request type. */
39896         uint16_t        req_type;
39897         /* The sequence ID from the original command. */
39898         uint16_t        seq_id;
39899         /* The length of the response data in number of bytes. */
39900         uint16_t        resp_len;
39901         /* Version Major number. */
39902         uint8_t major;
39903         /* Version Minor number. */
39904         uint8_t minor;
39905         /* Version Update number. */
39906         uint8_t update;
39907         /* unused. */
39908         uint8_t unused0[4];
39909         /*
39910          * This field is used in Output records to indicate that the output
39911          * is completely written to RAM. This field should be read as '1'
39912          * to indicate that the output has been completely written.
39913          * When writing a command completion or response to an internal
39914          * processor, the order of writes has to be such that this field is
39915          * written last.
39916          */
39917         uint8_t valid;
39918 } __rte_packed;
39919
39920 /************************
39921  * hwrm_tf_session_open *
39922  ************************/
39923
39924
39925 /* hwrm_tf_session_open_input (size:640b/80B) */
39926 struct hwrm_tf_session_open_input {
39927         /* The HWRM command request type. */
39928         uint16_t        req_type;
39929         /*
39930          * The completion ring to send the completion event on. This should
39931          * be the NQ ID returned from the `nq_alloc` HWRM command.
39932          */
39933         uint16_t        cmpl_ring;
39934         /*
39935          * The sequence ID is used by the driver for tracking multiple
39936          * commands. This ID is treated as opaque data by the firmware and
39937          * the value is returned in the `hwrm_resp_hdr` upon completion.
39938          */
39939         uint16_t        seq_id;
39940         /*
39941          * The target ID of the command:
39942          * * 0x0-0xFFF8 - The function ID
39943          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
39944          * * 0xFFFD - Reserved for user-space HWRM interface
39945          * * 0xFFFF - HWRM
39946          */
39947         uint16_t        target_id;
39948         /*
39949          * A physical address pointer pointing to a host buffer that the
39950          * command's response data will be written. This can be either a host
39951          * physical address (HPA) or a guest physical address (GPA) and must
39952          * point to a physically contiguous block of memory.
39953          */
39954         uint64_t        resp_addr;
39955         /* Name of the session. */
39956         uint8_t session_name[64];
39957 } __rte_packed;
39958
39959 /* hwrm_tf_session_open_output (size:192b/24B) */
39960 struct hwrm_tf_session_open_output {
39961         /* The specific error status for the command. */
39962         uint16_t        error_code;
39963         /* The HWRM command request type. */
39964         uint16_t        req_type;
39965         /* The sequence ID from the original command. */
39966         uint16_t        seq_id;
39967         /* The length of the response data in number of bytes. */
39968         uint16_t        resp_len;
39969         /*
39970          * Unique session identifier for the session created by the
39971          * firmware.
39972          */
39973         uint32_t        fw_session_id;
39974         /*
39975          * Unique session client identifier for the first client on
39976          * the newly created session.
39977          */
39978         uint32_t        fw_session_client_id;
39979         /* unused. */
39980         uint32_t        unused0;
39981         /* unused. */
39982         uint8_t unused1[3];
39983         /*
39984          * This field is used in Output records to indicate that the output
39985          * is completely written to RAM. This field should be read as '1'
39986          * to indicate that the output has been completely written.
39987          * When writing a command completion or response to an internal
39988          * processor, the order of writes has to be such that this field is
39989          * written last.
39990          */
39991         uint8_t valid;
39992 } __rte_packed;
39993
39994 /**************************
39995  * hwrm_tf_session_attach *
39996  **************************/
39997
39998
39999 /* hwrm_tf_session_attach_input (size:704b/88B) */
40000 struct hwrm_tf_session_attach_input {
40001         /* The HWRM command request type. */
40002         uint16_t        req_type;
40003         /*
40004          * The completion ring to send the completion event on. This should
40005          * be the NQ ID returned from the `nq_alloc` HWRM command.
40006          */
40007         uint16_t        cmpl_ring;
40008         /*
40009          * The sequence ID is used by the driver for tracking multiple
40010          * commands. This ID is treated as opaque data by the firmware and
40011          * the value is returned in the `hwrm_resp_hdr` upon completion.
40012          */
40013         uint16_t        seq_id;
40014         /*
40015          * The target ID of the command:
40016          * * 0x0-0xFFF8 - The function ID
40017          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40018          * * 0xFFFD - Reserved for user-space HWRM interface
40019          * * 0xFFFF - HWRM
40020          */
40021         uint16_t        target_id;
40022         /*
40023          * A physical address pointer pointing to a host buffer that the
40024          * command's response data will be written. This can be either a host
40025          * physical address (HPA) or a guest physical address (GPA) and must
40026          * point to a physically contiguous block of memory.
40027          */
40028         uint64_t        resp_addr;
40029         /*
40030          * Unique session identifier for the session that the attach
40031          * request want to attach to. This value originates from the
40032          * shared session memory that the attach request opened by
40033          * way of the 'attach name' that was passed in to the core
40034          * attach API.
40035          * The fw_session_id of the attach session includes PCIe bus
40036          * info to distinguish the PF and session info to identify
40037          * the associated TruFlow session.
40038          */
40039         uint32_t        attach_fw_session_id;
40040         /* unused. */
40041         uint32_t        unused0;
40042         /* Name of the session it self. */
40043         uint8_t session_name[64];
40044 } __rte_packed;
40045
40046 /* hwrm_tf_session_attach_output (size:128b/16B) */
40047 struct hwrm_tf_session_attach_output {
40048         /* The specific error status for the command. */
40049         uint16_t        error_code;
40050         /* The HWRM command request type. */
40051         uint16_t        req_type;
40052         /* The sequence ID from the original command. */
40053         uint16_t        seq_id;
40054         /* The length of the response data in number of bytes. */
40055         uint16_t        resp_len;
40056         /*
40057          * Unique session identifier for the session created by the
40058          * firmware. It includes PCIe bus info to distinguish the PF
40059          * and session info to identify the associated TruFlow
40060          * session. This fw_session_id is unique to the attach
40061          * request.
40062          */
40063         uint32_t        fw_session_id;
40064         /* unused. */
40065         uint8_t unused0[3];
40066         /*
40067          * This field is used in Output records to indicate that the output
40068          * is completely written to RAM. This field should be read as '1'
40069          * to indicate that the output has been completely written.
40070          * When writing a command completion or response to an internal
40071          * processor, the order of writes has to be such that this field is
40072          * written last.
40073          */
40074         uint8_t valid;
40075 } __rte_packed;
40076
40077 /****************************
40078  * hwrm_tf_session_register *
40079  ****************************/
40080
40081
40082 /* hwrm_tf_session_register_input (size:704b/88B) */
40083 struct hwrm_tf_session_register_input {
40084         /* The HWRM command request type. */
40085         uint16_t        req_type;
40086         /*
40087          * The completion ring to send the completion event on. This should
40088          * be the NQ ID returned from the `nq_alloc` HWRM command.
40089          */
40090         uint16_t        cmpl_ring;
40091         /*
40092          * The sequence ID is used by the driver for tracking multiple
40093          * commands. This ID is treated as opaque data by the firmware and
40094          * the value is returned in the `hwrm_resp_hdr` upon completion.
40095          */
40096         uint16_t        seq_id;
40097         /*
40098          * The target ID of the command:
40099          * * 0x0-0xFFF8 - The function ID
40100          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40101          * * 0xFFFD - Reserved for user-space HWRM interface
40102          * * 0xFFFF - HWRM
40103          */
40104         uint16_t        target_id;
40105         /*
40106          * A physical address pointer pointing to a host buffer that the
40107          * command's response data will be written. This can be either a host
40108          * physical address (HPA) or a guest physical address (GPA) and must
40109          * point to a physically contiguous block of memory.
40110          */
40111         uint64_t        resp_addr;
40112         /*
40113          * Unique session identifier for the session that the
40114          * register request want to create a new client on. This
40115          * value originates from the first open request.
40116          * The fw_session_id of the attach session includes PCIe bus
40117          * info to distinguish the PF and session info to identify
40118          * the associated TruFlow session.
40119          */
40120         uint32_t        fw_session_id;
40121         /* unused. */
40122         uint32_t        unused0;
40123         /* Name of the session client. */
40124         uint8_t session_client_name[64];
40125 } __rte_packed;
40126
40127 /* hwrm_tf_session_register_output (size:128b/16B) */
40128 struct hwrm_tf_session_register_output {
40129         /* The specific error status for the command. */
40130         uint16_t        error_code;
40131         /* The HWRM command request type. */
40132         uint16_t        req_type;
40133         /* The sequence ID from the original command. */
40134         uint16_t        seq_id;
40135         /* The length of the response data in number of bytes. */
40136         uint16_t        resp_len;
40137         /*
40138          * Unique session client identifier for the session created
40139          * by the firmware. It includes the session the client it
40140          * attached to and session client info.
40141          */
40142         uint32_t        fw_session_client_id;
40143         /* unused. */
40144         uint8_t unused0[3];
40145         /*
40146          * This field is used in Output records to indicate that the output
40147          * is completely written to RAM. This field should be read as '1'
40148          * to indicate that the output has been completely written.
40149          * When writing a command completion or response to an internal
40150          * processor, the order of writes has to be such that this field is
40151          * written last.
40152          */
40153         uint8_t valid;
40154 } __rte_packed;
40155
40156 /******************************
40157  * hwrm_tf_session_unregister *
40158  ******************************/
40159
40160
40161 /* hwrm_tf_session_unregister_input (size:192b/24B) */
40162 struct hwrm_tf_session_unregister_input {
40163         /* The HWRM command request type. */
40164         uint16_t        req_type;
40165         /*
40166          * The completion ring to send the completion event on. This should
40167          * be the NQ ID returned from the `nq_alloc` HWRM command.
40168          */
40169         uint16_t        cmpl_ring;
40170         /*
40171          * The sequence ID is used by the driver for tracking multiple
40172          * commands. This ID is treated as opaque data by the firmware and
40173          * the value is returned in the `hwrm_resp_hdr` upon completion.
40174          */
40175         uint16_t        seq_id;
40176         /*
40177          * The target ID of the command:
40178          * * 0x0-0xFFF8 - The function ID
40179          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40180          * * 0xFFFD - Reserved for user-space HWRM interface
40181          * * 0xFFFF - HWRM
40182          */
40183         uint16_t        target_id;
40184         /*
40185          * A physical address pointer pointing to a host buffer that the
40186          * command's response data will be written. This can be either a host
40187          * physical address (HPA) or a guest physical address (GPA) and must
40188          * point to a physically contiguous block of memory.
40189          */
40190         uint64_t        resp_addr;
40191         /*
40192          * Unique session identifier for the session that the
40193          * unregister request want to close a session client on.
40194          */
40195         uint32_t        fw_session_id;
40196         /*
40197          * Unique session client identifier for the session that the
40198          * unregister request want to close.
40199          */
40200         uint32_t        fw_session_client_id;
40201 } __rte_packed;
40202
40203 /* hwrm_tf_session_unregister_output (size:128b/16B) */
40204 struct hwrm_tf_session_unregister_output {
40205         /* The specific error status for the command. */
40206         uint16_t        error_code;
40207         /* The HWRM command request type. */
40208         uint16_t        req_type;
40209         /* The sequence ID from the original command. */
40210         uint16_t        seq_id;
40211         /* The length of the response data in number of bytes. */
40212         uint16_t        resp_len;
40213         /* unused. */
40214         uint8_t unused0[7];
40215         /*
40216          * This field is used in Output records to indicate that the output
40217          * is completely written to RAM. This field should be read as '1'
40218          * to indicate that the output has been completely written.
40219          * When writing a command completion or response to an internal
40220          * processor, the order of writes has to be such that this field is
40221          * written last.
40222          */
40223         uint8_t valid;
40224 } __rte_packed;
40225
40226 /*************************
40227  * hwrm_tf_session_close *
40228  *************************/
40229
40230
40231 /* hwrm_tf_session_close_input (size:192b/24B) */
40232 struct hwrm_tf_session_close_input {
40233         /* The HWRM command request type. */
40234         uint16_t        req_type;
40235         /*
40236          * The completion ring to send the completion event on. This should
40237          * be the NQ ID returned from the `nq_alloc` HWRM command.
40238          */
40239         uint16_t        cmpl_ring;
40240         /*
40241          * The sequence ID is used by the driver for tracking multiple
40242          * commands. This ID is treated as opaque data by the firmware and
40243          * the value is returned in the `hwrm_resp_hdr` upon completion.
40244          */
40245         uint16_t        seq_id;
40246         /*
40247          * The target ID of the command:
40248          * * 0x0-0xFFF8 - The function ID
40249          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40250          * * 0xFFFD - Reserved for user-space HWRM interface
40251          * * 0xFFFF - HWRM
40252          */
40253         uint16_t        target_id;
40254         /*
40255          * A physical address pointer pointing to a host buffer that the
40256          * command's response data will be written. This can be either a host
40257          * physical address (HPA) or a guest physical address (GPA) and must
40258          * point to a physically contiguous block of memory.
40259          */
40260         uint64_t        resp_addr;
40261         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
40262         uint32_t        fw_session_id;
40263         /* unused. */
40264         uint8_t unused0[4];
40265 } __rte_packed;
40266
40267 /* hwrm_tf_session_close_output (size:128b/16B) */
40268 struct hwrm_tf_session_close_output {
40269         /* The specific error status for the command. */
40270         uint16_t        error_code;
40271         /* The HWRM command request type. */
40272         uint16_t        req_type;
40273         /* The sequence ID from the original command. */
40274         uint16_t        seq_id;
40275         /* The length of the response data in number of bytes. */
40276         uint16_t        resp_len;
40277         /* unused. */
40278         uint8_t unused0[7];
40279         /*
40280          * This field is used in Output records to indicate that the output
40281          * is completely written to RAM. This field should be read as '1'
40282          * to indicate that the output has been completely written.
40283          * When writing a command completion or response to an internal
40284          * processor, the order of writes has to be such that this field
40285          * is written last.
40286          */
40287         uint8_t valid;
40288 } __rte_packed;
40289
40290 /************************
40291  * hwrm_tf_session_qcfg *
40292  ************************/
40293
40294
40295 /* hwrm_tf_session_qcfg_input (size:192b/24B) */
40296 struct hwrm_tf_session_qcfg_input {
40297         /* The HWRM command request type. */
40298         uint16_t        req_type;
40299         /*
40300          * The completion ring to send the completion event on. This should
40301          * be the NQ ID returned from the `nq_alloc` HWRM command.
40302          */
40303         uint16_t        cmpl_ring;
40304         /*
40305          * The sequence ID is used by the driver for tracking multiple
40306          * commands. This ID is treated as opaque data by the firmware and
40307          * the value is returned in the `hwrm_resp_hdr` upon completion.
40308          */
40309         uint16_t        seq_id;
40310         /*
40311          * The target ID of the command:
40312          * * 0x0-0xFFF8 - The function ID
40313          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40314          * * 0xFFFD - Reserved for user-space HWRM interface
40315          * * 0xFFFF - HWRM
40316          */
40317         uint16_t        target_id;
40318         /*
40319          * A physical address pointer pointing to a host buffer that the
40320          * command's response data will be written. This can be either a host
40321          * physical address (HPA) or a guest physical address (GPA) and must
40322          * point to a physically contiguous block of memory.
40323          */
40324         uint64_t        resp_addr;
40325         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
40326         uint32_t        fw_session_id;
40327         /* unused. */
40328         uint8_t unused0[4];
40329 } __rte_packed;
40330
40331 /* hwrm_tf_session_qcfg_output (size:128b/16B) */
40332 struct hwrm_tf_session_qcfg_output {
40333         /* The specific error status for the command. */
40334         uint16_t        error_code;
40335         /* The HWRM command request type. */
40336         uint16_t        req_type;
40337         /* The sequence ID from the original command. */
40338         uint16_t        seq_id;
40339         /* The length of the response data in number of bytes. */
40340         uint16_t        resp_len;
40341         /* RX action control settings flags. */
40342         uint8_t rx_act_flags;
40343         /*
40344          * A value of 1 in this field indicates that Global Flow ID
40345          * reporting into cfa_code and cfa_metadata is enabled.
40346          */
40347         #define HWRM_TF_SESSION_QCFG_OUTPUT_RX_ACT_FLAGS_ABCR_GFID_EN \
40348                 UINT32_C(0x1)
40349         /*
40350          * A value of 1 in this field indicates that both inner and outer
40351          * are stripped and inner tag is passed.
40352          * Enabled.
40353          */
40354         #define HWRM_TF_SESSION_QCFG_OUTPUT_RX_ACT_FLAGS_ABCR_VTAG_DLT_BOTH \
40355                 UINT32_C(0x2)
40356         /*
40357          * A value of 1 in this field indicates that the re-use of
40358          * existing tunnel L2 header SMAC is enabled for
40359          * Non-tunnel L2, L2-L3 and IP-IP tunnel.
40360          */
40361         #define HWRM_TF_SESSION_QCFG_OUTPUT_RX_ACT_FLAGS_TECT_SMAC_OVR_RUTNSL2 \
40362                 UINT32_C(0x4)
40363         /* TX Action control settings flags. */
40364         uint8_t tx_act_flags;
40365         /* Disabled. */
40366         #define HWRM_TF_SESSION_QCFG_OUTPUT_TX_ACT_FLAGS_ABCR_VEB_EN \
40367                 UINT32_C(0x1)
40368         /*
40369          * When set to 1 any GRE tunnels will include the
40370          * optional Key field.
40371          */
40372         #define HWRM_TF_SESSION_QCFG_OUTPUT_TX_ACT_FLAGS_TECT_GRE_SET_K \
40373                 UINT32_C(0x2)
40374         /*
40375          * When set to 1, for GRE tunnels, the IPV6 Traffic Class (TC)
40376          * field of the outer header is inherited from the inner header
40377          * (if present) or the fixed value as taken from the encap
40378          * record.
40379          */
40380         #define HWRM_TF_SESSION_QCFG_OUTPUT_TX_ACT_FLAGS_TECT_IPV6_TC_IH \
40381                 UINT32_C(0x4)
40382         /*
40383          * When set to 1, for GRE tunnels, the IPV4 Type Of Service (TOS)
40384          * field of the outer header is inherited from the inner header
40385          * (if present) or the fixed value as taken from the encap record.
40386          */
40387         #define HWRM_TF_SESSION_QCFG_OUTPUT_TX_ACT_FLAGS_TECT_IPV4_TOS_IH \
40388                 UINT32_C(0x8)
40389         /* unused. */
40390         uint8_t unused0[5];
40391         /*
40392          * This field is used in Output records to indicate that the output
40393          * is completely written to RAM. This field should be read as '1'
40394          * to indicate that the output has been completely written.
40395          * When writing a command completion or response to an internal
40396          * processor, the order of writes has to be such that this field
40397          * is written last.
40398          */
40399         uint8_t valid;
40400 } __rte_packed;
40401
40402 /******************************
40403  * hwrm_tf_session_resc_qcaps *
40404  ******************************/
40405
40406
40407 /* hwrm_tf_session_resc_qcaps_input (size:256b/32B) */
40408 struct hwrm_tf_session_resc_qcaps_input {
40409         /* The HWRM command request type. */
40410         uint16_t        req_type;
40411         /*
40412          * The completion ring to send the completion event on. This should
40413          * be the NQ ID returned from the `nq_alloc` HWRM command.
40414          */
40415         uint16_t        cmpl_ring;
40416         /*
40417          * The sequence ID is used by the driver for tracking multiple
40418          * commands. This ID is treated as opaque data by the firmware and
40419          * the value is returned in the `hwrm_resp_hdr` upon completion.
40420          */
40421         uint16_t        seq_id;
40422         /*
40423          * The target ID of the command:
40424          * * 0x0-0xFFF8 - The function ID
40425          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40426          * * 0xFFFD - Reserved for user-space HWRM interface
40427          * * 0xFFFF - HWRM
40428          */
40429         uint16_t        target_id;
40430         /*
40431          * A physical address pointer pointing to a host buffer that the
40432          * command's response data will be written. This can be either a host
40433          * physical address (HPA) or a guest physical address (GPA) and must
40434          * point to a physically contiguous block of memory.
40435          */
40436         uint64_t        resp_addr;
40437         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
40438         uint32_t        fw_session_id;
40439         /* Control flags. */
40440         uint16_t        flags;
40441         /* Indicates the flow direction. */
40442         #define HWRM_TF_SESSION_RESC_QCAPS_INPUT_FLAGS_DIR     UINT32_C(0x1)
40443         /* If this bit set to 0, then it indicates rx flow. */
40444         #define HWRM_TF_SESSION_RESC_QCAPS_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
40445         /* If this bit is set to 1, then it indicates that tx flow. */
40446         #define HWRM_TF_SESSION_RESC_QCAPS_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
40447         #define HWRM_TF_SESSION_RESC_QCAPS_INPUT_FLAGS_DIR_LAST \
40448                 HWRM_TF_SESSION_RESC_QCAPS_INPUT_FLAGS_DIR_TX
40449         /*
40450          * Defines the size of the provided qcaps_addr array
40451          * buffer. The size should be set to the Resource Manager
40452          * provided max number of qcaps entries which is device
40453          * specific. Resource Manager gets the max size from HCAPI
40454          * RM.
40455          */
40456         uint16_t        qcaps_size;
40457         /*
40458          * This is the DMA address for the qcaps output data array
40459          * buffer. Array is of tf_rm_resc_req_entry type and is
40460          * device specific.
40461          */
40462         uint64_t        qcaps_addr;
40463 } __rte_packed;
40464
40465 /* hwrm_tf_session_resc_qcaps_output (size:192b/24B) */
40466 struct hwrm_tf_session_resc_qcaps_output {
40467         /* The specific error status for the command. */
40468         uint16_t        error_code;
40469         /* The HWRM command request type. */
40470         uint16_t        req_type;
40471         /* The sequence ID from the original command. */
40472         uint16_t        seq_id;
40473         /* The length of the response data in number of bytes. */
40474         uint16_t        resp_len;
40475         /* Control flags. */
40476         uint32_t        flags;
40477         /* Session reservation strategy. */
40478         #define HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_MASK \
40479                 UINT32_C(0x3)
40480         #define HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_SFT \
40481                 0
40482         /* Static partitioning. */
40483         #define HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_STATIC \
40484                 UINT32_C(0x0)
40485         /* Strategy 1. */
40486         #define HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_1 \
40487                 UINT32_C(0x1)
40488         /* Strategy 2. */
40489         #define HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_2 \
40490                 UINT32_C(0x2)
40491         /* Strategy 3. */
40492         #define HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_3 \
40493                 UINT32_C(0x3)
40494         #define HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_LAST \
40495                 HWRM_TF_SESSION_RESC_QCAPS_OUTPUT_FLAGS_SESS_RESV_STRATEGY_3
40496         /*
40497          * Size of the returned qcaps_addr data array buffer. The
40498          * value cannot exceed the size defined by the input msg,
40499          * qcaps_size.
40500          */
40501         uint16_t        size;
40502         /* unused. */
40503         uint16_t        unused0;
40504         /* unused. */
40505         uint8_t unused1[7];
40506         /*
40507          * This field is used in Output records to indicate that the output
40508          * is completely written to RAM. This field should be read as '1'
40509          * to indicate that the output has been completely written.
40510          * When writing a command completion or response to an internal
40511          * processor, the order of writes has to be such that this field is
40512          * written last.
40513          */
40514         uint8_t valid;
40515 } __rte_packed;
40516
40517 /******************************
40518  * hwrm_tf_session_resc_alloc *
40519  ******************************/
40520
40521
40522 /* hwrm_tf_session_resc_alloc_input (size:320b/40B) */
40523 struct hwrm_tf_session_resc_alloc_input {
40524         /* The HWRM command request type. */
40525         uint16_t        req_type;
40526         /*
40527          * The completion ring to send the completion event on. This should
40528          * be the NQ ID returned from the `nq_alloc` HWRM command.
40529          */
40530         uint16_t        cmpl_ring;
40531         /*
40532          * The sequence ID is used by the driver for tracking multiple
40533          * commands. This ID is treated as opaque data by the firmware and
40534          * the value is returned in the `hwrm_resp_hdr` upon completion.
40535          */
40536         uint16_t        seq_id;
40537         /*
40538          * The target ID of the command:
40539          * * 0x0-0xFFF8 - The function ID
40540          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40541          * * 0xFFFD - Reserved for user-space HWRM interface
40542          * * 0xFFFF - HWRM
40543          */
40544         uint16_t        target_id;
40545         /*
40546          * A physical address pointer pointing to a host buffer that the
40547          * command's response data will be written. This can be either a host
40548          * physical address (HPA) or a guest physical address (GPA) and must
40549          * point to a physically contiguous block of memory.
40550          */
40551         uint64_t        resp_addr;
40552         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
40553         uint32_t        fw_session_id;
40554         /* Control flags. */
40555         uint16_t        flags;
40556         /* Indicates the flow direction. */
40557         #define HWRM_TF_SESSION_RESC_ALLOC_INPUT_FLAGS_DIR     UINT32_C(0x1)
40558         /* If this bit set to 0, then it indicates rx flow. */
40559         #define HWRM_TF_SESSION_RESC_ALLOC_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
40560         /* If this bit is set to 1, then it indicates that tx flow. */
40561         #define HWRM_TF_SESSION_RESC_ALLOC_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
40562         #define HWRM_TF_SESSION_RESC_ALLOC_INPUT_FLAGS_DIR_LAST \
40563                 HWRM_TF_SESSION_RESC_ALLOC_INPUT_FLAGS_DIR_TX
40564         /*
40565          * Defines the array size of the provided req_addr and
40566          * resv_addr array buffers. Should be set to the number of
40567          * request entries.
40568          */
40569         uint16_t        req_size;
40570         /*
40571          * This is the DMA address for the request input data array
40572          * buffer. Array is of tf_rm_resc_req_entry type. Size of the
40573          * array buffer is provided by the 'req_size' field in this
40574          * message.
40575          */
40576         uint64_t        req_addr;
40577         /*
40578          * This is the DMA address for the resc output data array
40579          * buffer. Array is of tf_rm_resc_entry type. Size of the array
40580          * buffer is provided by the 'req_size' field in this
40581          * message.
40582          */
40583         uint64_t        resc_addr;
40584 } __rte_packed;
40585
40586 /* hwrm_tf_session_resc_alloc_output (size:128b/16B) */
40587 struct hwrm_tf_session_resc_alloc_output {
40588         /* The specific error status for the command. */
40589         uint16_t        error_code;
40590         /* The HWRM command request type. */
40591         uint16_t        req_type;
40592         /* The sequence ID from the original command. */
40593         uint16_t        seq_id;
40594         /* The length of the response data in number of bytes. */
40595         uint16_t        resp_len;
40596         /*
40597          * Size of the returned tf_rm_resc_entry data array. The value
40598          * cannot exceed the req_size defined by the input msg. The data
40599          * array is returned using the resv_addr specified DMA
40600          * address also provided by the input msg.
40601          */
40602         uint16_t        size;
40603         /* unused. */
40604         uint8_t unused0[5];
40605         /*
40606          * This field is used in Output records to indicate that the output
40607          * is completely written to RAM. This field should be read as '1'
40608          * to indicate that the output has been completely written.
40609          * When writing a command completion or response to an internal
40610          * processor, the order of writes has to be such that this field is
40611          * written last.
40612          */
40613         uint8_t valid;
40614 } __rte_packed;
40615
40616 /*****************************
40617  * hwrm_tf_session_resc_free *
40618  *****************************/
40619
40620
40621 /* hwrm_tf_session_resc_free_input (size:256b/32B) */
40622 struct hwrm_tf_session_resc_free_input {
40623         /* The HWRM command request type. */
40624         uint16_t        req_type;
40625         /*
40626          * The completion ring to send the completion event on. This should
40627          * be the NQ ID returned from the `nq_alloc` HWRM command.
40628          */
40629         uint16_t        cmpl_ring;
40630         /*
40631          * The sequence ID is used by the driver for tracking multiple
40632          * commands. This ID is treated as opaque data by the firmware and
40633          * the value is returned in the `hwrm_resp_hdr` upon completion.
40634          */
40635         uint16_t        seq_id;
40636         /*
40637          * The target ID of the command:
40638          * * 0x0-0xFFF8 - The function ID
40639          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40640          * * 0xFFFD - Reserved for user-space HWRM interface
40641          * * 0xFFFF - HWRM
40642          */
40643         uint16_t        target_id;
40644         /*
40645          * A physical address pointer pointing to a host buffer that the
40646          * command's response data will be written. This can be either a host
40647          * physical address (HPA) or a guest physical address (GPA) and must
40648          * point to a physically contiguous block of memory.
40649          */
40650         uint64_t        resp_addr;
40651         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
40652         uint32_t        fw_session_id;
40653         /* Control flags. */
40654         uint16_t        flags;
40655         /* Indicates the flow direction. */
40656         #define HWRM_TF_SESSION_RESC_FREE_INPUT_FLAGS_DIR     UINT32_C(0x1)
40657         /* If this bit set to 0, then it indicates rx flow. */
40658         #define HWRM_TF_SESSION_RESC_FREE_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
40659         /* If this bit is set to 1, then it indicates that tx flow. */
40660         #define HWRM_TF_SESSION_RESC_FREE_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
40661         #define HWRM_TF_SESSION_RESC_FREE_INPUT_FLAGS_DIR_LAST \
40662                 HWRM_TF_SESSION_RESC_FREE_INPUT_FLAGS_DIR_TX
40663         /*
40664          * Defines the size, in bytes, of the provided free_addr
40665          * buffer.
40666          */
40667         uint16_t        free_size;
40668         /*
40669          * This is the DMA address for the free input data array
40670          * buffer.  Array is of tf_rm_resc_entry type. Size of the
40671          * buffer is provided by the 'free_size' field of this
40672          * message.
40673          */
40674         uint64_t        free_addr;
40675 } __rte_packed;
40676
40677 /* hwrm_tf_session_resc_free_output (size:128b/16B) */
40678 struct hwrm_tf_session_resc_free_output {
40679         /* The specific error status for the command. */
40680         uint16_t        error_code;
40681         /* The HWRM command request type. */
40682         uint16_t        req_type;
40683         /* The sequence ID from the original command. */
40684         uint16_t        seq_id;
40685         /* The length of the response data in number of bytes. */
40686         uint16_t        resp_len;
40687         /* unused. */
40688         uint8_t unused0[7];
40689         /*
40690          * This field is used in Output records to indicate that the output
40691          * is completely written to RAM. This field should be read as '1'
40692          * to indicate that the output has been completely written.
40693          * When writing a command completion or response to an internal
40694          * processor, the order of writes has to be such that this field is
40695          * written last.
40696          */
40697         uint8_t valid;
40698 } __rte_packed;
40699
40700 /******************************
40701  * hwrm_tf_session_resc_flush *
40702  ******************************/
40703
40704
40705 /* hwrm_tf_session_resc_flush_input (size:256b/32B) */
40706 struct hwrm_tf_session_resc_flush_input {
40707         /* The HWRM command request type. */
40708         uint16_t        req_type;
40709         /*
40710          * The completion ring to send the completion event on. This should
40711          * be the NQ ID returned from the `nq_alloc` HWRM command.
40712          */
40713         uint16_t        cmpl_ring;
40714         /*
40715          * The sequence ID is used by the driver for tracking multiple
40716          * commands. This ID is treated as opaque data by the firmware and
40717          * the value is returned in the `hwrm_resp_hdr` upon completion.
40718          */
40719         uint16_t        seq_id;
40720         /*
40721          * The target ID of the command:
40722          * * 0x0-0xFFF8 - The function ID
40723          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40724          * * 0xFFFD - Reserved for user-space HWRM interface
40725          * * 0xFFFF - HWRM
40726          */
40727         uint16_t        target_id;
40728         /*
40729          * A physical address pointer pointing to a host buffer that the
40730          * command's response data will be written. This can be either a host
40731          * physical address (HPA) or a guest physical address (GPA) and must
40732          * point to a physically contiguous block of memory.
40733          */
40734         uint64_t        resp_addr;
40735         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
40736         uint32_t        fw_session_id;
40737         /* Control flags. */
40738         uint16_t        flags;
40739         /* Indicates the flow direction. */
40740         #define HWRM_TF_SESSION_RESC_FLUSH_INPUT_FLAGS_DIR     UINT32_C(0x1)
40741         /* If this bit set to 0, then it indicates rx flow. */
40742         #define HWRM_TF_SESSION_RESC_FLUSH_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
40743         /* If this bit is set to 1, then it indicates that tx flow. */
40744         #define HWRM_TF_SESSION_RESC_FLUSH_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
40745         #define HWRM_TF_SESSION_RESC_FLUSH_INPUT_FLAGS_DIR_LAST \
40746                 HWRM_TF_SESSION_RESC_FLUSH_INPUT_FLAGS_DIR_TX
40747         /*
40748          * Defines the size, in bytes, of the provided flush_addr
40749          * buffer.
40750          */
40751         uint16_t        flush_size;
40752         /*
40753          * This is the DMA address for the flush input data array
40754          * buffer.  Array of tf_rm_resc_entry type. Size of the
40755          * buffer is provided by the 'flush_size' field in this
40756          * message.
40757          */
40758         uint64_t        flush_addr;
40759 } __rte_packed;
40760
40761 /* hwrm_tf_session_resc_flush_output (size:128b/16B) */
40762 struct hwrm_tf_session_resc_flush_output {
40763         /* The specific error status for the command. */
40764         uint16_t        error_code;
40765         /* The HWRM command request type. */
40766         uint16_t        req_type;
40767         /* The sequence ID from the original command. */
40768         uint16_t        seq_id;
40769         /* The length of the response data in number of bytes. */
40770         uint16_t        resp_len;
40771         /* unused. */
40772         uint8_t unused0[7];
40773         /*
40774          * This field is used in Output records to indicate that the output
40775          * is completely written to RAM. This field should be read as '1'
40776          * to indicate that the output has been completely written.
40777          * When writing a command completion or response to an internal
40778          * processor, the order of writes has to be such that this field is
40779          * written last.
40780          */
40781         uint8_t valid;
40782 } __rte_packed;
40783
40784 /* TruFlow RM capability of a resource. */
40785 /* tf_rm_resc_req_entry (size:64b/8B) */
40786 struct tf_rm_resc_req_entry {
40787         /* Type of the resource, defined globally in HCAPI RM. */
40788         uint32_t        type;
40789         /* Minimum value. */
40790         uint16_t        min;
40791         /* Maximum value. */
40792         uint16_t        max;
40793 } __rte_packed;
40794
40795 /* TruFlow RM reservation information. */
40796 /* tf_rm_resc_entry (size:64b/8B) */
40797 struct tf_rm_resc_entry {
40798         /* Type of the resource, defined globally in HCAPI RM. */
40799         uint32_t        type;
40800         /* Start offset. */
40801         uint16_t        start;
40802         /* Number of resources. */
40803         uint16_t        stride;
40804 } __rte_packed;
40805
40806 /************************
40807  * hwrm_tf_tbl_type_get *
40808  ************************/
40809
40810
40811 /* hwrm_tf_tbl_type_get_input (size:256b/32B) */
40812 struct hwrm_tf_tbl_type_get_input {
40813         /* The HWRM command request type. */
40814         uint16_t        req_type;
40815         /*
40816          * The completion ring to send the completion event on. This should
40817          * be the NQ ID returned from the `nq_alloc` HWRM command.
40818          */
40819         uint16_t        cmpl_ring;
40820         /*
40821          * The sequence ID is used by the driver for tracking multiple
40822          * commands. This ID is treated as opaque data by the firmware and
40823          * the value is returned in the `hwrm_resp_hdr` upon completion.
40824          */
40825         uint16_t        seq_id;
40826         /*
40827          * The target ID of the command:
40828          * * 0x0-0xFFF8 - The function ID
40829          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40830          * * 0xFFFD - Reserved for user-space HWRM interface
40831          * * 0xFFFF - HWRM
40832          */
40833         uint16_t        target_id;
40834         /*
40835          * A physical address pointer pointing to a host buffer that the
40836          * command's response data will be written. This can be either a host
40837          * physical address (HPA) or a guest physical address (GPA) and must
40838          * point to a physically contiguous block of memory.
40839          */
40840         uint64_t        resp_addr;
40841         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
40842         uint32_t        fw_session_id;
40843         /* Control flags. */
40844         uint16_t        flags;
40845         /* Indicates the flow direction. */
40846         #define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR     UINT32_C(0x1)
40847         /* If this bit set to 0, then it indicates rx flow. */
40848         #define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
40849         /* If this bit is set to 1, then it indicates that tx flow. */
40850         #define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
40851         #define HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_LAST \
40852                 HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_TX
40853         /* unused. */
40854         uint8_t unused0[2];
40855         /*
40856          * Type of the resource, defined globally in the
40857          * hwrm_tf_resc_type enum.
40858          */
40859         uint32_t        type;
40860         /* Index of the type to retrieve. */
40861         uint32_t        index;
40862 } __rte_packed;
40863
40864 /* hwrm_tf_tbl_type_get_output (size:1216b/152B) */
40865 struct hwrm_tf_tbl_type_get_output {
40866         /* The specific error status for the command. */
40867         uint16_t        error_code;
40868         /* The HWRM command request type. */
40869         uint16_t        req_type;
40870         /* The sequence ID from the original command. */
40871         uint16_t        seq_id;
40872         /* The length of the response data in number of bytes. */
40873         uint16_t        resp_len;
40874         /* Response code. */
40875         uint32_t        resp_code;
40876         /* Response size. */
40877         uint16_t        size;
40878         /* unused */
40879         uint16_t        unused0;
40880         /* Response data. */
40881         uint8_t data[128];
40882         /* unused */
40883         uint8_t unused1[7];
40884         /*
40885          * This field is used in Output records to indicate that the output
40886          * is completely written to RAM. This field should be read as '1'
40887          * to indicate that the output has been completely written.
40888          * When writing a command completion or response to an internal
40889          * processor, the order of writes has to be such that this field
40890          * is written last.
40891          */
40892         uint8_t valid;
40893 } __rte_packed;
40894
40895 /************************
40896  * hwrm_tf_tbl_type_set *
40897  ************************/
40898
40899
40900 /* hwrm_tf_tbl_type_set_input (size:1024b/128B) */
40901 struct hwrm_tf_tbl_type_set_input {
40902         /* The HWRM command request type. */
40903         uint16_t        req_type;
40904         /*
40905          * The completion ring to send the completion event on. This should
40906          * be the NQ ID returned from the `nq_alloc` HWRM command.
40907          */
40908         uint16_t        cmpl_ring;
40909         /*
40910          * The sequence ID is used by the driver for tracking multiple
40911          * commands. This ID is treated as opaque data by the firmware and
40912          * the value is returned in the `hwrm_resp_hdr` upon completion.
40913          */
40914         uint16_t        seq_id;
40915         /*
40916          * The target ID of the command:
40917          * * 0x0-0xFFF8 - The function ID
40918          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
40919          * * 0xFFFD - Reserved for user-space HWRM interface
40920          * * 0xFFFF - HWRM
40921          */
40922         uint16_t        target_id;
40923         /*
40924          * A physical address pointer pointing to a host buffer that the
40925          * command's response data will be written. This can be either a host
40926          * physical address (HPA) or a guest physical address (GPA) and must
40927          * point to a physically contiguous block of memory.
40928          */
40929         uint64_t        resp_addr;
40930         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
40931         uint32_t        fw_session_id;
40932         /* Control flags. */
40933         uint16_t        flags;
40934         /* Indicates the flow direction. */
40935         #define HWRM_TF_TBL_TYPE_SET_INPUT_FLAGS_DIR     UINT32_C(0x1)
40936         /* If this bit set to 0, then it indicates rx flow. */
40937         #define HWRM_TF_TBL_TYPE_SET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
40938         /* If this bit is set to 1, then it indicates that tx flow. */
40939         #define HWRM_TF_TBL_TYPE_SET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
40940         #define HWRM_TF_TBL_TYPE_SET_INPUT_FLAGS_DIR_LAST \
40941                 HWRM_TF_TBL_TYPE_SET_INPUT_FLAGS_DIR_TX
40942         /* unused. */
40943         uint8_t unused0[2];
40944         /*
40945          * Type of the resource, defined globally in the
40946          * hwrm_tf_resc_type enum.
40947          */
40948         uint32_t        type;
40949         /* Index of the type to retrieve. */
40950         uint32_t        index;
40951         /* Size of the data to set. */
40952         uint16_t        size;
40953         /* unused */
40954         uint8_t unused1[6];
40955         /* Data to be set. */
40956         uint8_t data[88];
40957 } __rte_packed;
40958
40959 /* hwrm_tf_tbl_type_set_output (size:128b/16B) */
40960 struct hwrm_tf_tbl_type_set_output {
40961         /* The specific error status for the command. */
40962         uint16_t        error_code;
40963         /* The HWRM command request type. */
40964         uint16_t        req_type;
40965         /* The sequence ID from the original command. */
40966         uint16_t        seq_id;
40967         /* The length of the response data in number of bytes. */
40968         uint16_t        resp_len;
40969         /* unused. */
40970         uint8_t unused0[7];
40971         /*
40972          * This field is used in Output records to indicate that the output
40973          * is completely written to RAM. This field should be read as '1'
40974          * to indicate that the output has been completely written.
40975          * When writing a command completion or response to an internal
40976          * processor, the order of writes has to be such that this field
40977          * is written last.
40978          */
40979         uint8_t valid;
40980 } __rte_packed;
40981
40982 /**************************
40983  * hwrm_tf_ctxt_mem_alloc *
40984  **************************/
40985
40986
40987 /* hwrm_tf_ctxt_mem_alloc_input (size:192b/24B) */
40988 struct hwrm_tf_ctxt_mem_alloc_input {
40989         /* The HWRM command request type. */
40990         uint16_t        req_type;
40991         /*
40992          * The completion ring to send the completion event on. This should
40993          * be the NQ ID returned from the `nq_alloc` HWRM command.
40994          */
40995         uint16_t        cmpl_ring;
40996         /*
40997          * The sequence ID is used by the driver for tracking multiple
40998          * commands. This ID is treated as opaque data by the firmware and
40999          * the value is returned in the `hwrm_resp_hdr` upon completion.
41000          */
41001         uint16_t        seq_id;
41002         /*
41003          * The target ID of the command:
41004          * * 0x0-0xFFF8 - The function ID
41005          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
41006          * * 0xFFFD - Reserved for user-space HWRM interface
41007          * * 0xFFFF - HWRM
41008          */
41009         uint16_t        target_id;
41010         /*
41011          * A physical address pointer pointing to a host buffer that the
41012          * command's response data will be written. This can be either a host
41013          * physical address (HPA) or a guest physical address (GPA) and must
41014          * point to a physically contiguous block of memory.
41015          */
41016         uint64_t        resp_addr;
41017         /* Size in KB of memory to be allocated. */
41018         uint32_t        mem_size;
41019         /* unused. */
41020         uint32_t        unused0;
41021 } __rte_packed;
41022
41023 /* hwrm_tf_ctxt_mem_alloc_output (size:192b/24B) */
41024 struct hwrm_tf_ctxt_mem_alloc_output {
41025         /* The specific error status for the command. */
41026         uint16_t        error_code;
41027         /* The HWRM command request type. */
41028         uint16_t        req_type;
41029         /* The sequence ID from the original command. */
41030         uint16_t        seq_id;
41031         /* The length of the response data in number of bytes. */
41032         uint16_t        resp_len;
41033         /* Pointer to the PBL, or PDL depending on number of levels */
41034         uint64_t        page_dir;
41035         /* Counter PBL indirect levels. */
41036         uint8_t page_level;
41037         /* PBL pointer is physical start address. */
41038         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_LEVEL_LVL_0 UINT32_C(0x0)
41039         /* PBL pointer points to PTE table. */
41040         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_LEVEL_LVL_1 UINT32_C(0x1)
41041         /*
41042          * PBL pointer points to PDE table with each entry pointing
41043          * to PTE tables.
41044          */
41045         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_LEVEL_LVL_2 UINT32_C(0x2)
41046         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_LEVEL_LAST \
41047                 HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_LEVEL_LVL_2
41048         /* Page size. */
41049         uint8_t page_size;
41050         /* 4KB page size. */
41051         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_4K   UINT32_C(0x0)
41052         /* 8KB page size. */
41053         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_8K   UINT32_C(0x1)
41054         /* 64KB page size. */
41055         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_64K  UINT32_C(0x4)
41056         /* 128KB page size. */
41057         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_128K UINT32_C(0x5)
41058         /* 256KB page size. */
41059         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_256K UINT32_C(0x6)
41060         /* 512KB page size. */
41061         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_512K UINT32_C(0x7)
41062         /* 1MB page size. */
41063         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_1M   UINT32_C(0x8)
41064         /* 2MB page size. */
41065         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_2M   UINT32_C(0x9)
41066         /* 4MB page size. */
41067         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_4M   UINT32_C(0xa)
41068         /* 8MB page size. */
41069         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_8M   UINT32_C(0xb)
41070         /* 1GB page size. */
41071         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_1G   UINT32_C(0x12)
41072         #define HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_LAST \
41073                 HWRM_TF_CTXT_MEM_ALLOC_OUTPUT_PAGE_SIZE_1G
41074         /* unused. */
41075         uint8_t unused0[5];
41076         /*
41077          * This field is used in Output records to indicate that the
41078          * output is completely written to RAM. This field should be
41079          * read as '1' to indicate that the output has been
41080          * completely written.  When writing a command completion or
41081          * response to an internal processor, the order of writes has
41082          * to be such that this field is written last.
41083          */
41084         uint8_t valid;
41085 } __rte_packed;
41086
41087 /*************************
41088  * hwrm_tf_ctxt_mem_free *
41089  *************************/
41090
41091
41092 /* hwrm_tf_ctxt_mem_free_input (size:256b/32B) */
41093 struct hwrm_tf_ctxt_mem_free_input {
41094         /* The HWRM command request type. */
41095         uint16_t        req_type;
41096         /*
41097          * The completion ring to send the completion event on. This should
41098          * be the NQ ID returned from the `nq_alloc` HWRM command.
41099          */
41100         uint16_t        cmpl_ring;
41101         /*
41102          * The sequence ID is used by the driver for tracking multiple
41103          * commands. This ID is treated as opaque data by the firmware and
41104          * the value is returned in the `hwrm_resp_hdr` upon completion.
41105          */
41106         uint16_t        seq_id;
41107         /*
41108          * The target ID of the command:
41109          * * 0x0-0xFFF8 - The function ID
41110          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
41111          * * 0xFFFD - Reserved for user-space HWRM interface
41112          * * 0xFFFF - HWRM
41113          */
41114         uint16_t        target_id;
41115         /*
41116          * A physical address pointer pointing to a host buffer that the
41117          * command's response data will be written. This can be either a host
41118          * physical address (HPA) or a guest physical address (GPA) and must
41119          * point to a physically contiguous block of memory.
41120          */
41121         uint64_t        resp_addr;
41122         /* Pointer to the PBL, or PDL depending on number of levels */
41123         uint64_t        page_dir;
41124         /* Counter PBL indirect levels. */
41125         uint8_t page_level;
41126         /* PBL pointer is physical start address. */
41127         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_LEVEL_LVL_0 UINT32_C(0x0)
41128         /* PBL pointer points to PTE table. */
41129         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_LEVEL_LVL_1 UINT32_C(0x1)
41130         /*
41131          * PBL pointer points to PDE table with each entry pointing
41132          * to PTE tables.
41133          */
41134         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_LEVEL_LVL_2 UINT32_C(0x2)
41135         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_LEVEL_LAST \
41136                 HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_LEVEL_LVL_2
41137         /* Page size. */
41138         uint8_t page_size;
41139         /* 4KB page size. */
41140         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_4K   UINT32_C(0x0)
41141         /* 8KB page size. */
41142         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_8K   UINT32_C(0x1)
41143         /* 64KB page size. */
41144         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_64K  UINT32_C(0x4)
41145         /* 128KB page size. */
41146         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_128K UINT32_C(0x5)
41147         /* 256KB page size. */
41148         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_256K UINT32_C(0x6)
41149         /* 512KB page size. */
41150         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_512K UINT32_C(0x7)
41151         /* 1MB page size. */
41152         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_1M   UINT32_C(0x8)
41153         /* 2MB page size. */
41154         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_2M   UINT32_C(0x9)
41155         /* 4MB page size. */
41156         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_4M   UINT32_C(0xa)
41157         /* 8MB page size. */
41158         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_8M   UINT32_C(0xb)
41159         /* 1GB page size. */
41160         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_1G   UINT32_C(0x12)
41161         #define HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_LAST \
41162                 HWRM_TF_CTXT_MEM_FREE_INPUT_PAGE_SIZE_1G
41163         /* unused. */
41164         uint8_t unused0[6];
41165 } __rte_packed;
41166
41167 /* hwrm_tf_ctxt_mem_free_output (size:128b/16B) */
41168 struct hwrm_tf_ctxt_mem_free_output {
41169         /* The specific error status for the command. */
41170         uint16_t        error_code;
41171         /* The HWRM command request type. */
41172         uint16_t        req_type;
41173         /* The sequence ID from the original command. */
41174         uint16_t        seq_id;
41175         /* The length of the response data in number of bytes. */
41176         uint16_t        resp_len;
41177         /* unused. */
41178         uint8_t unused0[7];
41179         /*
41180          * This field is used in Output records to indicate that the
41181          * output is completely written to RAM. This field should be
41182          * read as '1' to indicate that the output has been
41183          * completely written.  When writing a command completion or
41184          * response to an internal processor, the order of writes has
41185          * to be such that this field is written last.
41186          */
41187         uint8_t valid;
41188 } __rte_packed;
41189
41190 /*************************
41191  * hwrm_tf_ctxt_mem_rgtr *
41192  *************************/
41193
41194
41195 /* hwrm_tf_ctxt_mem_rgtr_input (size:256b/32B) */
41196 struct hwrm_tf_ctxt_mem_rgtr_input {
41197         /* The HWRM command request type. */
41198         uint16_t        req_type;
41199         /*
41200          * The completion ring to send the completion event on. This should
41201          * be the NQ ID returned from the `nq_alloc` HWRM command.
41202          */
41203         uint16_t        cmpl_ring;
41204         /*
41205          * The sequence ID is used by the driver for tracking multiple
41206          * commands. This ID is treated as opaque data by the firmware and
41207          * the value is returned in the `hwrm_resp_hdr` upon completion.
41208          */
41209         uint16_t        seq_id;
41210         /*
41211          * The target ID of the command:
41212          * * 0x0-0xFFF8 - The function ID
41213          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
41214          * * 0xFFFD - Reserved for user-space HWRM interface
41215          * * 0xFFFF - HWRM
41216          */
41217         uint16_t        target_id;
41218         /*
41219          * A physical address pointer pointing to a host buffer that the
41220          * command's response data will be written. This can be either a host
41221          * physical address (HPA) or a guest physical address (GPA) and must
41222          * point to a physically contiguous block of memory.
41223          */
41224         uint64_t        resp_addr;
41225         /* Control flags. */
41226         uint16_t        flags;
41227         /* Counter PBL indirect levels. */
41228         uint8_t page_level;
41229         /* PBL pointer is physical start address. */
41230         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_0 UINT32_C(0x0)
41231         /* PBL pointer points to PTE table. */
41232         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_1 UINT32_C(0x1)
41233         /*
41234          * PBL pointer points to PDE table with each entry pointing
41235          * to PTE tables.
41236          */
41237         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_2 UINT32_C(0x2)
41238         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_LEVEL_LAST \
41239                 HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_LEVEL_LVL_2
41240         /* Page size. */
41241         uint8_t page_size;
41242         /* 4KB page size. */
41243         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_4K   UINT32_C(0x0)
41244         /* 8KB page size. */
41245         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_8K   UINT32_C(0x1)
41246         /* 64KB page size. */
41247         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_64K  UINT32_C(0x4)
41248         /* 128KB page size. */
41249         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_128K UINT32_C(0x5)
41250         /* 256KB page size. */
41251         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_256K UINT32_C(0x6)
41252         /* 512KB page size. */
41253         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_512K UINT32_C(0x7)
41254         /* 1MB page size. */
41255         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_1M   UINT32_C(0x8)
41256         /* 2MB page size. */
41257         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_2M   UINT32_C(0x9)
41258         /* 4MB page size. */
41259         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_4M   UINT32_C(0xa)
41260         /* 8MB page size. */
41261         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_8M   UINT32_C(0xb)
41262         /* 1GB page size. */
41263         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_1G   UINT32_C(0x12)
41264         #define HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_LAST \
41265                 HWRM_TF_CTXT_MEM_RGTR_INPUT_PAGE_SIZE_1G
41266         /* unused. */
41267         uint32_t        unused0;
41268         /* Pointer to the PBL, or PDL depending on number of levels */
41269         uint64_t        page_dir;
41270 } __rte_packed;
41271
41272 /* hwrm_tf_ctxt_mem_rgtr_output (size:128b/16B) */
41273 struct hwrm_tf_ctxt_mem_rgtr_output {
41274         /* The specific error status for the command. */
41275         uint16_t        error_code;
41276         /* The HWRM command request type. */
41277         uint16_t        req_type;
41278         /* The sequence ID from the original command. */
41279         uint16_t        seq_id;
41280         /* The length of the response data in number of bytes. */
41281         uint16_t        resp_len;
41282         /*
41283          * Id/Handle to the recently register context memory. This
41284          * handle is passed to the TF session.
41285          */
41286         uint16_t        ctx_id;
41287         /* unused. */
41288         uint8_t unused0[5];
41289         /*
41290          * This field is used in Output records to indicate that the
41291          * output is completely written to RAM. This field should be
41292          * read as '1' to indicate that the output has been
41293          * completely written.  When writing a command completion or
41294          * response to an internal processor, the order of writes has
41295          * to be such that this field is written last.
41296          */
41297         uint8_t valid;
41298 } __rte_packed;
41299
41300 /***************************
41301  * hwrm_tf_ctxt_mem_unrgtr *
41302  ***************************/
41303
41304
41305 /* hwrm_tf_ctxt_mem_unrgtr_input (size:192b/24B) */
41306 struct hwrm_tf_ctxt_mem_unrgtr_input {
41307         /* The HWRM command request type. */
41308         uint16_t        req_type;
41309         /*
41310          * The completion ring to send the completion event on. This should
41311          * be the NQ ID returned from the `nq_alloc` HWRM command.
41312          */
41313         uint16_t        cmpl_ring;
41314         /*
41315          * The sequence ID is used by the driver for tracking multiple
41316          * commands. This ID is treated as opaque data by the firmware and
41317          * the value is returned in the `hwrm_resp_hdr` upon completion.
41318          */
41319         uint16_t        seq_id;
41320         /*
41321          * The target ID of the command:
41322          * * 0x0-0xFFF8 - The function ID
41323          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
41324          * * 0xFFFD - Reserved for user-space HWRM interface
41325          * * 0xFFFF - HWRM
41326          */
41327         uint16_t        target_id;
41328         /*
41329          * A physical address pointer pointing to a host buffer that the
41330          * command's response data will be written. This can be either a host
41331          * physical address (HPA) or a guest physical address (GPA) and must
41332          * point to a physically contiguous block of memory.
41333          */
41334         uint64_t        resp_addr;
41335         /*
41336          * Id/Handle to the recently register context memory. This
41337          * handle is passed to the TF session.
41338          */
41339         uint16_t        ctx_id;
41340         /* unused. */
41341         uint8_t unused0[6];
41342 } __rte_packed;
41343
41344 /* hwrm_tf_ctxt_mem_unrgtr_output (size:128b/16B) */
41345 struct hwrm_tf_ctxt_mem_unrgtr_output {
41346         /* The specific error status for the command. */
41347         uint16_t        error_code;
41348         /* The HWRM command request type. */
41349         uint16_t        req_type;
41350         /* The sequence ID from the original command. */
41351         uint16_t        seq_id;
41352         /* The length of the response data in number of bytes. */
41353         uint16_t        resp_len;
41354         /* unused. */
41355         uint8_t unused0[7];
41356         /*
41357          * This field is used in Output records to indicate that the
41358          * output is completely written to RAM. This field should be
41359          * read as '1' to indicate that the output has been
41360          * completely written.  When writing a command completion or
41361          * response to an internal processor, the order of writes has
41362          * to be such that this field is written last.
41363          */
41364         uint8_t valid;
41365 } __rte_packed;
41366
41367 /************************
41368  * hwrm_tf_ext_em_qcaps *
41369  ************************/
41370
41371
41372 /* hwrm_tf_ext_em_qcaps_input (size:192b/24B) */
41373 struct hwrm_tf_ext_em_qcaps_input {
41374         /* The HWRM command request type. */
41375         uint16_t        req_type;
41376         /*
41377          * The completion ring to send the completion event on. This should
41378          * be the NQ ID returned from the `nq_alloc` HWRM command.
41379          */
41380         uint16_t        cmpl_ring;
41381         /*
41382          * The sequence ID is used by the driver for tracking multiple
41383          * commands. This ID is treated as opaque data by the firmware and
41384          * the value is returned in the `hwrm_resp_hdr` upon completion.
41385          */
41386         uint16_t        seq_id;
41387         /*
41388          * The target ID of the command:
41389          * * 0x0-0xFFF8 - The function ID
41390          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
41391          * * 0xFFFD - Reserved for user-space HWRM interface
41392          * * 0xFFFF - HWRM
41393          */
41394         uint16_t        target_id;
41395         /*
41396          * A physical address pointer pointing to a host buffer that the
41397          * command's response data will be written. This can be either a host
41398          * physical address (HPA) or a guest physical address (GPA) and must
41399          * point to a physically contiguous block of memory.
41400          */
41401         uint64_t        resp_addr;
41402         /* Control flags. */
41403         uint32_t        flags;
41404         /* Indicates the flow direction. */
41405         #define HWRM_TF_EXT_EM_QCAPS_INPUT_FLAGS_DIR \
41406                 UINT32_C(0x1)
41407         /* If this bit set to 0, then it indicates rx flow. */
41408         #define HWRM_TF_EXT_EM_QCAPS_INPUT_FLAGS_DIR_RX \
41409                 UINT32_C(0x0)
41410         /* If this bit is set to 1, then it indicates that tx flow. */
41411         #define HWRM_TF_EXT_EM_QCAPS_INPUT_FLAGS_DIR_TX \
41412                 UINT32_C(0x1)
41413         #define HWRM_TF_EXT_EM_QCAPS_INPUT_FLAGS_DIR_LAST \
41414                 HWRM_TF_EXT_EM_QCAPS_INPUT_FLAGS_DIR_TX
41415         /* When set to 1, all offloaded flows will be sent to EXT EM. */
41416         #define HWRM_TF_EXT_EM_QCAPS_INPUT_FLAGS_PREFERRED_OFFLOAD \
41417                 UINT32_C(0x2)
41418         /* unused. */
41419         uint32_t        unused0;
41420 } __rte_packed;
41421
41422 /* hwrm_tf_ext_em_qcaps_output (size:384b/48B) */
41423 struct hwrm_tf_ext_em_qcaps_output {
41424         /* The specific error status for the command. */
41425         uint16_t        error_code;
41426         /* The HWRM command request type. */
41427         uint16_t        req_type;
41428         /* The sequence ID from the original command. */
41429         uint16_t        seq_id;
41430         /* The length of the response data in number of bytes. */
41431         uint16_t        resp_len;
41432         uint32_t        flags;
41433         /*
41434          * When set to 1, indicates the FW supports the Centralized
41435          * Memory Model. The concept designates one entity for the
41436          * memory allocation while all others ‘subscribe’ to it.
41437          */
41438         #define HWRM_TF_EXT_EM_QCAPS_OUTPUT_FLAGS_CENTRALIZED_MEMORY_MODEL_SUPPORTED \
41439                 UINT32_C(0x1)
41440         /*
41441          * When set to 1, indicates the FW supports the Detached
41442          * Centralized Memory Model. The memory is allocated and managed
41443          * as a separate entity. All PFs and VFs will be granted direct
41444          * or semi-direct access to the allocated memory while none of
41445          * which can interfere with the management of the memory.
41446          */
41447         #define HWRM_TF_EXT_EM_QCAPS_OUTPUT_FLAGS_DETACHED_CENTRALIZED_MEMORY_MODEL_SUPPORTED \
41448                 UINT32_C(0x2)
41449         /* When set to 1, indicates FW support for host based EEM memory. */
41450         #define HWRM_TF_EXT_EM_QCAPS_OUTPUT_FLAGS_HOST_MEMORY_SUPPORTED \
41451                 UINT32_C(0x4)
41452         /* When set to 1, indicates FW support for on-chip based EEM memory. */
41453         #define HWRM_TF_EXT_EM_QCAPS_OUTPUT_FLAGS_FW_MEMORY_SUPPORTED \
41454                 UINT32_C(0x8)
41455         /* unused. */
41456         uint32_t        unused0;
41457         /* Support flags. */
41458         uint32_t        supported;
41459         /*
41460          * If set to 1, then EXT EM KEY0 table is supported using
41461          * crc32 hash.
41462          * If set to 0, EXT EM KEY0 table is not supported.
41463          */
41464         #define HWRM_TF_EXT_EM_QCAPS_OUTPUT_SUPPORTED_KEY0_TABLE \
41465                 UINT32_C(0x1)
41466         /*
41467          * If set to 1, then EXT EM KEY1 table is supported using
41468          * lookup3 hash.
41469          * If set to 0, EXT EM KEY1 table is not supported.
41470          */
41471         #define HWRM_TF_EXT_EM_QCAPS_OUTPUT_SUPPORTED_KEY1_TABLE \
41472                 UINT32_C(0x2)
41473         /*
41474          * If set to 1, then EXT EM External Record table is supported.
41475          * If set to 0, EXT EM External Record table is not
41476          * supported.  (This table includes action record, EFC
41477          * pointers, encap pointers)
41478          */
41479         #define HWRM_TF_EXT_EM_QCAPS_OUTPUT_SUPPORTED_EXTERNAL_RECORD_TABLE \
41480                 UINT32_C(0x4)
41481         /*
41482          * If set to 1, then EXT EM External Flow Counters table is
41483          * supported.
41484          * If set to 0, EXT EM External Flow Counters table is not
41485          * supported.
41486          */
41487         #define HWRM_TF_EXT_EM_QCAPS_OUTPUT_SUPPORTED_EXTERNAL_FLOW_COUNTERS_TABLE \
41488                 UINT32_C(0x8)
41489         /*
41490          * If set to 1, then FID table used for implicit flow flush
41491          * is supported.
41492          * If set to 0, then FID table used for implicit flow flush
41493          * is not supported.
41494          */
41495         #define HWRM_TF_EXT_EM_QCAPS_OUTPUT_SUPPORTED_FID_TABLE \
41496                 UINT32_C(0x10)
41497         /*
41498          * If set to 1, then table scopes are supported.
41499          * If set to 0, then table scopes are not supported.
41500          */
41501         #define HWRM_TF_EXT_EM_QCAPS_OUTPUT_SUPPORTED_TBL_SCOPES \
41502                 UINT32_C(0x20)
41503         /*
41504          * The maximum number of entries supported by EXT EM. When
41505          * configuring the host memory the number of numbers of
41506          * entries that can supported are -
41507          *      32k, 64k 128k, 256k, 512k, 1M, 2M, 4M, 8M, 32M, 64M,
41508          *      128M entries.
41509          * Any value that are not these values, the FW will round
41510          * down to the closest support number of entries.
41511          */
41512         uint32_t        max_entries_supported;
41513         /*
41514          * The entry size in bytes of each entry in the EXT EM
41515          * KEY0/KEY1 tables.
41516          */
41517         uint16_t        key_entry_size;
41518         /*
41519          * The entry size in bytes of each entry in the EXT EM RECORD
41520          * tables.
41521          */
41522         uint16_t        record_entry_size;
41523         /* The entry size in bytes of each entry in the EXT EM EFC tables. */
41524         uint16_t        efc_entry_size;
41525         /* The FID size in bytes of each entry in the EXT EM FID tables. */
41526         uint16_t        fid_entry_size;
41527         /* Maximum number of ctxt mem allocations allowed. */
41528         uint32_t        max_ctxt_mem_allocs;
41529         /*
41530          * Maximum number of static buckets that can be assigned to lookup
41531          * table scopes.
41532          */
41533         uint32_t        max_static_buckets;
41534         /*
41535          * Maximum number of all (static and dynamic) buckets that can
41536          * be assigned to lookup table scopes.
41537          */
41538         uint32_t        max_total_buckets;
41539         /* unused. */
41540         uint8_t unused1[3];
41541         /*
41542          * This field is used in Output records to indicate that the
41543          * output is completely written to RAM. This field should be
41544          * read as '1' to indicate that the output has been
41545          * completely written.  When writing a command completion or
41546          * response to an internal processor, the order of writes has
41547          * to be such that this field is written last.
41548          */
41549         uint8_t valid;
41550 } __rte_packed;
41551
41552 /*********************
41553  * hwrm_tf_ext_em_op *
41554  *********************/
41555
41556
41557 /* hwrm_tf_ext_em_op_input (size:192b/24B) */
41558 struct hwrm_tf_ext_em_op_input {
41559         /* The HWRM command request type. */
41560         uint16_t        req_type;
41561         /*
41562          * The completion ring to send the completion event on. This should
41563          * be the NQ ID returned from the `nq_alloc` HWRM command.
41564          */
41565         uint16_t        cmpl_ring;
41566         /*
41567          * The sequence ID is used by the driver for tracking multiple
41568          * commands. This ID is treated as opaque data by the firmware and
41569          * the value is returned in the `hwrm_resp_hdr` upon completion.
41570          */
41571         uint16_t        seq_id;
41572         /*
41573          * The target ID of the command:
41574          * * 0x0-0xFFF8 - The function ID
41575          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
41576          * * 0xFFFD - Reserved for user-space HWRM interface
41577          * * 0xFFFF - HWRM
41578          */
41579         uint16_t        target_id;
41580         /*
41581          * A physical address pointer pointing to a host buffer that the
41582          * command's response data will be written. This can be either a host
41583          * physical address (HPA) or a guest physical address (GPA) and must
41584          * point to a physically contiguous block of memory.
41585          */
41586         uint64_t        resp_addr;
41587         /* Control flags. */
41588         uint16_t        flags;
41589         /* Indicates the flow direction. */
41590         #define HWRM_TF_EXT_EM_OP_INPUT_FLAGS_DIR     UINT32_C(0x1)
41591         /* If this bit set to 0, then it indicates rx flow. */
41592         #define HWRM_TF_EXT_EM_OP_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
41593         /* If this bit is set to 1, then it indicates that tx flow. */
41594         #define HWRM_TF_EXT_EM_OP_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
41595         #define HWRM_TF_EXT_EM_OP_INPUT_FLAGS_DIR_LAST \
41596                 HWRM_TF_EXT_EM_OP_INPUT_FLAGS_DIR_TX
41597         /* unused. */
41598         uint16_t        unused0;
41599         /* The number of EXT EM key table entries to be configured. */
41600         uint16_t        op;
41601         /* This value is reserved and should not be used. */
41602         #define HWRM_TF_EXT_EM_OP_INPUT_OP_RESERVED       UINT32_C(0x0)
41603         /*
41604          * To properly stop EXT EM and ensure there are no DMA's,
41605          * the caller must disable EXT EM for the given PF, using
41606          * this call. This will safely disable EXT EM and ensure
41607          * that all DMA'ed to the keys/records/efc have been
41608          * completed.
41609          */
41610         #define HWRM_TF_EXT_EM_OP_INPUT_OP_EXT_EM_DISABLE UINT32_C(0x1)
41611         /*
41612          * Once the EXT EM host memory has been configured, EXT EM
41613          * options have been configured. Then the caller should
41614          * enable EXT EM for the given PF. Note once this call has
41615          * been made, then the EXT EM mechanism will be active and
41616          * DMA's will occur as packets are processed.
41617          */
41618         #define HWRM_TF_EXT_EM_OP_INPUT_OP_EXT_EM_ENABLE  UINT32_C(0x2)
41619         /*
41620          * Clear EXT EM settings for the given PF so that the
41621          * register values are reset back to their initial state.
41622          */
41623         #define HWRM_TF_EXT_EM_OP_INPUT_OP_EXT_EM_CLEANUP UINT32_C(0x3)
41624         #define HWRM_TF_EXT_EM_OP_INPUT_OP_LAST \
41625                 HWRM_TF_EXT_EM_OP_INPUT_OP_EXT_EM_CLEANUP
41626         /* unused. */
41627         uint16_t        unused1;
41628 } __rte_packed;
41629
41630 /* hwrm_tf_ext_em_op_output (size:128b/16B) */
41631 struct hwrm_tf_ext_em_op_output {
41632         /* The specific error status for the command. */
41633         uint16_t        error_code;
41634         /* The HWRM command request type. */
41635         uint16_t        req_type;
41636         /* The sequence ID from the original command. */
41637         uint16_t        seq_id;
41638         /* The length of the response data in number of bytes. */
41639         uint16_t        resp_len;
41640         /* unused. */
41641         uint8_t unused0[7];
41642         /*
41643          * This field is used in Output records to indicate that the
41644          * output is completely written to RAM. This field should be
41645          * read as '1' to indicate that the output has been
41646          * completely written.  When writing a command completion or
41647          * response to an internal processor, the order of writes has
41648          * to be such that this field is written last.
41649          */
41650         uint8_t valid;
41651 } __rte_packed;
41652
41653 /**********************
41654  * hwrm_tf_ext_em_cfg *
41655  **********************/
41656
41657
41658 /* hwrm_tf_ext_em_cfg_input (size:512b/64B) */
41659 struct hwrm_tf_ext_em_cfg_input {
41660         /* The HWRM command request type. */
41661         uint16_t        req_type;
41662         /*
41663          * The completion ring to send the completion event on. This should
41664          * be the NQ ID returned from the `nq_alloc` HWRM command.
41665          */
41666         uint16_t        cmpl_ring;
41667         /*
41668          * The sequence ID is used by the driver for tracking multiple
41669          * commands. This ID is treated as opaque data by the firmware and
41670          * the value is returned in the `hwrm_resp_hdr` upon completion.
41671          */
41672         uint16_t        seq_id;
41673         /*
41674          * The target ID of the command:
41675          * * 0x0-0xFFF8 - The function ID
41676          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
41677          * * 0xFFFD - Reserved for user-space HWRM interface
41678          * * 0xFFFF - HWRM
41679          */
41680         uint16_t        target_id;
41681         /*
41682          * A physical address pointer pointing to a host buffer that the
41683          * command's response data will be written. This can be either a host
41684          * physical address (HPA) or a guest physical address (GPA) and must
41685          * point to a physically contiguous block of memory.
41686          */
41687         uint64_t        resp_addr;
41688         /* Control flags. */
41689         uint32_t        flags;
41690         /* Indicates the flow direction. */
41691         #define HWRM_TF_EXT_EM_CFG_INPUT_FLAGS_DIR \
41692                 UINT32_C(0x1)
41693         /* If this bit set to 0, then it indicates rx flow. */
41694         #define HWRM_TF_EXT_EM_CFG_INPUT_FLAGS_DIR_RX \
41695                 UINT32_C(0x0)
41696         /* If this bit is set to 1, then it indicates that tx flow. */
41697         #define HWRM_TF_EXT_EM_CFG_INPUT_FLAGS_DIR_TX \
41698                 UINT32_C(0x1)
41699         #define HWRM_TF_EXT_EM_CFG_INPUT_FLAGS_DIR_LAST \
41700                 HWRM_TF_EXT_EM_CFG_INPUT_FLAGS_DIR_TX
41701         /* When set to 1, all offloaded flows will be sent to EXT EM. */
41702         #define HWRM_TF_EXT_EM_CFG_INPUT_FLAGS_PREFERRED_OFFLOAD \
41703                 UINT32_C(0x2)
41704         /* When set to 1, secondary, 0 means primary. */
41705         #define HWRM_TF_EXT_EM_CFG_INPUT_FLAGS_SECONDARY_PF \
41706                 UINT32_C(0x4)
41707         /*
41708          * Group_id which used by Firmware to identify memory pools belonging
41709          * to certain group.
41710          */
41711         uint16_t        group_id;
41712         /*
41713          * Dynamically reconfigure EEM pending cache every 1/10th of second.
41714          * If set to 0 it will disable the EEM HW flush of the pending cache.
41715          */
41716         uint8_t flush_interval;
41717         /* unused. */
41718         uint8_t unused0;
41719         /*
41720          * Configured EXT EM with the given number of entries. All
41721          * the EXT EM tables KEY0, KEY1, RECORD, EFC all have the
41722          * same number of entries and all tables will be configured
41723          * using this value. Current minimum value is 32k. Current
41724          * maximum value is 128M.
41725          */
41726         uint32_t        num_entries;
41727         uint32_t        enables;
41728         /*
41729          * This bit must be '1' for the group_id field to be
41730          * configured.
41731          */
41732         #define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_GROUP_ID \
41733                 UINT32_C(0x1)
41734         /*
41735          * This bit must be '1' for the flush_interval field to be
41736          * configured.
41737          */
41738         #define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_FLUSH_INTERVAL \
41739                 UINT32_C(0x2)
41740         /*
41741          * This bit must be '1' for the num_entries field to be
41742          * configured.
41743          */
41744         #define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_NUM_ENTRIES \
41745                 UINT32_C(0x4)
41746         /*
41747          * This bit must be '1' for the key0_ctx_id field to be
41748          * configured.
41749          */
41750         #define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_KEY0_CTX_ID \
41751                 UINT32_C(0x8)
41752         /*
41753          * This bit must be '1' for the key1_ctx_id field to be
41754          * configured.
41755          */
41756         #define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_KEY1_CTX_ID \
41757                 UINT32_C(0x10)
41758         /*
41759          * This bit must be '1' for the record_ctx_id field to be
41760          * configured.
41761          */
41762         #define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_RECORD_CTX_ID \
41763                 UINT32_C(0x20)
41764         /*
41765          * This bit must be '1' for the efc_ctx_id field to be
41766          * configured.
41767          */
41768         #define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_EFC_CTX_ID \
41769                 UINT32_C(0x40)
41770         /*
41771          * This bit must be '1' for the fid_ctx_id field to be
41772          * configured.
41773          */
41774         #define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_FID_CTX_ID \
41775                 UINT32_C(0x80)
41776         /*
41777          * This bit must be '1' for the action_ctx_id field to be
41778          * configured.
41779          */
41780         #define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_ACTION_CTX_ID \
41781                 UINT32_C(0x100)
41782         /*
41783          * This bit must be '1' for the action_tbl_scope field to be
41784          * configured.
41785          */
41786         #define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_ACTION_TBL_SCOPE \
41787                 UINT32_C(0x200)
41788         /*
41789          * This bit must be '1' for the lkup_ctx_id field to be
41790          * configured.
41791          */
41792         #define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_LKUP_CTX_ID \
41793                 UINT32_C(0x400)
41794         /*
41795          * This bit must be '1' for the lkup_tbl_scope field to be
41796          * configured.
41797          */
41798         #define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_LKUP_TBL_SCOPE \
41799                 UINT32_C(0x800)
41800         /*
41801          * This bit must be '1' for the lkup_static_buckets field to be
41802          * configured.
41803          */
41804         #define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_LKUP_STATIC_BUCKETS \
41805                 UINT32_C(0x1000)
41806         /*
41807          * This bit must be '1' for the lkup_dynamic_buckets field to be
41808          * configured.
41809          */
41810         #define HWRM_TF_EXT_EM_CFG_INPUT_ENABLES_LKUP_DYNAMIC_BUCKETS \
41811                 UINT32_C(0x2000)
41812         /* Configured EXT EM with the given context if for KEY0 table. */
41813         uint16_t        key0_ctx_id;
41814         /* Configured EXT EM with the given context if for KEY1 table. */
41815         uint16_t        key1_ctx_id;
41816         /* Configured EXT EM with the given context if for RECORD table. */
41817         uint16_t        record_ctx_id;
41818         /* Configured EXT EM with the given context if for EFC table. */
41819         uint16_t        efc_ctx_id;
41820         /* Configured EXT EM with the given context if for EFC table. */
41821         uint16_t        fid_ctx_id;
41822         /* Context id of action table scope. */
41823         uint16_t        action_ctx_id;
41824         /* Table scope id used for action record entries. */
41825         uint16_t        action_tbl_scope;
41826         /* Context id of lookup table scope. */
41827         uint16_t        lkup_ctx_id;
41828         /* Table scope id used for EM lookup entries. */
41829         uint16_t        lkup_tbl_scope;
41830         /* unused. */
41831         uint16_t        unused1;
41832         /*
41833          * Number of 32B static buckets to be allocated at the beginning
41834          * of table scope.
41835          */
41836         uint32_t        lkup_static_buckets;
41837         /* Number of 32B dynamic buckets to be allocated. */
41838         uint32_t        lkup_dynamic_buckets;
41839         /* unused. */
41840         uint32_t        unused2;
41841 } __rte_packed;
41842
41843 /* hwrm_tf_ext_em_cfg_output (size:128b/16B) */
41844 struct hwrm_tf_ext_em_cfg_output {
41845         /* The specific error status for the command. */
41846         uint16_t        error_code;
41847         /* The HWRM command request type. */
41848         uint16_t        req_type;
41849         /* The sequence ID from the original command. */
41850         uint16_t        seq_id;
41851         /* The length of the response data in number of bytes. */
41852         uint16_t        resp_len;
41853         /* unused. */
41854         uint8_t unused0[7];
41855         /*
41856          * This field is used in Output records to indicate that the
41857          * output is completely written to RAM. This field should be
41858          * read as '1' to indicate that the output has been
41859          * completely written.  When writing a command completion or
41860          * response to an internal processor, the order of writes has
41861          * to be such that this field is written last.
41862          */
41863         uint8_t valid;
41864 } __rte_packed;
41865
41866 /***********************
41867  * hwrm_tf_ext_em_qcfg *
41868  ***********************/
41869
41870
41871 /* hwrm_tf_ext_em_qcfg_input (size:192b/24B) */
41872 struct hwrm_tf_ext_em_qcfg_input {
41873         /* The HWRM command request type. */
41874         uint16_t        req_type;
41875         /*
41876          * The completion ring to send the completion event on. This should
41877          * be the NQ ID returned from the `nq_alloc` HWRM command.
41878          */
41879         uint16_t        cmpl_ring;
41880         /*
41881          * The sequence ID is used by the driver for tracking multiple
41882          * commands. This ID is treated as opaque data by the firmware and
41883          * the value is returned in the `hwrm_resp_hdr` upon completion.
41884          */
41885         uint16_t        seq_id;
41886         /*
41887          * The target ID of the command:
41888          * * 0x0-0xFFF8 - The function ID
41889          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
41890          * * 0xFFFD - Reserved for user-space HWRM interface
41891          * * 0xFFFF - HWRM
41892          */
41893         uint16_t        target_id;
41894         /*
41895          * A physical address pointer pointing to a host buffer that the
41896          * command's response data will be written. This can be either a host
41897          * physical address (HPA) or a guest physical address (GPA) and must
41898          * point to a physically contiguous block of memory.
41899          */
41900         uint64_t        resp_addr;
41901         /* Control flags. */
41902         uint32_t        flags;
41903         /* Indicates the flow direction. */
41904         #define HWRM_TF_EXT_EM_QCFG_INPUT_FLAGS_DIR     UINT32_C(0x1)
41905         /* If this bit set to 0, then it indicates rx flow. */
41906         #define HWRM_TF_EXT_EM_QCFG_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
41907         /* If this bit is set to 1, then it indicates that tx flow. */
41908         #define HWRM_TF_EXT_EM_QCFG_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
41909         #define HWRM_TF_EXT_EM_QCFG_INPUT_FLAGS_DIR_LAST \
41910                 HWRM_TF_EXT_EM_QCFG_INPUT_FLAGS_DIR_TX
41911         /* unused. */
41912         uint32_t        unused0;
41913 } __rte_packed;
41914
41915 /* hwrm_tf_ext_em_qcfg_output (size:448b/56B) */
41916 struct hwrm_tf_ext_em_qcfg_output {
41917         /* The specific error status for the command. */
41918         uint16_t        error_code;
41919         /* The HWRM command request type. */
41920         uint16_t        req_type;
41921         /* The sequence ID from the original command. */
41922         uint16_t        seq_id;
41923         /* The length of the response data in number of bytes. */
41924         uint16_t        resp_len;
41925         /* Control flags. */
41926         uint32_t        flags;
41927         /* Indicates the flow direction. */
41928         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_FLAGS_DIR \
41929                 UINT32_C(0x1)
41930         /* If this bit set to 0, then it indicates rx flow. */
41931         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_FLAGS_DIR_RX \
41932                 UINT32_C(0x0)
41933         /* If this bit is set to 1, then it indicates that tx flow. */
41934         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_FLAGS_DIR_TX \
41935                 UINT32_C(0x1)
41936         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_FLAGS_DIR_LAST \
41937                 HWRM_TF_EXT_EM_QCFG_OUTPUT_FLAGS_DIR_TX
41938         /* When set to 1, all offloaded flows will be sent to EXT EM. */
41939         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_FLAGS_PREFERRED_OFFLOAD \
41940                 UINT32_C(0x2)
41941         /* The number of entries the FW has configured for EXT EM. */
41942         uint32_t        num_entries;
41943         /* Configured EXT EM with the given context if for KEY0 table. */
41944         uint16_t        key0_ctx_id;
41945         /* Configured EXT EM with the given context if for KEY1 table. */
41946         uint16_t        key1_ctx_id;
41947         /* Configured EXT EM with the given context if for RECORD table. */
41948         uint16_t        record_ctx_id;
41949         /* Configured EXT EM with the given context if for EFC table. */
41950         uint16_t        efc_ctx_id;
41951         /* Configured EXT EM with the given context if for EFC table. */
41952         uint16_t        fid_ctx_id;
41953         /* unused. */
41954         uint16_t        unused0;
41955         uint32_t        supported;
41956         /* This bit must be '1' for the group_id field is set. */
41957         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_GROUP_ID \
41958                 UINT32_C(0x1)
41959         /* This bit must be '1' for the flush_interval field is set. */
41960         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_FLUSH_INTERVAL \
41961                 UINT32_C(0x2)
41962         /* This bit must be '1' for the num_entries field is set. */
41963         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_NUM_ENTRIES \
41964                 UINT32_C(0x4)
41965         /* This bit must be '1' for the key0_ctx_id field is set. */
41966         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_KEY0_CTX_ID \
41967                 UINT32_C(0x8)
41968         /* This bit must be '1' for the key1_ctx_id field is set. */
41969         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_KEY1_CTX_ID \
41970                 UINT32_C(0x10)
41971         /* This bit must be '1' for the record_ctx_id field is set. */
41972         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_RECORD_CTX_ID \
41973                 UINT32_C(0x20)
41974         /* This bit must be '1' for the efc_ctx_id field is set. */
41975         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_EFC_CTX_ID \
41976                 UINT32_C(0x40)
41977         /* This bit must be '1' for the fid_ctx_id field is set. */
41978         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_FID_CTX_ID \
41979                 UINT32_C(0x80)
41980         /* This bit must be '1' for the action_ctx_id field is set. */
41981         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_ACTION_CTX_ID \
41982                 UINT32_C(0x100)
41983         /* This bit must be '1' for the action_tbl_scope field is set. */
41984         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_ACTION_TBL_SCOPE \
41985                 UINT32_C(0x200)
41986         /* This bit must be '1' for the lkup_ctx_id field is set. */
41987         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_LKUP_CTX_ID \
41988                 UINT32_C(0x400)
41989         /* This bit must be '1' for the lkup_tbl_scope field is set. */
41990         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_LKUP_TBL_SCOPE \
41991                 UINT32_C(0x800)
41992         /* This bit must be '1' for the lkup_static_buckets field is set. */
41993         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_LKUP_STATIC_BUCKETS \
41994                 UINT32_C(0x1000)
41995         /* This bit must be '1' for the lkup_dynamic_buckets field is set. */
41996         #define HWRM_TF_EXT_EM_QCFG_OUTPUT_SUPPORTED_LKUP_DYNAMIC_BUCKETS \
41997                 UINT32_C(0x2000)
41998         /*
41999          * Group id is used by firmware to identify memory pools belonging
42000          * to certain group.
42001          */
42002         uint16_t        group_id;
42003         /* EEM pending cache flush interval in 1/10th of second. */
42004         uint8_t flush_interval;
42005         /* unused. */
42006         uint8_t unused1;
42007         /* Context id of action table scope. */
42008         uint16_t        action_ctx_id;
42009         /* Table scope id used for action record entries. */
42010         uint16_t        action_tbl_scope;
42011         /* Context id of lookup table scope. */
42012         uint16_t        lkup_ctx_id;
42013         /* Table scope id used for EM lookup entries. */
42014         uint16_t        lkup_tbl_scope;
42015         /*
42016          * Number of 32B static buckets to be allocated at the beginning
42017          * of table scope.
42018          */
42019         uint32_t        lkup_static_buckets;
42020         /* Number of 32B dynamic buckets to be allocated. */
42021         uint32_t        lkup_dynamic_buckets;
42022         /* unused. */
42023         uint8_t unused2[3];
42024         /*
42025          * This field is used in Output records to indicate that the
42026          * output is completely written to RAM. This field should be
42027          * read as '1' to indicate that the output has been
42028          * completely written.  When writing a command completion or
42029          * response to an internal processor, the order of writes has
42030          * to be such that this field is written last.
42031          */
42032         uint8_t valid;
42033 } __rte_packed;
42034
42035 /*********************
42036  * hwrm_tf_em_insert *
42037  *********************/
42038
42039
42040 /* hwrm_tf_em_insert_input (size:832b/104B) */
42041 struct hwrm_tf_em_insert_input {
42042         /* The HWRM command request type. */
42043         uint16_t        req_type;
42044         /*
42045          * The completion ring to send the completion event on. This should
42046          * be the NQ ID returned from the `nq_alloc` HWRM command.
42047          */
42048         uint16_t        cmpl_ring;
42049         /*
42050          * The sequence ID is used by the driver for tracking multiple
42051          * commands. This ID is treated as opaque data by the firmware and
42052          * the value is returned in the `hwrm_resp_hdr` upon completion.
42053          */
42054         uint16_t        seq_id;
42055         /*
42056          * The target ID of the command:
42057          * * 0x0-0xFFF8 - The function ID
42058          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42059          * * 0xFFFD - Reserved for user-space HWRM interface
42060          * * 0xFFFF - HWRM
42061          */
42062         uint16_t        target_id;
42063         /*
42064          * A physical address pointer pointing to a host buffer that the
42065          * command's response data will be written. This can be either a host
42066          * physical address (HPA) or a guest physical address (GPA) and must
42067          * point to a physically contiguous block of memory.
42068          */
42069         uint64_t        resp_addr;
42070         /* Firmware Session Id. */
42071         uint32_t        fw_session_id;
42072         /* Control Flags. */
42073         uint16_t        flags;
42074         /* Indicates the flow direction. */
42075         #define HWRM_TF_EM_INSERT_INPUT_FLAGS_DIR     UINT32_C(0x1)
42076         /* If this bit set to 0, then it indicates rx flow. */
42077         #define HWRM_TF_EM_INSERT_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
42078         /* If this bit is set to 1, then it indicates that tx flow. */
42079         #define HWRM_TF_EM_INSERT_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
42080         #define HWRM_TF_EM_INSERT_INPUT_FLAGS_DIR_LAST \
42081                 HWRM_TF_EM_INSERT_INPUT_FLAGS_DIR_TX
42082         /* Reported match strength. */
42083         uint16_t        strength;
42084         /* Index to action. */
42085         uint32_t        action_ptr;
42086         /* Index of EM record. */
42087         uint32_t        em_record_idx;
42088         /* EM Key value. */
42089         uint64_t        em_key[8];
42090         /* Number of bits in em_key. */
42091         uint16_t        em_key_bitlen;
42092         /* unused. */
42093         uint16_t        unused0[3];
42094 } __rte_packed;
42095
42096 /* hwrm_tf_em_insert_output (size:128b/16B) */
42097 struct hwrm_tf_em_insert_output {
42098         /* The specific error status for the command. */
42099         uint16_t        error_code;
42100         /* The HWRM command request type. */
42101         uint16_t        req_type;
42102         /* The sequence ID from the original command. */
42103         uint16_t        seq_id;
42104         /* The length of the response data in number of bytes. */
42105         uint16_t        resp_len;
42106         /* EM record pointer index. */
42107         uint16_t        rptr_index;
42108         /* EM record offset 0~3. */
42109         uint8_t rptr_entry;
42110         /* Number of word entries consumed by the key. */
42111         uint8_t num_of_entries;
42112         /* unused. */
42113         uint32_t        unused0;
42114 } __rte_packed;
42115
42116 /*********************
42117  * hwrm_tf_em_delete *
42118  *********************/
42119
42120
42121 /* hwrm_tf_em_delete_input (size:832b/104B) */
42122 struct hwrm_tf_em_delete_input {
42123         /* The HWRM command request type. */
42124         uint16_t        req_type;
42125         /*
42126          * The completion ring to send the completion event on. This should
42127          * be the NQ ID returned from the `nq_alloc` HWRM command.
42128          */
42129         uint16_t        cmpl_ring;
42130         /*
42131          * The sequence ID is used by the driver for tracking multiple
42132          * commands. This ID is treated as opaque data by the firmware and
42133          * the value is returned in the `hwrm_resp_hdr` upon completion.
42134          */
42135         uint16_t        seq_id;
42136         /*
42137          * The target ID of the command:
42138          * * 0x0-0xFFF8 - The function ID
42139          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42140          * * 0xFFFD - Reserved for user-space HWRM interface
42141          * * 0xFFFF - HWRM
42142          */
42143         uint16_t        target_id;
42144         /*
42145          * A physical address pointer pointing to a host buffer that the
42146          * command's response data will be written. This can be either a host
42147          * physical address (HPA) or a guest physical address (GPA) and must
42148          * point to a physically contiguous block of memory.
42149          */
42150         uint64_t        resp_addr;
42151         /* Session Id. */
42152         uint32_t        fw_session_id;
42153         /* Control flags. */
42154         uint16_t        flags;
42155         /* Indicates the flow direction. */
42156         #define HWRM_TF_EM_DELETE_INPUT_FLAGS_DIR     UINT32_C(0x1)
42157         /* If this bit set to 0, then it indicates rx flow. */
42158         #define HWRM_TF_EM_DELETE_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
42159         /* If this bit is set to 1, then it indicates that tx flow. */
42160         #define HWRM_TF_EM_DELETE_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
42161         #define HWRM_TF_EM_DELETE_INPUT_FLAGS_DIR_LAST \
42162                 HWRM_TF_EM_DELETE_INPUT_FLAGS_DIR_TX
42163         /* Unused0 */
42164         uint16_t        unused0;
42165         /* EM internal flow hanndle. */
42166         uint64_t        flow_handle;
42167         /* EM Key value */
42168         uint64_t        em_key[8];
42169         /* Number of bits in em_key. */
42170         uint16_t        em_key_bitlen;
42171         /* unused. */
42172         uint16_t        unused1[3];
42173 } __rte_packed;
42174
42175 /* hwrm_tf_em_delete_output (size:128b/16B) */
42176 struct hwrm_tf_em_delete_output {
42177         /* The specific error status for the command. */
42178         uint16_t        error_code;
42179         /* The HWRM command request type. */
42180         uint16_t        req_type;
42181         /* The sequence ID from the original command. */
42182         uint16_t        seq_id;
42183         /* The length of the response data in number of bytes. */
42184         uint16_t        resp_len;
42185         /* Original stack allocation index. */
42186         uint16_t        em_index;
42187         /* unused. */
42188         uint16_t        unused0[3];
42189 } __rte_packed;
42190
42191 /********************
42192  * hwrm_tf_tcam_set *
42193  ********************/
42194
42195
42196 /* hwrm_tf_tcam_set_input (size:1024b/128B) */
42197 struct hwrm_tf_tcam_set_input {
42198         /* The HWRM command request type. */
42199         uint16_t        req_type;
42200         /*
42201          * The completion ring to send the completion event on. This should
42202          * be the NQ ID returned from the `nq_alloc` HWRM command.
42203          */
42204         uint16_t        cmpl_ring;
42205         /*
42206          * The sequence ID is used by the driver for tracking multiple
42207          * commands. This ID is treated as opaque data by the firmware and
42208          * the value is returned in the `hwrm_resp_hdr` upon completion.
42209          */
42210         uint16_t        seq_id;
42211         /*
42212          * The target ID of the command:
42213          * * 0x0-0xFFF8 - The function ID
42214          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42215          * * 0xFFFD - Reserved for user-space HWRM interface
42216          * * 0xFFFF - HWRM
42217          */
42218         uint16_t        target_id;
42219         /*
42220          * A physical address pointer pointing to a host buffer that the
42221          * command's response data will be written. This can be either a host
42222          * physical address (HPA) or a guest physical address (GPA) and must
42223          * point to a physically contiguous block of memory.
42224          */
42225         uint64_t        resp_addr;
42226         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
42227         uint32_t        fw_session_id;
42228         /* Control flags. */
42229         uint32_t        flags;
42230         /* Indicates the flow direction. */
42231         #define HWRM_TF_TCAM_SET_INPUT_FLAGS_DIR     UINT32_C(0x1)
42232         /* If this bit set to 0, then it indicates rx flow. */
42233         #define HWRM_TF_TCAM_SET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
42234         /* If this bit is set to 1, then it indicates that tx flow. */
42235         #define HWRM_TF_TCAM_SET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
42236         #define HWRM_TF_TCAM_SET_INPUT_FLAGS_DIR_LAST \
42237                 HWRM_TF_TCAM_SET_INPUT_FLAGS_DIR_TX
42238         /*
42239          * Indicate device data is being sent via DMA, the device
42240          * data is packing does not change.
42241          */
42242         #define HWRM_TF_TCAM_SET_INPUT_FLAGS_DMA     UINT32_C(0x2)
42243         /*
42244          * TCAM type of the resource, defined globally in the
42245          * hwrm_tf_resc_type enum.
42246          */
42247         uint32_t        type;
42248         /* Index of TCAM entry. */
42249         uint16_t        idx;
42250         /* Number of bytes in the TCAM key. */
42251         uint8_t key_size;
42252         /* Number of bytes in the TCAM result. */
42253         uint8_t result_size;
42254         /*
42255          * Offset from which the mask bytes start in the device data
42256          * array, key offset is always 0.
42257          */
42258         uint8_t mask_offset;
42259         /* Offset from which the result bytes start in the device data array. */
42260         uint8_t result_offset;
42261         /* unused. */
42262         uint8_t unused0[6];
42263         /*
42264          * TCAM key located at offset 0, mask located at mask_offsec
42265          * and result at result_offsec for the device.
42266          */
42267         uint8_t dev_data[88];
42268 } __rte_packed;
42269
42270 /* hwrm_tf_tcam_set_output (size:128b/16B) */
42271 struct hwrm_tf_tcam_set_output {
42272         /* The specific error status for the command. */
42273         uint16_t        error_code;
42274         /* The HWRM command request type. */
42275         uint16_t        req_type;
42276         /* The sequence ID from the original command. */
42277         uint16_t        seq_id;
42278         /* The length of the response data in number of bytes. */
42279         uint16_t        resp_len;
42280         /* unused. */
42281         uint8_t unused0[7];
42282         /*
42283          * This field is used in Output records to indicate that the
42284          * output is completely written to RAM. This field should be
42285          * read as '1' to indicate that the output has been
42286          * completely written.  When writing a command completion or
42287          * response to an internal processor, the order of writes has
42288          * to be such that this field is written last.
42289          */
42290         uint8_t valid;
42291 } __rte_packed;
42292
42293 /********************
42294  * hwrm_tf_tcam_get *
42295  ********************/
42296
42297
42298 /* hwrm_tf_tcam_get_input (size:256b/32B) */
42299 struct hwrm_tf_tcam_get_input {
42300         /* The HWRM command request type. */
42301         uint16_t        req_type;
42302         /*
42303          * The completion ring to send the completion event on. This should
42304          * be the NQ ID returned from the `nq_alloc` HWRM command.
42305          */
42306         uint16_t        cmpl_ring;
42307         /*
42308          * The sequence ID is used by the driver for tracking multiple
42309          * commands. This ID is treated as opaque data by the firmware and
42310          * the value is returned in the `hwrm_resp_hdr` upon completion.
42311          */
42312         uint16_t        seq_id;
42313         /*
42314          * The target ID of the command:
42315          * * 0x0-0xFFF8 - The function ID
42316          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42317          * * 0xFFFD - Reserved for user-space HWRM interface
42318          * * 0xFFFF - HWRM
42319          */
42320         uint16_t        target_id;
42321         /*
42322          * A physical address pointer pointing to a host buffer that the
42323          * command's response data will be written. This can be either a host
42324          * physical address (HPA) or a guest physical address (GPA) and must
42325          * point to a physically contiguous block of memory.
42326          */
42327         uint64_t        resp_addr;
42328         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
42329         uint32_t        fw_session_id;
42330         /* Control flags. */
42331         uint32_t        flags;
42332         /* Indicates the flow direction. */
42333         #define HWRM_TF_TCAM_GET_INPUT_FLAGS_DIR     UINT32_C(0x1)
42334         /* If this bit set to 0, then it indicates rx flow. */
42335         #define HWRM_TF_TCAM_GET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
42336         /* If this bit is set to 1, then it indicates that tx flow. */
42337         #define HWRM_TF_TCAM_GET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
42338         #define HWRM_TF_TCAM_GET_INPUT_FLAGS_DIR_LAST \
42339                 HWRM_TF_TCAM_GET_INPUT_FLAGS_DIR_TX
42340         /*
42341          * TCAM type of the resource, defined globally in the
42342          * hwrm_tf_resc_type enum.
42343          */
42344         uint32_t        type;
42345         /* Index of a TCAM entry. */
42346         uint16_t        idx;
42347         /* unused. */
42348         uint16_t        unused0;
42349 } __rte_packed;
42350
42351 /* hwrm_tf_tcam_get_output (size:2368b/296B) */
42352 struct hwrm_tf_tcam_get_output {
42353         /* The specific error status for the command. */
42354         uint16_t        error_code;
42355         /* The HWRM command request type. */
42356         uint16_t        req_type;
42357         /* The sequence ID from the original command. */
42358         uint16_t        seq_id;
42359         /* The length of the response data in number of bytes. */
42360         uint16_t        resp_len;
42361         /* Number of bytes in the TCAM key. */
42362         uint8_t key_size;
42363         /* Number of bytes in the TCAM entry. */
42364         uint8_t result_size;
42365         /* Offset from which the mask bytes start in the device data array. */
42366         uint8_t mask_offset;
42367         /* Offset from which the result bytes start in the device data array. */
42368         uint8_t result_offset;
42369         /* unused. */
42370         uint8_t unused0[4];
42371         /*
42372          * TCAM key located at offset 0, mask located at mask_offsec
42373          * and result at result_offsec for the device.
42374          */
42375         uint8_t dev_data[272];
42376         /* unused. */
42377         uint8_t unused1[7];
42378         /*
42379          * This field is used in Output records to indicate that the
42380          * output is completely written to RAM. This field should be
42381          * read as '1' to indicate that the output has been
42382          * completely written.  When writing a command completion or
42383          * response to an internal processor, the order of writes has
42384          * to be such that this field is written last.
42385          */
42386         uint8_t valid;
42387 } __rte_packed;
42388
42389 /*********************
42390  * hwrm_tf_tcam_move *
42391  *********************/
42392
42393
42394 /* hwrm_tf_tcam_move_input (size:1024b/128B) */
42395 struct hwrm_tf_tcam_move_input {
42396         /* The HWRM command request type. */
42397         uint16_t        req_type;
42398         /*
42399          * The completion ring to send the completion event on. This should
42400          * be the NQ ID returned from the `nq_alloc` HWRM command.
42401          */
42402         uint16_t        cmpl_ring;
42403         /*
42404          * The sequence ID is used by the driver for tracking multiple
42405          * commands. This ID is treated as opaque data by the firmware and
42406          * the value is returned in the `hwrm_resp_hdr` upon completion.
42407          */
42408         uint16_t        seq_id;
42409         /*
42410          * The target ID of the command:
42411          * * 0x0-0xFFF8 - The function ID
42412          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42413          * * 0xFFFD - Reserved for user-space HWRM interface
42414          * * 0xFFFF - HWRM
42415          */
42416         uint16_t        target_id;
42417         /*
42418          * A physical address pointer pointing to a host buffer that the
42419          * command's response data will be written. This can be either a host
42420          * physical address (HPA) or a guest physical address (GPA) and must
42421          * point to a physically contiguous block of memory.
42422          */
42423         uint64_t        resp_addr;
42424         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
42425         uint32_t        fw_session_id;
42426         /* Control flags. */
42427         uint32_t        flags;
42428         /* Indicates the flow direction. */
42429         #define HWRM_TF_TCAM_MOVE_INPUT_FLAGS_DIR     UINT32_C(0x1)
42430         /* If this bit set to 0, then it indicates rx flow. */
42431         #define HWRM_TF_TCAM_MOVE_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
42432         /* If this bit is set to 1, then it indicates that tx flow. */
42433         #define HWRM_TF_TCAM_MOVE_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
42434         #define HWRM_TF_TCAM_MOVE_INPUT_FLAGS_DIR_LAST \
42435                 HWRM_TF_TCAM_MOVE_INPUT_FLAGS_DIR_TX
42436         /*
42437          * TCAM type of the resource, defined globally in the
42438          * hwrm_tf_resc_type enum.
42439          */
42440         uint32_t        type;
42441         /* Number of TCAM index pairs to be swapped for the device. */
42442         uint16_t        count;
42443         /* unused. */
42444         uint16_t        unused0;
42445         /* TCAM index pairs to be swapped for the device. */
42446         uint16_t        idx_pairs[48];
42447 } __rte_packed;
42448
42449 /* hwrm_tf_tcam_move_output (size:128b/16B) */
42450 struct hwrm_tf_tcam_move_output {
42451         /* The specific error status for the command. */
42452         uint16_t        error_code;
42453         /* The HWRM command request type. */
42454         uint16_t        req_type;
42455         /* The sequence ID from the original command. */
42456         uint16_t        seq_id;
42457         /* The length of the response data in number of bytes. */
42458         uint16_t        resp_len;
42459         /* unused. */
42460         uint8_t unused0[7];
42461         /*
42462          * This field is used in Output records to indicate that the
42463          * output is completely written to RAM. This field should be
42464          * read as '1' to indicate that the output has been
42465          * completely written.  When writing a command completion or
42466          * response to an internal processor, the order of writes has
42467          * to be such that this field is written last.
42468          */
42469         uint8_t valid;
42470 } __rte_packed;
42471
42472 /*********************
42473  * hwrm_tf_tcam_free *
42474  *********************/
42475
42476
42477 /* hwrm_tf_tcam_free_input (size:1024b/128B) */
42478 struct hwrm_tf_tcam_free_input {
42479         /* The HWRM command request type. */
42480         uint16_t        req_type;
42481         /*
42482          * The completion ring to send the completion event on. This should
42483          * be the NQ ID returned from the `nq_alloc` HWRM command.
42484          */
42485         uint16_t        cmpl_ring;
42486         /*
42487          * The sequence ID is used by the driver for tracking multiple
42488          * commands. This ID is treated as opaque data by the firmware and
42489          * the value is returned in the `hwrm_resp_hdr` upon completion.
42490          */
42491         uint16_t        seq_id;
42492         /*
42493          * The target ID of the command:
42494          * * 0x0-0xFFF8 - The function ID
42495          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42496          * * 0xFFFD - Reserved for user-space HWRM interface
42497          * * 0xFFFF - HWRM
42498          */
42499         uint16_t        target_id;
42500         /*
42501          * A physical address pointer pointing to a host buffer that the
42502          * command's response data will be written. This can be either a host
42503          * physical address (HPA) or a guest physical address (GPA) and must
42504          * point to a physically contiguous block of memory.
42505          */
42506         uint64_t        resp_addr;
42507         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
42508         uint32_t        fw_session_id;
42509         /* Control flags. */
42510         uint32_t        flags;
42511         /* Indicates the flow direction. */
42512         #define HWRM_TF_TCAM_FREE_INPUT_FLAGS_DIR     UINT32_C(0x1)
42513         /* If this bit set to 0, then it indicates rx flow. */
42514         #define HWRM_TF_TCAM_FREE_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
42515         /* If this bit is set to 1, then it indicates that tx flow. */
42516         #define HWRM_TF_TCAM_FREE_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
42517         #define HWRM_TF_TCAM_FREE_INPUT_FLAGS_DIR_LAST \
42518                 HWRM_TF_TCAM_FREE_INPUT_FLAGS_DIR_TX
42519         /*
42520          * TCAM type of the resource, defined globally in the
42521          * hwrm_tf_resc_type enum.
42522          */
42523         uint32_t        type;
42524         /* Number of TCAM index to be deleted for the device. */
42525         uint16_t        count;
42526         /* unused. */
42527         uint16_t        unused0;
42528         /* TCAM index list to be deleted for the device. */
42529         uint16_t        idx_list[48];
42530 } __rte_packed;
42531
42532 /* hwrm_tf_tcam_free_output (size:128b/16B) */
42533 struct hwrm_tf_tcam_free_output {
42534         /* The specific error status for the command. */
42535         uint16_t        error_code;
42536         /* The HWRM command request type. */
42537         uint16_t        req_type;
42538         /* The sequence ID from the original command. */
42539         uint16_t        seq_id;
42540         /* The length of the response data in number of bytes. */
42541         uint16_t        resp_len;
42542         /* unused. */
42543         uint8_t unused0[7];
42544         /*
42545          * This field is used in Output records to indicate that the
42546          * output is completely written to RAM. This field should be
42547          * read as '1' to indicate that the output has been
42548          * completely written.  When writing a command completion or
42549          * response to an internal processor, the order of writes has
42550          * to be such that this field is written last.
42551          */
42552         uint8_t valid;
42553 } __rte_packed;
42554
42555 /**************************
42556  * hwrm_tf_global_cfg_set *
42557  **************************/
42558
42559
42560 /* hwrm_tf_global_cfg_set_input (size:448b/56B) */
42561 struct hwrm_tf_global_cfg_set_input {
42562         /* The HWRM command request type. */
42563         uint16_t        req_type;
42564         /*
42565          * The completion ring to send the completion event on. This should
42566          * be the NQ ID returned from the `nq_alloc` HWRM command.
42567          */
42568         uint16_t        cmpl_ring;
42569         /*
42570          * The sequence ID is used by the driver for tracking multiple
42571          * commands. This ID is treated as opaque data by the firmware and
42572          * the value is returned in the `hwrm_resp_hdr` upon completion.
42573          */
42574         uint16_t        seq_id;
42575         /*
42576          * The target ID of the command:
42577          * * 0x0-0xFFF8 - The function ID
42578          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42579          * * 0xFFFD - Reserved for user-space HWRM interface
42580          * * 0xFFFF - HWRM
42581          */
42582         uint16_t        target_id;
42583         /*
42584          * A physical address pointer pointing to a host buffer that the
42585          * command's response data will be written. This can be either a host
42586          * physical address (HPA) or a guest physical address (GPA) and must
42587          * point to a physically contiguous block of memory.
42588          */
42589         uint64_t        resp_addr;
42590         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
42591         uint32_t        fw_session_id;
42592         /* Control flags. */
42593         uint32_t        flags;
42594         /* Indicates the flow direction. */
42595         #define HWRM_TF_GLOBAL_CFG_SET_INPUT_FLAGS_DIR     UINT32_C(0x1)
42596         /* If this bit set to 0, then it indicates rx flow. */
42597         #define HWRM_TF_GLOBAL_CFG_SET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
42598         /* If this bit is set to 1, then it indicates that tx flow. */
42599         #define HWRM_TF_GLOBAL_CFG_SET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
42600         #define HWRM_TF_GLOBAL_CFG_SET_INPUT_FLAGS_DIR_LAST \
42601                 HWRM_TF_GLOBAL_CFG_SET_INPUT_FLAGS_DIR_TX
42602         /* Global Cfg type */
42603         uint32_t        type;
42604         /* Offset of the type */
42605         uint32_t        offset;
42606         /* Size of the data to set in bytes */
42607         uint16_t        size;
42608         /* unused. */
42609         uint8_t unused0[6];
42610         /* Data to set */
42611         uint8_t data[8];
42612         /* Mask of data to set, 0 indicates no mask */
42613         uint8_t mask[8];
42614 } __rte_packed;
42615
42616 /* hwrm_tf_global_cfg_set_output (size:128b/16B) */
42617 struct hwrm_tf_global_cfg_set_output {
42618         /* The specific error status for the command. */
42619         uint16_t        error_code;
42620         /* The HWRM command request type. */
42621         uint16_t        req_type;
42622         /* The sequence ID from the original command. */
42623         uint16_t        seq_id;
42624         /* The length of the response data in number of bytes. */
42625         uint16_t        resp_len;
42626         /* unused. */
42627         uint8_t unused0[7];
42628         /*
42629          * This field is used in Output records to indicate that the
42630          * output is completely written to RAM. This field should be
42631          * read as '1' to indicate that the output has been
42632          * completely written.  When writing a command completion or
42633          * response to an internal processor, the order of writes has
42634          * to be such that this field is written last.
42635          */
42636         uint8_t valid;
42637 } __rte_packed;
42638
42639 /**************************
42640  * hwrm_tf_global_cfg_get *
42641  **************************/
42642
42643
42644 /* hwrm_tf_global_cfg_get_input (size:320b/40B) */
42645 struct hwrm_tf_global_cfg_get_input {
42646         /* The HWRM command request type. */
42647         uint16_t        req_type;
42648         /*
42649          * The completion ring to send the completion event on. This should
42650          * be the NQ ID returned from the `nq_alloc` HWRM command.
42651          */
42652         uint16_t        cmpl_ring;
42653         /*
42654          * The sequence ID is used by the driver for tracking multiple
42655          * commands. This ID is treated as opaque data by the firmware and
42656          * the value is returned in the `hwrm_resp_hdr` upon completion.
42657          */
42658         uint16_t        seq_id;
42659         /*
42660          * The target ID of the command:
42661          * * 0x0-0xFFF8 - The function ID
42662          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42663          * * 0xFFFD - Reserved for user-space HWRM interface
42664          * * 0xFFFF - HWRM
42665          */
42666         uint16_t        target_id;
42667         /*
42668          * A physical address pointer pointing to a host buffer that the
42669          * command's response data will be written. This can be either a host
42670          * physical address (HPA) or a guest physical address (GPA) and must
42671          * point to a physically contiguous block of memory.
42672          */
42673         uint64_t        resp_addr;
42674         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
42675         uint32_t        fw_session_id;
42676         /* Control flags. */
42677         uint32_t        flags;
42678         /* Indicates the flow direction. */
42679         #define HWRM_TF_GLOBAL_CFG_GET_INPUT_FLAGS_DIR     UINT32_C(0x1)
42680         /* If this bit set to 0, then it indicates rx flow. */
42681         #define HWRM_TF_GLOBAL_CFG_GET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
42682         /* If this bit is set to 1, then it indicates that tx flow. */
42683         #define HWRM_TF_GLOBAL_CFG_GET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
42684         #define HWRM_TF_GLOBAL_CFG_GET_INPUT_FLAGS_DIR_LAST \
42685                 HWRM_TF_GLOBAL_CFG_GET_INPUT_FLAGS_DIR_TX
42686         /* Global Cfg type */
42687         uint32_t        type;
42688         /* Offset of the type */
42689         uint32_t        offset;
42690         /* Size of the data to set in bytes */
42691         uint16_t        size;
42692         /* unused. */
42693         uint8_t unused0[6];
42694 } __rte_packed;
42695
42696 /* hwrm_tf_global_cfg_get_output (size:256b/32B) */
42697 struct hwrm_tf_global_cfg_get_output {
42698         /* The specific error status for the command. */
42699         uint16_t        error_code;
42700         /* The HWRM command request type. */
42701         uint16_t        req_type;
42702         /* The sequence ID from the original command. */
42703         uint16_t        seq_id;
42704         /* The length of the response data in number of bytes. */
42705         uint16_t        resp_len;
42706         /* Size of the data read in bytes */
42707         uint16_t        size;
42708         /* unused. */
42709         uint8_t unused0[6];
42710         /* Data to set */
42711         uint8_t data[16];
42712 } __rte_packed;
42713
42714 /**********************
42715  * hwrm_tf_if_tbl_get *
42716  **********************/
42717
42718
42719 /* hwrm_tf_if_tbl_get_input (size:256b/32B) */
42720 struct hwrm_tf_if_tbl_get_input {
42721         /* The HWRM command request type. */
42722         uint16_t        req_type;
42723         /*
42724          * The completion ring to send the completion event on. This should
42725          * be the NQ ID returned from the `nq_alloc` HWRM command.
42726          */
42727         uint16_t        cmpl_ring;
42728         /*
42729          * The sequence ID is used by the driver for tracking multiple
42730          * commands. This ID is treated as opaque data by the firmware and
42731          * the value is returned in the `hwrm_resp_hdr` upon completion.
42732          */
42733         uint16_t        seq_id;
42734         /*
42735          * The target ID of the command:
42736          * * 0x0-0xFFF8 - The function ID
42737          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42738          * * 0xFFFD - Reserved for user-space HWRM interface
42739          * * 0xFFFF - HWRM
42740          */
42741         uint16_t        target_id;
42742         /*
42743          * A physical address pointer pointing to a host buffer that the
42744          * command's response data will be written. This can be either a host
42745          * physical address (HPA) or a guest physical address (GPA) and must
42746          * point to a physically contiguous block of memory.
42747          */
42748         uint64_t        resp_addr;
42749         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
42750         uint32_t        fw_session_id;
42751         /* Control flags. */
42752         uint16_t        flags;
42753         /* Indicates the flow direction. */
42754         #define HWRM_TF_IF_TBL_GET_INPUT_FLAGS_DIR     UINT32_C(0x1)
42755         /* If this bit set to 0, then it indicates rx flow. */
42756         #define HWRM_TF_IF_TBL_GET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
42757         /* If this bit is set to 1, then it indicates that tx flow. */
42758         #define HWRM_TF_IF_TBL_GET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
42759         #define HWRM_TF_IF_TBL_GET_INPUT_FLAGS_DIR_LAST \
42760                 HWRM_TF_IF_TBL_GET_INPUT_FLAGS_DIR_TX
42761         /* Size of the data to set. */
42762         uint16_t        size;
42763         /*
42764          * Type of the resource, defined globally in the
42765          * hwrm_tf_resc_type enum.
42766          */
42767         uint32_t        type;
42768         /* Index of the type to retrieve. */
42769         uint32_t        index;
42770 } __rte_packed;
42771
42772 /* hwrm_tf_if_tbl_get_output (size:256b/32B) */
42773 struct hwrm_tf_if_tbl_get_output {
42774         /* The specific error status for the command. */
42775         uint16_t        error_code;
42776         /* The HWRM command request type. */
42777         uint16_t        req_type;
42778         /* The sequence ID from the original command. */
42779         uint16_t        seq_id;
42780         /* The length of the response data in number of bytes. */
42781         uint16_t        resp_len;
42782         /* Response code. */
42783         uint32_t        resp_code;
42784         /* Response size. */
42785         uint16_t        size;
42786         /* unused */
42787         uint16_t        unused0;
42788         /* Response data. */
42789         uint8_t data[8];
42790         /* unused */
42791         uint8_t unused1[7];
42792         /*
42793          * This field is used in Output records to indicate that the output
42794          * is completely written to RAM. This field should be read as '1'
42795          * to indicate that the output has been completely written.
42796          * When writing a command completion or response to an internal
42797          * processor, the order of writes has to be such that this field
42798          * is written last.
42799          */
42800         uint8_t valid;
42801 } __rte_packed;
42802
42803 /***************************
42804  * hwrm_tf_if_tbl_type_set *
42805  ***************************/
42806
42807
42808 /* hwrm_tf_if_tbl_set_input (size:384b/48B) */
42809 struct hwrm_tf_if_tbl_set_input {
42810         /* The HWRM command request type. */
42811         uint16_t        req_type;
42812         /*
42813          * The completion ring to send the completion event on. This should
42814          * be the NQ ID returned from the `nq_alloc` HWRM command.
42815          */
42816         uint16_t        cmpl_ring;
42817         /*
42818          * The sequence ID is used by the driver for tracking multiple
42819          * commands. This ID is treated as opaque data by the firmware and
42820          * the value is returned in the `hwrm_resp_hdr` upon completion.
42821          */
42822         uint16_t        seq_id;
42823         /*
42824          * The target ID of the command:
42825          * * 0x0-0xFFF8 - The function ID
42826          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42827          * * 0xFFFD - Reserved for user-space HWRM interface
42828          * * 0xFFFF - HWRM
42829          */
42830         uint16_t        target_id;
42831         /*
42832          * A physical address pointer pointing to a host buffer that the
42833          * command's response data will be written. This can be either a host
42834          * physical address (HPA) or a guest physical address (GPA) and must
42835          * point to a physically contiguous block of memory.
42836          */
42837         uint64_t        resp_addr;
42838         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
42839         uint32_t        fw_session_id;
42840         /* Control flags. */
42841         uint16_t        flags;
42842         /* Indicates the flow direction. */
42843         #define HWRM_TF_IF_TBL_SET_INPUT_FLAGS_DIR     UINT32_C(0x1)
42844         /* If this bit set to 0, then it indicates rx flow. */
42845         #define HWRM_TF_IF_TBL_SET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
42846         /* If this bit is set to 1, then it indicates that tx flow. */
42847         #define HWRM_TF_IF_TBL_SET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
42848         #define HWRM_TF_IF_TBL_SET_INPUT_FLAGS_DIR_LAST \
42849                 HWRM_TF_IF_TBL_SET_INPUT_FLAGS_DIR_TX
42850         /* unused. */
42851         uint8_t unused0[2];
42852         /*
42853          * Type of the resource, defined globally in the
42854          * hwrm_tf_resc_type enum.
42855          */
42856         uint32_t        type;
42857         /* Index of the type to set. */
42858         uint32_t        index;
42859         /* Size of the data to set. */
42860         uint16_t        size;
42861         /* unused */
42862         uint8_t unused1[6];
42863         /* Data to be set. */
42864         uint8_t data[8];
42865 } __rte_packed;
42866
42867 /* hwrm_tf_if_tbl_set_output (size:128b/16B) */
42868 struct hwrm_tf_if_tbl_set_output {
42869         /* The specific error status for the command. */
42870         uint16_t        error_code;
42871         /* The HWRM command request type. */
42872         uint16_t        req_type;
42873         /* The sequence ID from the original command. */
42874         uint16_t        seq_id;
42875         /* The length of the response data in number of bytes. */
42876         uint16_t        resp_len;
42877         /* unused. */
42878         uint8_t unused0[7];
42879         /*
42880          * This field is used in Output records to indicate that the output
42881          * is completely written to RAM. This field should be read as '1'
42882          * to indicate that the output has been completely written.
42883          * When writing a command completion or response to an internal
42884          * processor, the order of writes has to be such that this field
42885          * is written last.
42886          */
42887         uint8_t valid;
42888 } __rte_packed;
42889
42890 /*****************************
42891  * hwrm_tf_tbl_type_bulk_get *
42892  *****************************/
42893
42894
42895 /* hwrm_tf_tbl_type_bulk_get_input (size:384b/48B) */
42896 struct hwrm_tf_tbl_type_bulk_get_input {
42897         /* The HWRM command request type. */
42898         uint16_t        req_type;
42899         /*
42900          * The completion ring to send the completion event on. This should
42901          * be the NQ ID returned from the `nq_alloc` HWRM command.
42902          */
42903         uint16_t        cmpl_ring;
42904         /*
42905          * The sequence ID is used by the driver for tracking multiple
42906          * commands. This ID is treated as opaque data by the firmware and
42907          * the value is returned in the `hwrm_resp_hdr` upon completion.
42908          */
42909         uint16_t        seq_id;
42910         /*
42911          * The target ID of the command:
42912          * * 0x0-0xFFF8 - The function ID
42913          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
42914          * * 0xFFFD - Reserved for user-space HWRM interface
42915          * * 0xFFFF - HWRM
42916          */
42917         uint16_t        target_id;
42918         /*
42919          * A physical address pointer pointing to a host buffer that the
42920          * command's response data will be written. This can be either a host
42921          * physical address (HPA) or a guest physical address (GPA) and must
42922          * point to a physically contiguous block of memory.
42923          */
42924         uint64_t        resp_addr;
42925         /* Firmware session id returned when HWRM_TF_SESSION_OPEN is sent. */
42926         uint32_t        fw_session_id;
42927         /* Control flags. */
42928         uint16_t        flags;
42929         /* Indicates the flow direction. */
42930         #define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR     UINT32_C(0x1)
42931         /* If this bit set to 0, then it indicates rx flow. */
42932         #define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_RX    UINT32_C(0x0)
42933         /* If this bit is set to 1, then it indicates that tx flow. */
42934         #define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_TX    UINT32_C(0x1)
42935         #define HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_LAST \
42936                 HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_TX
42937         /* unused. */
42938         uint8_t unused0[2];
42939         /*
42940          * Type of the resource, defined globally in the
42941          * hwrm_tf_resc_type enum.
42942          */
42943         uint32_t        type;
42944         /* Starting index of the type to retrieve. */
42945         uint32_t        start_index;
42946         /* Number of entries to retrieve. */
42947         uint32_t        num_entries;
42948         /* Number of entries to retrieve. */
42949         uint32_t        unused1;
42950         /* Host memory where data will be stored. */
42951         uint64_t        host_addr;
42952 } __rte_packed;
42953
42954 /* hwrm_tf_tbl_type_bulk_get_output (size:128b/16B) */
42955 struct hwrm_tf_tbl_type_bulk_get_output {
42956         /* The specific error status for the command. */
42957         uint16_t        error_code;
42958         /* The HWRM command request type. */
42959         uint16_t        req_type;
42960         /* The sequence ID from the original command. */
42961         uint16_t        seq_id;
42962         /* The length of the response data in number of bytes. */
42963         uint16_t        resp_len;
42964         /* Response code. */
42965         uint32_t        resp_code;
42966         /* Response size. */
42967         uint16_t        size;
42968         /* unused */
42969         uint8_t unused0;
42970         /*
42971          * This field is used in Output records to indicate that the output
42972          * is completely written to RAM. This field should be read as '1'
42973          * to indicate that the output has been completely written.
42974          * When writing a command completion or response to an internal
42975          * processor, the order of writes has to be such that this field
42976          * is written last.
42977          */
42978         uint8_t valid;
42979 } __rte_packed;
42980
42981 /******************************
42982  * hwrm_tunnel_dst_port_query *
42983  ******************************/
42984
42985
42986 /* hwrm_tunnel_dst_port_query_input (size:192b/24B) */
42987 struct hwrm_tunnel_dst_port_query_input {
42988         /* The HWRM command request type. */
42989         uint16_t        req_type;
42990         /*
42991          * The completion ring to send the completion event on. This should
42992          * be the NQ ID returned from the `nq_alloc` HWRM command.
42993          */
42994         uint16_t        cmpl_ring;
42995         /*
42996          * The sequence ID is used by the driver for tracking multiple
42997          * commands. This ID is treated as opaque data by the firmware and
42998          * the value is returned in the `hwrm_resp_hdr` upon completion.
42999          */
43000         uint16_t        seq_id;
43001         /*
43002          * The target ID of the command:
43003          * * 0x0-0xFFF8 - The function ID
43004          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43005          * * 0xFFFD - Reserved for user-space HWRM interface
43006          * * 0xFFFF - HWRM
43007          */
43008         uint16_t        target_id;
43009         /*
43010          * A physical address pointer pointing to a host buffer that the
43011          * command's response data will be written. This can be either a host
43012          * physical address (HPA) or a guest physical address (GPA) and must
43013          * point to a physically contiguous block of memory.
43014          */
43015         uint64_t        resp_addr;
43016         /* Tunnel Type. */
43017         uint8_t tunnel_type;
43018         /* Virtual eXtensible Local Area Network (VXLAN) */
43019         #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN \
43020                 UINT32_C(0x1)
43021         /* Generic Network Virtualization Encapsulation (Geneve) */
43022         #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_GENEVE \
43023                 UINT32_C(0x5)
43024         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
43025         #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN_V4 \
43026                 UINT32_C(0x9)
43027         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
43028         #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_IPGRE_V1 \
43029                 UINT32_C(0xa)
43030         /* Use fixed layer 2 ether type of 0xFFFF */
43031         #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_L2_ETYPE \
43032                 UINT32_C(0xb)
43033         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
43034         #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
43035                 UINT32_C(0xc)
43036         #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_LAST \
43037                 HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6
43038         uint8_t unused_0[7];
43039 } __rte_packed;
43040
43041 /* hwrm_tunnel_dst_port_query_output (size:128b/16B) */
43042 struct hwrm_tunnel_dst_port_query_output {
43043         /* The specific error status for the command. */
43044         uint16_t        error_code;
43045         /* The HWRM command request type. */
43046         uint16_t        req_type;
43047         /* The sequence ID from the original command. */
43048         uint16_t        seq_id;
43049         /* The length of the response data in number of bytes. */
43050         uint16_t        resp_len;
43051         /*
43052          * This field represents the identifier of L4 destination port
43053          * used for the given tunnel type. This field is valid for
43054          * specific tunnel types that use layer 4 (e.g. UDP)
43055          * transports for tunneling.
43056          */
43057         uint16_t        tunnel_dst_port_id;
43058         /*
43059          * This field represents the value of L4 destination port
43060          * identified by tunnel_dst_port_id. This field is valid for
43061          * specific tunnel types that use layer 4 (e.g. UDP)
43062          * transports for tunneling.
43063          * This field is in network byte order.
43064          *
43065          * A value of 0 means that the destination port is not
43066          * configured.
43067          */
43068         uint16_t        tunnel_dst_port_val;
43069         uint8_t unused_0[3];
43070         /*
43071          * This field is used in Output records to indicate that the output
43072          * is completely written to RAM.  This field should be read as '1'
43073          * to indicate that the output has been completely written.
43074          * When writing a command completion or response to an internal processor,
43075          * the order of writes has to be such that this field is written last.
43076          */
43077         uint8_t valid;
43078 } __rte_packed;
43079
43080 /******************************
43081  * hwrm_tunnel_dst_port_alloc *
43082  ******************************/
43083
43084
43085 /* hwrm_tunnel_dst_port_alloc_input (size:192b/24B) */
43086 struct hwrm_tunnel_dst_port_alloc_input {
43087         /* The HWRM command request type. */
43088         uint16_t        req_type;
43089         /*
43090          * The completion ring to send the completion event on. This should
43091          * be the NQ ID returned from the `nq_alloc` HWRM command.
43092          */
43093         uint16_t        cmpl_ring;
43094         /*
43095          * The sequence ID is used by the driver for tracking multiple
43096          * commands. This ID is treated as opaque data by the firmware and
43097          * the value is returned in the `hwrm_resp_hdr` upon completion.
43098          */
43099         uint16_t        seq_id;
43100         /*
43101          * The target ID of the command:
43102          * * 0x0-0xFFF8 - The function ID
43103          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43104          * * 0xFFFD - Reserved for user-space HWRM interface
43105          * * 0xFFFF - HWRM
43106          */
43107         uint16_t        target_id;
43108         /*
43109          * A physical address pointer pointing to a host buffer that the
43110          * command's response data will be written. This can be either a host
43111          * physical address (HPA) or a guest physical address (GPA) and must
43112          * point to a physically contiguous block of memory.
43113          */
43114         uint64_t        resp_addr;
43115         /* Tunnel Type. */
43116         uint8_t tunnel_type;
43117         /* Virtual eXtensible Local Area Network (VXLAN) */
43118         #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
43119                 UINT32_C(0x1)
43120         /* Generic Network Virtualization Encapsulation (Geneve) */
43121         #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
43122                 UINT32_C(0x5)
43123         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
43124         #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
43125                 UINT32_C(0x9)
43126         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
43127         #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
43128                 UINT32_C(0xa)
43129         /* Use fixed layer 2 ether type of 0xFFFF */
43130         #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_L2_ETYPE \
43131                 UINT32_C(0xb)
43132         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
43133         #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
43134                 UINT32_C(0xc)
43135         #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_LAST \
43136                 HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6
43137         uint8_t unused_0;
43138         /*
43139          * This field represents the value of L4 destination port used
43140          * for the given tunnel type. This field is valid for
43141          * specific tunnel types that use layer 4 (e.g. UDP)
43142          * transports for tunneling.
43143          *
43144          * This field is in network byte order.
43145          *
43146          * A value of 0 shall fail the command.
43147          */
43148         uint16_t        tunnel_dst_port_val;
43149         uint8_t unused_1[4];
43150 } __rte_packed;
43151
43152 /* hwrm_tunnel_dst_port_alloc_output (size:128b/16B) */
43153 struct hwrm_tunnel_dst_port_alloc_output {
43154         /* The specific error status for the command. */
43155         uint16_t        error_code;
43156         /* The HWRM command request type. */
43157         uint16_t        req_type;
43158         /* The sequence ID from the original command. */
43159         uint16_t        seq_id;
43160         /* The length of the response data in number of bytes. */
43161         uint16_t        resp_len;
43162         /*
43163          * Identifier of a tunnel L4 destination port value. Only applies to tunnel
43164          * types that has l4 destination port parameters.
43165          */
43166         uint16_t        tunnel_dst_port_id;
43167         uint8_t unused_0[5];
43168         /*
43169          * This field is used in Output records to indicate that the output
43170          * is completely written to RAM.  This field should be read as '1'
43171          * to indicate that the output has been completely written.
43172          * When writing a command completion or response to an internal processor,
43173          * the order of writes has to be such that this field is written last.
43174          */
43175         uint8_t valid;
43176 } __rte_packed;
43177
43178 /*****************************
43179  * hwrm_tunnel_dst_port_free *
43180  *****************************/
43181
43182
43183 /* hwrm_tunnel_dst_port_free_input (size:192b/24B) */
43184 struct hwrm_tunnel_dst_port_free_input {
43185         /* The HWRM command request type. */
43186         uint16_t        req_type;
43187         /*
43188          * The completion ring to send the completion event on. This should
43189          * be the NQ ID returned from the `nq_alloc` HWRM command.
43190          */
43191         uint16_t        cmpl_ring;
43192         /*
43193          * The sequence ID is used by the driver for tracking multiple
43194          * commands. This ID is treated as opaque data by the firmware and
43195          * the value is returned in the `hwrm_resp_hdr` upon completion.
43196          */
43197         uint16_t        seq_id;
43198         /*
43199          * The target ID of the command:
43200          * * 0x0-0xFFF8 - The function ID
43201          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43202          * * 0xFFFD - Reserved for user-space HWRM interface
43203          * * 0xFFFF - HWRM
43204          */
43205         uint16_t        target_id;
43206         /*
43207          * A physical address pointer pointing to a host buffer that the
43208          * command's response data will be written. This can be either a host
43209          * physical address (HPA) or a guest physical address (GPA) and must
43210          * point to a physically contiguous block of memory.
43211          */
43212         uint64_t        resp_addr;
43213         /* Tunnel Type. */
43214         uint8_t tunnel_type;
43215         /* Virtual eXtensible Local Area Network (VXLAN) */
43216         #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN \
43217                 UINT32_C(0x1)
43218         /* Generic Network Virtualization Encapsulation (Geneve) */
43219         #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_GENEVE \
43220                 UINT32_C(0x5)
43221         /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
43222         #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN_V4 \
43223                 UINT32_C(0x9)
43224         /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
43225         #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_IPGRE_V1 \
43226                 UINT32_C(0xa)
43227         /* Use fixed layer 2 ether type of 0xFFFF */
43228         #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_L2_ETYPE \
43229                 UINT32_C(0xb)
43230         /* IPV6 over virtual eXtensible Local Area Network with GPE header (IPV6oVXLANGPE) */
43231         #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6 \
43232                 UINT32_C(0xc)
43233         #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_LAST \
43234                 HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN_GPE_V6
43235         uint8_t unused_0;
43236         /*
43237          * Identifier of a tunnel L4 destination port value. Only applies to tunnel
43238          * types that has l4 destination port parameters.
43239          */
43240         uint16_t        tunnel_dst_port_id;
43241         uint8_t unused_1[4];
43242 } __rte_packed;
43243
43244 /* hwrm_tunnel_dst_port_free_output (size:128b/16B) */
43245 struct hwrm_tunnel_dst_port_free_output {
43246         /* The specific error status for the command. */
43247         uint16_t        error_code;
43248         /* The HWRM command request type. */
43249         uint16_t        req_type;
43250         /* The sequence ID from the original command. */
43251         uint16_t        seq_id;
43252         /* The length of the response data in number of bytes. */
43253         uint16_t        resp_len;
43254         uint8_t unused_1[7];
43255         /*
43256          * This field is used in Output records to indicate that the output
43257          * is completely written to RAM.  This field should be read as '1'
43258          * to indicate that the output has been completely written.
43259          * When writing a command completion or response to an internal processor,
43260          * the order of writes has to be such that this field is written last.
43261          */
43262         uint8_t valid;
43263 } __rte_packed;
43264
43265 /* Periodic statistics context DMA to host. */
43266 /* ctx_hw_stats (size:1280b/160B) */
43267 struct ctx_hw_stats {
43268         /* Number of received unicast packets */
43269         uint64_t        rx_ucast_pkts;
43270         /* Number of received multicast packets */
43271         uint64_t        rx_mcast_pkts;
43272         /* Number of received broadcast packets */
43273         uint64_t        rx_bcast_pkts;
43274         /* Number of discarded packets on receive path */
43275         uint64_t        rx_discard_pkts;
43276         /* Number of packets on receive path with error */
43277         uint64_t        rx_error_pkts;
43278         /* Number of received bytes for unicast traffic */
43279         uint64_t        rx_ucast_bytes;
43280         /* Number of received bytes for multicast traffic */
43281         uint64_t        rx_mcast_bytes;
43282         /* Number of received bytes for broadcast traffic */
43283         uint64_t        rx_bcast_bytes;
43284         /* Number of transmitted unicast packets */
43285         uint64_t        tx_ucast_pkts;
43286         /* Number of transmitted multicast packets */
43287         uint64_t        tx_mcast_pkts;
43288         /* Number of transmitted broadcast packets */
43289         uint64_t        tx_bcast_pkts;
43290         /* Number of packets on transmit path with error */
43291         uint64_t        tx_error_pkts;
43292         /* Number of discarded packets on transmit path */
43293         uint64_t        tx_discard_pkts;
43294         /* Number of transmitted bytes for unicast traffic */
43295         uint64_t        tx_ucast_bytes;
43296         /* Number of transmitted bytes for multicast traffic */
43297         uint64_t        tx_mcast_bytes;
43298         /* Number of transmitted bytes for broadcast traffic */
43299         uint64_t        tx_bcast_bytes;
43300         /* Number of TPA packets */
43301         uint64_t        tpa_pkts;
43302         /* Number of TPA bytes */
43303         uint64_t        tpa_bytes;
43304         /* Number of TPA events */
43305         uint64_t        tpa_events;
43306         /* Number of TPA aborts */
43307         uint64_t        tpa_aborts;
43308 } __rte_packed;
43309
43310 /*
43311  * Extended periodic statistics context DMA to host. On cards that
43312  * support TPA v2, additional TPA related stats exist and can be retrieved
43313  * by DMA of ctx_hw_stats_ext, rather than legacy ctx_hw_stats structure.
43314  */
43315 /* ctx_hw_stats_ext (size:1408b/176B) */
43316 struct ctx_hw_stats_ext {
43317         /* Number of received unicast packets */
43318         uint64_t        rx_ucast_pkts;
43319         /* Number of received multicast packets */
43320         uint64_t        rx_mcast_pkts;
43321         /* Number of received broadcast packets */
43322         uint64_t        rx_bcast_pkts;
43323         /* Number of discarded packets on receive path */
43324         uint64_t        rx_discard_pkts;
43325         /* Number of packets on receive path with error */
43326         uint64_t        rx_error_pkts;
43327         /* Number of received bytes for unicast traffic */
43328         uint64_t        rx_ucast_bytes;
43329         /* Number of received bytes for multicast traffic */
43330         uint64_t        rx_mcast_bytes;
43331         /* Number of received bytes for broadcast traffic */
43332         uint64_t        rx_bcast_bytes;
43333         /* Number of transmitted unicast packets */
43334         uint64_t        tx_ucast_pkts;
43335         /* Number of transmitted multicast packets */
43336         uint64_t        tx_mcast_pkts;
43337         /* Number of transmitted broadcast packets */
43338         uint64_t        tx_bcast_pkts;
43339         /* Number of packets on transmit path with error */
43340         uint64_t        tx_error_pkts;
43341         /* Number of discarded packets on transmit path */
43342         uint64_t        tx_discard_pkts;
43343         /* Number of transmitted bytes for unicast traffic */
43344         uint64_t        tx_ucast_bytes;
43345         /* Number of transmitted bytes for multicast traffic */
43346         uint64_t        tx_mcast_bytes;
43347         /* Number of transmitted bytes for broadcast traffic */
43348         uint64_t        tx_bcast_bytes;
43349         /* Number of TPA eligible packets */
43350         uint64_t        rx_tpa_eligible_pkt;
43351         /* Number of TPA eligible bytes */
43352         uint64_t        rx_tpa_eligible_bytes;
43353         /* Number of TPA packets */
43354         uint64_t        rx_tpa_pkt;
43355         /* Number of TPA bytes */
43356         uint64_t        rx_tpa_bytes;
43357         /* Number of TPA errors */
43358         uint64_t        rx_tpa_errors;
43359         /* Number of TPA events */
43360         uint64_t        rx_tpa_events;
43361 } __rte_packed;
43362
43363 /* Periodic Engine statistics context DMA to host. */
43364 /* ctx_eng_stats (size:512b/64B) */
43365 struct ctx_eng_stats {
43366         /*
43367          * Count of data bytes into the Engine.
43368          * This includes any user supplied prefix,
43369          * but does not include any predefined
43370          * prefix data.
43371          */
43372         uint64_t        eng_bytes_in;
43373         /* Count of data bytes out of the Engine. */
43374         uint64_t        eng_bytes_out;
43375         /*
43376          * Count, in 4-byte (dword) units, of bytes
43377          * that are input as auxiliary data.
43378          * This includes the aux_cmd data.
43379          */
43380         uint64_t        aux_bytes_in;
43381         /*
43382          * Count, in 4-byte (dword) units, of bytes
43383          * that are output as auxiliary data.
43384          * This count is the buffer space for aux_data
43385          * output provided in the RQE, not the actual
43386          * aux_data written
43387          */
43388         uint64_t        aux_bytes_out;
43389         /* Count of number of commands executed. */
43390         uint64_t        commands;
43391         /*
43392          * Count of number of error commands.
43393          * These are the commands with a
43394          * non-zero status value.
43395          */
43396         uint64_t        error_commands;
43397         /*
43398          * Compression/Encryption Engine usage,
43399          * the unit is count of clock cycles
43400          */
43401         uint64_t        cce_engine_usage;
43402         /*
43403          * De-Compression/De-cryption Engine usage,
43404          * the unit is count of clock cycles
43405          */
43406         uint64_t        cdd_engine_usage;
43407 } __rte_packed;
43408
43409 /***********************
43410  * hwrm_stat_ctx_alloc *
43411  ***********************/
43412
43413
43414 /* hwrm_stat_ctx_alloc_input (size:256b/32B) */
43415 struct hwrm_stat_ctx_alloc_input {
43416         /* The HWRM command request type. */
43417         uint16_t        req_type;
43418         /*
43419          * The completion ring to send the completion event on. This should
43420          * be the NQ ID returned from the `nq_alloc` HWRM command.
43421          */
43422         uint16_t        cmpl_ring;
43423         /*
43424          * The sequence ID is used by the driver for tracking multiple
43425          * commands. This ID is treated as opaque data by the firmware and
43426          * the value is returned in the `hwrm_resp_hdr` upon completion.
43427          */
43428         uint16_t        seq_id;
43429         /*
43430          * The target ID of the command:
43431          * * 0x0-0xFFF8 - The function ID
43432          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43433          * * 0xFFFD - Reserved for user-space HWRM interface
43434          * * 0xFFFF - HWRM
43435          */
43436         uint16_t        target_id;
43437         /*
43438          * A physical address pointer pointing to a host buffer that the
43439          * command's response data will be written. This can be either a host
43440          * physical address (HPA) or a guest physical address (GPA) and must
43441          * point to a physically contiguous block of memory.
43442          */
43443         uint64_t        resp_addr;
43444         /*
43445          * This is the address for statistic block.
43446          * > For new versions of the chip, this address should be 128B
43447          * > aligned.
43448          */
43449         uint64_t        stats_dma_addr;
43450         /*
43451          * The statistic block update period in ms.
43452          * e.g. 250ms, 500ms, 750ms, 1000ms.
43453          * If update_period_ms is 0, then the stats update
43454          * shall be never done and the DMA address shall not be used.
43455          * In this case, the stat block can only be read by
43456          * hwrm_stat_ctx_query command.
43457          * On Ethernet/L2 based devices:
43458          *   if tpa v2 supported (hwrm_vnic_qcaps[max_aggs_supported]>0),
43459          *       ctx_hw_stats_ext is used for DMA,
43460          *   else
43461          *       ctx_hw_stats is used for DMA.
43462          */
43463         uint32_t        update_period_ms;
43464         /*
43465          * This field is used to specify statistics context specific
43466          * configuration flags.
43467          */
43468         uint8_t stat_ctx_flags;
43469         /*
43470          * When this bit is set to '1', the statistics context shall be
43471          * allocated for RoCE traffic only. In this case, traffic other
43472          * than offloaded RoCE traffic shall not be included in this
43473          * statistic context.
43474          * When this bit is set to '0', the statistics context shall be
43475          * used for network traffic or engine traffic.
43476          */
43477         #define HWRM_STAT_CTX_ALLOC_INPUT_STAT_CTX_FLAGS_ROCE     UINT32_C(0x1)
43478         uint8_t unused_0;
43479         /*
43480          * This is the size of the structure (ctx_hw_stats or
43481          * ctx_hw_stats_ext) that the driver has allocated to be used
43482          * for the periodic DMA updates.
43483          */
43484         uint16_t        stats_dma_length;
43485 } __rte_packed;
43486
43487 /* hwrm_stat_ctx_alloc_output (size:128b/16B) */
43488 struct hwrm_stat_ctx_alloc_output {
43489         /* The specific error status for the command. */
43490         uint16_t        error_code;
43491         /* The HWRM command request type. */
43492         uint16_t        req_type;
43493         /* The sequence ID from the original command. */
43494         uint16_t        seq_id;
43495         /* The length of the response data in number of bytes. */
43496         uint16_t        resp_len;
43497         /* This is the statistics context ID value. */
43498         uint32_t        stat_ctx_id;
43499         uint8_t unused_0[3];
43500         /*
43501          * This field is used in Output records to indicate that the output
43502          * is completely written to RAM.  This field should be read as '1'
43503          * to indicate that the output has been completely written.
43504          * When writing a command completion or response to an internal processor,
43505          * the order of writes has to be such that this field is written last.
43506          */
43507         uint8_t valid;
43508 } __rte_packed;
43509
43510 /**********************
43511  * hwrm_stat_ctx_free *
43512  **********************/
43513
43514
43515 /* hwrm_stat_ctx_free_input (size:192b/24B) */
43516 struct hwrm_stat_ctx_free_input {
43517         /* The HWRM command request type. */
43518         uint16_t        req_type;
43519         /*
43520          * The completion ring to send the completion event on. This should
43521          * be the NQ ID returned from the `nq_alloc` HWRM command.
43522          */
43523         uint16_t        cmpl_ring;
43524         /*
43525          * The sequence ID is used by the driver for tracking multiple
43526          * commands. This ID is treated as opaque data by the firmware and
43527          * the value is returned in the `hwrm_resp_hdr` upon completion.
43528          */
43529         uint16_t        seq_id;
43530         /*
43531          * The target ID of the command:
43532          * * 0x0-0xFFF8 - The function ID
43533          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43534          * * 0xFFFD - Reserved for user-space HWRM interface
43535          * * 0xFFFF - HWRM
43536          */
43537         uint16_t        target_id;
43538         /*
43539          * A physical address pointer pointing to a host buffer that the
43540          * command's response data will be written. This can be either a host
43541          * physical address (HPA) or a guest physical address (GPA) and must
43542          * point to a physically contiguous block of memory.
43543          */
43544         uint64_t        resp_addr;
43545         /* ID of the statistics context that is being queried. */
43546         uint32_t        stat_ctx_id;
43547         uint8_t unused_0[4];
43548 } __rte_packed;
43549
43550 /* hwrm_stat_ctx_free_output (size:128b/16B) */
43551 struct hwrm_stat_ctx_free_output {
43552         /* The specific error status for the command. */
43553         uint16_t        error_code;
43554         /* The HWRM command request type. */
43555         uint16_t        req_type;
43556         /* The sequence ID from the original command. */
43557         uint16_t        seq_id;
43558         /* The length of the response data in number of bytes. */
43559         uint16_t        resp_len;
43560         /* This is the statistics context ID value. */
43561         uint32_t        stat_ctx_id;
43562         uint8_t unused_0[3];
43563         /*
43564          * This field is used in Output records to indicate that the output
43565          * is completely written to RAM.  This field should be read as '1'
43566          * to indicate that the output has been completely written.
43567          * When writing a command completion or response to an internal processor,
43568          * the order of writes has to be such that this field is written last.
43569          */
43570         uint8_t valid;
43571 } __rte_packed;
43572
43573 /***********************
43574  * hwrm_stat_ctx_query *
43575  ***********************/
43576
43577
43578 /* hwrm_stat_ctx_query_input (size:192b/24B) */
43579 struct hwrm_stat_ctx_query_input {
43580         /* The HWRM command request type. */
43581         uint16_t        req_type;
43582         /*
43583          * The completion ring to send the completion event on. This should
43584          * be the NQ ID returned from the `nq_alloc` HWRM command.
43585          */
43586         uint16_t        cmpl_ring;
43587         /*
43588          * The sequence ID is used by the driver for tracking multiple
43589          * commands. This ID is treated as opaque data by the firmware and
43590          * the value is returned in the `hwrm_resp_hdr` upon completion.
43591          */
43592         uint16_t        seq_id;
43593         /*
43594          * The target ID of the command:
43595          * * 0x0-0xFFF8 - The function ID
43596          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43597          * * 0xFFFD - Reserved for user-space HWRM interface
43598          * * 0xFFFF - HWRM
43599          */
43600         uint16_t        target_id;
43601         /*
43602          * A physical address pointer pointing to a host buffer that the
43603          * command's response data will be written. This can be either a host
43604          * physical address (HPA) or a guest physical address (GPA) and must
43605          * point to a physically contiguous block of memory.
43606          */
43607         uint64_t        resp_addr;
43608         /* ID of the statistics context that is being queried. */
43609         uint32_t        stat_ctx_id;
43610         uint8_t flags;
43611         /*
43612          * This bit is set to 1 when request is for a counter mask,
43613          * representing the width of each of the stats counters, rather
43614          * than counters themselves.
43615          */
43616         #define HWRM_STAT_CTX_QUERY_INPUT_FLAGS_COUNTER_MASK     UINT32_C(0x1)
43617         uint8_t unused_0[3];
43618 } __rte_packed;
43619
43620 /* hwrm_stat_ctx_query_output (size:1408b/176B) */
43621 struct hwrm_stat_ctx_query_output {
43622         /* The specific error status for the command. */
43623         uint16_t        error_code;
43624         /* The HWRM command request type. */
43625         uint16_t        req_type;
43626         /* The sequence ID from the original command. */
43627         uint16_t        seq_id;
43628         /* The length of the response data in number of bytes. */
43629         uint16_t        resp_len;
43630         /* Number of transmitted unicast packets */
43631         uint64_t        tx_ucast_pkts;
43632         /* Number of transmitted multicast packets */
43633         uint64_t        tx_mcast_pkts;
43634         /* Number of transmitted broadcast packets */
43635         uint64_t        tx_bcast_pkts;
43636         /* Number of packets discarded in transmit path */
43637         uint64_t        tx_discard_pkts;
43638         /* Number of packets in transmit path with error */
43639         uint64_t        tx_error_pkts;
43640         /* Number of transmitted bytes for unicast traffic */
43641         uint64_t        tx_ucast_bytes;
43642         /* Number of transmitted bytes for multicast traffic */
43643         uint64_t        tx_mcast_bytes;
43644         /* Number of transmitted bytes for broadcast traffic */
43645         uint64_t        tx_bcast_bytes;
43646         /* Number of received unicast packets */
43647         uint64_t        rx_ucast_pkts;
43648         /* Number of received multicast packets */
43649         uint64_t        rx_mcast_pkts;
43650         /* Number of received broadcast packets */
43651         uint64_t        rx_bcast_pkts;
43652         /* Number of packets discarded in receive path */
43653         uint64_t        rx_discard_pkts;
43654         /* Number of packets in receive path with errors */
43655         uint64_t        rx_error_pkts;
43656         /* Number of received bytes for unicast traffic */
43657         uint64_t        rx_ucast_bytes;
43658         /* Number of received bytes for multicast traffic */
43659         uint64_t        rx_mcast_bytes;
43660         /* Number of received bytes for broadcast traffic */
43661         uint64_t        rx_bcast_bytes;
43662         /* Number of aggregated unicast packets */
43663         uint64_t        rx_agg_pkts;
43664         /* Number of aggregated unicast bytes */
43665         uint64_t        rx_agg_bytes;
43666         /* Number of aggregation events */
43667         uint64_t        rx_agg_events;
43668         /* Number of aborted aggregations */
43669         uint64_t        rx_agg_aborts;
43670         uint8_t unused_0[7];
43671         /*
43672          * This field is used in Output records to indicate that the output
43673          * is completely written to RAM.  This field should be read as '1'
43674          * to indicate that the output has been completely written.
43675          * When writing a command completion or response to an internal processor,
43676          * the order of writes has to be such that this field is written last.
43677          */
43678         uint8_t valid;
43679 } __rte_packed;
43680
43681 /***************************
43682  * hwrm_stat_ext_ctx_query *
43683  ***************************/
43684
43685
43686 /* hwrm_stat_ext_ctx_query_input (size:192b/24B) */
43687 struct hwrm_stat_ext_ctx_query_input {
43688         /* The HWRM command request type. */
43689         uint16_t        req_type;
43690         /*
43691          * The completion ring to send the completion event on. This should
43692          * be the NQ ID returned from the `nq_alloc` HWRM command.
43693          */
43694         uint16_t        cmpl_ring;
43695         /*
43696          * The sequence ID is used by the driver for tracking multiple
43697          * commands. This ID is treated as opaque data by the firmware and
43698          * the value is returned in the `hwrm_resp_hdr` upon completion.
43699          */
43700         uint16_t        seq_id;
43701         /*
43702          * The target ID of the command:
43703          * * 0x0-0xFFF8 - The function ID
43704          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43705          * * 0xFFFD - Reserved for user-space HWRM interface
43706          * * 0xFFFF - HWRM
43707          */
43708         uint16_t        target_id;
43709         /*
43710          * A physical address pointer pointing to a host buffer that the
43711          * command's response data will be written. This can be either a host
43712          * physical address (HPA) or a guest physical address (GPA) and must
43713          * point to a physically contiguous block of memory.
43714          */
43715         uint64_t        resp_addr;
43716         /* ID of the extended statistics context that is being queried. */
43717         uint32_t        stat_ctx_id;
43718         uint8_t flags;
43719         /*
43720          * This bit is set to 1 when request is for a counter mask,
43721          * representing the width of each of the stats counters, rather
43722          * than counters themselves.
43723          */
43724         #define HWRM_STAT_EXT_CTX_QUERY_INPUT_FLAGS_COUNTER_MASK \
43725                 UINT32_C(0x1)
43726         uint8_t unused_0[3];
43727 } __rte_packed;
43728
43729 /* hwrm_stat_ext_ctx_query_output (size:1536b/192B) */
43730 struct hwrm_stat_ext_ctx_query_output {
43731         /* The specific error status for the command. */
43732         uint16_t        error_code;
43733         /* The HWRM command request type. */
43734         uint16_t        req_type;
43735         /* The sequence ID from the original command. */
43736         uint16_t        seq_id;
43737         /* The length of the response data in number of bytes. */
43738         uint16_t        resp_len;
43739         /* Number of received unicast packets */
43740         uint64_t        rx_ucast_pkts;
43741         /* Number of received multicast packets */
43742         uint64_t        rx_mcast_pkts;
43743         /* Number of received broadcast packets */
43744         uint64_t        rx_bcast_pkts;
43745         /* Number of discarded packets on receive path */
43746         uint64_t        rx_discard_pkts;
43747         /* Number of packets on receive path with error */
43748         uint64_t        rx_error_pkts;
43749         /* Number of received bytes for unicast traffic */
43750         uint64_t        rx_ucast_bytes;
43751         /* Number of received bytes for multicast traffic */
43752         uint64_t        rx_mcast_bytes;
43753         /* Number of received bytes for broadcast traffic */
43754         uint64_t        rx_bcast_bytes;
43755         /* Number of transmitted unicast packets */
43756         uint64_t        tx_ucast_pkts;
43757         /* Number of transmitted multicast packets */
43758         uint64_t        tx_mcast_pkts;
43759         /* Number of transmitted broadcast packets */
43760         uint64_t        tx_bcast_pkts;
43761         /* Number of packets on transmit path with error */
43762         uint64_t        tx_error_pkts;
43763         /* Number of discarded packets on transmit path */
43764         uint64_t        tx_discard_pkts;
43765         /* Number of transmitted bytes for unicast traffic */
43766         uint64_t        tx_ucast_bytes;
43767         /* Number of transmitted bytes for multicast traffic */
43768         uint64_t        tx_mcast_bytes;
43769         /* Number of transmitted bytes for broadcast traffic */
43770         uint64_t        tx_bcast_bytes;
43771         /* Number of TPA eligible packets */
43772         uint64_t        rx_tpa_eligible_pkt;
43773         /* Number of TPA eligible bytes */
43774         uint64_t        rx_tpa_eligible_bytes;
43775         /* Number of TPA packets */
43776         uint64_t        rx_tpa_pkt;
43777         /* Number of TPA bytes */
43778         uint64_t        rx_tpa_bytes;
43779         /* Number of TPA errors */
43780         uint64_t        rx_tpa_errors;
43781         /* Number of TPA events */
43782         uint64_t        rx_tpa_events;
43783         uint8_t unused_0[7];
43784         /*
43785          * This field is used in Output records to indicate that the output
43786          * is completely written to RAM.  This field should be read as '1'
43787          * to indicate that the output has been completely written.
43788          * When writing a command completion or response to an internal processor,
43789          * the order of writes has to be such that this field is written last.
43790          */
43791         uint8_t valid;
43792 } __rte_packed;
43793
43794 /***************************
43795  * hwrm_stat_ctx_eng_query *
43796  ***************************/
43797
43798
43799 /* hwrm_stat_ctx_eng_query_input (size:192b/24B) */
43800 struct hwrm_stat_ctx_eng_query_input {
43801         /* The HWRM command request type. */
43802         uint16_t        req_type;
43803         /*
43804          * The completion ring to send the completion event on. This should
43805          * be the NQ ID returned from the `nq_alloc` HWRM command.
43806          */
43807         uint16_t        cmpl_ring;
43808         /*
43809          * The sequence ID is used by the driver for tracking multiple
43810          * commands. This ID is treated as opaque data by the firmware and
43811          * the value is returned in the `hwrm_resp_hdr` upon completion.
43812          */
43813         uint16_t        seq_id;
43814         /*
43815          * The target ID of the command:
43816          * * 0x0-0xFFF8 - The function ID
43817          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43818          * * 0xFFFD - Reserved for user-space HWRM interface
43819          * * 0xFFFF - HWRM
43820          */
43821         uint16_t        target_id;
43822         /*
43823          * A physical address pointer pointing to a host buffer that the
43824          * command's response data will be written. This can be either a host
43825          * physical address (HPA) or a guest physical address (GPA) and must
43826          * point to a physically contiguous block of memory.
43827          */
43828         uint64_t        resp_addr;
43829         /* ID of the statistics context that is being queried. */
43830         uint32_t        stat_ctx_id;
43831         uint8_t unused_0[4];
43832 } __rte_packed;
43833
43834 /* hwrm_stat_ctx_eng_query_output (size:640b/80B) */
43835 struct hwrm_stat_ctx_eng_query_output {
43836         /* The specific error status for the command. */
43837         uint16_t        error_code;
43838         /* The HWRM command request type. */
43839         uint16_t        req_type;
43840         /* The sequence ID from the original command. */
43841         uint16_t        seq_id;
43842         /* The length of the response data in number of bytes. */
43843         uint16_t        resp_len;
43844         /*
43845          * Count of data bytes into the Engine.
43846          * This includes any user supplied prefix,
43847          * but does not include any predefined
43848          * prefix data.
43849          */
43850         uint64_t        eng_bytes_in;
43851         /* Count of data bytes out of the Engine. */
43852         uint64_t        eng_bytes_out;
43853         /*
43854          * Count, in 4-byte (dword) units, of bytes
43855          * that are input as auxiliary data.
43856          * This includes the aux_cmd data.
43857          */
43858         uint64_t        aux_bytes_in;
43859         /*
43860          * Count, in 4-byte (dword) units, of bytes
43861          * that are output as auxiliary data.
43862          * This count is the buffer space for aux_data
43863          * output provided in the RQE, not the actual
43864          * aux_data written
43865          */
43866         uint64_t        aux_bytes_out;
43867         /* Count of number of commands executed. */
43868         uint64_t        commands;
43869         /*
43870          * Count of number of error commands.
43871          * These are the commands with a
43872          * non-zero status value.
43873          */
43874         uint64_t        error_commands;
43875         /*
43876          * Compression/Encryption Engine usage,
43877          * the unit is count of clock cycles
43878          */
43879         uint64_t        cce_engine_usage;
43880         /*
43881          * De-Compression/De-cryption Engine usage,
43882          * the unit is count of clock cycles
43883          */
43884         uint64_t        cdd_engine_usage;
43885         uint8_t unused_0[7];
43886         /*
43887          * This field is used in Output records to indicate that the output
43888          * is completely written to RAM.  This field should be read as '1'
43889          * to indicate that the output has been completely written.
43890          * When writing a command completion or response to an internal processor,
43891          * the order of writes has to be such that this field is written last.
43892          */
43893         uint8_t valid;
43894 } __rte_packed;
43895
43896 /***************************
43897  * hwrm_stat_ctx_clr_stats *
43898  ***************************/
43899
43900
43901 /* hwrm_stat_ctx_clr_stats_input (size:192b/24B) */
43902 struct hwrm_stat_ctx_clr_stats_input {
43903         /* The HWRM command request type. */
43904         uint16_t        req_type;
43905         /*
43906          * The completion ring to send the completion event on. This should
43907          * be the NQ ID returned from the `nq_alloc` HWRM command.
43908          */
43909         uint16_t        cmpl_ring;
43910         /*
43911          * The sequence ID is used by the driver for tracking multiple
43912          * commands. This ID is treated as opaque data by the firmware and
43913          * the value is returned in the `hwrm_resp_hdr` upon completion.
43914          */
43915         uint16_t        seq_id;
43916         /*
43917          * The target ID of the command:
43918          * * 0x0-0xFFF8 - The function ID
43919          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43920          * * 0xFFFD - Reserved for user-space HWRM interface
43921          * * 0xFFFF - HWRM
43922          */
43923         uint16_t        target_id;
43924         /*
43925          * A physical address pointer pointing to a host buffer that the
43926          * command's response data will be written. This can be either a host
43927          * physical address (HPA) or a guest physical address (GPA) and must
43928          * point to a physically contiguous block of memory.
43929          */
43930         uint64_t        resp_addr;
43931         /* ID of the statistics context that is being queried. */
43932         uint32_t        stat_ctx_id;
43933         uint8_t unused_0[4];
43934 } __rte_packed;
43935
43936 /* hwrm_stat_ctx_clr_stats_output (size:128b/16B) */
43937 struct hwrm_stat_ctx_clr_stats_output {
43938         /* The specific error status for the command. */
43939         uint16_t        error_code;
43940         /* The HWRM command request type. */
43941         uint16_t        req_type;
43942         /* The sequence ID from the original command. */
43943         uint16_t        seq_id;
43944         /* The length of the response data in number of bytes. */
43945         uint16_t        resp_len;
43946         uint8_t unused_0[7];
43947         /*
43948          * This field is used in Output records to indicate that the output
43949          * is completely written to RAM.  This field should be read as '1'
43950          * to indicate that the output has been completely written.
43951          * When writing a command completion or response to an internal processor,
43952          * the order of writes has to be such that this field is written last.
43953          */
43954         uint8_t valid;
43955 } __rte_packed;
43956
43957 /********************
43958  * hwrm_pcie_qstats *
43959  ********************/
43960
43961
43962 /* hwrm_pcie_qstats_input (size:256b/32B) */
43963 struct hwrm_pcie_qstats_input {
43964         /* The HWRM command request type. */
43965         uint16_t        req_type;
43966         /*
43967          * The completion ring to send the completion event on. This should
43968          * be the NQ ID returned from the `nq_alloc` HWRM command.
43969          */
43970         uint16_t        cmpl_ring;
43971         /*
43972          * The sequence ID is used by the driver for tracking multiple
43973          * commands. This ID is treated as opaque data by the firmware and
43974          * the value is returned in the `hwrm_resp_hdr` upon completion.
43975          */
43976         uint16_t        seq_id;
43977         /*
43978          * The target ID of the command:
43979          * * 0x0-0xFFF8 - The function ID
43980          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
43981          * * 0xFFFD - Reserved for user-space HWRM interface
43982          * * 0xFFFF - HWRM
43983          */
43984         uint16_t        target_id;
43985         /*
43986          * A physical address pointer pointing to a host buffer that the
43987          * command's response data will be written. This can be either a host
43988          * physical address (HPA) or a guest physical address (GPA) and must
43989          * point to a physically contiguous block of memory.
43990          */
43991         uint64_t        resp_addr;
43992         /*
43993          * The size of PCIe statistics block in bytes.
43994          * Firmware will DMA the PCIe statistics to
43995          * the host with this field size in the response.
43996          */
43997         uint16_t        pcie_stat_size;
43998         uint8_t unused_0[6];
43999         /*
44000          * This is the host address where
44001          * PCIe statistics will be stored
44002          */
44003         uint64_t        pcie_stat_host_addr;
44004 } __rte_packed;
44005
44006 /* hwrm_pcie_qstats_output (size:128b/16B) */
44007 struct hwrm_pcie_qstats_output {
44008         /* The specific error status for the command. */
44009         uint16_t        error_code;
44010         /* The HWRM command request type. */
44011         uint16_t        req_type;
44012         /* The sequence ID from the original command. */
44013         uint16_t        seq_id;
44014         /* The length of the response data in number of bytes. */
44015         uint16_t        resp_len;
44016         /* The size of PCIe statistics block in bytes. */
44017         uint16_t        pcie_stat_size;
44018         uint8_t unused_0[5];
44019         /*
44020          * This field is used in Output records to indicate that the output
44021          * is completely written to RAM.  This field should be read as '1'
44022          * to indicate that the output has been completely written.
44023          * When writing a command completion or response to an internal processor,
44024          * the order of writes has to be such that this field is written last.
44025          */
44026         uint8_t valid;
44027 } __rte_packed;
44028
44029 /* PCIe Statistics Formats */
44030 /* pcie_ctx_hw_stats (size:768b/96B) */
44031 struct pcie_ctx_hw_stats {
44032         /* Number of physical layer receiver errors */
44033         uint64_t        pcie_pl_signal_integrity;
44034         /* Number of DLLP CRC errors detected by Data Link Layer */
44035         uint64_t        pcie_dl_signal_integrity;
44036         /*
44037          * Number of TLP LCRC and sequence number errors detected
44038          * by Data Link Layer
44039          */
44040         uint64_t        pcie_tl_signal_integrity;
44041         /* Number of times LTSSM entered Recovery state */
44042         uint64_t        pcie_link_integrity;
44043         /* Report number of TLP bits that have been transmitted in Mbps */
44044         uint64_t        pcie_tx_traffic_rate;
44045         /* Report number of TLP bits that have been received in Mbps */
44046         uint64_t        pcie_rx_traffic_rate;
44047         /* Number of DLLP bytes that have been transmitted */
44048         uint64_t        pcie_tx_dllp_statistics;
44049         /* Number of DLLP bytes that have been received */
44050         uint64_t        pcie_rx_dllp_statistics;
44051         /*
44052          * Number of times spent in each phase of gen3
44053          * equalization
44054          */
44055         uint64_t        pcie_equalization_time;
44056         /* Records the last 16 transitions of the LTSSM */
44057         uint32_t        pcie_ltssm_histogram[4];
44058         /*
44059          * Record the last 8 reasons on why LTSSM transitioned
44060          * to Recovery
44061          */
44062         uint64_t        pcie_recovery_histogram;
44063 } __rte_packed;
44064
44065 /**********************
44066  * hwrm_exec_fwd_resp *
44067  **********************/
44068
44069
44070 /* hwrm_exec_fwd_resp_input (size:1024b/128B) */
44071 struct hwrm_exec_fwd_resp_input {
44072         /* The HWRM command request type. */
44073         uint16_t        req_type;
44074         /*
44075          * The completion ring to send the completion event on. This should
44076          * be the NQ ID returned from the `nq_alloc` HWRM command.
44077          */
44078         uint16_t        cmpl_ring;
44079         /*
44080          * The sequence ID is used by the driver for tracking multiple
44081          * commands. This ID is treated as opaque data by the firmware and
44082          * the value is returned in the `hwrm_resp_hdr` upon completion.
44083          */
44084         uint16_t        seq_id;
44085         /*
44086          * The target ID of the command:
44087          * * 0x0-0xFFF8 - The function ID
44088          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44089          * * 0xFFFD - Reserved for user-space HWRM interface
44090          * * 0xFFFF - HWRM
44091          */
44092         uint16_t        target_id;
44093         /*
44094          * A physical address pointer pointing to a host buffer that the
44095          * command's response data will be written. This can be either a host
44096          * physical address (HPA) or a guest physical address (GPA) and must
44097          * point to a physically contiguous block of memory.
44098          */
44099         uint64_t        resp_addr;
44100         /*
44101          * This is an encapsulated request. This request should
44102          * be executed by the HWRM and the response should be
44103          * provided in the response buffer inside the encapsulated
44104          * request.
44105          */
44106         uint32_t        encap_request[26];
44107         /*
44108          * This value indicates the target id of the response to
44109          * the encapsulated request.
44110          * 0x0 - 0xFFF8 - Used for function ids
44111          * 0xFFF8 - 0xFFFE - Reserved for internal processors
44112          * 0xFFFF - HWRM
44113          */
44114         uint16_t        encap_resp_target_id;
44115         uint8_t unused_0[6];
44116 } __rte_packed;
44117
44118 /* hwrm_exec_fwd_resp_output (size:128b/16B) */
44119 struct hwrm_exec_fwd_resp_output {
44120         /* The specific error status for the command. */
44121         uint16_t        error_code;
44122         /* The HWRM command request type. */
44123         uint16_t        req_type;
44124         /* The sequence ID from the original command. */
44125         uint16_t        seq_id;
44126         /* The length of the response data in number of bytes. */
44127         uint16_t        resp_len;
44128         uint8_t unused_0[7];
44129         /*
44130          * This field is used in Output records to indicate that the output
44131          * is completely written to RAM.  This field should be read as '1'
44132          * to indicate that the output has been completely written.
44133          * When writing a command completion or response to an internal processor,
44134          * the order of writes has to be such that this field is written last.
44135          */
44136         uint8_t valid;
44137 } __rte_packed;
44138
44139 /************************
44140  * hwrm_reject_fwd_resp *
44141  ************************/
44142
44143
44144 /* hwrm_reject_fwd_resp_input (size:1024b/128B) */
44145 struct hwrm_reject_fwd_resp_input {
44146         /* The HWRM command request type. */
44147         uint16_t        req_type;
44148         /*
44149          * The completion ring to send the completion event on. This should
44150          * be the NQ ID returned from the `nq_alloc` HWRM command.
44151          */
44152         uint16_t        cmpl_ring;
44153         /*
44154          * The sequence ID is used by the driver for tracking multiple
44155          * commands. This ID is treated as opaque data by the firmware and
44156          * the value is returned in the `hwrm_resp_hdr` upon completion.
44157          */
44158         uint16_t        seq_id;
44159         /*
44160          * The target ID of the command:
44161          * * 0x0-0xFFF8 - The function ID
44162          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44163          * * 0xFFFD - Reserved for user-space HWRM interface
44164          * * 0xFFFF - HWRM
44165          */
44166         uint16_t        target_id;
44167         /*
44168          * A physical address pointer pointing to a host buffer that the
44169          * command's response data will be written. This can be either a host
44170          * physical address (HPA) or a guest physical address (GPA) and must
44171          * point to a physically contiguous block of memory.
44172          */
44173         uint64_t        resp_addr;
44174         /*
44175          * This is an encapsulated request. This request should
44176          * be rejected by the HWRM and the error response should be
44177          * provided in the response buffer inside the encapsulated
44178          * request.
44179          */
44180         uint32_t        encap_request[26];
44181         /*
44182          * This value indicates the target id of the response to
44183          * the encapsulated request.
44184          * 0x0 - 0xFFF8 - Used for function ids
44185          * 0xFFF8 - 0xFFFE - Reserved for internal processors
44186          * 0xFFFF - HWRM
44187          */
44188         uint16_t        encap_resp_target_id;
44189         uint8_t unused_0[6];
44190 } __rte_packed;
44191
44192 /* hwrm_reject_fwd_resp_output (size:128b/16B) */
44193 struct hwrm_reject_fwd_resp_output {
44194         /* The specific error status for the command. */
44195         uint16_t        error_code;
44196         /* The HWRM command request type. */
44197         uint16_t        req_type;
44198         /* The sequence ID from the original command. */
44199         uint16_t        seq_id;
44200         /* The length of the response data in number of bytes. */
44201         uint16_t        resp_len;
44202         uint8_t unused_0[7];
44203         /*
44204          * This field is used in Output records to indicate that the output
44205          * is completely written to RAM.  This field should be read as '1'
44206          * to indicate that the output has been completely written.
44207          * When writing a command completion or response to an internal processor,
44208          * the order of writes has to be such that this field is written last.
44209          */
44210         uint8_t valid;
44211 } __rte_packed;
44212
44213 /*****************
44214  * hwrm_fwd_resp *
44215  *****************/
44216
44217
44218 /* hwrm_fwd_resp_input (size:1024b/128B) */
44219 struct hwrm_fwd_resp_input {
44220         /* The HWRM command request type. */
44221         uint16_t        req_type;
44222         /*
44223          * The completion ring to send the completion event on. This should
44224          * be the NQ ID returned from the `nq_alloc` HWRM command.
44225          */
44226         uint16_t        cmpl_ring;
44227         /*
44228          * The sequence ID is used by the driver for tracking multiple
44229          * commands. This ID is treated as opaque data by the firmware and
44230          * the value is returned in the `hwrm_resp_hdr` upon completion.
44231          */
44232         uint16_t        seq_id;
44233         /*
44234          * The target ID of the command:
44235          * * 0x0-0xFFF8 - The function ID
44236          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44237          * * 0xFFFD - Reserved for user-space HWRM interface
44238          * * 0xFFFF - HWRM
44239          */
44240         uint16_t        target_id;
44241         /*
44242          * A physical address pointer pointing to a host buffer that the
44243          * command's response data will be written. This can be either a host
44244          * physical address (HPA) or a guest physical address (GPA) and must
44245          * point to a physically contiguous block of memory.
44246          */
44247         uint64_t        resp_addr;
44248         /*
44249          * This value indicates the target id of the encapsulated
44250          * response.
44251          * 0x0 - 0xFFF8 - Used for function ids
44252          * 0xFFF8 - 0xFFFE - Reserved for internal processors
44253          * 0xFFFF - HWRM
44254          */
44255         uint16_t        encap_resp_target_id;
44256         /*
44257          * This value indicates the completion ring the encapsulated
44258          * response will be optionally completed on.  If the value is
44259          * -1, then no CR completion shall be generated for the
44260          * encapsulated response. Any other value must be a
44261          * valid CR ring_id value. If a valid encap_resp_cmpl_ring
44262          * is provided, then a CR completion shall be generated for
44263          * the encapsulated response.
44264          */
44265         uint16_t        encap_resp_cmpl_ring;
44266         /* This field indicates the length of encapsulated response. */
44267         uint16_t        encap_resp_len;
44268         uint8_t unused_0;
44269         uint8_t unused_1;
44270         /*
44271          * This is the host address where the encapsulated response
44272          * will be written.
44273          * This area must be 16B aligned and must be cleared to zero
44274          * before the original request is made.
44275          */
44276         uint64_t        encap_resp_addr;
44277         /* This is an encapsulated response. */
44278         uint32_t        encap_resp[24];
44279 } __rte_packed;
44280
44281 /* hwrm_fwd_resp_output (size:128b/16B) */
44282 struct hwrm_fwd_resp_output {
44283         /* The specific error status for the command. */
44284         uint16_t        error_code;
44285         /* The HWRM command request type. */
44286         uint16_t        req_type;
44287         /* The sequence ID from the original command. */
44288         uint16_t        seq_id;
44289         /* The length of the response data in number of bytes. */
44290         uint16_t        resp_len;
44291         uint8_t unused_0[7];
44292         /*
44293          * This field is used in Output records to indicate that the output
44294          * is completely written to RAM.  This field should be read as '1'
44295          * to indicate that the output has been completely written.
44296          * When writing a command completion or response to an internal processor,
44297          * the order of writes has to be such that this field is written last.
44298          */
44299         uint8_t valid;
44300 } __rte_packed;
44301
44302 /*****************************
44303  * hwrm_fwd_async_event_cmpl *
44304  *****************************/
44305
44306
44307 /* hwrm_fwd_async_event_cmpl_input (size:320b/40B) */
44308 struct hwrm_fwd_async_event_cmpl_input {
44309         /* The HWRM command request type. */
44310         uint16_t        req_type;
44311         /*
44312          * The completion ring to send the completion event on. This should
44313          * be the NQ ID returned from the `nq_alloc` HWRM command.
44314          */
44315         uint16_t        cmpl_ring;
44316         /*
44317          * The sequence ID is used by the driver for tracking multiple
44318          * commands. This ID is treated as opaque data by the firmware and
44319          * the value is returned in the `hwrm_resp_hdr` upon completion.
44320          */
44321         uint16_t        seq_id;
44322         /*
44323          * The target ID of the command:
44324          * * 0x0-0xFFF8 - The function ID
44325          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44326          * * 0xFFFD - Reserved for user-space HWRM interface
44327          * * 0xFFFF - HWRM
44328          */
44329         uint16_t        target_id;
44330         /*
44331          * A physical address pointer pointing to a host buffer that the
44332          * command's response data will be written. This can be either a host
44333          * physical address (HPA) or a guest physical address (GPA) and must
44334          * point to a physically contiguous block of memory.
44335          */
44336         uint64_t        resp_addr;
44337         /*
44338          * This value indicates the target id of the encapsulated
44339          * asynchronous event.
44340          * 0x0 - 0xFFF8 - Used for function ids
44341          * 0xFFF8 - 0xFFFE - Reserved for internal processors
44342          * 0xFFFF - Broadcast to all children VFs (only applicable when
44343          * a PF is the requester)
44344          */
44345         uint16_t        encap_async_event_target_id;
44346         uint8_t unused_0[6];
44347         /* This is an encapsulated asynchronous event completion. */
44348         uint32_t        encap_async_event_cmpl[4];
44349 } __rte_packed;
44350
44351 /* hwrm_fwd_async_event_cmpl_output (size:128b/16B) */
44352 struct hwrm_fwd_async_event_cmpl_output {
44353         /* The specific error status for the command. */
44354         uint16_t        error_code;
44355         /* The HWRM command request type. */
44356         uint16_t        req_type;
44357         /* The sequence ID from the original command. */
44358         uint16_t        seq_id;
44359         /* The length of the response data in number of bytes. */
44360         uint16_t        resp_len;
44361         uint8_t unused_0[7];
44362         /*
44363          * This field is used in Output records to indicate that the output
44364          * is completely written to RAM.  This field should be read as '1'
44365          * to indicate that the output has been completely written.
44366          * When writing a command completion or response to an internal processor,
44367          * the order of writes has to be such that this field is written last.
44368          */
44369         uint8_t valid;
44370 } __rte_packed;
44371
44372 /**************************
44373  * hwrm_nvm_raw_write_blk *
44374  **************************/
44375
44376
44377 /* hwrm_nvm_raw_write_blk_input (size:256b/32B) */
44378 struct hwrm_nvm_raw_write_blk_input {
44379         /* The HWRM command request type. */
44380         uint16_t        req_type;
44381         /*
44382          * The completion ring to send the completion event on. This should
44383          * be the NQ ID returned from the `nq_alloc` HWRM command.
44384          */
44385         uint16_t        cmpl_ring;
44386         /*
44387          * The sequence ID is used by the driver for tracking multiple
44388          * commands. This ID is treated as opaque data by the firmware and
44389          * the value is returned in the `hwrm_resp_hdr` upon completion.
44390          */
44391         uint16_t        seq_id;
44392         /*
44393          * The target ID of the command:
44394          * * 0x0-0xFFF8 - The function ID
44395          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44396          * * 0xFFFD - Reserved for user-space HWRM interface
44397          * * 0xFFFF - HWRM
44398          */
44399         uint16_t        target_id;
44400         /*
44401          * A physical address pointer pointing to a host buffer that the
44402          * command's response data will be written. This can be either a host
44403          * physical address (HPA) or a guest physical address (GPA) and must
44404          * point to a physically contiguous block of memory.
44405          */
44406         uint64_t        resp_addr;
44407         /*
44408          * 64-bit Host Source Address.
44409          * This is the location of the source data to be written.
44410          */
44411         uint64_t        host_src_addr;
44412         /*
44413          * 32-bit Destination Address.
44414          * This is the NVRAM byte-offset where the source data will be written to.
44415          */
44416         uint32_t        dest_addr;
44417         /* Length of data to be written, in bytes. */
44418         uint32_t        len;
44419 } __rte_packed;
44420
44421 /* hwrm_nvm_raw_write_blk_output (size:128b/16B) */
44422 struct hwrm_nvm_raw_write_blk_output {
44423         /* The specific error status for the command. */
44424         uint16_t        error_code;
44425         /* The HWRM command request type. */
44426         uint16_t        req_type;
44427         /* The sequence ID from the original command. */
44428         uint16_t        seq_id;
44429         /* The length of the response data in number of bytes. */
44430         uint16_t        resp_len;
44431         uint8_t unused_0[7];
44432         /*
44433          * This field is used in Output records to indicate that the output
44434          * is completely written to RAM.  This field should be read as '1'
44435          * to indicate that the output has been completely written.
44436          * When writing a command completion or response to an internal processor,
44437          * the order of writes has to be such that this field is written last.
44438          */
44439         uint8_t valid;
44440 } __rte_packed;
44441
44442 /*****************
44443  * hwrm_nvm_read *
44444  *****************/
44445
44446
44447 /* hwrm_nvm_read_input (size:320b/40B) */
44448 struct hwrm_nvm_read_input {
44449         /* The HWRM command request type. */
44450         uint16_t        req_type;
44451         /*
44452          * The completion ring to send the completion event on. This should
44453          * be the NQ ID returned from the `nq_alloc` HWRM command.
44454          */
44455         uint16_t        cmpl_ring;
44456         /*
44457          * The sequence ID is used by the driver for tracking multiple
44458          * commands. This ID is treated as opaque data by the firmware and
44459          * the value is returned in the `hwrm_resp_hdr` upon completion.
44460          */
44461         uint16_t        seq_id;
44462         /*
44463          * The target ID of the command:
44464          * * 0x0-0xFFF8 - The function ID
44465          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44466          * * 0xFFFD - Reserved for user-space HWRM interface
44467          * * 0xFFFF - HWRM
44468          */
44469         uint16_t        target_id;
44470         /*
44471          * A physical address pointer pointing to a host buffer that the
44472          * command's response data will be written. This can be either a host
44473          * physical address (HPA) or a guest physical address (GPA) and must
44474          * point to a physically contiguous block of memory.
44475          */
44476         uint64_t        resp_addr;
44477         /*
44478          * 64-bit Host Destination Address.
44479          * This is the host address where the data will be written to.
44480          */
44481         uint64_t        host_dest_addr;
44482         /* The 0-based index of the directory entry. */
44483         uint16_t        dir_idx;
44484         uint8_t unused_0[2];
44485         /* The NVRAM byte-offset to read from. */
44486         uint32_t        offset;
44487         /* The length of the data to be read, in bytes. */
44488         uint32_t        len;
44489         uint8_t unused_1[4];
44490 } __rte_packed;
44491
44492 /* hwrm_nvm_read_output (size:128b/16B) */
44493 struct hwrm_nvm_read_output {
44494         /* The specific error status for the command. */
44495         uint16_t        error_code;
44496         /* The HWRM command request type. */
44497         uint16_t        req_type;
44498         /* The sequence ID from the original command. */
44499         uint16_t        seq_id;
44500         /* The length of the response data in number of bytes. */
44501         uint16_t        resp_len;
44502         uint8_t unused_0[7];
44503         /*
44504          * This field is used in Output records to indicate that the output
44505          * is completely written to RAM.  This field should be read as '1'
44506          * to indicate that the output has been completely written.
44507          * When writing a command completion or response to an internal processor,
44508          * the order of writes has to be such that this field is written last.
44509          */
44510         uint8_t valid;
44511 } __rte_packed;
44512
44513 /*********************
44514  * hwrm_nvm_raw_dump *
44515  *********************/
44516
44517
44518 /* hwrm_nvm_raw_dump_input (size:256b/32B) */
44519 struct hwrm_nvm_raw_dump_input {
44520         /* The HWRM command request type. */
44521         uint16_t        req_type;
44522         /*
44523          * The completion ring to send the completion event on. This should
44524          * be the NQ ID returned from the `nq_alloc` HWRM command.
44525          */
44526         uint16_t        cmpl_ring;
44527         /*
44528          * The sequence ID is used by the driver for tracking multiple
44529          * commands. This ID is treated as opaque data by the firmware and
44530          * the value is returned in the `hwrm_resp_hdr` upon completion.
44531          */
44532         uint16_t        seq_id;
44533         /*
44534          * The target ID of the command:
44535          * * 0x0-0xFFF8 - The function ID
44536          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44537          * * 0xFFFD - Reserved for user-space HWRM interface
44538          * * 0xFFFF - HWRM
44539          */
44540         uint16_t        target_id;
44541         /*
44542          * A physical address pointer pointing to a host buffer that the
44543          * command's response data will be written. This can be either a host
44544          * physical address (HPA) or a guest physical address (GPA) and must
44545          * point to a physically contiguous block of memory.
44546          */
44547         uint64_t        resp_addr;
44548         /*
44549          * 64-bit Host Destination Address.
44550          * This is the host address where the data will be written to.
44551          */
44552         uint64_t        host_dest_addr;
44553         /* 32-bit NVRAM byte-offset to read from. */
44554         uint32_t        offset;
44555         /* Total length of NVRAM contents to be read, in bytes. */
44556         uint32_t        len;
44557 } __rte_packed;
44558
44559 /* hwrm_nvm_raw_dump_output (size:128b/16B) */
44560 struct hwrm_nvm_raw_dump_output {
44561         /* The specific error status for the command. */
44562         uint16_t        error_code;
44563         /* The HWRM command request type. */
44564         uint16_t        req_type;
44565         /* The sequence ID from the original command. */
44566         uint16_t        seq_id;
44567         /* The length of the response data in number of bytes. */
44568         uint16_t        resp_len;
44569         uint8_t unused_0[7];
44570         /*
44571          * This field is used in Output records to indicate that the output
44572          * is completely written to RAM.  This field should be read as '1'
44573          * to indicate that the output has been completely written.
44574          * When writing a command completion or response to an internal processor,
44575          * the order of writes has to be such that this field is written last.
44576          */
44577         uint8_t valid;
44578 } __rte_packed;
44579
44580 /****************************
44581  * hwrm_nvm_get_dir_entries *
44582  ****************************/
44583
44584
44585 /* hwrm_nvm_get_dir_entries_input (size:192b/24B) */
44586 struct hwrm_nvm_get_dir_entries_input {
44587         /* The HWRM command request type. */
44588         uint16_t        req_type;
44589         /*
44590          * The completion ring to send the completion event on. This should
44591          * be the NQ ID returned from the `nq_alloc` HWRM command.
44592          */
44593         uint16_t        cmpl_ring;
44594         /*
44595          * The sequence ID is used by the driver for tracking multiple
44596          * commands. This ID is treated as opaque data by the firmware and
44597          * the value is returned in the `hwrm_resp_hdr` upon completion.
44598          */
44599         uint16_t        seq_id;
44600         /*
44601          * The target ID of the command:
44602          * * 0x0-0xFFF8 - The function ID
44603          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44604          * * 0xFFFD - Reserved for user-space HWRM interface
44605          * * 0xFFFF - HWRM
44606          */
44607         uint16_t        target_id;
44608         /*
44609          * A physical address pointer pointing to a host buffer that the
44610          * command's response data will be written. This can be either a host
44611          * physical address (HPA) or a guest physical address (GPA) and must
44612          * point to a physically contiguous block of memory.
44613          */
44614         uint64_t        resp_addr;
44615         /*
44616          * 64-bit Host Destination Address.
44617          * This is the host address where the directory will be written.
44618          */
44619         uint64_t        host_dest_addr;
44620 } __rte_packed;
44621
44622 /* hwrm_nvm_get_dir_entries_output (size:128b/16B) */
44623 struct hwrm_nvm_get_dir_entries_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 processor,
44638          * the order of writes has to be such that this field is written last.
44639          */
44640         uint8_t valid;
44641 } __rte_packed;
44642
44643 /*************************
44644  * hwrm_nvm_get_dir_info *
44645  *************************/
44646
44647
44648 /* hwrm_nvm_get_dir_info_input (size:128b/16B) */
44649 struct hwrm_nvm_get_dir_info_input {
44650         /* The HWRM command request type. */
44651         uint16_t        req_type;
44652         /*
44653          * The completion ring to send the completion event on. This should
44654          * be the NQ ID returned from the `nq_alloc` HWRM command.
44655          */
44656         uint16_t        cmpl_ring;
44657         /*
44658          * The sequence ID is used by the driver for tracking multiple
44659          * commands. This ID is treated as opaque data by the firmware and
44660          * the value is returned in the `hwrm_resp_hdr` upon completion.
44661          */
44662         uint16_t        seq_id;
44663         /*
44664          * The target ID of the command:
44665          * * 0x0-0xFFF8 - The function ID
44666          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44667          * * 0xFFFD - Reserved for user-space HWRM interface
44668          * * 0xFFFF - HWRM
44669          */
44670         uint16_t        target_id;
44671         /*
44672          * A physical address pointer pointing to a host buffer that the
44673          * command's response data will be written. This can be either a host
44674          * physical address (HPA) or a guest physical address (GPA) and must
44675          * point to a physically contiguous block of memory.
44676          */
44677         uint64_t        resp_addr;
44678 } __rte_packed;
44679
44680 /* hwrm_nvm_get_dir_info_output (size:192b/24B) */
44681 struct hwrm_nvm_get_dir_info_output {
44682         /* The specific error status for the command. */
44683         uint16_t        error_code;
44684         /* The HWRM command request type. */
44685         uint16_t        req_type;
44686         /* The sequence ID from the original command. */
44687         uint16_t        seq_id;
44688         /* The length of the response data in number of bytes. */
44689         uint16_t        resp_len;
44690         /* Number of directory entries in the directory. */
44691         uint32_t        entries;
44692         /* Size of each directory entry, in bytes. */
44693         uint32_t        entry_length;
44694         uint8_t unused_0[7];
44695         /*
44696          * This field is used in Output records to indicate that the output
44697          * is completely written to RAM.  This field should be read as '1'
44698          * to indicate that the output has been completely written.
44699          * When writing a command completion or response to an internal processor,
44700          * the order of writes has to be such that this field is written last.
44701          */
44702         uint8_t valid;
44703 } __rte_packed;
44704
44705 /******************
44706  * hwrm_nvm_write *
44707  ******************/
44708
44709
44710 /* hwrm_nvm_write_input (size:384b/48B) */
44711 struct hwrm_nvm_write_input {
44712         /* The HWRM command request type. */
44713         uint16_t        req_type;
44714         /*
44715          * The completion ring to send the completion event on. This should
44716          * be the NQ ID returned from the `nq_alloc` HWRM command.
44717          */
44718         uint16_t        cmpl_ring;
44719         /*
44720          * The sequence ID is used by the driver for tracking multiple
44721          * commands. This ID is treated as opaque data by the firmware and
44722          * the value is returned in the `hwrm_resp_hdr` upon completion.
44723          */
44724         uint16_t        seq_id;
44725         /*
44726          * The target ID of the command:
44727          * * 0x0-0xFFF8 - The function ID
44728          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44729          * * 0xFFFD - Reserved for user-space HWRM interface
44730          * * 0xFFFF - HWRM
44731          */
44732         uint16_t        target_id;
44733         /*
44734          * A physical address pointer pointing to a host buffer that the
44735          * command's response data will be written. This can be either a host
44736          * physical address (HPA) or a guest physical address (GPA) and must
44737          * point to a physically contiguous block of memory.
44738          */
44739         uint64_t        resp_addr;
44740         /*
44741          * 64-bit Host Source Address.
44742          * This is where the source data is.
44743          */
44744         uint64_t        host_src_addr;
44745         /*
44746          * The Directory Entry Type (valid values are defined in the bnxnvm
44747          * directory_type enum defined in the file bnxnvm_defs.h).
44748          */
44749         uint16_t        dir_type;
44750         /*
44751          * Directory ordinal.
44752          * The 0-based instance of the combined Directory Entry Type and Extension.
44753          */
44754         uint16_t        dir_ordinal;
44755         /* The Directory Entry Extension flags (see BNX_DIR_EXT_* in the file bnxnvm_defs.h). */
44756         uint16_t        dir_ext;
44757         /* Directory Entry Attribute flags (see BNX_DIR_ATTR_* in the file bnxnvm_defs.h). */
44758         uint16_t        dir_attr;
44759         /*
44760          * Length of data to write, in bytes. May be less than or equal to the allocated
44761          * size for the directory entry.
44762          * The data length stored in the directory entry will be updated to reflect
44763          * this value once the write is complete.
44764          */
44765         uint32_t        dir_data_length;
44766         /* Option. */
44767         uint16_t        option;
44768         uint16_t        flags;
44769         /*
44770          * When this bit is '1', the original active image
44771          * will not be removed. TBD: what purpose is this?
44772          */
44773         #define HWRM_NVM_WRITE_INPUT_FLAGS_KEEP_ORIG_ACTIVE_IMG \
44774                 UINT32_C(0x1)
44775         /*
44776          * The requested length of the allocated NVM for the item, in bytes. This
44777          * value may be greater than or equal to the specified data length (dir_data_length).
44778          * If this value is less than the specified data length, it will be ignored.
44779          * The response will contain the actual allocated item length, which may be
44780          * greater than the requested item length.
44781          * The purpose for allocating more than the required number of bytes for
44782          * an item's data is to pre-allocate extra storage (padding) to accommodate
44783          * the potential future growth of an item (e.g. upgraded firmware with a
44784          * size increase, log growth, expanded configuration data).
44785          */
44786         uint32_t        dir_item_length;
44787         uint32_t        unused_0;
44788 } __rte_packed;
44789
44790 /* hwrm_nvm_write_output (size:128b/16B) */
44791 struct hwrm_nvm_write_output {
44792         /* The specific error status for the command. */
44793         uint16_t        error_code;
44794         /* The HWRM command request type. */
44795         uint16_t        req_type;
44796         /* The sequence ID from the original command. */
44797         uint16_t        seq_id;
44798         /* The length of the response data in number of bytes. */
44799         uint16_t        resp_len;
44800         /*
44801          * Length of the allocated NVM for the item, in bytes. The value may be
44802          * greater than or equal to the specified data length or the requested
44803          * item length.
44804          * The actual item length used when creating a new directory entry will be
44805          * a multiple of an NVM block size.
44806          */
44807         uint32_t        dir_item_length;
44808         /* The directory index of the created or modified item. */
44809         uint16_t        dir_idx;
44810         uint8_t unused_0;
44811         /*
44812          * This field is used in Output records to indicate that the output
44813          * is completely written to RAM.  This field should be read as '1'
44814          * to indicate that the output has been completely written.
44815          * When writing a command completion or response to an internal processor,
44816          * the order of writes has to be such that this field is written last.
44817          */
44818         uint8_t valid;
44819 } __rte_packed;
44820
44821 /* hwrm_nvm_write_cmd_err (size:64b/8B) */
44822 struct hwrm_nvm_write_cmd_err {
44823         /*
44824          * command specific error codes that goes to
44825          * the cmd_err field in Common HWRM Error Response.
44826          */
44827         uint8_t code;
44828         /* Unknown error */
44829         #define HWRM_NVM_WRITE_CMD_ERR_CODE_UNKNOWN  UINT32_C(0x0)
44830         /* Unable to complete operation due to fragmentation */
44831         #define HWRM_NVM_WRITE_CMD_ERR_CODE_FRAG_ERR UINT32_C(0x1)
44832         /* nvm is completely full. */
44833         #define HWRM_NVM_WRITE_CMD_ERR_CODE_NO_SPACE UINT32_C(0x2)
44834         #define HWRM_NVM_WRITE_CMD_ERR_CODE_LAST \
44835                 HWRM_NVM_WRITE_CMD_ERR_CODE_NO_SPACE
44836         uint8_t unused_0[7];
44837 } __rte_packed;
44838
44839 /*******************
44840  * hwrm_nvm_modify *
44841  *******************/
44842
44843
44844 /* hwrm_nvm_modify_input (size:320b/40B) */
44845 struct hwrm_nvm_modify_input {
44846         /* The HWRM command request type. */
44847         uint16_t        req_type;
44848         /*
44849          * The completion ring to send the completion event on. This should
44850          * be the NQ ID returned from the `nq_alloc` HWRM command.
44851          */
44852         uint16_t        cmpl_ring;
44853         /*
44854          * The sequence ID is used by the driver for tracking multiple
44855          * commands. This ID is treated as opaque data by the firmware and
44856          * the value is returned in the `hwrm_resp_hdr` upon completion.
44857          */
44858         uint16_t        seq_id;
44859         /*
44860          * The target ID of the command:
44861          * * 0x0-0xFFF8 - The function ID
44862          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44863          * * 0xFFFD - Reserved for user-space HWRM interface
44864          * * 0xFFFF - HWRM
44865          */
44866         uint16_t        target_id;
44867         /*
44868          * A physical address pointer pointing to a host buffer that the
44869          * command's response data will be written. This can be either a host
44870          * physical address (HPA) or a guest physical address (GPA) and must
44871          * point to a physically contiguous block of memory.
44872          */
44873         uint64_t        resp_addr;
44874         /*
44875          * 64-bit Host Source Address.
44876          * This is where the modified data is.
44877          */
44878         uint64_t        host_src_addr;
44879         /* 16-bit directory entry index. */
44880         uint16_t        dir_idx;
44881         uint16_t        flags;
44882         /*
44883          * This flag indicates the sender wants to modify a continuous NVRAM
44884          * area using a batch of this HWRM requests. The offset of a request
44885          * must be continuous to the end of previous request's. Firmware does
44886          * not update the directory entry until receiving the last request,
44887          * which is indicated by the batch_last flag.
44888          * This flag is set usually when a sender does not have a block of
44889          * memory that is big enough to hold the entire NVRAM data for send
44890          * at one time.
44891          */
44892         #define HWRM_NVM_MODIFY_INPUT_FLAGS_BATCH_MODE     UINT32_C(0x1)
44893         /*
44894          * This flag can be used only when the batch_mode flag is set.
44895          * It indicates this request is the last of batch requests.
44896          */
44897         #define HWRM_NVM_MODIFY_INPUT_FLAGS_BATCH_LAST     UINT32_C(0x2)
44898         /* 32-bit NVRAM byte-offset to modify content from. */
44899         uint32_t        offset;
44900         /*
44901          * Length of data to be modified, in bytes. The length shall
44902          * be non-zero.
44903          */
44904         uint32_t        len;
44905         uint8_t unused_1[4];
44906 } __rte_packed;
44907
44908 /* hwrm_nvm_modify_output (size:128b/16B) */
44909 struct hwrm_nvm_modify_output {
44910         /* The specific error status for the command. */
44911         uint16_t        error_code;
44912         /* The HWRM command request type. */
44913         uint16_t        req_type;
44914         /* The sequence ID from the original command. */
44915         uint16_t        seq_id;
44916         /* The length of the response data in number of bytes. */
44917         uint16_t        resp_len;
44918         uint8_t unused_0[7];
44919         /*
44920          * This field is used in Output records to indicate that the output
44921          * is completely written to RAM.  This field should be read as '1'
44922          * to indicate that the output has been completely written.
44923          * When writing a command completion or response to an internal processor,
44924          * the order of writes has to be such that this field is written last.
44925          */
44926         uint8_t valid;
44927 } __rte_packed;
44928
44929 /***************************
44930  * hwrm_nvm_find_dir_entry *
44931  ***************************/
44932
44933
44934 /* hwrm_nvm_find_dir_entry_input (size:256b/32B) */
44935 struct hwrm_nvm_find_dir_entry_input {
44936         /* The HWRM command request type. */
44937         uint16_t        req_type;
44938         /*
44939          * The completion ring to send the completion event on. This should
44940          * be the NQ ID returned from the `nq_alloc` HWRM command.
44941          */
44942         uint16_t        cmpl_ring;
44943         /*
44944          * The sequence ID is used by the driver for tracking multiple
44945          * commands. This ID is treated as opaque data by the firmware and
44946          * the value is returned in the `hwrm_resp_hdr` upon completion.
44947          */
44948         uint16_t        seq_id;
44949         /*
44950          * The target ID of the command:
44951          * * 0x0-0xFFF8 - The function ID
44952          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
44953          * * 0xFFFD - Reserved for user-space HWRM interface
44954          * * 0xFFFF - HWRM
44955          */
44956         uint16_t        target_id;
44957         /*
44958          * A physical address pointer pointing to a host buffer that the
44959          * command's response data will be written. This can be either a host
44960          * physical address (HPA) or a guest physical address (GPA) and must
44961          * point to a physically contiguous block of memory.
44962          */
44963         uint64_t        resp_addr;
44964         uint32_t        enables;
44965         /*
44966          * This bit must be '1' for the dir_idx_valid field to be
44967          * configured.
44968          */
44969         #define HWRM_NVM_FIND_DIR_ENTRY_INPUT_ENABLES_DIR_IDX_VALID \
44970                 UINT32_C(0x1)
44971         /* Directory Entry Index */
44972         uint16_t        dir_idx;
44973         /* Directory Entry (Image) Type */
44974         uint16_t        dir_type;
44975         /*
44976          * Directory ordinal.
44977          * The instance of this Directory Type
44978          */
44979         uint16_t        dir_ordinal;
44980         /* The Directory Entry Extension flags. */
44981         uint16_t        dir_ext;
44982         /* This value indicates the search option using dir_ordinal. */
44983         uint8_t opt_ordinal;
44984         /* This value indicates the search option using dir_ordinal. */
44985         #define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_MASK UINT32_C(0x3)
44986         #define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_SFT 0
44987         /* Equal to specified ordinal value. */
44988         #define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_EQ    UINT32_C(0x0)
44989         /* Greater than or equal to specified ordinal value */
44990         #define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_GE    UINT32_C(0x1)
44991         /* Greater than specified ordinal value */
44992         #define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_GT    UINT32_C(0x2)
44993         #define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_LAST \
44994                 HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_GT
44995         uint8_t unused_0[3];
44996 } __rte_packed;
44997
44998 /* hwrm_nvm_find_dir_entry_output (size:256b/32B) */
44999 struct hwrm_nvm_find_dir_entry_output {
45000         /* The specific error status for the command. */
45001         uint16_t        error_code;
45002         /* The HWRM command request type. */
45003         uint16_t        req_type;
45004         /* The sequence ID from the original command. */
45005         uint16_t        seq_id;
45006         /* The length of the response data in number of bytes. */
45007         uint16_t        resp_len;
45008         /* Allocated NVRAM for this directory entry, in bytes. */
45009         uint32_t        dir_item_length;
45010         /* Size of the stored data for this directory entry, in bytes. */
45011         uint32_t        dir_data_length;
45012         /*
45013          * Firmware version.
45014          * Only valid if the directory entry is for embedded firmware stored in APE_BIN Format.
45015          */
45016         uint32_t        fw_ver;
45017         /* Directory ordinal. */
45018         uint16_t        dir_ordinal;
45019         /* Directory Entry Index */
45020         uint16_t        dir_idx;
45021         uint8_t unused_0[7];
45022         /*
45023          * This field is used in Output records to indicate that the output
45024          * is completely written to RAM.  This field should be read as '1'
45025          * to indicate that the output has been completely written.
45026          * When writing a command completion or response to an internal processor,
45027          * the order of writes has to be such that this field is written last.
45028          */
45029         uint8_t valid;
45030 } __rte_packed;
45031
45032 /****************************
45033  * hwrm_nvm_erase_dir_entry *
45034  ****************************/
45035
45036
45037 /* hwrm_nvm_erase_dir_entry_input (size:192b/24B) */
45038 struct hwrm_nvm_erase_dir_entry_input {
45039         /* The HWRM command request type. */
45040         uint16_t        req_type;
45041         /*
45042          * The completion ring to send the completion event on. This should
45043          * be the NQ ID returned from the `nq_alloc` HWRM command.
45044          */
45045         uint16_t        cmpl_ring;
45046         /*
45047          * The sequence ID is used by the driver for tracking multiple
45048          * commands. This ID is treated as opaque data by the firmware and
45049          * the value is returned in the `hwrm_resp_hdr` upon completion.
45050          */
45051         uint16_t        seq_id;
45052         /*
45053          * The target ID of the command:
45054          * * 0x0-0xFFF8 - The function ID
45055          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45056          * * 0xFFFD - Reserved for user-space HWRM interface
45057          * * 0xFFFF - HWRM
45058          */
45059         uint16_t        target_id;
45060         /*
45061          * A physical address pointer pointing to a host buffer that the
45062          * command's response data will be written. This can be either a host
45063          * physical address (HPA) or a guest physical address (GPA) and must
45064          * point to a physically contiguous block of memory.
45065          */
45066         uint64_t        resp_addr;
45067         /* Directory Entry Index */
45068         uint16_t        dir_idx;
45069         uint8_t unused_0[6];
45070 } __rte_packed;
45071
45072 /* hwrm_nvm_erase_dir_entry_output (size:128b/16B) */
45073 struct hwrm_nvm_erase_dir_entry_output {
45074         /* The specific error status for the command. */
45075         uint16_t        error_code;
45076         /* The HWRM command request type. */
45077         uint16_t        req_type;
45078         /* The sequence ID from the original command. */
45079         uint16_t        seq_id;
45080         /* The length of the response data in number of bytes. */
45081         uint16_t        resp_len;
45082         uint8_t unused_0[7];
45083         /*
45084          * This field is used in Output records to indicate that the output
45085          * is completely written to RAM.  This field should be read as '1'
45086          * to indicate that the output has been completely written.
45087          * When writing a command completion or response to an internal processor,
45088          * the order of writes has to be such that this field is written last.
45089          */
45090         uint8_t valid;
45091 } __rte_packed;
45092
45093 /*************************
45094  * hwrm_nvm_get_dev_info *
45095  *************************/
45096
45097
45098 /* hwrm_nvm_get_dev_info_input (size:128b/16B) */
45099 struct hwrm_nvm_get_dev_info_input {
45100         /* The HWRM command request type. */
45101         uint16_t        req_type;
45102         /*
45103          * The completion ring to send the completion event on. This should
45104          * be the NQ ID returned from the `nq_alloc` HWRM command.
45105          */
45106         uint16_t        cmpl_ring;
45107         /*
45108          * The sequence ID is used by the driver for tracking multiple
45109          * commands. This ID is treated as opaque data by the firmware and
45110          * the value is returned in the `hwrm_resp_hdr` upon completion.
45111          */
45112         uint16_t        seq_id;
45113         /*
45114          * The target ID of the command:
45115          * * 0x0-0xFFF8 - The function ID
45116          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45117          * * 0xFFFD - Reserved for user-space HWRM interface
45118          * * 0xFFFF - HWRM
45119          */
45120         uint16_t        target_id;
45121         /*
45122          * A physical address pointer pointing to a host buffer that the
45123          * command's response data will be written. This can be either a host
45124          * physical address (HPA) or a guest physical address (GPA) and must
45125          * point to a physically contiguous block of memory.
45126          */
45127         uint64_t        resp_addr;
45128 } __rte_packed;
45129
45130 /* hwrm_nvm_get_dev_info_output (size:640b/80B) */
45131 struct hwrm_nvm_get_dev_info_output {
45132         /* The specific error status for the command. */
45133         uint16_t        error_code;
45134         /* The HWRM command request type. */
45135         uint16_t        req_type;
45136         /* The sequence ID from the original command. */
45137         uint16_t        seq_id;
45138         /* The length of the response data in number of bytes. */
45139         uint16_t        resp_len;
45140         /* Manufacturer ID. */
45141         uint16_t        manufacturer_id;
45142         /* Device ID. */
45143         uint16_t        device_id;
45144         /* Sector size of the NVRAM device. */
45145         uint32_t        sector_size;
45146         /* Total size, in bytes of the NVRAM device. */
45147         uint32_t        nvram_size;
45148         uint32_t        reserved_size;
45149         /*
45150          * Available size that can be used, in bytes.  Available size is the
45151          * NVRAM size take away the used size and reserved size.
45152          */
45153         uint32_t        available_size;
45154         /* This field represents the major version of NVM cfg */
45155         uint8_t nvm_cfg_ver_maj;
45156         /* This field represents the minor version of NVM cfg */
45157         uint8_t nvm_cfg_ver_min;
45158         /* This field represents the update version of NVM cfg */
45159         uint8_t nvm_cfg_ver_upd;
45160         uint8_t flags;
45161         /*
45162          * If set to 1, firmware will provide various firmware version
45163          * information stored in the flash.
45164          */
45165         #define HWRM_NVM_GET_DEV_INFO_OUTPUT_FLAGS_FW_VER_VALID \
45166                 UINT32_C(0x1)
45167         /*
45168          * This field represents the board package name stored in the flash.
45169          * (ASCII chars with NULL at the end).
45170          */
45171         char    pkg_name[16];
45172         /*
45173          * This field represents the major version of HWRM firmware, stored in
45174          * the flash.
45175          */
45176         uint16_t        hwrm_fw_major;
45177         /*
45178          * This field represents the minor version of HWRM firmware, stored in
45179          * the flash.
45180          */
45181         uint16_t        hwrm_fw_minor;
45182         /*
45183          * This field represents the build version of HWRM firmware, stored in
45184          * the flash.
45185          */
45186         uint16_t        hwrm_fw_build;
45187         /*
45188          * This field can be used to represent firmware branches or customer
45189          * specific releases tied to a specific (major, minor, build) version
45190          * of the HWRM firmware.
45191          */
45192         uint16_t        hwrm_fw_patch;
45193         /*
45194          * This field represents the major version of mgmt firmware, stored in
45195          * the flash.
45196          */
45197         uint16_t        mgmt_fw_major;
45198         /*
45199          * This field represents the minor version of mgmt firmware, stored in
45200          * the flash.
45201          */
45202         uint16_t        mgmt_fw_minor;
45203         /*
45204          * This field represents the build version of mgmt firmware, stored in
45205          * the flash.
45206          */
45207         uint16_t        mgmt_fw_build;
45208         /*
45209          * This field can be used to represent firmware branches or customer
45210          * specific releases tied to a specific (major, minor, build) version
45211          * of the mgmt firmware.
45212          */
45213         uint16_t        mgmt_fw_patch;
45214         /*
45215          * This field represents the major version of roce firmware, stored in
45216          * the flash.
45217          */
45218         uint16_t        roce_fw_major;
45219         /*
45220          * This field represents the minor version of roce firmware, stored in
45221          * the flash.
45222          */
45223         uint16_t        roce_fw_minor;
45224         /*
45225          * This field represents the build version of roce firmware, stored in
45226          * the flash.
45227          */
45228         uint16_t        roce_fw_build;
45229         /*
45230          * This field can be used to represent firmware branches or customer
45231          * specific releases tied to a specific (major, minor, build) version
45232          * of the roce firmware.
45233          */
45234         uint16_t        roce_fw_patch;
45235         uint8_t unused_0[7];
45236         /*
45237          * This field is used in Output records to indicate that the output
45238          * is completely written to RAM.  This field should be read as '1'
45239          * to indicate that the output has been completely written.
45240          * When writing a command completion or response to an internal processor,
45241          * the order of writes has to be such that this field is written last.
45242          */
45243         uint8_t valid;
45244 } __rte_packed;
45245
45246 /**************************
45247  * hwrm_nvm_mod_dir_entry *
45248  **************************/
45249
45250
45251 /* hwrm_nvm_mod_dir_entry_input (size:256b/32B) */
45252 struct hwrm_nvm_mod_dir_entry_input {
45253         /* The HWRM command request type. */
45254         uint16_t        req_type;
45255         /*
45256          * The completion ring to send the completion event on. This should
45257          * be the NQ ID returned from the `nq_alloc` HWRM command.
45258          */
45259         uint16_t        cmpl_ring;
45260         /*
45261          * The sequence ID is used by the driver for tracking multiple
45262          * commands. This ID is treated as opaque data by the firmware and
45263          * the value is returned in the `hwrm_resp_hdr` upon completion.
45264          */
45265         uint16_t        seq_id;
45266         /*
45267          * The target ID of the command:
45268          * * 0x0-0xFFF8 - The function ID
45269          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45270          * * 0xFFFD - Reserved for user-space HWRM interface
45271          * * 0xFFFF - HWRM
45272          */
45273         uint16_t        target_id;
45274         /*
45275          * A physical address pointer pointing to a host buffer that the
45276          * command's response data will be written. This can be either a host
45277          * physical address (HPA) or a guest physical address (GPA) and must
45278          * point to a physically contiguous block of memory.
45279          */
45280         uint64_t        resp_addr;
45281         uint32_t        enables;
45282         /*
45283          * This bit must be '1' for the checksum field to be
45284          * configured.
45285          */
45286         #define HWRM_NVM_MOD_DIR_ENTRY_INPUT_ENABLES_CHECKSUM     UINT32_C(0x1)
45287         /* Directory Entry Index */
45288         uint16_t        dir_idx;
45289         /*
45290          * Directory ordinal.
45291          * The (0-based) instance of this Directory Type.
45292          */
45293         uint16_t        dir_ordinal;
45294         /*
45295          * The Directory Entry Extension flags (see BNX_DIR_EXT_* for extension
45296          * flag definitions).
45297          */
45298         uint16_t        dir_ext;
45299         /*
45300          * Directory Entry Attribute flags (see BNX_DIR_ATTR_* for attribute flag
45301          * definitions).
45302          */
45303         uint16_t        dir_attr;
45304         /*
45305          * If valid, then this field updates the checksum
45306          * value of the content in the directory entry.
45307          */
45308         uint32_t        checksum;
45309 } __rte_packed;
45310
45311 /* hwrm_nvm_mod_dir_entry_output (size:128b/16B) */
45312 struct hwrm_nvm_mod_dir_entry_output {
45313         /* The specific error status for the command. */
45314         uint16_t        error_code;
45315         /* The HWRM command request type. */
45316         uint16_t        req_type;
45317         /* The sequence ID from the original command. */
45318         uint16_t        seq_id;
45319         /* The length of the response data in number of bytes. */
45320         uint16_t        resp_len;
45321         uint8_t unused_0[7];
45322         /*
45323          * This field is used in Output records to indicate that the output
45324          * is completely written to RAM.  This field should be read as '1'
45325          * to indicate that the output has been completely written.
45326          * When writing a command completion or response to an internal processor,
45327          * the order of writes has to be such that this field is written last.
45328          */
45329         uint8_t valid;
45330 } __rte_packed;
45331
45332 /**************************
45333  * hwrm_nvm_verify_update *
45334  **************************/
45335
45336
45337 /* hwrm_nvm_verify_update_input (size:192b/24B) */
45338 struct hwrm_nvm_verify_update_input {
45339         /* The HWRM command request type. */
45340         uint16_t        req_type;
45341         /*
45342          * The completion ring to send the completion event on. This should
45343          * be the NQ ID returned from the `nq_alloc` HWRM command.
45344          */
45345         uint16_t        cmpl_ring;
45346         /*
45347          * The sequence ID is used by the driver for tracking multiple
45348          * commands. This ID is treated as opaque data by the firmware and
45349          * the value is returned in the `hwrm_resp_hdr` upon completion.
45350          */
45351         uint16_t        seq_id;
45352         /*
45353          * The target ID of the command:
45354          * * 0x0-0xFFF8 - The function ID
45355          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45356          * * 0xFFFD - Reserved for user-space HWRM interface
45357          * * 0xFFFF - HWRM
45358          */
45359         uint16_t        target_id;
45360         /*
45361          * A physical address pointer pointing to a host buffer that the
45362          * command's response data will be written. This can be either a host
45363          * physical address (HPA) or a guest physical address (GPA) and must
45364          * point to a physically contiguous block of memory.
45365          */
45366         uint64_t        resp_addr;
45367         /* Directory Entry Type, to be verified. */
45368         uint16_t        dir_type;
45369         /*
45370          * Directory ordinal.
45371          * The instance of the Directory Type to be verified.
45372          */
45373         uint16_t        dir_ordinal;
45374         /*
45375          * The Directory Entry Extension flags.
45376          * The "UPDATE" extension flag must be set in this value.
45377          * A corresponding directory entry with the same type and ordinal values but *without*
45378          * the "UPDATE" extension flag must also exist. The other flags of the extension must
45379          * be identical between the active and update entries.
45380          */
45381         uint16_t        dir_ext;
45382         uint8_t unused_0[2];
45383 } __rte_packed;
45384
45385 /* hwrm_nvm_verify_update_output (size:128b/16B) */
45386 struct hwrm_nvm_verify_update_output {
45387         /* The specific error status for the command. */
45388         uint16_t        error_code;
45389         /* The HWRM command request type. */
45390         uint16_t        req_type;
45391         /* The sequence ID from the original command. */
45392         uint16_t        seq_id;
45393         /* The length of the response data in number of bytes. */
45394         uint16_t        resp_len;
45395         uint8_t unused_0[7];
45396         /*
45397          * This field is used in Output records to indicate that the output
45398          * is completely written to RAM.  This field should be read as '1'
45399          * to indicate that the output has been completely written.
45400          * When writing a command completion or response to an internal processor,
45401          * the order of writes has to be such that this field is written last.
45402          */
45403         uint8_t valid;
45404 } __rte_packed;
45405
45406 /***************************
45407  * hwrm_nvm_install_update *
45408  ***************************/
45409
45410
45411 /* hwrm_nvm_install_update_input (size:192b/24B) */
45412 struct hwrm_nvm_install_update_input {
45413         /* The HWRM command request type. */
45414         uint16_t        req_type;
45415         /*
45416          * The completion ring to send the completion event on. This should
45417          * be the NQ ID returned from the `nq_alloc` HWRM command.
45418          */
45419         uint16_t        cmpl_ring;
45420         /*
45421          * The sequence ID is used by the driver for tracking multiple
45422          * commands. This ID is treated as opaque data by the firmware and
45423          * the value is returned in the `hwrm_resp_hdr` upon completion.
45424          */
45425         uint16_t        seq_id;
45426         /*
45427          * The target ID of the command:
45428          * * 0x0-0xFFF8 - The function ID
45429          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45430          * * 0xFFFD - Reserved for user-space HWRM interface
45431          * * 0xFFFF - HWRM
45432          */
45433         uint16_t        target_id;
45434         /*
45435          * A physical address pointer pointing to a host buffer that the
45436          * command's response data will be written. This can be either a host
45437          * physical address (HPA) or a guest physical address (GPA) and must
45438          * point to a physically contiguous block of memory.
45439          */
45440         uint64_t        resp_addr;
45441         /*
45442          * Installation type. If the value 3 through 0xffff is used,
45443          * only packaged items with that type value will be installed and
45444          * conditional installation directives for those packaged items
45445          * will be over-ridden (i.e. 'create' or 'replace' will be treated
45446          * as 'install').
45447          */
45448         uint32_t        install_type;
45449         /*
45450          * Perform a normal package installation. Conditional installation
45451          * directives (e.g. 'create' and 'replace') of packaged items
45452          * will be followed.
45453          */
45454         #define HWRM_NVM_INSTALL_UPDATE_INPUT_INSTALL_TYPE_NORMAL UINT32_C(0x0)
45455         /*
45456          * Install all packaged items regardless of installation directive
45457          * (i.e. treat all packaged items as though they have an installation
45458          * directive of 'install').
45459          */
45460         #define HWRM_NVM_INSTALL_UPDATE_INPUT_INSTALL_TYPE_ALL \
45461                 UINT32_C(0xffffffff)
45462         #define HWRM_NVM_INSTALL_UPDATE_INPUT_INSTALL_TYPE_LAST \
45463                 HWRM_NVM_INSTALL_UPDATE_INPUT_INSTALL_TYPE_ALL
45464         uint16_t        flags;
45465         /* If set to 1, then securely erase all unused locations in persistent storage. */
45466         #define HWRM_NVM_INSTALL_UPDATE_INPUT_FLAGS_ERASE_UNUSED_SPACE \
45467                 UINT32_C(0x1)
45468         /*
45469          * If set to 1, then unspecified images, images not in the package file,
45470          * will be safely deleted.
45471          * When combined with erase_unused_space then unspecified images will be
45472          * securely erased.
45473          */
45474         #define HWRM_NVM_INSTALL_UPDATE_INPUT_FLAGS_REMOVE_UNUSED_PKG \
45475                 UINT32_C(0x2)
45476         /*
45477          * If set to 1, FW will defragment the NVM if defragmentation is required
45478          * for the update.
45479          * Allow additional time for this command to complete if this bit is set to 1.
45480          */
45481         #define HWRM_NVM_INSTALL_UPDATE_INPUT_FLAGS_ALLOWED_TO_DEFRAG \
45482                 UINT32_C(0x4)
45483         /*
45484          * If set to 1, FW will verify the package in the "UPDATE" NVM item
45485          * without installing it. This flag is for FW internal use only.
45486          * Users should not set this flag. The request will otherwise fail.
45487          */
45488         #define HWRM_NVM_INSTALL_UPDATE_INPUT_FLAGS_VERIFY_ONLY \
45489                 UINT32_C(0x8)
45490         uint8_t unused_0[2];
45491 } __rte_packed;
45492
45493 /* hwrm_nvm_install_update_output (size:192b/24B) */
45494 struct hwrm_nvm_install_update_output {
45495         /* The specific error status for the command. */
45496         uint16_t        error_code;
45497         /* The HWRM command request type. */
45498         uint16_t        req_type;
45499         /* The sequence ID from the original command. */
45500         uint16_t        seq_id;
45501         /* The length of the response data in number of bytes. */
45502         uint16_t        resp_len;
45503         /*
45504          * Bit-mask of successfully installed items.
45505          * Bit-0 corresponding to the first packaged item, Bit-1 for the second item, etc.
45506          * A value of 0 indicates that no items were successfully installed.
45507          */
45508         uint64_t        installed_items;
45509         /* result is 8 b */
45510         uint8_t result;
45511         /* There was no problem with the package installation. */
45512         #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_SUCCESS UINT32_C(0x0)
45513         #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_LAST \
45514                 HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_SUCCESS
45515         /* problem_item is 8 b */
45516         uint8_t problem_item;
45517         /* There was no problem with any packaged items. */
45518         #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_PROBLEM_ITEM_NONE \
45519                 UINT32_C(0x0)
45520         /* There was a problem with the NVM package itself. */
45521         #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_PROBLEM_ITEM_PACKAGE \
45522                 UINT32_C(0xff)
45523         #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_PROBLEM_ITEM_LAST \
45524                 HWRM_NVM_INSTALL_UPDATE_OUTPUT_PROBLEM_ITEM_PACKAGE
45525         /* reset_required is 8 b */
45526         uint8_t reset_required;
45527         /*
45528          * No reset is required for installed/updated firmware or
45529          * microcode to take effect.
45530          */
45531         #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_NONE \
45532                 UINT32_C(0x0)
45533         /*
45534          * A PCIe reset (e.g. system reboot) is
45535          * required for newly installed/updated firmware or
45536          * microcode to take effect.
45537          */
45538         #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_PCI \
45539                 UINT32_C(0x1)
45540         /*
45541          * A controller power reset (e.g. system power-cycle) is
45542          * required for newly installed/updated firmware or
45543          * microcode to take effect. Some newly installed/updated
45544          * firmware or microcode may still take effect upon the
45545          * next PCIe reset.
45546          */
45547         #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_POWER \
45548                 UINT32_C(0x2)
45549         #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_LAST \
45550                 HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_POWER
45551         uint8_t unused_0[4];
45552         /*
45553          * This field is used in Output records to indicate that the output
45554          * is completely written to RAM.  This field should be read as '1'
45555          * to indicate that the output has been completely written.
45556          * When writing a command completion or response to an internal processor,
45557          * the order of writes has to be such that this field is written last.
45558          */
45559         uint8_t valid;
45560 } __rte_packed;
45561
45562 /* hwrm_nvm_install_update_cmd_err (size:64b/8B) */
45563 struct hwrm_nvm_install_update_cmd_err {
45564         /*
45565          * command specific error codes that goes to
45566          * the cmd_err field in Common HWRM Error Response.
45567          */
45568         uint8_t code;
45569         /* Unknown error */
45570         #define HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_UNKNOWN  UINT32_C(0x0)
45571         /* Unable to complete operation due to fragmentation */
45572         #define HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_FRAG_ERR UINT32_C(0x1)
45573         /* nvm is completely full. */
45574         #define HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_NO_SPACE UINT32_C(0x2)
45575         #define HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_LAST \
45576                 HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_NO_SPACE
45577         uint8_t unused_0[7];
45578 } __rte_packed;
45579
45580 /******************
45581  * hwrm_nvm_flush *
45582  ******************/
45583
45584
45585 /* hwrm_nvm_flush_input (size:128b/16B) */
45586 struct hwrm_nvm_flush_input {
45587         /* The HWRM command request type. */
45588         uint16_t        req_type;
45589         /*
45590          * The completion ring to send the completion event on. This should
45591          * be the NQ ID returned from the `nq_alloc` HWRM command.
45592          */
45593         uint16_t        cmpl_ring;
45594         /*
45595          * The sequence ID is used by the driver for tracking multiple
45596          * commands. This ID is treated as opaque data by the firmware and
45597          * the value is returned in the `hwrm_resp_hdr` upon completion.
45598          */
45599         uint16_t        seq_id;
45600         /*
45601          * The target ID of the command:
45602          * * 0x0-0xFFF8 - The function ID
45603          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45604          * * 0xFFFD - Reserved for user-space HWRM interface
45605          * * 0xFFFF - HWRM
45606          */
45607         uint16_t        target_id;
45608         /*
45609          * A physical address pointer pointing to a host buffer that the
45610          * command's response data will be written. This can be either a host
45611          * physical address (HPA) or a guest physical address (GPA) and must
45612          * point to a physically contiguous block of memory.
45613          */
45614         uint64_t        resp_addr;
45615 } __rte_packed;
45616
45617 /* hwrm_nvm_flush_output (size:128b/16B) */
45618 struct hwrm_nvm_flush_output {
45619         /* The specific error status for the command. */
45620         uint16_t        error_code;
45621         /* The HWRM command request type. */
45622         uint16_t        req_type;
45623         /* The sequence ID from the original command. */
45624         uint16_t        seq_id;
45625         /* The length of the response data in number of bytes. */
45626         uint16_t        resp_len;
45627         uint8_t unused_0[7];
45628         /*
45629          * This field is used in Output records to indicate that the output
45630          * is completely written to RAM.  This field should be read as '1'
45631          * to indicate that the output has been completely written.
45632          * When writing a command completion or response to an internal processor,
45633          * the order of writes has to be such that this field is written last.
45634          */
45635         uint8_t valid;
45636 } __rte_packed;
45637
45638 /* hwrm_nvm_flush_cmd_err (size:64b/8B) */
45639 struct hwrm_nvm_flush_cmd_err {
45640         /*
45641          * command specific error codes that goes to
45642          * the cmd_err field in Common HWRM Error Response.
45643          */
45644         uint8_t code;
45645         /* Unknown error */
45646         #define HWRM_NVM_FLUSH_CMD_ERR_CODE_UNKNOWN UINT32_C(0x0)
45647         /* flush could not be performed */
45648         #define HWRM_NVM_FLUSH_CMD_ERR_CODE_FAIL    UINT32_C(0x1)
45649         #define HWRM_NVM_FLUSH_CMD_ERR_CODE_LAST \
45650                 HWRM_NVM_FLUSH_CMD_ERR_CODE_FAIL
45651         uint8_t unused_0[7];
45652 } __rte_packed;
45653
45654 /*************************
45655  * hwrm_nvm_get_variable *
45656  *************************/
45657
45658
45659 /* hwrm_nvm_get_variable_input (size:320b/40B) */
45660 struct hwrm_nvm_get_variable_input {
45661         /* The HWRM command request type. */
45662         uint16_t        req_type;
45663         /*
45664          * The completion ring to send the completion event on. This should
45665          * be the NQ ID returned from the `nq_alloc` HWRM command.
45666          */
45667         uint16_t        cmpl_ring;
45668         /*
45669          * The sequence ID is used by the driver for tracking multiple
45670          * commands. This ID is treated as opaque data by the firmware and
45671          * the value is returned in the `hwrm_resp_hdr` upon completion.
45672          */
45673         uint16_t        seq_id;
45674         /*
45675          * The target ID of the command:
45676          * * 0x0-0xFFF8 - The function ID
45677          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45678          * * 0xFFFD - Reserved for user-space HWRM interface
45679          * * 0xFFFF - HWRM
45680          */
45681         uint16_t        target_id;
45682         /*
45683          * A physical address pointer pointing to a host buffer that the
45684          * command's response data will be written. This can be either a host
45685          * physical address (HPA) or a guest physical address (GPA) and must
45686          * point to a physically contiguous block of memory.
45687          */
45688         uint64_t        resp_addr;
45689         /*
45690          * This is the host address where
45691          * nvm variable will be stored
45692          */
45693         uint64_t        dest_data_addr;
45694         /* size of data in bits */
45695         uint16_t        data_len;
45696         /* nvm cfg option number */
45697         uint16_t        option_num;
45698         /* reserved. */
45699         #define HWRM_NVM_GET_VARIABLE_INPUT_OPTION_NUM_RSVD_0    UINT32_C(0x0)
45700         /* reserved. */
45701         #define HWRM_NVM_GET_VARIABLE_INPUT_OPTION_NUM_RSVD_FFFF \
45702                 UINT32_C(0xffff)
45703         #define HWRM_NVM_GET_VARIABLE_INPUT_OPTION_NUM_LAST \
45704                 HWRM_NVM_GET_VARIABLE_INPUT_OPTION_NUM_RSVD_FFFF
45705         /*
45706          * Number of dimensions for this nvm configuration variable.
45707          * This value indicates how many of the indexN values to use.
45708          * A value of 0 means that none of the indexN values are valid.
45709          * A value of 1 requires at index0 is valued, a value of 2
45710          * requires that index0 and index1 are valid, and so forth
45711          */
45712         uint16_t        dimensions;
45713         /* index for the 1st dimensions */
45714         uint16_t        index_0;
45715         /* index for the 2nd dimensions */
45716         uint16_t        index_1;
45717         /* index for the 3rd dimensions */
45718         uint16_t        index_2;
45719         /* index for the 4th dimensions */
45720         uint16_t        index_3;
45721         uint8_t flags;
45722         /*
45723          * When this bit is set to 1, the factory default value will be returned,
45724          * 0 returns the operational value.
45725          */
45726         #define HWRM_NVM_GET_VARIABLE_INPUT_FLAGS_FACTORY_DFLT \
45727                 UINT32_C(0x1)
45728         uint8_t unused_0;
45729 } __rte_packed;
45730
45731 /* hwrm_nvm_get_variable_output (size:128b/16B) */
45732 struct hwrm_nvm_get_variable_output {
45733         /* The specific error status for the command. */
45734         uint16_t        error_code;
45735         /* The HWRM command request type. */
45736         uint16_t        req_type;
45737         /* The sequence ID from the original command. */
45738         uint16_t        seq_id;
45739         /* The length of the response data in number of bytes. */
45740         uint16_t        resp_len;
45741         /* size of data of the actual variable retrieved in bits */
45742         uint16_t        data_len;
45743         /*
45744          * option_num is the option number for the data retrieved.  It is possible in the
45745          * future that the option number returned would be different than requested.  This
45746          * condition could occur if an option is deprecated and a new option id is defined
45747          * with similar characteristics, but has a slightly different definition.  This
45748          * also makes it convenient for the caller to identify the variable result with
45749          * the option id from the response.
45750          */
45751         uint16_t        option_num;
45752         /* reserved. */
45753         #define HWRM_NVM_GET_VARIABLE_OUTPUT_OPTION_NUM_RSVD_0    UINT32_C(0x0)
45754         /* reserved. */
45755         #define HWRM_NVM_GET_VARIABLE_OUTPUT_OPTION_NUM_RSVD_FFFF \
45756                 UINT32_C(0xffff)
45757         #define HWRM_NVM_GET_VARIABLE_OUTPUT_OPTION_NUM_LAST \
45758                 HWRM_NVM_GET_VARIABLE_OUTPUT_OPTION_NUM_RSVD_FFFF
45759         uint8_t unused_0[3];
45760         /*
45761          * This field is used in Output records to indicate that the output
45762          * is completely written to RAM.  This field should be read as '1'
45763          * to indicate that the output has been completely written.
45764          * When writing a command completion or response to an internal processor,
45765          * the order of writes has to be such that this field is written last.
45766          */
45767         uint8_t valid;
45768 } __rte_packed;
45769
45770 /* hwrm_nvm_get_variable_cmd_err (size:64b/8B) */
45771 struct hwrm_nvm_get_variable_cmd_err {
45772         /*
45773          * command specific error codes that goes to
45774          * the cmd_err field in Common HWRM Error Response.
45775          */
45776         uint8_t code;
45777         /* Unknown error */
45778         #define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_UNKNOWN       UINT32_C(0x0)
45779         /* variable does not exist */
45780         #define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_VAR_NOT_EXIST UINT32_C(0x1)
45781         /* configuration is corrupted and the variable cannot be saved */
45782         #define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_CORRUPT_VAR   UINT32_C(0x2)
45783         /* length specified is too small */
45784         #define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_LEN_TOO_SHORT UINT32_C(0x3)
45785         #define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_LAST \
45786                 HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_LEN_TOO_SHORT
45787         uint8_t unused_0[7];
45788 } __rte_packed;
45789
45790 /*************************
45791  * hwrm_nvm_set_variable *
45792  *************************/
45793
45794
45795 /* hwrm_nvm_set_variable_input (size:320b/40B) */
45796 struct hwrm_nvm_set_variable_input {
45797         /* The HWRM command request type. */
45798         uint16_t        req_type;
45799         /*
45800          * The completion ring to send the completion event on. This should
45801          * be the NQ ID returned from the `nq_alloc` HWRM command.
45802          */
45803         uint16_t        cmpl_ring;
45804         /*
45805          * The sequence ID is used by the driver for tracking multiple
45806          * commands. This ID is treated as opaque data by the firmware and
45807          * the value is returned in the `hwrm_resp_hdr` upon completion.
45808          */
45809         uint16_t        seq_id;
45810         /*
45811          * The target ID of the command:
45812          * * 0x0-0xFFF8 - The function ID
45813          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45814          * * 0xFFFD - Reserved for user-space HWRM interface
45815          * * 0xFFFF - HWRM
45816          */
45817         uint16_t        target_id;
45818         /*
45819          * A physical address pointer pointing to a host buffer that the
45820          * command's response data will be written. This can be either a host
45821          * physical address (HPA) or a guest physical address (GPA) and must
45822          * point to a physically contiguous block of memory.
45823          */
45824         uint64_t        resp_addr;
45825         /*
45826          * This is the host address where
45827          * nvm variable will be copied from
45828          */
45829         uint64_t        src_data_addr;
45830         /* size of data in bits */
45831         uint16_t        data_len;
45832         /* nvm cfg option number */
45833         uint16_t        option_num;
45834         /* reserved. */
45835         #define HWRM_NVM_SET_VARIABLE_INPUT_OPTION_NUM_RSVD_0    UINT32_C(0x0)
45836         /* reserved. */
45837         #define HWRM_NVM_SET_VARIABLE_INPUT_OPTION_NUM_RSVD_FFFF \
45838                 UINT32_C(0xffff)
45839         #define HWRM_NVM_SET_VARIABLE_INPUT_OPTION_NUM_LAST \
45840                 HWRM_NVM_SET_VARIABLE_INPUT_OPTION_NUM_RSVD_FFFF
45841         /*
45842          * Number of dimensions for this nvm configuration variable.
45843          * This value indicates how many of the indexN values to use.
45844          * A value of 0 means that none of the indexN values are valid.
45845          * A value of 1 requires at index0 is valued, a value of 2
45846          * requires that index0 and index1 are valid, and so forth
45847          */
45848         uint16_t        dimensions;
45849         /* index for the 1st dimensions */
45850         uint16_t        index_0;
45851         /* index for the 2nd dimensions */
45852         uint16_t        index_1;
45853         /* index for the 3rd dimensions */
45854         uint16_t        index_2;
45855         /* index for the 4th dimensions */
45856         uint16_t        index_3;
45857         uint8_t flags;
45858         /*
45859          * When this bit is 1, flush internal cache after this write operation
45860          * (see hwrm_nvm_flush command.)
45861          */
45862         #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_FORCE_FLUSH \
45863                 UINT32_C(0x1)
45864         /* encryption method */
45865         #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_MASK \
45866                 UINT32_C(0xe)
45867         #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_SFT           1
45868         /* No encryption. */
45869         #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_NONE \
45870                 (UINT32_C(0x0) << 1)
45871         /* one-way encryption. */
45872         #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_HMAC_SHA1 \
45873                 (UINT32_C(0x1) << 1)
45874         /* symmetric AES256 encryption. */
45875         #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_AES256 \
45876                 (UINT32_C(0x2) << 1)
45877         /* SHA1 digest appended to plaintext contents, for authentication */
45878         #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_HMAC_SHA1_AUTH \
45879                 (UINT32_C(0x3) << 1)
45880         #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_LAST \
45881                 HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_HMAC_SHA1_AUTH
45882         #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_FLAGS_UNUSED_0_MASK \
45883                 UINT32_C(0x70)
45884         #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_FLAGS_UNUSED_0_SFT         4
45885         /* When this bit is 1, update the factory default region */
45886         #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_FACTORY_DEFAULT \
45887                 UINT32_C(0x80)
45888         uint8_t unused_0;
45889 } __rte_packed;
45890
45891 /* hwrm_nvm_set_variable_output (size:128b/16B) */
45892 struct hwrm_nvm_set_variable_output {
45893         /* The specific error status for the command. */
45894         uint16_t        error_code;
45895         /* The HWRM command request type. */
45896         uint16_t        req_type;
45897         /* The sequence ID from the original command. */
45898         uint16_t        seq_id;
45899         /* The length of the response data in number of bytes. */
45900         uint16_t        resp_len;
45901         uint8_t unused_0[7];
45902         /*
45903          * This field is used in Output records to indicate that the output
45904          * is completely written to RAM.  This field should be read as '1'
45905          * to indicate that the output has been completely written.
45906          * When writing a command completion or response to an internal processor,
45907          * the order of writes has to be such that this field is written last.
45908          */
45909         uint8_t valid;
45910 } __rte_packed;
45911
45912 /* hwrm_nvm_set_variable_cmd_err (size:64b/8B) */
45913 struct hwrm_nvm_set_variable_cmd_err {
45914         /*
45915          * command specific error codes that goes to
45916          * the cmd_err field in Common HWRM Error Response.
45917          */
45918         uint8_t code;
45919         /* Unknown error */
45920         #define HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_UNKNOWN       UINT32_C(0x0)
45921         /* variable does not exist */
45922         #define HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_VAR_NOT_EXIST UINT32_C(0x1)
45923         /* configuration is corrupted and the variable cannot be saved */
45924         #define HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_CORRUPT_VAR   UINT32_C(0x2)
45925         #define HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_LAST \
45926                 HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_CORRUPT_VAR
45927         uint8_t unused_0[7];
45928 } __rte_packed;
45929
45930 /****************************
45931  * hwrm_nvm_validate_option *
45932  ****************************/
45933
45934
45935 /* hwrm_nvm_validate_option_input (size:320b/40B) */
45936 struct hwrm_nvm_validate_option_input {
45937         /* The HWRM command request type. */
45938         uint16_t        req_type;
45939         /*
45940          * The completion ring to send the completion event on. This should
45941          * be the NQ ID returned from the `nq_alloc` HWRM command.
45942          */
45943         uint16_t        cmpl_ring;
45944         /*
45945          * The sequence ID is used by the driver for tracking multiple
45946          * commands. This ID is treated as opaque data by the firmware and
45947          * the value is returned in the `hwrm_resp_hdr` upon completion.
45948          */
45949         uint16_t        seq_id;
45950         /*
45951          * The target ID of the command:
45952          * * 0x0-0xFFF8 - The function ID
45953          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
45954          * * 0xFFFD - Reserved for user-space HWRM interface
45955          * * 0xFFFF - HWRM
45956          */
45957         uint16_t        target_id;
45958         /*
45959          * A physical address pointer pointing to a host buffer that the
45960          * command's response data will be written. This can be either a host
45961          * physical address (HPA) or a guest physical address (GPA) and must
45962          * point to a physically contiguous block of memory.
45963          */
45964         uint64_t        resp_addr;
45965         /*
45966          * This is the host address where
45967          * nvm variable will be copied from
45968          */
45969         uint64_t        src_data_addr;
45970         /* size of data in bits */
45971         uint16_t        data_len;
45972         /* nvm cfg option number */
45973         uint16_t        option_num;
45974         /* reserved. */
45975         #define HWRM_NVM_VALIDATE_OPTION_INPUT_OPTION_NUM_RSVD_0 \
45976                 UINT32_C(0x0)
45977         /* reserved. */
45978         #define HWRM_NVM_VALIDATE_OPTION_INPUT_OPTION_NUM_RSVD_FFFF \
45979                 UINT32_C(0xffff)
45980         #define HWRM_NVM_VALIDATE_OPTION_INPUT_OPTION_NUM_LAST \
45981                 HWRM_NVM_VALIDATE_OPTION_INPUT_OPTION_NUM_RSVD_FFFF
45982         /*
45983          * Number of dimensions for this nvm configuration variable.
45984          * This value indicates how many of the indexN values to use.
45985          * A value of 0 means that none of the indexN values are valid.
45986          * A value of 1 requires at index0 is valued, a value of 2
45987          * requires that index0 and index1 are valid, and so forth
45988          */
45989         uint16_t        dimensions;
45990         /* index for the 1st dimensions */
45991         uint16_t        index_0;
45992         /* index for the 2nd dimensions */
45993         uint16_t        index_1;
45994         /* index for the 3rd dimensions */
45995         uint16_t        index_2;
45996         /* index for the 4th dimensions */
45997         uint16_t        index_3;
45998         uint8_t unused_0[2];
45999 } __rte_packed;
46000
46001 /* hwrm_nvm_validate_option_output (size:128b/16B) */
46002 struct hwrm_nvm_validate_option_output {
46003         /* The specific error status for the command. */
46004         uint16_t        error_code;
46005         /* The HWRM command request type. */
46006         uint16_t        req_type;
46007         /* The sequence ID from the original command. */
46008         uint16_t        seq_id;
46009         /* The length of the response data in number of bytes. */
46010         uint16_t        resp_len;
46011         uint8_t result;
46012         /* indicates that the value provided for the option is not matching with the saved data. */
46013         #define HWRM_NVM_VALIDATE_OPTION_OUTPUT_RESULT_NOT_MATCH UINT32_C(0x0)
46014         /* indicates that the value provided for the option is matching the saved data. */
46015         #define HWRM_NVM_VALIDATE_OPTION_OUTPUT_RESULT_MATCH     UINT32_C(0x1)
46016         #define HWRM_NVM_VALIDATE_OPTION_OUTPUT_RESULT_LAST \
46017                 HWRM_NVM_VALIDATE_OPTION_OUTPUT_RESULT_MATCH
46018         uint8_t unused_0[6];
46019         /*
46020          * This field is used in Output records to indicate that the output
46021          * is completely written to RAM.  This field should be read as '1'
46022          * to indicate that the output has been completely written.
46023          * When writing a command completion or response to an internal processor,
46024          * the order of writes has to be such that this field is written last.
46025          */
46026         uint8_t valid;
46027 } __rte_packed;
46028
46029 /* hwrm_nvm_validate_option_cmd_err (size:64b/8B) */
46030 struct hwrm_nvm_validate_option_cmd_err {
46031         /*
46032          * command specific error codes that goes to
46033          * the cmd_err field in Common HWRM Error Response.
46034          */
46035         uint8_t code;
46036         /* Unknown error */
46037         #define HWRM_NVM_VALIDATE_OPTION_CMD_ERR_CODE_UNKNOWN UINT32_C(0x0)
46038         #define HWRM_NVM_VALIDATE_OPTION_CMD_ERR_CODE_LAST \
46039                 HWRM_NVM_VALIDATE_OPTION_CMD_ERR_CODE_UNKNOWN
46040         uint8_t unused_0[7];
46041 } __rte_packed;
46042
46043 /****************
46044  * hwrm_oem_cmd *
46045  ****************/
46046
46047
46048 /* hwrm_oem_cmd_input (size:1024b/128B) */
46049 struct hwrm_oem_cmd_input {
46050         /* The HWRM command request type. */
46051         uint16_t        req_type;
46052         /*
46053          * The completion ring to send the completion event on. This should
46054          * be the NQ ID returned from the `nq_alloc` HWRM command.
46055          */
46056         uint16_t        cmpl_ring;
46057         /*
46058          * The sequence ID is used by the driver for tracking multiple
46059          * commands. This ID is treated as opaque data by the firmware and
46060          * the value is returned in the `hwrm_resp_hdr` upon completion.
46061          */
46062         uint16_t        seq_id;
46063         /*
46064          * The target ID of the command:
46065          * * 0x0-0xFFF8 - The function ID
46066          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
46067          * * 0xFFFD - Reserved for user-space HWRM interface
46068          * * 0xFFFF - HWRM
46069          */
46070         uint16_t        target_id;
46071         /*
46072          * A physical address pointer pointing to a host buffer that the
46073          * command's response data will be written. This can be either a host
46074          * physical address (HPA) or a guest physical address (GPA) and must
46075          * point to a physically contiguous block of memory.
46076          */
46077         uint64_t        resp_addr;
46078         uint32_t        IANA;
46079         uint32_t        unused_0;
46080         /* This field contains the vendor specific command data. */
46081         uint32_t        oem_data[26];
46082 } __rte_packed;
46083
46084 /* hwrm_oem_cmd_output (size:768b/96B) */
46085 struct hwrm_oem_cmd_output {
46086         /* The specific error status for the command. */
46087         uint16_t        error_code;
46088         /* The HWRM command request type. */
46089         uint16_t        req_type;
46090         /* The sequence ID from the original command. */
46091         uint16_t        seq_id;
46092         /* The length of the response data in number of bytes. */
46093         uint16_t        resp_len;
46094         uint32_t        IANA;
46095         uint32_t        unused_0;
46096         /* This field contains the vendor specific response data. */
46097         uint32_t        oem_data[18];
46098         uint8_t unused_1[7];
46099         /*
46100          * This field is used in Output records to indicate that the output
46101          * is completely written to RAM.  This field should be read as '1'
46102          * to indicate that the output has been completely written.
46103          * When writing a command completion or response to an internal processor,
46104          * the order of writes has to be such that this field is written last.
46105          */
46106         uint8_t valid;
46107 } __rte_packed;
46108
46109 /*****************
46110  * hwrm_fw_reset *
46111  ******************/
46112
46113
46114 /* hwrm_fw_reset_input (size:192b/24B) */
46115 struct hwrm_fw_reset_input {
46116         /* The HWRM command request type. */
46117         uint16_t        req_type;
46118         /*
46119          * The completion ring to send the completion event on. This should
46120          * be the NQ ID returned from the `nq_alloc` HWRM command.
46121          */
46122         uint16_t        cmpl_ring;
46123         /*
46124          * The sequence ID is used by the driver for tracking multiple
46125          * commands. This ID is treated as opaque data by the firmware and
46126          * the value is returned in the `hwrm_resp_hdr` upon completion.
46127          */
46128         uint16_t        seq_id;
46129         /*
46130          * The target ID of the command:
46131          * * 0x0-0xFFF8 - The function ID
46132          * * 0xFFF8-0xFFFE - Reserved for internal processors
46133          * * 0xFFFF - HWRM
46134          */
46135         uint16_t        target_id;
46136         /*
46137          * A physical address pointer pointing to a host buffer that the
46138          * command's response data will be written. This can be either a host
46139          * physical address (HPA) or a guest physical address (GPA) and must
46140          * point to a physically contiguous block of memory.
46141          */
46142         uint64_t        resp_addr;
46143         /* Type of embedded processor. */
46144         uint8_t embedded_proc_type;
46145         /* Boot Processor */
46146         #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_BOOT \
46147                 UINT32_C(0x0)
46148         /* Management Processor */
46149         #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_MGMT \
46150                 UINT32_C(0x1)
46151         /* Network control processor */
46152         #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_NETCTRL \
46153                 UINT32_C(0x2)
46154         /* RoCE control processor */
46155         #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_ROCE \
46156                 UINT32_C(0x3)
46157         /*
46158          * Host (in multi-host environment): This is only valid if requester is IPC.
46159          * Reinit host hardware resources and PCIe.
46160          */
46161         #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_HOST \
46162                 UINT32_C(0x4)
46163         /*
46164          * AP processor complex (in multi-host environment). Use host_idx to
46165          * control which core is reset
46166          */
46167         #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_AP \
46168                 UINT32_C(0x5)
46169         /* Reset all blocks of the chip (including all processors) */
46170         #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_CHIP \
46171                 UINT32_C(0x6)
46172         /*
46173          * Host (in multi-host environment): This is only valid if requester is IPC.
46174          * Reinit host hardware resources.
46175          */
46176         #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_HOST_RESOURCE_REINIT \
46177                 UINT32_C(0x7)
46178         #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_LAST \
46179                 HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_HOST_RESOURCE_REINIT
46180         /* Type of self reset. */
46181         uint8_t selfrst_status;
46182         /* No Self Reset */
46183         #define HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTNONE \
46184                 UINT32_C(0x0)
46185         /* Self Reset as soon as possible to do so safely */
46186         #define HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTASAP \
46187                 UINT32_C(0x1)
46188         /* Self Reset on PCIe Reset */
46189         #define HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTPCIERST \
46190                 UINT32_C(0x2)
46191         /* Self Reset immediately after notification to all clients. */
46192         #define HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTIMMEDIATE \
46193                 UINT32_C(0x3)
46194         #define HWRM_FW_RESET_INPUT_SELFRST_STATUS_LAST \
46195                 HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTIMMEDIATE
46196         /*
46197          * Indicate which host is being reset. 0 means first host.
46198          * Only valid when embedded_proc_type is host in multihost
46199          * environment
46200          */
46201         uint8_t host_idx;
46202         uint8_t flags;
46203         /*
46204          * When this bit is '1', then the core firmware initiates
46205          * the reset only after graceful shut down of all registered instances.
46206          * If not, the device will continue with the existing firmware.
46207          */
46208         #define HWRM_FW_RESET_INPUT_FLAGS_RESET_GRACEFUL     UINT32_C(0x1)
46209         uint8_t unused_0[4];
46210 } __rte_packed;
46211
46212 /* hwrm_fw_reset_output (size:128b/16B) */
46213 struct hwrm_fw_reset_output {
46214         /* The specific error status for the command. */
46215         uint16_t        error_code;
46216         /* The HWRM command request type. */
46217         uint16_t        req_type;
46218         /* The sequence ID from the original command. */
46219         uint16_t        seq_id;
46220         /* The length of the response data in number of bytes. */
46221         uint16_t        resp_len;
46222         /* Type of self reset. */
46223         uint8_t selfrst_status;
46224         /* No Self Reset */
46225         #define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTNONE \
46226                 UINT32_C(0x0)
46227         /* Self Reset as soon as possible to do so safely */
46228         #define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTASAP \
46229                 UINT32_C(0x1)
46230         /* Self Reset on PCIe Reset */
46231         #define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTPCIERST \
46232                 UINT32_C(0x2)
46233         /* Self Reset immediately after notification to all clients. */
46234         #define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTIMMEDIATE \
46235                 UINT32_C(0x3)
46236         #define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_LAST \
46237                 HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTIMMEDIATE
46238         uint8_t unused_0[6];
46239         /*
46240          * This field is used in Output records to indicate that the output
46241          * is completely written to RAM.  This field should be read as '1'
46242          * to indicate that the output has been completely written.
46243          * When writing a command completion or response to an internal processor,
46244          * the order of writes has to be such that this field is written last.
46245          */
46246         uint8_t valid;
46247 } __rte_packed;
46248
46249 /**********************
46250  * hwrm_port_ts_query *
46251  ***********************/
46252
46253
46254 /* hwrm_port_ts_query_input (size:192b/24B) */
46255 struct hwrm_port_ts_query_input {
46256         /* The HWRM command request type. */
46257         uint16_t        req_type;
46258         /*
46259          * The completion ring to send the completion event on. This should
46260          * be the NQ ID returned from the `nq_alloc` HWRM command.
46261          */
46262         uint16_t        cmpl_ring;
46263         /*
46264          * The sequence ID is used by the driver for tracking multiple
46265          * commands. This ID is treated as opaque data by the firmware and
46266          * the value is returned in the `hwrm_resp_hdr` upon completion.
46267          */
46268         uint16_t        seq_id;
46269         /*
46270          * The target ID of the command:
46271          * * 0x0-0xFFF8 - The function ID
46272          * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
46273          * * 0xFFFD - Reserved for user-space HWRM interface
46274          * * 0xFFFF - HWRM
46275          */
46276         uint16_t        target_id;
46277         /*
46278          * A physical address pointer pointing to a host buffer that the
46279          * command's response data will be written. This can be either a host
46280          * physical address (HPA) or a guest physical address (GPA) and must
46281          * point to a physically contiguous block of memory.
46282          */
46283         uint64_t        resp_addr;
46284         uint32_t        flags;
46285         /*
46286          * Enumeration denoting the RX, TX type of the resource.
46287          * This enumeration is used for resources that are similar for both
46288          * TX and RX paths of the chip.
46289          */
46290         #define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH             0x1UL
46291         /* tx path */
46292         #define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_TX          0x0UL
46293         /* rx path */
46294         #define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_RX          0x1UL
46295         #define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_LAST        \
46296                 HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_RX
46297         /*
46298          * If set, the response includes the current value of the free
46299          * running timer.
46300          */
46301         #define HWRM_PORT_TS_QUERY_INPUT_FLAGS_CURRENT_TIME     0x2UL
46302         /* Port ID of port that is being queried. */
46303         uint16_t        port_id;
46304         uint8_t         unused_0[2];
46305 } __rte_packed;
46306
46307 /* hwrm_port_ts_query_output (size:192b/24B) */
46308 struct hwrm_port_ts_query_output {
46309         /* The specific error status for the command. */
46310         uint16_t        error_code;
46311         /* The HWRM command request type. */
46312         uint16_t        req_type;
46313         /* The sequence ID from the original command. */
46314         uint16_t        seq_id;
46315         /* The length of the response data in number of bytes. */
46316         uint16_t        resp_len;
46317         /*
46318          * Timestamp value of PTP message captured, or current value of
46319          * free running timer.
46320          */
46321         uint32_t        ptp_msg_ts[2];
46322         /* Sequence ID of the PTP message captured. */
46323         uint16_t        ptp_msg_seqid;
46324         uint8_t         unused_0[5];
46325         /*
46326          * This field is used in Output records to indicate that the output
46327          * is completely written to RAM.  This field should be read as '1'
46328          * to indicate that the output has been completely written.
46329          * When writing a command completion or response to an internal processor,
46330          * the order of writes has to be such that this field is written last.
46331          */
46332         uint8_t         valid;
46333 } __rte_packed;
46334
46335 /*
46336  * This structure is fixed at the beginning of the ChiMP SRAM (GRC
46337  * offset: 0x31001F0). Host software is expected to read from this
46338  * location for a defined signature. If it exists, the software can
46339  * assume the presence of this structure and the validity of the
46340  * FW_STATUS location in the next field.
46341  */
46342 /* hcomm_status (size:64b/8B) */
46343 struct hcomm_status {
46344         uint32_t        sig_ver;
46345         /*
46346          * This field defines the version of the structure. The latest
46347          * version value is 1.
46348          */
46349         #define HCOMM_STATUS_VER_MASK           UINT32_C(0xff)
46350         #define HCOMM_STATUS_VER_SFT            0
46351         #define HCOMM_STATUS_VER_LATEST         UINT32_C(0x1)
46352         #define HCOMM_STATUS_VER_LAST           HCOMM_STATUS_VER_LATEST
46353         /*
46354          * This field is to store the signature value to indicate the
46355          * presence of the structure.
46356          */
46357         #define HCOMM_STATUS_SIGNATURE_MASK     UINT32_C(0xffffff00)
46358         #define HCOMM_STATUS_SIGNATURE_SFT      8
46359         #define HCOMM_STATUS_SIGNATURE_VAL      (UINT32_C(0x484353) << 8)
46360         #define HCOMM_STATUS_SIGNATURE_LAST     HCOMM_STATUS_SIGNATURE_VAL
46361         uint32_t        fw_status_loc;
46362         #define HCOMM_STATUS_TRUE_ADDR_SPACE_MASK       UINT32_C(0x3)
46363         #define HCOMM_STATUS_TRUE_ADDR_SPACE_SFT        0
46364         /* PCIE configuration space */
46365         #define HCOMM_STATUS_FW_STATUS_LOC_ADDR_SPACE_PCIE_CFG  UINT32_C(0x0)
46366         /* GRC space */
46367         #define HCOMM_STATUS_FW_STATUS_LOC_ADDR_SPACE_GRC       UINT32_C(0x1)
46368         /* BAR0 space */
46369         #define HCOMM_STATUS_FW_STATUS_LOC_ADDR_SPACE_BAR0      UINT32_C(0x2)
46370         /* BAR1 space */
46371         #define HCOMM_STATUS_FW_STATUS_LOC_ADDR_SPACE_BAR1      UINT32_C(0x3)
46372         #define HCOMM_STATUS_FW_STATUS_LOC_ADDR_SPACE_LAST      \
46373                 HCOMM_STATUS_FW_STATUS_LOC_ADDR_SPACE_BAR1
46374         /*
46375          * This offset where the fw_status register is located. The value
46376          * is generally 4-byte aligned.
46377          */
46378         #define HCOMM_STATUS_TRUE_OFFSET_MASK           UINT32_C(0xfffffffc)
46379         #define HCOMM_STATUS_TRUE_OFFSET_SFT            2
46380 } __rte_packed;
46381 /* This is the GRC offset where the hcomm_status struct resides. */
46382 #define HCOMM_STATUS_STRUCT_LOC         0x31001F0UL
46383 #endif /* _HSI_STRUCT_DEF_DPDK_H_ */