net/i40e: support Rx/Tx burst mode info
[dpdk.git] / drivers / net / bnxt / hsi_struct_def_dpdk.h
index e10645b..c45d088 100644 (file)
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright (c) 2014-2019 Broadcom Limited
+ * Copyright (c) 2014-2019 Broadcom Inc.
  * All rights reserved.
  *
  * DO NOT MODIFY!!! This file is automatically generated.
@@ -27,7 +27,8 @@ struct hwrm_cmd_hdr {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -71,10 +72,8 @@ struct hwrm_resp_hdr {
 #define TLV_TYPE_QUERY_ROCE_CC_GEN1              UINT32_C(0x4)
 /* RoCE slow path command to modify CC Gen1 support. */
 #define TLV_TYPE_MODIFY_ROCE_CC_GEN1             UINT32_C(0x5)
-/* Engine CKV - The device's serial number. */
-#define TLV_TYPE_ENGINE_CKV_DEVICE_SERIAL_NUMBER UINT32_C(0x8001)
-/* Engine CKV - Per-function random nonce data. */
-#define TLV_TYPE_ENGINE_CKV_NONCE                UINT32_C(0x8002)
+/* Engine CKV - The Alias key EC curve and ECC public key information. */
+#define TLV_TYPE_ENGINE_CKV_ALIAS_ECC_PUBLIC_KEY UINT32_C(0x8001)
 /* Engine CKV - Initialization vector. */
 #define TLV_TYPE_ENGINE_CKV_IV                   UINT32_C(0x8003)
 /* Engine CKV - Authentication tag. */
@@ -83,12 +82,14 @@ struct hwrm_resp_hdr {
 #define TLV_TYPE_ENGINE_CKV_CIPHERTEXT           UINT32_C(0x8005)
 /* Engine CKV - Supported algorithms. */
 #define TLV_TYPE_ENGINE_CKV_ALGORITHMS           UINT32_C(0x8006)
-/* Engine CKV - The EC curve name and ECC public key information. */
-#define TLV_TYPE_ENGINE_CKV_ECC_PUBLIC_KEY       UINT32_C(0x8007)
+/* Engine CKV - The Host EC curve name and ECC public key information. */
+#define TLV_TYPE_ENGINE_CKV_HOST_ECC_PUBLIC_KEY  UINT32_C(0x8007)
 /* Engine CKV - The ECDSA signature. */
 #define TLV_TYPE_ENGINE_CKV_ECDSA_SIGNATURE      UINT32_C(0x8008)
+/* Engine CKV - The SRT EC curve name and ECC public key information. */
+#define TLV_TYPE_ENGINE_CKV_SRT_ECC_PUBLIC_KEY   UINT32_C(0x8009)
 #define TLV_TYPE_LAST \
-       TLV_TYPE_ENGINE_CKV_ECDSA_SIGNATURE
+       TLV_TYPE_ENGINE_CKV_SRT_ECC_PUBLIC_KEY
 
 
 /* tlv (size:64b/8B) */
@@ -221,8 +222,14 @@ struct hwrm_short_input {
        #define HWRM_SHORT_INPUT_SIGNATURE_SHORT_CMD UINT32_C(0x4321)
        #define HWRM_SHORT_INPUT_SIGNATURE_LAST \
                HWRM_SHORT_INPUT_SIGNATURE_SHORT_CMD
-       /* Reserved for future use. */
-       uint16_t        unused_0;
+       /* The target ID of the command */
+       uint16_t        target_id;
+       /* Default target_id (0x0) to maintain compatibility with old driver */
+       #define HWRM_SHORT_INPUT_TARGET_ID_DEFAULT UINT32_C(0x0)
+       /* Reserved for user-space HWRM interface */
+       #define HWRM_SHORT_INPUT_TARGET_ID_TOOLS   UINT32_C(0xfffd)
+       #define HWRM_SHORT_INPUT_TARGET_ID_LAST \
+               HWRM_SHORT_INPUT_TARGET_ID_TOOLS
        /* This value indicates the length of the request. */
        uint16_t        size;
        /*
@@ -379,6 +386,10 @@ struct cmd_nums {
        #define HWRM_FW_QSTATUS                           UINT32_C(0xc1)
        #define HWRM_FW_HEALTH_CHECK                      UINT32_C(0xc2)
        #define HWRM_FW_SYNC                              UINT32_C(0xc3)
+       #define HWRM_FW_STATE_BUFFER_QCAPS                UINT32_C(0xc4)
+       #define HWRM_FW_STATE_QUIESCE                     UINT32_C(0xc5)
+       #define HWRM_FW_STATE_BACKUP                      UINT32_C(0xc6)
+       #define HWRM_FW_STATE_RESTORE                     UINT32_C(0xc7)
        /* Experimental */
        #define HWRM_FW_SET_TIME                          UINT32_C(0xc8)
        /* Experimental */
@@ -394,6 +405,8 @@ struct cmd_nums {
        #define HWRM_FWD_RESP                             UINT32_C(0xd2)
        #define HWRM_FWD_ASYNC_EVENT_CMPL                 UINT32_C(0xd3)
        #define HWRM_OEM_CMD                              UINT32_C(0xd4)
+       /* Tells the fw to run PRBS test on a given port and lane. */
+       #define HWRM_PORT_PRBS_TEST                       UINT32_C(0xd5)
        #define HWRM_TEMP_MONITOR_QUERY                   UINT32_C(0xe0)
        #define HWRM_WOL_FILTER_ALLOC                     UINT32_C(0xf0)
        #define HWRM_WOL_FILTER_FREE                      UINT32_C(0xf1)
@@ -486,8 +499,8 @@ struct cmd_nums {
        #define HWRM_CFA_EEM_OP                           UINT32_C(0x123)
        /* Experimental */
        #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS              UINT32_C(0x124)
-       /* Engine CKV - Ping the device and SRT firmware to get the public key. */
-       #define HWRM_ENGINE_CKV_HELLO                     UINT32_C(0x12d)
+       /* Experimental */
+       #define HWRM_CFA_TFLIB                            UINT32_C(0x125)
        /* Engine CKV - Get the current allocation status of keys provisioned in the key vault. */
        #define HWRM_ENGINE_CKV_STATUS                    UINT32_C(0x12e)
        /* Engine CKV - Add a new CKEK used to encrypt keys. */
@@ -506,6 +519,8 @@ struct cmd_nums {
        #define HWRM_ENGINE_CKV_KEY_GEN                   UINT32_C(0x135)
        /* Engine CKV - Configure a label index with a label value. */
        #define HWRM_ENGINE_CKV_KEY_LABEL_CFG             UINT32_C(0x136)
+       /* Engine CKV - Query a label */
+       #define HWRM_ENGINE_CKV_KEY_LABEL_QCFG            UINT32_C(0x137)
        /* Engine - Query the available queue groups configuration. */
        #define HWRM_ENGINE_QG_CONFIG_QUERY               UINT32_C(0x13c)
        /* Engine - Query the queue groups assigned to a function. */
@@ -576,6 +591,8 @@ struct cmd_nums {
        #define HWRM_FUNC_VF_BW_CFG                       UINT32_C(0x195)
        /* Queries the BW of any VF */
        #define HWRM_FUNC_VF_BW_QCFG                      UINT32_C(0x196)
+       /* Queries pf ids belong to specified host(s) */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY               UINT32_C(0x197)
        /* Experimental */
        #define HWRM_SELFTEST_QLIST                       UINT32_C(0x200)
        /* Experimental */
@@ -587,6 +604,19 @@ struct cmd_nums {
        /* Experimental */
        #define HWRM_PCIE_QSTATS                          UINT32_C(0x204)
        /* Experimental */
+       #define HWRM_MFG_FRU_WRITE_CONTROL                UINT32_C(0x205)
+       /* Returns the current value of a free running counter from the device. */
+       #define HWRM_MFG_TIMERS_QUERY                     UINT32_C(0x206)
+       /* Experimental */
+       #define HWRM_MFG_OTP_CFG                          UINT32_C(0x207)
+       /* Experimental */
+       #define HWRM_MFG_OTP_QCFG                         UINT32_C(0x208)
+       /*
+        * Tells the fw to run the DMA read from the host and DMA write
+        * to the host test.
+        */
+       #define HWRM_MFG_HDMA_TEST                        UINT32_C(0x209)
+       /* Experimental */
        #define HWRM_DBG_READ_DIRECT                      UINT32_C(0xff10)
        /* Experimental */
        #define HWRM_DBG_READ_INDIRECT                    UINT32_C(0xff11)
@@ -643,67 +673,85 @@ struct cmd_nums {
 struct ret_codes {
        uint16_t        error_code;
        /* Request was successfully executed by the HWRM. */
-       #define HWRM_ERR_CODE_SUCCESS                   UINT32_C(0x0)
+       #define HWRM_ERR_CODE_SUCCESS                      UINT32_C(0x0)
        /* The HWRM failed to execute the request. */
-       #define HWRM_ERR_CODE_FAIL                      UINT32_C(0x1)
+       #define HWRM_ERR_CODE_FAIL                         UINT32_C(0x1)
        /*
         * The request contains invalid argument(s) or input
         * parameters.
         */
-       #define HWRM_ERR_CODE_INVALID_PARAMS            UINT32_C(0x2)
+       #define HWRM_ERR_CODE_INVALID_PARAMS               UINT32_C(0x2)
        /*
         * The requester is not allowed to access the requested
         * resource. This error code shall be provided in a
         * response to a request to query or modify an existing
         * resource that is not accessible by the requester.
         */
-       #define HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED    UINT32_C(0x3)
+       #define HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED       UINT32_C(0x3)
        /*
         * The HWRM is unable to allocate the requested resource.
         * This code only applies to requests for HWRM resource
         * allocations.
         */
-       #define HWRM_ERR_CODE_RESOURCE_ALLOC_ERROR      UINT32_C(0x4)
+       #define HWRM_ERR_CODE_RESOURCE_ALLOC_ERROR         UINT32_C(0x4)
        /*
         * Invalid combination of flags is specified in the
         * request.
         */
-       #define HWRM_ERR_CODE_INVALID_FLAGS             UINT32_C(0x5)
+       #define HWRM_ERR_CODE_INVALID_FLAGS                UINT32_C(0x5)
        /*
         * Invalid combination of enables fields is specified in
         * the request.
         */
-       #define HWRM_ERR_CODE_INVALID_ENABLES           UINT32_C(0x6)
+       #define HWRM_ERR_CODE_INVALID_ENABLES              UINT32_C(0x6)
        /*
         * Request contains a required TLV that is not supported by
         * the installed version of firmware.
         */
-       #define HWRM_ERR_CODE_UNSUPPORTED_TLV           UINT32_C(0x7)
+       #define HWRM_ERR_CODE_UNSUPPORTED_TLV              UINT32_C(0x7)
        /*
         * No firmware buffer available to accept the request. Driver
         * should retry the request.
         */
-       #define HWRM_ERR_CODE_NO_BUFFER                 UINT32_C(0x8)
+       #define HWRM_ERR_CODE_NO_BUFFER                    UINT32_C(0x8)
        /*
         * This error code is only reported by firmware when some
         * sub-option of a supported HWRM command is unsupported.
         */
-       #define HWRM_ERR_CODE_UNSUPPORTED_OPTION_ERR    UINT32_C(0x9)
+       #define HWRM_ERR_CODE_UNSUPPORTED_OPTION_ERR       UINT32_C(0x9)
        /*
         * This error code is only reported by firmware when the specific
         * request is not able to process when the HOT reset in progress.
         */
-       #define HWRM_ERR_CODE_HOT_RESET_PROGRESS        UINT32_C(0xa)
+       #define HWRM_ERR_CODE_HOT_RESET_PROGRESS           UINT32_C(0xa)
        /*
         * This error code is only reported by firmware when the registered
         * driver instances are not capable of hot reset.
         */
-       #define HWRM_ERR_CODE_HOT_RESET_FAIL            UINT32_C(0xb)
+       #define HWRM_ERR_CODE_HOT_RESET_FAIL               UINT32_C(0xb)
+       /*
+        * This error code is only reported by the firmware when during
+        * flow allocation when a requeest for a flow counter fails because
+        * the number of flow counters are exhausted.
+        */
+       #define HWRM_ERR_CODE_NO_FLOW_COUNTER_DURING_ALLOC UINT32_C(0xc)
+       /*
+        * This error code is only reported by firmware when the registered
+        * driver instances requested to offloaded a flow but was unable to because
+        * the requested key's hash collides with the installed keys.
+        */
+       #define HWRM_ERR_CODE_KEY_HASH_COLLISION           UINT32_C(0xd)
+       /*
+        * This error code is only reported by firmware when the registered
+        * driver instances requested to offloaded a flow but was unable to because
+        * the same key has already been installed.
+        */
+       #define HWRM_ERR_CODE_KEY_ALREADY_EXISTS           UINT32_C(0xe)
        /*
         * Generic HWRM execution error that represents an
         * internal error.
         */
-       #define HWRM_ERR_CODE_HWRM_ERROR                UINT32_C(0xf)
+       #define HWRM_ERR_CODE_HWRM_ERROR                   UINT32_C(0xf)
        /*
         * This value indicates that the HWRM response is in TLV format and
         * should be interpreted as one or more TLVs starting with the
@@ -711,11 +759,11 @@ struct ret_codes {
         * by itself, just an indicatation that the response should be parsed
         * as TLV and the actual error code will be in the hwrm_resp_hdr TLV.
         */
-       #define HWRM_ERR_CODE_TLV_ENCAPSULATED_RESPONSE UINT32_C(0x8000)
+       #define HWRM_ERR_CODE_TLV_ENCAPSULATED_RESPONSE    UINT32_C(0x8000)
        /* Unknown error */
-       #define HWRM_ERR_CODE_UNKNOWN_ERR               UINT32_C(0xfffe)
+       #define HWRM_ERR_CODE_UNKNOWN_ERR                  UINT32_C(0xfffe)
        /* Unsupported or invalid command */
-       #define HWRM_ERR_CODE_CMD_NOT_SUPPORTED         UINT32_C(0xffff)
+       #define HWRM_ERR_CODE_CMD_NOT_SUPPORTED            UINT32_C(0xffff)
        #define HWRM_ERR_CODE_LAST \
                HWRM_ERR_CODE_CMD_NOT_SUPPORTED
        uint16_t        unused_0[3];
@@ -774,12 +822,25 @@ struct hwrm_err_output {
 #define HW_HASH_KEY_SIZE 40
 /* valid key for HWRM response */
 #define HWRM_RESP_VALID_KEY 1
+/* Reserved for BONO processor */
+#define HWRM_TARGET_ID_BONO 0xFFF8
+/* Reserved for KONG processor */
+#define HWRM_TARGET_ID_KONG 0xFFF9
+/* Reserved for APE processor */
+#define HWRM_TARGET_ID_APE 0xFFFA
+/*
+ * This value will be used by tools for User-space HWRM Interface.
+ * When tool execute any HWRM command with this target_id, firmware
+ * will copy the response and/or data payload via register space instead
+ * of DMAing it.
+ */
+#define HWRM_TARGET_ID_TOOLS 0xFFFD
 #define HWRM_VERSION_MAJOR 1
 #define HWRM_VERSION_MINOR 10
 #define HWRM_VERSION_UPDATE 0
 /* non-zero means beta version */
-#define HWRM_VERSION_RSVD 48
-#define HWRM_VERSION_STR "1.10.0.48"
+#define HWRM_VERSION_RSVD 91
+#define HWRM_VERSION_STR "1.10.0.91"
 
 /****************
  * hwrm_ver_get *
@@ -804,7 +865,8 @@ struct hwrm_ver_get_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -1062,6 +1124,13 @@ struct hwrm_ver_get_output {
         */
        #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_CFA_ADV_FLOW_MGNT_SUPPORTED \
                UINT32_C(0x1000)
+       /*
+        * If set to 1, the firmware is able to support TFLIB features.
+        * If set to 0, then the firmware doesn’t support TFLIB features.
+        * By default, this flag should be 0 for older version of core firmware.
+        */
+       #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_CFA_TFLIB_SUPPORTED \
+               UINT32_C(0x2000)
        /*
         * This field represents the major version of RoCE firmware.
         * A change in major version represents a major release.
@@ -1099,12 +1168,8 @@ struct hwrm_ver_get_output {
         * firmware (ASCII chars with NULL at the end).
         */
        char    netctrl_fw_name[16];
-       /*
-        * This field is reserved for future use.
-        * The responder should set it to 0.
-        * The requester should ignore this field.
-        */
-       uint8_t reserved2[16];
+       /* This field represents the active board package name. */
+       char    active_pkg_name[16];
        /*
         * This field represents the name of RoCE FW (ASCII chars
         * with NULL at the end).
@@ -1150,7 +1215,13 @@ struct hwrm_ver_get_output {
         */
        uint8_t flags;
        /*
-        * If set to 1, device is not ready.
+        * If set to 1, it will indicate to host drivers that firmware is
+        * not ready to start full blown HWRM commands. Host drivers should
+        * re-try HWRM_VER_GET with some timeout period. The timeout period
+        * can be selected up to 5 seconds.
+        * For Example, PCIe hot-plug:
+        *     Hot plug timing is system dependent. It generally takes up to
+        *     600 miliseconds for firmware to clear DEV_NOT_RDY flag.
         * If set to 0, device is ready to accept all HWRM commands.
         */
        #define HWRM_VER_GET_OUTPUT_FLAGS_DEV_NOT_RDY       UINT32_C(0x1)
@@ -2848,6 +2919,10 @@ struct rx_pkt_cmpl_hi {
        #define RX_PKT_CMPL_REORDER_SFT 0
 } __attribute__((packed));
 
+/*
+ * This TPA completion structure is used on devices where the
+ * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
+ */
 /* rx_tpa_start_cmpl (size:128b/16B) */
 struct rx_tpa_start_cmpl {
        uint16_t        flags_type;
@@ -3009,7 +3084,12 @@ struct rx_tpa_start_cmpl {
        uint32_t        rss_hash;
 } __attribute__((packed));
 
-/* Last 16 bytes of rx_tpq_start_cmpl. */
+/*
+ * Last 16 bytes of rx_tpa_start_cmpl.
+ *
+ * This TPA completion structure is used on devices where the
+ * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
+ */
 /* rx_tpa_start_cmpl_hi (size:128b/16B) */
 struct rx_tpa_start_cmpl_hi {
        uint32_t        flags2;
@@ -3018,34 +3098,29 @@ struct rx_tpa_start_cmpl_hi {
         * inner packet and that the sum passed for all segments
         * included in the aggregation.
         */
-       #define RX_TPA_START_CMPL_FLAGS2_IP_CS_CALC \
-               UINT32_C(0x1)
+       #define RX_TPA_START_CMPL_FLAGS2_IP_CS_CALC       UINT32_C(0x1)
        /*
         * This indicates that the TCP, UDP or ICMP checksum was
         * calculated for the inner packet and that the sum passed
         * for all segments included in the aggregation.
         */
-       #define RX_TPA_START_CMPL_FLAGS2_L4_CS_CALC \
-               UINT32_C(0x2)
+       #define RX_TPA_START_CMPL_FLAGS2_L4_CS_CALC       UINT32_C(0x2)
        /*
         * This indicates that the ip checksum was calculated for the
         * tunnel header and that the sum passed for all segments
         * included in the aggregation.
         */
-       #define RX_TPA_START_CMPL_FLAGS2_T_IP_CS_CALC \
-               UINT32_C(0x4)
+       #define RX_TPA_START_CMPL_FLAGS2_T_IP_CS_CALC     UINT32_C(0x4)
        /*
         * This indicates that the UDP checksum was
         * calculated for the tunnel packet and that the sum passed for
         * all segments included in the aggregation.
         */
-       #define RX_TPA_START_CMPL_FLAGS2_T_L4_CS_CALC \
-               UINT32_C(0x8)
+       #define RX_TPA_START_CMPL_FLAGS2_T_L4_CS_CALC     UINT32_C(0x8)
        /* This value indicates what format the metadata field is. */
-       #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_MASK \
-               UINT32_C(0xf0)
-       #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_SFT            4
-       /* No metadata informtaion.  Value is zero. */
+       #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_MASK UINT32_C(0xf0)
+       #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_SFT  4
+       /* No metadata information.  Value is zero. */
        #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_NONE \
                (UINT32_C(0x0) << 4)
        /*
@@ -3057,71 +3132,13 @@ struct rx_tpa_start_cmpl_hi {
         */
        #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_VLAN \
                (UINT32_C(0x1) << 4)
-       /*
-        * If ext_meta_format is equal to 1, the metadata field
-        * contains the lower 16b of the tunnel ID value, justified
-        * to LSB
-        * - VXLAN = VNI[23:0] -> VXLAN Network ID
-        * - Geneve (NGE) = VNI[23:0] a-> Virtual Network Identifier.
-        * - NVGRE = TNI[23:0] -> Tenant Network ID
-        * - GRE = KEY[31:0 -> key fieled with bit mask. zero if K = 0
-        * - IPV4 = 0 (not populated)
-        * - IPV6 = Flow Label[19:0]
-        * - PPPoE = sessionID[15:0]
-        * - MPLs = Outer label[19:0]
-        * - UPAR = Selected[31:0] with bit mask
-        */
-       #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_TUNNEL_ID \
-               (UINT32_C(0x2) << 4)
-       /*
-        * if ext_meta_format is equal to 1, metadata field contains
-        * 16b metadata from the prepended header (chdr_data).
-        */
-       #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_CHDR_DATA \
-               (UINT32_C(0x3) << 4)
-       /*
-        * If ext_meta_format is equal to 1, the metadata field contains
-        * the outer_l3_offset, inner_l2_offset, inner_l3_offset and
-        * inner_l4_size.
-        * - metadata[8:0] contains the outer_l3_offset.
-        * - metadata[17:9] contains the inner_l2_offset.
-        * - metadata[26:18] contains the inner_l3_offset.
-        * - metadata[31:27] contains the inner_l4_size.
-        */
-       #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET \
-               (UINT32_C(0x4) << 4)
        #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_LAST \
-               RX_TPA_START_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET
+               RX_TPA_START_CMPL_FLAGS2_META_FORMAT_VLAN
        /*
         * This field indicates the IP type for the inner-most IP header.
         * A value of '0' indicates IPv4.  A value of '1' indicates IPv6.
         */
-       #define RX_TPA_START_CMPL_FLAGS2_IP_TYPE \
-               UINT32_C(0x100)
-       /*
-        * This indicates that the complete 1's complement checksum was
-        * calculated for the packet.
-        */
-       #define RX_TPA_START_CMPL_FLAGS2_COMPLETE_CHECKSUM_CALC \
-               UINT32_C(0x200)
-       /*
-        * The combination of this value and meta_format indicated what
-        * format the metadata field is.
-        */
-       #define RX_TPA_START_CMPL_FLAGS2_EXT_META_FORMAT_MASK \
-               UINT32_C(0xc00)
-       #define RX_TPA_START_CMPL_FLAGS2_EXT_META_FORMAT_SFT        10
-       /*
-        * This value is the complete 1's complement checksum calculated from
-        * the start of the outer L3 header to the end of the packet (not
-        * including the ethernet crc). It is valid when the
-        * 'complete_checksum_calc' flag is set. For TPA Start completions,
-        * the complete checksum is calculated for the first packet in the
-        * aggregation only.
-        */
-       #define RX_TPA_START_CMPL_FLAGS2_COMPLETE_CHECKSUM_MASK \
-               UINT32_C(0xffff0000)
-       #define RX_TPA_START_CMPL_FLAGS2_COMPLETE_CHECKSUM_SFT      16
+       #define RX_TPA_START_CMPL_FLAGS2_IP_TYPE          UINT32_C(0x100)
        /*
         * This is data from the CFA block as indicated by the meta_format
         * field.
@@ -3138,41 +3155,13 @@ struct rx_tpa_start_cmpl_hi {
        /* When meta_format=1, this value is the VLAN TPID. */
        #define RX_TPA_START_CMPL_METADATA_TPID_MASK UINT32_C(0xffff0000)
        #define RX_TPA_START_CMPL_METADATA_TPID_SFT 16
-       uint16_t        errors_v2;
+       uint16_t        v2;
        /*
         * This value is written by the NIC such that it will be different
         * for each pass through the completion queue.   The even passes
         * will write 1.  The odd passes will write 0.
         */
-       #define RX_TPA_START_CMPL_V2                            UINT32_C(0x1)
-       #define RX_TPA_START_CMPL_ERRORS_MASK \
-               UINT32_C(0xfffe)
-       #define RX_TPA_START_CMPL_ERRORS_SFT                    1
-       /*
-        * This error indicates that there was some sort of problem with
-        * the BDs for the packet that was found after part of the
-        * packet was already placed.  The packet should be treated as
-        * invalid.
-        */
-       #define RX_TPA_START_CMPL_ERRORS_BUFFER_ERROR_MASK       UINT32_C(0xe)
-       #define RX_TPA_START_CMPL_ERRORS_BUFFER_ERROR_SFT        1
-       /* No buffer error */
-       #define RX_TPA_START_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
-               (UINT32_C(0x0) << 1)
-       /*
-        * Bad Format:
-        * BDs were not formatted correctly.
-        */
-       #define RX_TPA_START_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
-               (UINT32_C(0x3) << 1)
-       /*
-        * Flush:
-        * There was a bad_format error on the previous operation
-        */
-       #define RX_TPA_START_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
-               (UINT32_C(0x5) << 1)
-       #define RX_TPA_START_CMPL_ERRORS_BUFFER_ERROR_LAST \
-               RX_TPA_START_CMPL_ERRORS_BUFFER_ERROR_FLUSH
+       #define RX_TPA_START_CMPL_V2     UINT32_C(0x1)
        /*
         * This field identifies the CFA action rule that was used for this
         * packet.
@@ -3212,6 +3201,10 @@ struct rx_tpa_start_cmpl_hi {
        #define RX_TPA_START_CMPL_INNER_L4_SIZE_SFT   27
 } __attribute__((packed));
 
+/*
+ * This TPA completion structure is used on devices where the
+ * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
+ */
 /* rx_tpa_end_cmpl (size:128b/16B) */
 struct rx_tpa_end_cmpl {
        uint16_t        flags_type;
@@ -3365,35 +3358,21 @@ struct rx_tpa_end_cmpl {
        uint32_t        tsdelta;
 } __attribute__((packed));
 
-/* Last 16 bytes of rx_tpa_end_cmpl. */
+/*
+ * Last 16 bytes of rx_tpa_end_cmpl.
+ *
+ * This TPA completion structure is used on devices where the
+ * `hwrm_vnic_qcaps.max_aggs_supported` value is 0.
+ */
 /* rx_tpa_end_cmpl_hi (size:128b/16B) */
 struct rx_tpa_end_cmpl_hi {
-       /*
-        * This value is the number of duplicate ACKs that have been
-        * received as part of the TPA operation.
-        */
-       uint16_t        tpa_dup_acks;
+       uint32_t        tpa_dup_acks;
        /*
         * This value is the number of duplicate ACKs that have been
         * received as part of the TPA operation.
         */
        #define RX_TPA_END_CMPL_TPA_DUP_ACKS_MASK UINT32_C(0xf)
        #define RX_TPA_END_CMPL_TPA_DUP_ACKS_SFT 0
-       /*
-        * This value indicated the offset in bytes from the beginning of
-        * the packet where the inner payload starts. This value is valid
-        * for TCP, UDP, FCoE and RoCE packets
-        */
-       uint8_t payload_offset;
-       /*
-        * The value is the total number of aggregation buffers that were
-        * used in the TPA operation. All TPA aggregation buffer completions
-        * precede the TPA End completion. If the value is zero, then the
-        * aggregation is completely contained in the buffer space provided
-        * in the aggregation start completion.
-        * Note that the field is simply provided as a cross check.
-        */
-       uint8_t tpa_agg_bufs;
        /*
         * This value is the valid when TPA completion is active.  It
         * indicates the length of the longest segment of the TPA operation
@@ -3424,9 +3403,6 @@ struct rx_tpa_end_cmpl_hi {
         */
        #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_MASK        UINT32_C(0xe)
        #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_SFT         1
-       /* No buffer error */
-       #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
-               (UINT32_C(0x0) << 1)
        /*
         * This error occurs when there is a fatal HW problem in
         * the chip only.  It indicates that there were not
@@ -3435,12 +3411,6 @@ struct rx_tpa_end_cmpl_hi {
         */
        #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
                (UINT32_C(0x2) << 1)
-       /*
-        * Bad Format:
-        * BDs were not formatted correctly.
-        */
-       #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
-               (UINT32_C(0x3) << 1)
        /*
         * This error occurs when TPA block was not configured to
         * reserve adequate BDs for TPA operations on this RX
@@ -3453,14 +3423,8 @@ struct rx_tpa_end_cmpl_hi {
         */
        #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_RSV_ERROR \
                (UINT32_C(0x4) << 1)
-       /*
-        * Flush:
-        * There was a bad_format error on the previous operation
-        */
-       #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
-               (UINT32_C(0x5) << 1)
        #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_LAST \
-               RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_FLUSH
+               RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_RSV_ERROR
        /* unused5 is 16 b */
        uint16_t        unused_4;
        /*
@@ -3470,9 +3434,13 @@ struct rx_tpa_end_cmpl_hi {
        uint32_t        start_opaque;
 } __attribute__((packed));
 
-/* rx_abuf_cmpl (size:128b/16B) */
-struct rx_abuf_cmpl {
-       uint16_t        type;
+/*
+ * This TPA completion structure is used on devices where the
+ * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
+ */
+/* rx_tpa_v2_start_cmpl (size:128b/16B) */
+struct rx_tpa_v2_start_cmpl {
+       uint16_t        flags_type;
        /*
         * This field indicates the exact type of the completion.
         * By convention, the LSB identifies the length of the
@@ -3480,86 +3448,763 @@ struct rx_abuf_cmpl {
         * records.  Odd values indicate 32B
         * records.
         */
-       #define RX_ABUF_CMPL_TYPE_MASK  UINT32_C(0x3f)
-       #define RX_ABUF_CMPL_TYPE_SFT   0
+       #define RX_TPA_V2_START_CMPL_TYPE_MASK \
+               UINT32_C(0x3f)
+       #define RX_TPA_V2_START_CMPL_TYPE_SFT                       0
        /*
-        * RX Aggregation Buffer completion :
-        * Completion of an L2 aggregation buffer in support of
-        * TPA, HDS, or Jumbo packet completion.  Length = 16B
+        * RX L2 TPA Start Completion:
+        * Completion at the beginning of a TPA operation.
+        * Length = 32B
         */
-       #define RX_ABUF_CMPL_TYPE_RX_AGG  UINT32_C(0x12)
-       #define RX_ABUF_CMPL_TYPE_LAST   RX_ABUF_CMPL_TYPE_RX_AGG
+       #define RX_TPA_V2_START_CMPL_TYPE_RX_TPA_START \
+               UINT32_C(0x13)
+       #define RX_TPA_V2_START_CMPL_TYPE_LAST \
+               RX_TPA_V2_START_CMPL_TYPE_RX_TPA_START
+       #define RX_TPA_V2_START_CMPL_FLAGS_MASK \
+               UINT32_C(0xffc0)
+       #define RX_TPA_V2_START_CMPL_FLAGS_SFT                      6
+       /* This bit will always be '0' for TPA start completions. */
+       #define RX_TPA_V2_START_CMPL_FLAGS_ERROR \
+               UINT32_C(0x40)
+       /* This field indicates how the packet was placed in the buffer. */
+       #define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_MASK \
+               UINT32_C(0x380)
+       #define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_SFT             7
        /*
-        * This is the length of the data for the packet stored in this
-        * aggregation buffer identified by the opaque value.  This does not
-        * include the length of any
-        * data placed in other aggregation BDs or in the packet or buffer
-        * BDs.   This length does not include any space added due to
-        * hdr_offset register during HDS placement mode.
+        * Jumbo:
+        * TPA Packet was placed using jumbo algorithm.  This means
+        * that the first buffer will be filled with data before
+        * moving to aggregation buffers.  Each aggregation buffer
+        * will be filled before moving to the next aggregation
+        * buffer.
         */
-       uint16_t        len;
+       #define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_JUMBO \
+               (UINT32_C(0x1) << 7)
        /*
-        * This is a copy of the opaque field from the RX BD this aggregation
-        * buffer corresponds to.
+        * Header/Data Separation:
+        * Packet was placed using Header/Data separation algorithm.
+        * The separation location is indicated by the itype field.
         */
-       uint32_t        opaque;
-       uint32_t        v;
+       #define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_HDS \
+               (UINT32_C(0x2) << 7)
        /*
-        * This value is written by the NIC such that it will be different
-        * for each pass through the completion queue.   The even passes
-        * will write 1.  The odd passes will write 0.
+        * GRO/Jumbo:
+        * Packet will be placed using GRO/Jumbo where the first
+        * packet is filled with data. Subsequent packets will be
+        * placed such that any one packet does not span two
+        * aggregation buffers unless it starts at the beginning of
+        * an aggregation buffer.
         */
-       #define RX_ABUF_CMPL_V     UINT32_C(0x1)
-       /* unused3 is 32 b */
-       uint32_t        unused_2;
-} __attribute__((packed));
-
-/* eject_cmpl (size:128b/16B) */
-struct eject_cmpl {
-       uint16_t        type;
+       #define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
+               (UINT32_C(0x5) << 7)
        /*
-        * This field indicates the exact type of the completion.
-        * By convention, the LSB identifies the length of the
-        * record in 16B units.  Even values indicate 16B
-        * records.  Odd values indicate 32B
-        * records.
+        * GRO/Header-Data Separation:
+        * Packet will be placed using GRO/HDS where the header
+        * is in the first packet.
+        * Payload of each packet will be
+        * placed such that any one packet does not span two
+        * aggregation buffers unless it starts at the beginning of
+        * an aggregation buffer.
         */
-       #define EJECT_CMPL_TYPE_MASK       UINT32_C(0x3f)
-       #define EJECT_CMPL_TYPE_SFT        0
+       #define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_GRO_HDS \
+               (UINT32_C(0x6) << 7)
+       #define RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_LAST \
+               RX_TPA_V2_START_CMPL_FLAGS_PLACEMENT_GRO_HDS
+       /* This bit is '1' if the RSS field in this completion is valid. */
+       #define RX_TPA_V2_START_CMPL_FLAGS_RSS_VALID \
+               UINT32_C(0x400)
        /*
-        * Statistics Ejection Completion:
-        * Completion of statistics data ejection buffer.
-        * Length = 16B
+        * For devices that support timestamps, when this bit is cleared the
+        * `inner_l4_size_inner_l3_offset_inner_l2_offset_outer_l3_offset`
+        * field contains the 32b timestamp for
+        * the packet from the MAC. When this bit is set, the
+        * `inner_l4_size_inner_l3_offset_inner_l2_offset_outer_l3_offset`
+        * field contains the outer_l3_offset, inner_l2_offset,
+        * inner_l3_offset, and inner_l4_size.
         */
-       #define EJECT_CMPL_TYPE_STAT_EJECT   UINT32_C(0x1a)
-       #define EJECT_CMPL_TYPE_LAST        EJECT_CMPL_TYPE_STAT_EJECT
-       #define EJECT_CMPL_FLAGS_MASK      UINT32_C(0xffc0)
-       #define EJECT_CMPL_FLAGS_SFT       6
+       #define RX_TPA_V2_START_CMPL_FLAGS_TIMESTAMP_FLD_FORMAT \
+               UINT32_C(0x800)
        /*
-        * When this bit is '1', it indicates a packet that has an
-        * error of some type.  Type of error is indicated in
-        * error_flags.
+        * This value indicates what the inner packet determined for the
+        * packet was.
         */
-       #define EJECT_CMPL_FLAGS_ERROR      UINT32_C(0x40)
+       #define RX_TPA_V2_START_CMPL_FLAGS_ITYPE_MASK \
+               UINT32_C(0xf000)
+       #define RX_TPA_V2_START_CMPL_FLAGS_ITYPE_SFT                 12
        /*
-        * This is the length of the statistics data stored in this
-        * buffer.
+        * TCP Packet:
+        * Indicates that the packet was IP and TCP.
+        */
+       #define RX_TPA_V2_START_CMPL_FLAGS_ITYPE_TCP \
+               (UINT32_C(0x2) << 12)
+       #define RX_TPA_V2_START_CMPL_FLAGS_ITYPE_LAST \
+               RX_TPA_V2_START_CMPL_FLAGS_ITYPE_TCP
+       /*
+        * This value indicates the amount of packet data written to the
+        * buffer the opaque field in this completion corresponds to.
         */
        uint16_t        len;
        /*
-        * This is a copy of the opaque field from the RX BD this ejection
-        * buffer corresponds to.
+        * This is a copy of the opaque field from the RX BD this completion
+        * corresponds to.
         */
        uint32_t        opaque;
-       uint16_t        v;
        /*
         * This value is written by the NIC such that it will be different
         * for each pass through the completion queue.   The even passes
         * will write 1.  The odd passes will write 0.
         */
-       #define EJECT_CMPL_V                              UINT32_C(0x1)
-       #define EJECT_CMPL_ERRORS_MASK                    UINT32_C(0xfffe)
-       #define EJECT_CMPL_ERRORS_SFT                     1
+       uint8_t v1;
+       /*
+        * This value is written by the NIC such that it will be different
+        * for each pass through the completion queue.   The even passes
+        * will write 1.  The odd passes will write 0.
+        */
+       #define RX_TPA_V2_START_CMPL_V1 UINT32_C(0x1)
+       #define RX_TPA_V2_START_CMPL_LAST RX_TPA_V2_START_CMPL_V1
+       /*
+        * This is the RSS hash type for the packet.  The value is packed
+        * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
+        *
+        * The value of tuple_extrac_op provides the information about
+        * what fields the hash was computed on.
+        * * 0: The RSS hash was computed over source IP address,
+        * destination IP address, source port, and destination port of inner
+        * IP and TCP or UDP headers. Note: For non-tunneled packets,
+        * the packet headers are considered inner packet headers for the RSS
+        * hash computation purpose.
+        * * 1: The RSS hash was computed over source IP address and destination
+        * IP address of inner IP header. Note: For non-tunneled packets,
+        * the packet headers are considered inner packet headers for the RSS
+        * hash computation purpose.
+        * * 2: The RSS hash was computed over source IP address,
+        * destination IP address, source port, and destination port of
+        * IP and TCP or UDP headers of outer tunnel headers.
+        * Note: For non-tunneled packets, this value is not applicable.
+        * * 3: The RSS hash was computed over source IP address and
+        * destination IP address of IP header of outer tunnel headers.
+        * Note: For non-tunneled packets, this value is not applicable.
+        *
+        * Note that 4-tuples values listed above are applicable
+        * for layer 4 protocols supported and enabled for RSS in the hardware,
+        * HWRM firmware, and drivers. For example, if RSS hash is supported and
+        * enabled for TCP traffic only, then the values of tuple_extract_op
+        * corresponding to 4-tuples are only valid for TCP traffic.
+        */
+       uint8_t rss_hash_type;
+       /*
+        * This is the aggregation ID that the completion is associated
+        * with.  Use this number to correlate the TPA start completion
+        * with the TPA end completion.
+        */
+       uint16_t        agg_id;
+       /*
+        * This value is the RSS hash value calculated for the packet
+        * based on the mode bits and key value in the VNIC.
+        */
+       uint32_t        rss_hash;
+} __attribute__((packed));
+
+/*
+ * Last 16 bytes of rx_tpa_v2_start_cmpl.
+ *
+ * This TPA completion structure is used on devices where the
+ * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
+ */
+/* rx_tpa_v2_start_cmpl_hi (size:128b/16B) */
+struct rx_tpa_v2_start_cmpl_hi {
+       uint32_t        flags2;
+       /*
+        * This indicates that the ip checksum was calculated for the
+        * inner packet and that the sum passed for all segments
+        * included in the aggregation.
+        */
+       #define RX_TPA_V2_START_CMPL_FLAGS2_IP_CS_CALC \
+               UINT32_C(0x1)
+       /*
+        * This indicates that the TCP, UDP or ICMP checksum was
+        * calculated for the inner packet and that the sum passed
+        * for all segments included in the aggregation.
+        */
+       #define RX_TPA_V2_START_CMPL_FLAGS2_L4_CS_CALC \
+               UINT32_C(0x2)
+       /*
+        * This indicates that the ip checksum was calculated for the
+        * tunnel header and that the sum passed for all segments
+        * included in the aggregation.
+        */
+       #define RX_TPA_V2_START_CMPL_FLAGS2_T_IP_CS_CALC \
+               UINT32_C(0x4)
+       /*
+        * This indicates that the UDP checksum was
+        * calculated for the tunnel packet and that the sum passed for
+        * all segments included in the aggregation.
+        */
+       #define RX_TPA_V2_START_CMPL_FLAGS2_T_L4_CS_CALC \
+               UINT32_C(0x8)
+       /* This value indicates what format the metadata field is. */
+       #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_MASK \
+               UINT32_C(0xf0)
+       #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_SFT            4
+       /* No metadata informtaion.  Value is zero. */
+       #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_NONE \
+               (UINT32_C(0x0) << 4)
+       /*
+        * The metadata field contains the VLAN tag and TPID value.
+        * - metadata[11:0] contains the vlan VID value.
+        * - metadata[12] contains the vlan DE value.
+        * - metadata[15:13] contains the vlan PRI value.
+        * - metadata[31:16] contains the vlan TPID value.
+        */
+       #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_VLAN \
+               (UINT32_C(0x1) << 4)
+       /*
+        * If ext_meta_format is equal to 1, the metadata field
+        * contains the lower 16b of the tunnel ID value, justified
+        * to LSB
+        * - VXLAN = VNI[23:0] -> VXLAN Network ID
+        * - Geneve (NGE) = VNI[23:0] a-> Virtual Network Identifier.
+        * - NVGRE = TNI[23:0] -> Tenant Network ID
+        * - GRE = KEY[31:0 -> key fieled with bit mask. zero if K = 0
+        * - IPV4 = 0 (not populated)
+        * - IPV6 = Flow Label[19:0]
+        * - PPPoE = sessionID[15:0]
+        * - MPLs = Outer label[19:0]
+        * - UPAR = Selected[31:0] with bit mask
+        */
+       #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_TUNNEL_ID \
+               (UINT32_C(0x2) << 4)
+       /*
+        * if ext_meta_format is equal to 1, metadata field contains
+        * 16b metadata from the prepended header (chdr_data).
+        */
+       #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_CHDR_DATA \
+               (UINT32_C(0x3) << 4)
+       /*
+        * If ext_meta_format is equal to 1, the metadata field contains
+        * the outer_l3_offset, inner_l2_offset, inner_l3_offset and
+        * inner_l4_size.
+        * - metadata[8:0] contains the outer_l3_offset.
+        * - metadata[17:9] contains the inner_l2_offset.
+        * - metadata[26:18] contains the inner_l3_offset.
+        * - metadata[31:27] contains the inner_l4_size.
+        */
+       #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET \
+               (UINT32_C(0x4) << 4)
+       #define RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_LAST \
+               RX_TPA_V2_START_CMPL_FLAGS2_META_FORMAT_HDR_OFFSET
+       /*
+        * This field indicates the IP type for the inner-most IP header.
+        * A value of '0' indicates IPv4.  A value of '1' indicates IPv6.
+        */
+       #define RX_TPA_V2_START_CMPL_FLAGS2_IP_TYPE \
+               UINT32_C(0x100)
+       /*
+        * This indicates that the complete 1's complement checksum was
+        * calculated for the packet.
+        */
+       #define RX_TPA_V2_START_CMPL_FLAGS2_COMPLETE_CHECKSUM_CALC \
+               UINT32_C(0x200)
+       /*
+        * The combination of this value and meta_format indicated what
+        * format the metadata field is.
+        */
+       #define RX_TPA_V2_START_CMPL_FLAGS2_EXT_META_FORMAT_MASK \
+               UINT32_C(0xc00)
+       #define RX_TPA_V2_START_CMPL_FLAGS2_EXT_META_FORMAT_SFT        10
+       /*
+        * This value is the complete 1's complement checksum calculated from
+        * the start of the outer L3 header to the end of the packet (not
+        * including the ethernet crc). It is valid when the
+        * 'complete_checksum_calc' flag is set. For TPA Start completions,
+        * the complete checksum is calculated for the first packet in the
+        * aggregation only.
+        */
+       #define RX_TPA_V2_START_CMPL_FLAGS2_COMPLETE_CHECKSUM_MASK \
+               UINT32_C(0xffff0000)
+       #define RX_TPA_V2_START_CMPL_FLAGS2_COMPLETE_CHECKSUM_SFT      16
+       /*
+        * This is data from the CFA block as indicated by the meta_format
+        * field.
+        */
+       uint32_t        metadata;
+       /* When {ext_meta_format,meta_format}=1, this value is the VLAN VID. */
+       #define RX_TPA_V2_START_CMPL_METADATA_VID_MASK UINT32_C(0xfff)
+       #define RX_TPA_V2_START_CMPL_METADATA_VID_SFT  0
+       /* When {ext_meta_format,meta_format}=1, this value is the VLAN DE. */
+       #define RX_TPA_V2_START_CMPL_METADATA_DE       UINT32_C(0x1000)
+       /* When {ext_meta_format,meta_format}=1, this value is the VLAN PRI. */
+       #define RX_TPA_V2_START_CMPL_METADATA_PRI_MASK UINT32_C(0xe000)
+       #define RX_TPA_V2_START_CMPL_METADATA_PRI_SFT  13
+       /* When {ext_meta_format,meta_format}=1, this value is the VLAN TPID. */
+       #define RX_TPA_V2_START_CMPL_METADATA_TPID_MASK UINT32_C(0xffff0000)
+       #define RX_TPA_V2_START_CMPL_METADATA_TPID_SFT 16
+       uint16_t        errors_v2;
+       /*
+        * This value is written by the NIC such that it will be different
+        * for each pass through the completion queue.   The even passes
+        * will write 1.  The odd passes will write 0.
+        */
+       #define RX_TPA_V2_START_CMPL_V2 \
+               UINT32_C(0x1)
+       #define RX_TPA_V2_START_CMPL_ERRORS_MASK \
+               UINT32_C(0xfffe)
+       #define RX_TPA_V2_START_CMPL_ERRORS_SFT                    1
+       /*
+        * This error indicates that there was some sort of problem with
+        * the BDs for the packet that was found after part of the
+        * packet was already placed.  The packet should be treated as
+        * invalid.
+        */
+       #define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_MASK \
+               UINT32_C(0xe)
+       #define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_SFT        1
+       /* No buffer error */
+       #define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
+               (UINT32_C(0x0) << 1)
+       /*
+        * Bad Format:
+        * BDs were not formatted correctly.
+        */
+       #define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
+               (UINT32_C(0x3) << 1)
+       /*
+        * Flush:
+        * There was a bad_format error on the previous operation
+        */
+       #define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
+               (UINT32_C(0x5) << 1)
+       #define RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_LAST \
+               RX_TPA_V2_START_CMPL_ERRORS_BUFFER_ERROR_FLUSH
+       /*
+        * This field identifies the CFA action rule that was used for this
+        * packet.
+        */
+       uint16_t        cfa_code;
+       /*
+        * For devices that support timestamps this field is overridden
+        * with the timestamp value. When `flags.timestamp_fld_format` is
+        * cleared, this field contains the 32b timestamp for the packet from the
+        * MAC.
+        *
+        * When `flags.timestamp_fld_format` is set, this field contains the
+        * outer_l3_offset, inner_l2_offset, inner_l3_offset, and inner_l4_size
+        * as defined below.
+        */
+       uint32_t        inner_l4_size_inner_l3_offset_inner_l2_offset_outer_l3_offset;
+       /*
+        * This is the offset from the beginning of the packet in bytes for
+        * the outer L3 header.  If there is no outer L3 header, then this
+        * value is zero.
+        */
+       #define RX_TPA_V2_START_CMPL_OUTER_L3_OFFSET_MASK UINT32_C(0x1ff)
+       #define RX_TPA_V2_START_CMPL_OUTER_L3_OFFSET_SFT 0
+       /*
+        * This is the offset from the beginning of the packet in bytes for
+        * the inner most L2 header.
+        */
+       #define RX_TPA_V2_START_CMPL_INNER_L2_OFFSET_MASK UINT32_C(0x3fe00)
+       #define RX_TPA_V2_START_CMPL_INNER_L2_OFFSET_SFT 9
+       /*
+        * This is the offset from the beginning of the packet in bytes for
+        * the inner most L3 header.
+        */
+       #define RX_TPA_V2_START_CMPL_INNER_L3_OFFSET_MASK UINT32_C(0x7fc0000)
+       #define RX_TPA_V2_START_CMPL_INNER_L3_OFFSET_SFT 18
+       /*
+        * This is the size in bytes of the inner most L4 header.
+        * This can be subtracted from the payload_offset to determine
+        * the start of the inner most L4 header.
+        */
+       #define RX_TPA_V2_START_CMPL_INNER_L4_SIZE_MASK  UINT32_C(0xf8000000)
+       #define RX_TPA_V2_START_CMPL_INNER_L4_SIZE_SFT   27
+} __attribute__((packed));
+
+/*
+ * This TPA completion structure is used on devices where the
+ * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
+ */
+/* rx_tpa_v2_end_cmpl (size:128b/16B) */
+struct rx_tpa_v2_end_cmpl {
+       uint16_t        flags_type;
+       /*
+        * This field indicates the exact type of the completion.
+        * By convention, the LSB identifies the length of the
+        * record in 16B units.  Even values indicate 16B
+        * records.  Odd values indicate 32B
+        * records.
+        */
+       #define RX_TPA_V2_END_CMPL_TYPE_MASK                UINT32_C(0x3f)
+       #define RX_TPA_V2_END_CMPL_TYPE_SFT                 0
+       /*
+        * RX L2 TPA End Completion:
+        * Completion at the end of a TPA operation.
+        * Length = 32B
+        */
+       #define RX_TPA_V2_END_CMPL_TYPE_RX_TPA_END            UINT32_C(0x15)
+       #define RX_TPA_V2_END_CMPL_TYPE_LAST \
+               RX_TPA_V2_END_CMPL_TYPE_RX_TPA_END
+       #define RX_TPA_V2_END_CMPL_FLAGS_MASK               UINT32_C(0xffc0)
+       #define RX_TPA_V2_END_CMPL_FLAGS_SFT                6
+       /*
+        * When this bit is '1', it indicates a packet that has an
+        * error of some type.  Type of error is indicated in
+        * error_flags.
+        */
+       #define RX_TPA_V2_END_CMPL_FLAGS_ERROR               UINT32_C(0x40)
+       /* This field indicates how the packet was placed in the buffer. */
+       #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_MASK      UINT32_C(0x380)
+       #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_SFT       7
+       /*
+        * Jumbo:
+        * TPA Packet was placed using jumbo algorithm.  This means
+        * that the first buffer will be filled with data before
+        * moving to aggregation buffers.  Each aggregation buffer
+        * will be filled before moving to the next aggregation
+        * buffer.
+        */
+       #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_JUMBO \
+               (UINT32_C(0x1) << 7)
+       /*
+        * Header/Data Separation:
+        * Packet was placed using Header/Data separation algorithm.
+        * The separation location is indicated by the itype field.
+        */
+       #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_HDS \
+               (UINT32_C(0x2) << 7)
+       /*
+        * GRO/Jumbo:
+        * Packet will be placed using GRO/Jumbo where the first
+        * packet is filled with data. Subsequent packets will be
+        * placed such that any one packet does not span two
+        * aggregation buffers unless it starts at the beginning of
+        * an aggregation buffer.
+        */
+       #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
+               (UINT32_C(0x5) << 7)
+       /*
+        * GRO/Header-Data Separation:
+        * Packet will be placed using GRO/HDS where the header
+        * is in the first packet.
+        * Payload of each packet will be
+        * placed such that any one packet does not span two
+        * aggregation buffers unless it starts at the beginning of
+        * an aggregation buffer.
+        */
+       #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_GRO_HDS \
+               (UINT32_C(0x6) << 7)
+       #define RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_LAST \
+               RX_TPA_V2_END_CMPL_FLAGS_PLACEMENT_GRO_HDS
+       /* unused is 2 b */
+       #define RX_TPA_V2_END_CMPL_FLAGS_UNUSED_MASK         UINT32_C(0xc00)
+       #define RX_TPA_V2_END_CMPL_FLAGS_UNUSED_SFT          10
+       /*
+        * This value indicates what the inner packet determined for the
+        * packet was.
+        * - 2 TCP Packet
+        *     Indicates that the packet was IP and TCP.  This indicates
+        *     that the ip_cs field is valid and that the tcp_udp_cs
+        *     field is valid and contains the TCP checksum.
+        *     This also indicates that the payload_offset field is valid.
+        */
+       #define RX_TPA_V2_END_CMPL_FLAGS_ITYPE_MASK          UINT32_C(0xf000)
+       #define RX_TPA_V2_END_CMPL_FLAGS_ITYPE_SFT           12
+       /*
+        * This value is zero for TPA End completions.
+        * There is no data in the buffer that corresponds to the opaque
+        * value in this completion.
+        */
+       uint16_t        len;
+       /*
+        * This is a copy of the opaque field from the RX BD this completion
+        * corresponds to.
+        */
+       uint32_t        opaque;
+       uint8_t v1;
+       /*
+        * This value is written by the NIC such that it will be different
+        * for each pass through the completion queue.   The even passes
+        * will write 1.  The odd passes will write 0.
+        */
+       #define RX_TPA_V2_END_CMPL_V1     UINT32_C(0x1)
+       /* This value is the number of segments in the TPA operation. */
+       uint8_t tpa_segs;
+       /*
+        * This is the aggregation ID that the completion is associated
+        * with.  Use this number to correlate the TPA start completion
+        * with the TPA end completion.
+        */
+       uint16_t        agg_id;
+       /*
+        * For non-GRO packets, this value is the
+        * timestamp delta between earliest and latest timestamp values for
+        * TPA packet. If packets were not time stamped, then delta will be
+        * zero.
+        *
+        * For GRO packets, this field is zero except for the following
+        * sub-fields.
+        * - tsdelta[31]
+        *     Timestamp present indication.  When '0', no Timestamp
+        *     option is in the packet.  When '1', then a Timestamp
+        *     option is present in the packet.
+        */
+       uint32_t        tsdelta;
+} __attribute__((packed));
+
+/*
+ * Last 16 bytes of rx_tpa_v2_end_cmpl.
+ *
+ * This TPA completion structure is used on devices where the
+ * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
+ */
+/* rx_tpa_v2_end_cmpl_hi (size:128b/16B) */
+struct rx_tpa_v2_end_cmpl_hi {
+       /*
+        * This value is the number of duplicate ACKs that have been
+        * received as part of the TPA operation.
+        */
+       uint16_t        tpa_dup_acks;
+       /*
+        * This value is the number of duplicate ACKs that have been
+        * received as part of the TPA operation.
+        */
+       #define RX_TPA_V2_END_CMPL_TPA_DUP_ACKS_MASK UINT32_C(0xf)
+       #define RX_TPA_V2_END_CMPL_TPA_DUP_ACKS_SFT 0
+       /*
+        * This value indicated the offset in bytes from the beginning of
+        * the packet where the inner payload starts. This value is valid
+        * for TCP, UDP, FCoE and RoCE packets
+        */
+       uint8_t payload_offset;
+       /*
+        * The value is the total number of aggregation buffers that were
+        * used in the TPA operation. All TPA aggregation buffer completions
+        * precede the TPA End completion. If the value is zero, then the
+        * aggregation is completely contained in the buffer space provided
+        * in the aggregation start completion.
+        * Note that the field is simply provided as a cross check.
+        */
+       uint8_t tpa_agg_bufs;
+       /*
+        * This value is the valid when TPA completion is active.  It
+        * indicates the length of the longest segment of the TPA operation
+        * for LRO mode and the length of the first segment in GRO mode.
+        *
+        * This value may be used by GRO software to re-construct the original
+        * packet stream from the TPA packet.  This is the length of all
+        * but the last segment for GRO.  In LRO mode this value may be used
+        * to indicate MSS size to the stack.
+        */
+       uint16_t        tpa_seg_len;
+       uint16_t        unused_1;
+       uint16_t        errors_v2;
+       /*
+        * This value is written by the NIC such that it will be different
+        * for each pass through the completion queue.   The even passes
+        * will write 1.  The odd passes will write 0.
+        */
+       #define RX_TPA_V2_END_CMPL_V2                             UINT32_C(0x1)
+       #define RX_TPA_V2_END_CMPL_ERRORS_MASK \
+               UINT32_C(0xfffe)
+       #define RX_TPA_V2_END_CMPL_ERRORS_SFT                     1
+       /*
+        * This error indicates that there was some sort of problem with
+        * the BDs for the packet that was found after part of the
+        * packet was already placed.  The packet should be treated as
+        * invalid.
+        */
+       #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_MASK \
+               UINT32_C(0xe)
+       #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_SFT         1
+       /* No buffer error */
+       #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
+               (UINT32_C(0x0) << 1)
+       /*
+        * This error occurs when there is a fatal HW problem in
+        * the chip only.  It indicates that there were not
+        * BDs on chip but that there was adequate reservation.
+        * provided by the TPA block.
+        */
+       #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
+               (UINT32_C(0x2) << 1)
+       /*
+        * Bad Format:
+        * BDs were not formatted correctly.
+        */
+       #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
+               (UINT32_C(0x3) << 1)
+       /*
+        * This error occurs when TPA block was not configured to
+        * reserve adequate BDs for TPA operations on this RX
+        * ring.  All data for the TPA operation was not placed.
+        *
+        * This error can also be generated when the number of
+        * segments is not programmed correctly in TPA and the
+        * 33 total aggregation buffers allowed for the TPA
+        * operation has been exceeded.
+        */
+       #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_RSV_ERROR \
+               (UINT32_C(0x4) << 1)
+       /*
+        * Flush:
+        * There was a bad_format error on the previous operation
+        */
+       #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_FLUSH \
+               (UINT32_C(0x5) << 1)
+       #define RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_LAST \
+               RX_TPA_V2_END_CMPL_ERRORS_BUFFER_ERROR_FLUSH
+       uint16_t        unused_2;
+       /*
+        * This is the opaque value that was completed for the TPA start
+        * completion that corresponds to this TPA end completion.
+        */
+       uint32_t        start_opaque;
+} __attribute__((packed));
+
+/*
+ * This TPA completion structure is used on devices where the
+ * `hwrm_vnic_qcaps.max_aggs_supported` value is greater than 0.
+ */
+/* rx_tpa_v2_abuf_cmpl (size:128b/16B) */
+struct rx_tpa_v2_abuf_cmpl {
+       uint16_t        type;
+       /*
+        * This field indicates the exact type of the completion.
+        * By convention, the LSB identifies the length of the
+        * record in 16B units.  Even values indicate 16B
+        * records.  Odd values indicate 32B
+        * records.
+        */
+       #define RX_TPA_V2_ABUF_CMPL_TYPE_MASK      UINT32_C(0x3f)
+       #define RX_TPA_V2_ABUF_CMPL_TYPE_SFT       0
+       /*
+        * RX TPA Aggregation Buffer completion :
+        * Completion of an L2 aggregation buffer in support of
+        * TPA packet completion.  Length = 16B
+        */
+       #define RX_TPA_V2_ABUF_CMPL_TYPE_RX_TPA_AGG  UINT32_C(0x16)
+       #define RX_TPA_V2_ABUF_CMPL_TYPE_LAST \
+               RX_TPA_V2_ABUF_CMPL_TYPE_RX_TPA_AGG
+       /*
+        * This is the length of the data for the packet stored in this
+        * aggregation buffer identified by the opaque value.  This does not
+        * include the length of any
+        * data placed in other aggregation BDs or in the packet or buffer
+        * BDs.   This length does not include any space added due to
+        * hdr_offset register during HDS placement mode.
+        */
+       uint16_t        len;
+       /*
+        * This is a copy of the opaque field from the RX BD this aggregation
+        * buffer corresponds to.
+        */
+       uint32_t        opaque;
+       uint16_t        v;
+       /*
+        * This value is written by the NIC such that it will be different
+        * for each pass through the completion queue.   The even passes
+        * will write 1.  The odd passes will write 0.
+        */
+       #define RX_TPA_V2_ABUF_CMPL_V     UINT32_C(0x1)
+       /*
+        * This is the aggregation ID that the completion is associated with. Use
+        * this number to correlate the TPA agg completion with the TPA start
+        * completion and the TPA end completion.
+        */
+       uint16_t        agg_id;
+       uint32_t        unused_1;
+} __attribute__((packed));
+
+/* rx_abuf_cmpl (size:128b/16B) */
+struct rx_abuf_cmpl {
+       uint16_t        type;
+       /*
+        * This field indicates the exact type of the completion.
+        * By convention, the LSB identifies the length of the
+        * record in 16B units.  Even values indicate 16B
+        * records.  Odd values indicate 32B
+        * records.
+        */
+       #define RX_ABUF_CMPL_TYPE_MASK  UINT32_C(0x3f)
+       #define RX_ABUF_CMPL_TYPE_SFT   0
+       /*
+        * RX Aggregation Buffer completion :
+        * Completion of an L2 aggregation buffer in support of
+        * TPA, HDS, or Jumbo packet completion.  Length = 16B
+        */
+       #define RX_ABUF_CMPL_TYPE_RX_AGG  UINT32_C(0x12)
+       #define RX_ABUF_CMPL_TYPE_LAST   RX_ABUF_CMPL_TYPE_RX_AGG
+       /*
+        * This is the length of the data for the packet stored in this
+        * aggregation buffer identified by the opaque value.  This does not
+        * include the length of any
+        * data placed in other aggregation BDs or in the packet or buffer
+        * BDs.   This length does not include any space added due to
+        * hdr_offset register during HDS placement mode.
+        */
+       uint16_t        len;
+       /*
+        * This is a copy of the opaque field from the RX BD this aggregation
+        * buffer corresponds to.
+        */
+       uint32_t        opaque;
+       uint32_t        v;
+       /*
+        * This value is written by the NIC such that it will be different
+        * for each pass through the completion queue.   The even passes
+        * will write 1.  The odd passes will write 0.
+        */
+       #define RX_ABUF_CMPL_V     UINT32_C(0x1)
+       /* unused3 is 32 b */
+       uint32_t        unused_2;
+} __attribute__((packed));
+
+/* eject_cmpl (size:128b/16B) */
+struct eject_cmpl {
+       uint16_t        type;
+       /*
+        * This field indicates the exact type of the completion.
+        * By convention, the LSB identifies the length of the
+        * record in 16B units.  Even values indicate 16B
+        * records.  Odd values indicate 32B
+        * records.
+        */
+       #define EJECT_CMPL_TYPE_MASK       UINT32_C(0x3f)
+       #define EJECT_CMPL_TYPE_SFT        0
+       /*
+        * Statistics Ejection Completion:
+        * Completion of statistics data ejection buffer.
+        * Length = 16B
+        */
+       #define EJECT_CMPL_TYPE_STAT_EJECT   UINT32_C(0x1a)
+       #define EJECT_CMPL_TYPE_LAST        EJECT_CMPL_TYPE_STAT_EJECT
+       #define EJECT_CMPL_FLAGS_MASK      UINT32_C(0xffc0)
+       #define EJECT_CMPL_FLAGS_SFT       6
+       /*
+        * When this bit is '1', it indicates a packet that has an
+        * error of some type.  Type of error is indicated in
+        * error_flags.
+        */
+       #define EJECT_CMPL_FLAGS_ERROR      UINT32_C(0x40)
+       /*
+        * This is the length of the statistics data stored in this
+        * buffer.
+        */
+       uint16_t        len;
+       /*
+        * This is a copy of the opaque field from the RX BD this ejection
+        * buffer corresponds to.
+        */
+       uint32_t        opaque;
+       uint16_t        v;
+       /*
+        * This value is written by the NIC such that it will be different
+        * for each pass through the completion queue.   The even passes
+        * will write 1.  The odd passes will write 0.
+        */
+       #define EJECT_CMPL_V                              UINT32_C(0x1)
+       #define EJECT_CMPL_ERRORS_MASK                    UINT32_C(0xfffe)
+       #define EJECT_CMPL_ERRORS_SFT                     1
        /*
         * This error indicates that there was some sort of problem with
         * the BDs for statistics ejection. The statistics ejection should
@@ -3812,13 +4457,13 @@ struct hwrm_async_event_cmpl {
        #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEBUG_NOTIFICATION \
                UINT32_C(0x37)
        /*
-        * A EEM flow cached memory flush request event being posted to the PF
-        * driver.
+        * An EEM flow cached memory flush for all flows request event being
+        * posted to the PF driver.
         */
        #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_EEM_CACHE_FLUSH_REQ \
                UINT32_C(0x38)
        /*
-        * A EEM flow cache memory flush completion event being posted to the
+        * An EEM flow cache memory flush completion event being posted to the
         * firmware by the PF driver. This is indication that host EEM flush
         * has completed by the PF.
         */
@@ -3833,7 +4478,7 @@ struct hwrm_async_event_cmpl {
        #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_TCP_FLAG_ACTION_CHANGE \
                UINT32_C(0x3a)
        /*
-        * A eem flow active event being posted to the PF or trusted VF driver
+        * An EEM flow active event being posted to the PF or trusted VF driver
         * by the firmware. The PF or trusted VF driver should update the
         * flow's aging timer after receiving this async event.
         */
@@ -3845,6 +4490,12 @@ struct hwrm_async_event_cmpl {
         */
        #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_EEM_CFG_CHANGE \
                UINT32_C(0x3c)
+       /* TFLIB unique default VNIC Configuration Change */
+       #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_TFLIB_DEFAULT_VNIC_CHANGE \
+               UINT32_C(0x3d)
+       /* TFLIB unique link status changed */
+       #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_TFLIB_LINK_STATUS_CHANGE \
+               UINT32_C(0x3e)
        /*
         * A trace log message. This contains firmware trace logs string
         * embedded in the asynchronous message. This is an experimental
@@ -5859,7 +6510,8 @@ struct hwrm_func_reset_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -5962,7 +6614,8 @@ struct hwrm_func_getfid_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -6038,7 +6691,8 @@ struct hwrm_func_vf_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -6110,7 +6764,8 @@ struct hwrm_func_vf_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -6183,7 +6838,8 @@ struct hwrm_func_vf_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -6446,7 +7102,8 @@ struct hwrm_func_qcaps_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -6663,6 +7320,21 @@ struct hwrm_func_qcaps_output {
         */
        #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ERROR_RECOVERY_CAPABLE \
                UINT32_C(0x800000)
+       /*
+        * If the query is for a VF, then this flag shall be ignored.
+        * If this query is for a PF and this flag is set to 1, then
+        * the PF has the capability to support extended stats.
+        */
+       #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT_STATS_SUPPORTED \
+               UINT32_C(0x1000000)
+       /*
+        * If the query is for a VF, then this flag shall be ignored.
+        * If this query is for a PF and this flag is set to 1, then host
+        * must initiate reset or reload (or fastboot) the firmware image
+        * upon detection of device shutdown state.
+        */
+       #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ERR_RECOVER_RELOAD \
+               UINT32_C(0x2000000)
        /*
         * This value is current MAC address configured for this
         * function. A value of 00-00-00-00-00-00 indicates no
@@ -6807,7 +7479,8 @@ struct hwrm_func_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -6921,6 +7594,16 @@ struct hwrm_func_qcfg_output {
         */
        #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_SECURE_MODE_ENABLED \
                UINT32_C(0x80)
+       /*
+        * If set to 1, then this PF is enabled with a preboot driver that
+        * requires access to the legacy L2 ring model and legacy 32b
+        * doorbells. If set to 0, then this PF is not allowed to use
+        * the legacy L2 rings. This feature is not allowed on VFs and
+        * is only relevant for devices that require a context backing
+        * store.
+        */
+       #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_PREBOOT_LEGACY_L2_RINGS \
+               UINT32_C(0x100)
        /*
         * This value is current MAC address configured for this
         * function. A value of 00-00-00-00-00-00 indicates no
@@ -7200,7 +7883,16 @@ struct hwrm_func_qcfg_output {
         * the unregister request on PF in the HOT Reset Process.
         */
        uint16_t        registered_vfs;
-       uint8_t unused_1[3];
+       /*
+        * The size of the doorbell BAR in KBytes reserved for L2 including
+        * any area that is shared between L2 and RoCE.  The L2 driver
+        * should only map the L2 portion of the doorbell BAR.  Any rounding
+        * of the BAR size to the native CPU page size should be performed
+        * by the driver.  If the value is zero, no special partitioning
+        * of the doorbell BAR between L2 and RoCE is required.
+        */
+       uint16_t        l2_doorbell_bar_size_kb;
+       uint8_t unused_1;
        /*
         * For backward compatibility this field must be set to 1.
         * Older drivers might look for this field to be 1 before
@@ -7247,7 +7939,8 @@ struct hwrm_func_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -7440,6 +8133,14 @@ struct hwrm_func_cfg_input {
         */
        #define HWRM_FUNC_CFG_INPUT_FLAGS_TRUSTED_VF_DISABLE \
                UINT32_C(0x1000000)
+       /*
+        * This bit is used by preboot drivers on a PF that require access
+        * to the legacy L2 ring model and legacy 32b doorbells. This
+        * feature is not allowed on VFs and is only relevant for devices
+        * that require a context backing store.
+        */
+       #define HWRM_FUNC_CFG_INPUT_FLAGS_PREBOOT_LEGACY_L2_RINGS \
+               UINT32_C(0x2000000)
        uint32_t        enables;
        /*
         * This bit must be '1' for the mtu field to be
@@ -7889,7 +8590,8 @@ struct hwrm_func_qstats_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -8014,7 +8716,8 @@ struct hwrm_func_clr_stats_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -8078,7 +8781,8 @@ struct hwrm_func_vf_resc_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -8141,7 +8845,8 @@ struct hwrm_func_drv_rgtr_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -8221,6 +8926,17 @@ struct hwrm_func_drv_rgtr_input {
         */
        #define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_ERROR_RECOVERY_SUPPORT \
                UINT32_C(0x20)
+       /*
+        * When this bit is 1, the function is indicating the support of the
+        * Master capability. The Firmware will use this capability to select
+        * the Master function. The master function will be used to initiate
+        * designated functionality like error recovery etc. If none of the
+        * registered PFs or trusted VFs indicate this support, then
+        * firmware will select the 1st registered PF as Master capable
+        * instance.
+        */
+       #define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_MASTER_SUPPORT \
+               UINT32_C(0x40)
        uint32_t        enables;
        /*
         * This bit must be '1' for the os_type field to be
@@ -8382,7 +9098,8 @@ struct hwrm_func_drv_unrgtr_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -8447,7 +9164,8 @@ struct hwrm_func_buf_rgtr_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -8581,7 +9299,8 @@ struct hwrm_func_buf_unrgtr_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -8650,7 +9369,8 @@ struct hwrm_func_drv_qver_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -8757,7 +9477,8 @@ struct hwrm_func_resource_qcaps_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -8886,7 +9607,8 @@ struct hwrm_func_backing_store_qcaps_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -8973,7 +9695,10 @@ struct hwrm_func_backing_store_qcaps_output {
         * the backing store.
         */
        uint32_t        tqm_max_entries_per_ring;
-       /* Maximum number of MR/AV context entries supported for this function. */
+       /*
+        * Maximum number of MR plus AV context entries supported for this
+        * function.
+        */
        uint32_t        mrav_max_entries;
        /* Number of bytes that must be allocated for each context entry. */
        uint16_t        mrav_entry_size;
@@ -8981,7 +9706,22 @@ struct hwrm_func_backing_store_qcaps_output {
        uint16_t        tim_entry_size;
        /* Maximum number of Timer context entries supported for this function. */
        uint32_t        tim_max_entries;
-       uint8_t unused_0[2];
+       /*
+        * When this field is zero, the 32b `mrav_num_entries` field in the
+        * `backing_store_cfg` and `backing_store_qcfg` commands represents
+        * the total number of MR plus AV entries allowed in the MR/AV backing
+        * store PBL.
+        *
+        * When this field is non-zero, the 32b `mrav_num_entries` field in
+        * the `backing_store_cfg` and `backing_store_qcfg` commands is
+        * logically divided into two 16b fields. Bits `[31:16]` represents
+        * the `mr_num_entries` and bits `[15:0]` represents `av_num_entries`.
+        * Both of these values are represented in a unit granularity
+        * specified by this field. For example, if this field is 16 and
+        * `mrav_num_entries` is `0x02000100`, then the number of MR entries
+        * is 8192 and the number of AV entries is 4096.
+        */
+       uint16_t        mrav_num_entries_units;
        /*
         * The number of entries specified for any TQM ring must be a
         * multiple of this value to prevent any resource allocation
@@ -9021,7 +9761,8 @@ struct hwrm_func_backing_store_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -9041,6 +9782,12 @@ struct hwrm_func_backing_store_cfg_input {
         */
        #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_FLAGS_PREBOOT_MODE \
                UINT32_C(0x1)
+       /*
+        * When set, the 32b `mrav_num_entries` field is logically divided
+        * into two 16b fields, `mr_num_entries` and `av_num_entries`.
+        */
+       #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_FLAGS_MRAV_RESERVATION_SPLIT \
+               UINT32_C(0x2)
        uint32_t        enables;
        /*
         * This bit must be '1' for the qp fields to be
@@ -9958,7 +10705,20 @@ struct hwrm_func_backing_store_cfg_input {
         * the backing store.
         */
        uint32_t        tqm_ring7_num_entries;
-       /* Number of MR/AV entries. */
+       /*
+        * If the MR/AV split reservation flag is not set, then this field
+        * represents the total number of MR plus AV entries. For versions
+        * of firmware that support the split reservation, when it is not
+        * specified half of the entries will be reserved for MRs and the
+        * other half for AVs.
+        *
+        * If the MR/AV split reservation flag is set, then this
+        * field is logically divided into two 16b fields. Bits `[31:16]`
+        * represents the `mr_num_entries` and bits `[15:0]` represents
+        * `av_num_entries`. The granularity of these values is defined by
+        * the `mrav_num_entries_unit` field returned by the
+        * `backing_store_qcaps` command.
+        */
        uint32_t        mrav_num_entries;
        /* Number of Timer entries. */
        uint32_t        tim_num_entries;
@@ -10036,7 +10796,8 @@ struct hwrm_func_backing_store_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -10068,6 +10829,12 @@ struct hwrm_func_backing_store_qcfg_output {
         */
        #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_FLAGS_PREBOOT_MODE \
                UINT32_C(0x1)
+       /*
+        * When set, the 32b `mrav_num_entries` field is logically divided
+        * into two 16b fields, `mr_num_entries` and `av_num_entries`.
+        */
+       #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_FLAGS_MRAV_RESERVATION_SPLIT \
+               UINT32_C(0x2)
        uint8_t unused_0[4];
        /*
         * This bit must be '1' for the qp fields to be
@@ -10891,7 +11658,20 @@ struct hwrm_func_backing_store_qcfg_output {
        uint32_t        tqm_ring6_num_entries;
        /* Number of TQM ring 7 entries. */
        uint32_t        tqm_ring7_num_entries;
-       /* Number of MR/AV entries. */
+       /*
+        * If the MR/AV split reservation flag is not set, then this field
+        * represents the total number of MR plus AV entries. For versions
+        * of firmware that support the split reservation, when it is not
+        * specified half of the entries will be reserved for MRs and the
+        * other half for AVs.
+        *
+        * If the MR/AV split reservation flag is set, then this
+        * field is logically divided into two 16b fields. Bits `[31:16]`
+        * represents the `mr_num_entries` and bits `[15:0]` represents
+        * `av_num_entries`. The granularity of these values is defined by
+        * the `mrav_num_entries_unit` field returned by the
+        * `backing_store_qcaps` command.
+        */
        uint32_t        mrav_num_entries;
        /* Number of Timer entries. */
        uint32_t        tim_num_entries;
@@ -10930,7 +11710,8 @@ struct hwrm_error_recovery_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -11296,7 +12077,8 @@ struct hwrm_func_vlan_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -11386,7 +12168,8 @@ struct hwrm_func_vlan_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -11507,7 +12290,8 @@ struct hwrm_func_vf_vnic_ids_query_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -11580,7 +12364,8 @@ struct hwrm_func_vf_bw_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -11704,7 +12489,8 @@ struct hwrm_func_vf_bw_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -11841,7 +12627,97 @@ struct hwrm_func_drv_if_change_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
+        * * 0xFFFF - HWRM
+        */
+       uint16_t        target_id;
+       /*
+        * A physical address pointer pointing to a host buffer that the
+        * command's response data will be written. This can be either a host
+        * physical address (HPA) or a guest physical address (GPA) and must
+        * point to a physically contiguous block of memory.
+        */
+       uint64_t        resp_addr;
+       uint32_t        flags;
+       /*
+        * When this bit is '1', the function driver is indicating
+        * that the IF state is changing to UP state.  The call should
+        * be made at the beginning of the driver's open call before
+        * resources are allocated.  After making the call, the driver
+        * should check the response to see if any resources may have
+        * changed (see the response below).  If the driver fails
+        * the open call, the driver should make this call again with
+        * this bit cleared to indicate that the IF state is not UP.
+        * During the driver's close call when the IF state is changing
+        * to DOWN, the driver should make this call with the bit cleared
+        * after all resources have been freed.
+        */
+       #define HWRM_FUNC_DRV_IF_CHANGE_INPUT_FLAGS_UP     UINT32_C(0x1)
+       uint32_t        unused;
+} __attribute__((packed));
+
+/* hwrm_func_drv_if_change_output (size:128b/16B) */
+struct hwrm_func_drv_if_change_output {
+       /* The specific error status for the command. */
+       uint16_t        error_code;
+       /* The HWRM command request type. */
+       uint16_t        req_type;
+       /* The sequence ID from the original command. */
+       uint16_t        seq_id;
+       /* The length of the response data in number of bytes. */
+       uint16_t        resp_len;
+       uint32_t        flags;
+       /*
+        * When this bit is '1', it indicates that the resources reserved
+        * for this function may have changed.  The driver should check
+        * resource capabilities and reserve resources again before
+        * allocating resources.
+        */
+       #define HWRM_FUNC_DRV_IF_CHANGE_OUTPUT_FLAGS_RESC_CHANGE \
+               UINT32_C(0x1)
+       /*
+        * When this bit is '1', it indicates that the firmware got changed / reset.
+        * The driver should do complete re-initialization when that bit is set.
+        */
+       #define HWRM_FUNC_DRV_IF_CHANGE_OUTPUT_FLAGS_HOT_FW_RESET_DONE \
+               UINT32_C(0x2)
+       uint8_t unused_0[3];
+       /*
+        * This field is used in Output records to indicate that the output
+        * is completely written to RAM.  This field should be read as '1'
+        * to indicate that the output has been completely written.
+        * When writing a command completion or response to an internal processor,
+        * the order of writes has to be such that this field is written last.
+        */
+       uint8_t valid;
+} __attribute__((packed));
+
+/*******************************
+ * hwrm_func_host_pf_ids_query *
+ *******************************/
+
+
+/* hwrm_func_host_pf_ids_query_input (size:192b/24B) */
+struct hwrm_func_host_pf_ids_query_input {
+       /* The HWRM command request type. */
+       uint16_t        req_type;
+       /*
+        * The completion ring to send the completion event on. This should
+        * be the NQ ID returned from the `nq_alloc` HWRM command.
+        */
+       uint16_t        cmpl_ring;
+       /*
+        * The sequence ID is used by the driver for tracking multiple
+        * commands. This ID is treated as opaque data by the firmware and
+        * the value is returned in the `hwrm_resp_hdr` upon completion.
+        */
+       uint16_t        seq_id;
+       /*
+        * The target ID of the command:
+        * * 0x0-0xFFF8 - The function ID
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -11851,51 +12727,168 @@ struct hwrm_func_drv_if_change_input {
         * physical address (HPA) or a guest physical address (GPA) and must
         * point to a physically contiguous block of memory.
         */
-       uint64_t        resp_addr;
-       uint32_t        flags;
+       uint64_t        resp_addr;
+       uint8_t host;
+       /*
+        * # If this bit is set to '1', the query will contain PF(s)
+        * belongs to SOC host.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_SOC      UINT32_C(0x1)
+       /*
+        * # If this bit is set to '1', the query will contain PF(s)
+        * belongs to EP0 host.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_EP_0     UINT32_C(0x2)
+       /*
+        * # If this bit is set to '1', the query will contain PF(s)
+        * belongs to EP1 host.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_EP_1     UINT32_C(0x4)
+       /*
+        * # If this bit is set to '1', the query will contain PF(s)
+        * belongs to EP2 host.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_EP_2     UINT32_C(0x8)
+       /*
+        * # If this bit is set to '1', the query will contain PF(s)
+        * belongs to EP3 host.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_HOST_EP_3     UINT32_C(0x10)
+       /*
+        * This provides a filter of what PF(s) will be returned in the
+        * query..
+        */
+       uint8_t filter;
+       /*
+        * all available PF(s) belong to the host(s) (defined in the
+        * host field). This includes the hidden PFs.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_ALL  UINT32_C(0x0)
+       /*
+        * all available PF(s) belong to the host(s) (defined in the
+        * host field) that is available for L2 traffic.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_L2   UINT32_C(0x1)
+       /*
+        * all available PF(s) belong to the host(s) (defined in the
+        * host field) that is available for ROCE traffic.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_ROCE UINT32_C(0x2)
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_LAST \
+               HWRM_FUNC_HOST_PF_IDS_QUERY_INPUT_FILTER_ROCE
+       uint8_t unused_1[6];
+} __attribute__((packed));
+
+/* hwrm_func_host_pf_ids_query_output (size:128b/16B) */
+struct hwrm_func_host_pf_ids_query_output {
+       /* The specific error status for the command. */
+       uint16_t        error_code;
+       /* The HWRM command request type. */
+       uint16_t        req_type;
+       /* The sequence ID from the original command. */
+       uint16_t        seq_id;
+       /* The length of the response data in number of bytes. */
+       uint16_t        resp_len;
+       /* This provides the first PF ID of the device. */
+       uint16_t        first_pf_id;
+       uint16_t        pf_ordinal_mask;
+       /*
+        * When this bit is '1', it indicates first PF belongs to one of
+        * the hosts defined in the input request.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_0 \
+               UINT32_C(0x1)
+       /*
+        * When this bit is '1', it indicates 2nd PF belongs to one of the
+        * hosts defined in the input request.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_1 \
+               UINT32_C(0x2)
+       /*
+        * When this bit is '1', it indicates 3rd PF belongs to one of the
+        * hosts defined in the input request.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_2 \
+               UINT32_C(0x4)
+       /*
+        * When this bit is '1', it indicates 4th PF belongs to one of the
+        * hosts defined in the input request.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_3 \
+               UINT32_C(0x8)
+       /*
+        * When this bit is '1', it indicates 5th PF belongs to one of the
+        * hosts defined in the input request.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_4 \
+               UINT32_C(0x10)
+       /*
+        * When this bit is '1', it indicates 6th PF belongs to one of the
+        * hosts defined in the input request.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_5 \
+               UINT32_C(0x20)
+       /*
+        * When this bit is '1', it indicates 7th PF belongs to one of the
+        * hosts defined in the input request.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_6 \
+               UINT32_C(0x40)
+       /*
+        * When this bit is '1', it indicates 8th PF belongs to one of the
+        * hosts defined in the input request.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_7 \
+               UINT32_C(0x80)
+       /*
+        * When this bit is '1', it indicates 9th PF belongs to one of the
+        * hosts defined in the input request.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_8 \
+               UINT32_C(0x100)
+       /*
+        * When this bit is '1', it indicates 10th PF belongs to one of the
+        * hosts defined in the input request.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_9 \
+               UINT32_C(0x200)
+       /*
+        * When this bit is '1', it indicates 11th PF belongs to one of the
+        * hosts defined in the input request.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_10 \
+               UINT32_C(0x400)
+       /*
+        * When this bit is '1', it indicates 12th PF belongs to one of the
+        * hosts defined in the input request.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_11 \
+               UINT32_C(0x800)
+       /*
+        * When this bit is '1', it indicates 13th PF belongs to one of the
+        * hosts defined in the input request.
+        */
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_12 \
+               UINT32_C(0x1000)
        /*
-        * When this bit is '1', the function driver is indicating
-        * that the IF state is changing to UP state.  The call should
-        * be made at the beginning of the driver's open call before
-        * resources are allocated.  After making the call, the driver
-        * should check the response to see if any resources may have
-        * changed (see the response below).  If the driver fails
-        * the open call, the driver should make this call again with
-        * this bit cleared to indicate that the IF state is not UP.
-        * During the driver's close call when the IF state is changing
-        * to DOWN, the driver should make this call with the bit cleared
-        * after all resources have been freed.
+        * When this bit is '1', it indicates 14th PF belongs to one of the
+        * hosts defined in the input request.
         */
-       #define HWRM_FUNC_DRV_IF_CHANGE_INPUT_FLAGS_UP     UINT32_C(0x1)
-       uint32_t        unused;
-} __attribute__((packed));
-
-/* hwrm_func_drv_if_change_output (size:128b/16B) */
-struct hwrm_func_drv_if_change_output {
-       /* The specific error status for the command. */
-       uint16_t        error_code;
-       /* The HWRM command request type. */
-       uint16_t        req_type;
-       /* The sequence ID from the original command. */
-       uint16_t        seq_id;
-       /* The length of the response data in number of bytes. */
-       uint16_t        resp_len;
-       uint32_t        flags;
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_13 \
+               UINT32_C(0x2000)
        /*
-        * When this bit is '1', it indicates that the resources reserved
-        * for this function may have changed.  The driver should check
-        * resource capabilities and reserve resources again before
-        * allocating resources.
+        * When this bit is '1', it indicates 15th PF belongs to one of the
+        * hosts defined in the input request.
         */
-       #define HWRM_FUNC_DRV_IF_CHANGE_OUTPUT_FLAGS_RESC_CHANGE \
-               UINT32_C(0x1)
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_14 \
+               UINT32_C(0x4000)
        /*
-        * When this bit is '1', it indicates that the firmware got changed / reset.
-        * The driver should do complete re-initialization when that bit is set.
+        * When this bit is '1', it indicates 16th PF belongs to one of the
+        * hosts defined in the input request.
         */
-       #define HWRM_FUNC_DRV_IF_CHANGE_OUTPUT_FLAGS_HOT_FW_RESET_DONE \
-               UINT32_C(0x2)
-       uint8_t unused_0[3];
+       #define HWRM_FUNC_HOST_PF_IDS_QUERY_OUTPUT_PF_ORDINAL_MASK_FUNC_15 \
+               UINT32_C(0x8000)
+       uint8_t unused_1[3];
        /*
         * This field is used in Output records to indicate that the output
         * is completely written to RAM.  This field should be read as '1'
@@ -11929,7 +12922,8 @@ struct hwrm_port_phy_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -12520,7 +13514,8 @@ struct hwrm_port_phy_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -13389,7 +14384,7 @@ struct hwrm_port_phy_qcfg_output {
  *********************/
 
 
-/* hwrm_port_mac_cfg_input (size:320b/40B) */
+/* hwrm_port_mac_cfg_input (size:384b/48B) */
 struct hwrm_port_mac_cfg_input {
        /* The HWRM command request type. */
        uint16_t        req_type;
@@ -13407,7 +14402,8 @@ struct hwrm_port_mac_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -13527,6 +14523,13 @@ struct hwrm_port_mac_cfg_input {
         */
        #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_IP_DSCP2COS_DISABLE \
                UINT32_C(0x1000)
+       /*
+        * When this bit is set to '1', and the ptp_tx_ts_capture_enable
+        * bit is set, then the device uses one step Tx timestamping.
+        * This bit is temporary and used for experimental purposes.
+        */
+       #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_ONE_STEP_TX_TS \
+               UINT32_C(0x2000)
        uint32_t        enables;
        /*
         * This bit must be '1' for the ipg field to be
@@ -13576,6 +14579,12 @@ struct hwrm_port_mac_cfg_input {
         */
        #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_COS_FIELD_CFG \
                UINT32_C(0x100)
+       /*
+        * This bit must be '1' for the ptp_freq_adj_ppb field to be
+        * configured.
+        */
+       #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_PTP_FREQ_ADJ_PPB \
+               UINT32_C(0x200)
        /* Port ID of port that is to be configured. */
        uint16_t        port_id;
        /*
@@ -13763,6 +14772,12 @@ struct hwrm_port_mac_cfg_input {
        #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_DEFAULT_COS_SFT \
                5
        uint8_t unused_0[3];
+       /*
+        * This signed field specifies by how much to adjust the frequency
+        * of sync timer updates (measured in parts per billion).
+        */
+       int32_t ptp_freq_adj_ppb;
+       uint8_t unused_1[4];
 } __attribute__((packed));
 
 /* hwrm_port_mac_cfg_output (size:128b/16B) */
@@ -13842,7 +14857,8 @@ struct hwrm_port_mac_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -14131,7 +15147,8 @@ struct hwrm_port_mac_ptp_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -14174,6 +15191,12 @@ struct hwrm_port_mac_ptp_qcfg_output {
         */
        #define HWRM_PORT_MAC_PTP_QCFG_OUTPUT_FLAGS_HWRM_ACCESS \
                UINT32_C(0x2)
+       /*
+        * When this bit is set to '1', the device supports one-step
+        * Tx timestamping.
+        */
+       #define HWRM_PORT_MAC_PTP_QCFG_OUTPUT_FLAGS_ONE_STEP_TX_TS \
+               UINT32_C(0x4)
        uint8_t unused_0[3];
        /* Offset of the PTP register for the lower 32 bits of timestamp for RX. */
        uint32_t        rx_ts_reg_off_lower;
@@ -14595,7 +15618,8 @@ struct hwrm_port_qstats_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -14716,7 +15740,7 @@ struct tx_port_stats_ext {
 } __attribute__((packed));
 
 /* Port Rx Statistics extended Formats */
-/* rx_port_stats_ext (size:2368b/296B) */
+/* rx_port_stats_ext (size:3648b/456B) */
 struct rx_port_stats_ext {
        /* Number of times link state changed to down */
        uint64_t        link_down_events;
@@ -14792,6 +15816,49 @@ struct rx_port_stats_ext {
        uint64_t        pfc_pri7_rx_duration_us;
        /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 7 */
        uint64_t        pfc_pri7_rx_transitions;
+       /* Total number of received bits */
+       uint64_t        rx_bits;
+       /* The number of events where the port receive buffer was over 85% full */
+       uint64_t        rx_buffer_passed_threshold;
+       /*
+        * The number of symbol errors that wasn't corrected by FEC correction
+        * alogirithm
+        */
+       uint64_t        rx_pcs_symbol_err;
+       /* The number of corrected bits on the port according to active FEC */
+       uint64_t        rx_corrected_bits;
+       /* Total number of rx discard bytes count on cos queue 0 */
+       uint64_t        rx_discard_bytes_cos0;
+       /* Total number of rx discard bytes count on cos queue 1 */
+       uint64_t        rx_discard_bytes_cos1;
+       /* Total number of rx discard bytes count on cos queue 2 */
+       uint64_t        rx_discard_bytes_cos2;
+       /* Total number of rx discard bytes count on cos queue 3 */
+       uint64_t        rx_discard_bytes_cos3;
+       /* Total number of rx discard bytes count on cos queue 4 */
+       uint64_t        rx_discard_bytes_cos4;
+       /* Total number of rx discard bytes count on cos queue 5 */
+       uint64_t        rx_discard_bytes_cos5;
+       /* Total number of rx discard bytes count on cos queue 6 */
+       uint64_t        rx_discard_bytes_cos6;
+       /* Total number of rx discard bytes count on cos queue 7 */
+       uint64_t        rx_discard_bytes_cos7;
+       /* Total number of rx discard packets count on cos queue 0 */
+       uint64_t        rx_discard_packets_cos0;
+       /* Total number of rx discard packets count on cos queue 1 */
+       uint64_t        rx_discard_packets_cos1;
+       /* Total number of rx discard packets count on cos queue 2 */
+       uint64_t        rx_discard_packets_cos2;
+       /* Total number of rx discard packets count on cos queue 3 */
+       uint64_t        rx_discard_packets_cos3;
+       /* Total number of rx discard packets count on cos queue 4 */
+       uint64_t        rx_discard_packets_cos4;
+       /* Total number of rx discard packets count on cos queue 5 */
+       uint64_t        rx_discard_packets_cos5;
+       /* Total number of rx discard packets count on cos queue 6 */
+       uint64_t        rx_discard_packets_cos6;
+       /* Total number of rx discard packets count on cos queue 7 */
+       uint64_t        rx_discard_packets_cos7;
 } __attribute__((packed));
 
 /************************
@@ -14817,7 +15884,8 @@ struct hwrm_port_qstats_ext_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -14909,7 +15977,8 @@ struct hwrm_port_lpbk_qstats_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -14986,7 +16055,8 @@ struct hwrm_port_clr_stats_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -15057,7 +16127,8 @@ struct hwrm_port_phy_qcaps_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -15311,7 +16382,8 @@ struct hwrm_port_phy_mdio_write_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -15387,7 +16459,8 @@ struct hwrm_port_phy_mdio_read_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -15463,7 +16536,8 @@ struct hwrm_port_led_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -15886,7 +16960,8 @@ struct hwrm_port_led_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -16191,7 +17266,8 @@ struct hwrm_port_led_qcaps_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -16519,6 +17595,137 @@ struct hwrm_port_led_qcaps_output {
        uint8_t valid;
 } __attribute__((packed));
 
+/***********************
+ * hwrm_port_prbs_test *
+ ***********************/
+
+
+/* hwrm_port_prbs_test_input (size:384b/48B) */
+struct hwrm_port_prbs_test_input {
+       /* The HWRM command request type. */
+       uint16_t        req_type;
+       /*
+        * The completion ring to send the completion event on. This should
+        * be the NQ ID returned from the `nq_alloc` HWRM command.
+        */
+       uint16_t        cmpl_ring;
+       /*
+        * The sequence ID is used by the driver for tracking multiple
+        * commands. This ID is treated as opaque data by the firmware and
+        * the value is returned in the `hwrm_resp_hdr` upon completion.
+        */
+       uint16_t        seq_id;
+       /*
+        * The target ID of the command:
+        * * 0x0-0xFFF8 - The function ID
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
+        * * 0xFFFF - HWRM
+        */
+       uint16_t        target_id;
+       /*
+        * A physical address pointer pointing to a host buffer that the
+        * command's response data will be written. This can be either a host
+        * physical address (HPA) or a guest physical address (GPA) and must
+        * point to a physically contiguous block of memory.
+        */
+       uint64_t        resp_addr;
+       /* Host address data is to DMA'd to. */
+       uint64_t        resp_data_addr;
+       /*
+        * Size of the buffer pointed to by resp_data_addr. The firmware may
+        * use this entire buffer or less than the entire buffer, but never more.
+        */
+       uint16_t        data_len;
+       uint16_t        unused_0;
+       uint32_t        unused_1;
+       /* Port ID of port where PRBS test to be run. */
+       uint16_t        port_id;
+       /* Polynomial selection for PRBS test. */
+       uint16_t        poly;
+       /* PRBS7 */
+       #define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS7   UINT32_C(0x0)
+       /* PRBS9 */
+       #define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS9   UINT32_C(0x1)
+       /* PRBS11 */
+       #define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS11  UINT32_C(0x2)
+       /* PRBS15 */
+       #define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS15  UINT32_C(0x3)
+       /* PRBS23 */
+       #define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS23  UINT32_C(0x4)
+       /* PRBS31 */
+       #define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS31  UINT32_C(0x5)
+       /* PRBS58 */
+       #define HWRM_PORT_PRBS_TEST_INPUT_POLY_PRBS58  UINT32_C(0x6)
+       /* Invalid */
+       #define HWRM_PORT_PRBS_TEST_INPUT_POLY_INVALID UINT32_C(0xff)
+       #define HWRM_PORT_PRBS_TEST_INPUT_POLY_LAST \
+               HWRM_PORT_PRBS_TEST_INPUT_POLY_INVALID
+       /*
+        * Configuration bits for PRBS test.
+        * Use enable bit to start/stop test.
+        * Use tx/rx lane map bits to run test on specific lanes,
+        * if set to 0 test will be run on all lanes.
+        */
+       uint16_t        prbs_config;
+       /*
+        * Set 0 to stop test currently in progress
+        * Set 1 to start test with configuration provided.
+        */
+       #define HWRM_PORT_PRBS_TEST_INPUT_PRBS_CONFIG_START_STOP \
+               UINT32_C(0x1)
+       /*
+        * If set to 1, tx_lane_map bitmap should have lane bits set.
+        * If set to 0, test will be run on all lanes for this port.
+        */
+       #define HWRM_PORT_PRBS_TEST_INPUT_PRBS_CONFIG_TX_LANE_MAP_VALID \
+               UINT32_C(0x2)
+       /*
+        * If set to 1, rx_lane_map bitmap should have lane bits set.
+        * If set to 0, test will be run on all lanes for this port.
+        */
+       #define HWRM_PORT_PRBS_TEST_INPUT_PRBS_CONFIG_RX_LANE_MAP_VALID \
+               UINT32_C(0x4)
+       /* Duration in seconds to run the PRBS test. */
+       uint16_t        timeout;
+       /*
+        * If tx_lane_map_valid is set to 1, this field is a bitmap
+        * of tx lanes to run PRBS test. bit0 = lane0,
+        * bit1 = lane1 ..bit31 = lane31
+        */
+       uint32_t        tx_lane_map;
+       /*
+        * If rx_lane_map_valid is set to 1, this field is a bitmap
+        * of rx lanes to run PRBS test. bit0 = lane0,
+        * bit1 = lane1 ..bit31 = lane31
+        */
+       uint32_t        rx_lane_map;
+} __attribute__((packed));
+
+/* hwrm_port_prbs_test_output (size:128b/16B) */
+struct hwrm_port_prbs_test_output {
+       /* The specific error status for the command. */
+       uint16_t        error_code;
+       /* The HWRM command request type. */
+       uint16_t        req_type;
+       /* The sequence ID from the original command. */
+       uint16_t        seq_id;
+       /* The length of the response data in number of bytes. */
+       uint16_t        resp_len;
+       /* Total length of stored data. */
+       uint16_t        total_data_len;
+       uint16_t        unused_0;
+       uint8_t unused_1[3];
+       /*
+        * This field is used in Output records to indicate that the output
+        * is completely written to RAM.  This field should be read as '1'
+        * to indicate that the output has been completely written.
+        * When writing a command completion or response to an internal processor,
+        * the order of writes has to be such that this field is written last.
+        */
+       uint8_t valid;
+} __attribute__((packed));
+
 /***********************
  * hwrm_queue_qportcfg *
  ***********************/
@@ -16542,7 +17749,8 @@ struct hwrm_queue_qportcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -16994,7 +18202,8 @@ struct hwrm_queue_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -17091,7 +18300,8 @@ struct hwrm_queue_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -17194,7 +18404,8 @@ struct hwrm_queue_pfcenable_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -17283,7 +18494,8 @@ struct hwrm_queue_pfcenable_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -17372,7 +18584,8 @@ struct hwrm_queue_pri2cos_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -17522,7 +18735,8 @@ struct hwrm_queue_pri2cos_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -17698,7 +18912,8 @@ struct hwrm_queue_cos2bw_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -18740,7 +19955,8 @@ struct hwrm_queue_cos2bw_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -19831,7 +21047,8 @@ struct hwrm_vnic_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -19897,7 +21114,8 @@ struct hwrm_vnic_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -19939,7 +21157,7 @@ struct hwrm_vnic_free_output {
  *****************/
 
 
-/* hwrm_vnic_cfg_input (size:320b/40B) */
+/* hwrm_vnic_cfg_input (size:384b/48B) */
 struct hwrm_vnic_cfg_input {
        /* The HWRM command request type. */
        uint16_t        req_type;
@@ -19957,7 +21175,8 @@ struct hwrm_vnic_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -20081,6 +21300,9 @@ struct hwrm_vnic_cfg_input {
         */
        #define HWRM_VNIC_CFG_INPUT_ENABLES_DEFAULT_CMPL_RING_ID \
                UINT32_C(0x40)
+       /* This bit must be '1' for the queue_id field to be configured. */
+       #define HWRM_VNIC_CFG_INPUT_ENABLES_QUEUE_ID \
+               UINT32_C(0x80)
        /* Logical vnic ID */
        uint16_t        vnic_id;
        /*
@@ -20126,6 +21348,19 @@ struct hwrm_vnic_cfg_input {
         * be chosen if packet does not match any RSS rules.
         */
        uint16_t        default_cmpl_ring_id;
+       /*
+        * When specified, only incoming packets classified to the specified CoS
+        * queue ID will be arriving on this VNIC.  Packet priority to CoS mapping
+        * rules can be specified using HWRM_QUEUE_PRI2COS_CFG.  In this mode,
+        * ntuple filters with VNIC destination specified are invalid since they
+        * conflict with the the CoS to VNIC steering rules in this mode.
+        *
+        * If this field is not specified, packet to VNIC steering will be
+        * subject to the standard L2 filter rules and any additional ntuple
+        * filter rules with destination VNIC specified.
+        */
+       uint16_t        queue_id;
+       uint8_t unused0[6];
 } __attribute__((packed));
 
 /* hwrm_vnic_cfg_output (size:128b/16B) */
@@ -20172,7 +21407,8 @@ struct hwrm_vnic_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -20327,7 +21563,8 @@ struct hwrm_vnic_qcaps_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -20419,7 +21656,23 @@ struct hwrm_vnic_qcaps_output {
         */
        #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_OUTERMOST_RSS_CAP \
                UINT32_C(0x80)
-       uint8_t unused_1[7];
+       /*
+        * When this bit is '1', it indicates that firmware supports the
+        * ability to steer incoming packets from one CoS queue to one
+        * VNIC.  This optional feature can then be enabled
+        * using HWRM_VNIC_CFG on any VNIC.  This feature is only
+        * available when NVM option “enable_cos_classfication” is set
+        * to 1.  If set to '0', firmware does not support this feature.
+        */
+       #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_COS_ASSIGNMENT_CAP \
+               UINT32_C(0x100)
+       /*
+        * This field advertises the maximum concurrent TPA aggregations
+        * supported by the VNIC on new devices that support TPA v2.
+        * '0' means that TPA v2 is not supported.
+        */
+       uint16_t        max_aggs_supported;
+       uint8_t unused_1[5];
        /*
         * This field is used in Output records to indicate that the output
         * is completely written to RAM.  This field should be read as '1'
@@ -20453,7 +21706,8 @@ struct hwrm_vnic_tpa_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -20529,6 +21783,15 @@ struct hwrm_vnic_tpa_cfg_input {
         */
        #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO_TTL_CHECK \
                UINT32_C(0x80)
+       /*
+        * When this bit is '1' and the GRO mode is enabled,
+        * the VNIC shall DMA payload data using GRO rules.
+        * When this bit is '0', the VNIC shall DMA payload data
+        * using the more efficient LRO rules of filling all
+        * aggregation buffers.
+        */
+       #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_PACK_AS_GRO \
+               UINT32_C(0x100)
        uint32_t        enables;
        /*
         * This bit must be '1' for the max_agg_segs field to be
@@ -20545,16 +21808,15 @@ struct hwrm_vnic_tpa_cfg_input {
         * configured.
         */
        #define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGG_TIMER     UINT32_C(0x4)
-       /*
-        * This bit must be '1' for the min_agg_len field to be
-        * configured.
-        */
+       /* deprecated bit.  Do not use!!! */
        #define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MIN_AGG_LEN       UINT32_C(0x8)
        /* Logical vnic ID */
        uint16_t        vnic_id;
        /*
         * This is the maximum number of TCP segments that can
-        * be aggregated (unit is Log2). Max value is 31.
+        * be aggregated (unit is Log2). Max value is 31. On new
+        * devices supporting TPA v2, the unit is multiples of 4 and
+        * valid values are > 0 and <= 63.
         */
        uint16_t        max_agg_segs;
        /* 1 segment */
@@ -20571,7 +21833,10 @@ struct hwrm_vnic_tpa_cfg_input {
                HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_MAX
        /*
         * This is the maximum number of aggregations this VNIC is
-        * allowed (unit is Log2). Max value is 7
+        * allowed (unit is Log2). Max value is 7. On new devices
+        * supporting TPA v2, this is in unit of 1 and must be > 0
+        * and <= max_aggs_supported in the hwrm_vnic_qcaps response
+        * to enable TPA v2.
         */
        uint16_t        max_aggs;
        /* 1 aggregation */
@@ -20596,7 +21861,9 @@ struct hwrm_vnic_tpa_cfg_input {
        uint32_t        max_agg_timer;
        /*
         * This is the minimum amount of payload length required to
-        * start an aggregation context.
+        * start an aggregation context. This field is deprecated and
+        * should be set to 0.  The minimum length is set by firmware
+        * and can be queried using hwrm_vnic_tpa_qcfg.
         */
        uint32_t        min_agg_len;
 } __attribute__((packed));
@@ -20645,7 +21912,8 @@ struct hwrm_vnic_rss_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -20795,7 +22063,8 @@ struct hwrm_vnic_rss_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -20937,7 +22206,8 @@ struct hwrm_vnic_plcmodes_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -21100,7 +22370,8 @@ struct hwrm_vnic_plcmodes_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -21228,7 +22499,8 @@ struct hwrm_vnic_rss_cos_lb_ctx_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -21287,7 +22559,8 @@ struct hwrm_vnic_rss_cos_lb_ctx_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -21347,7 +22620,8 @@ struct hwrm_ring_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -21687,7 +22961,8 @@ struct hwrm_ring_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -21764,7 +23039,8 @@ struct hwrm_ring_reset_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -21839,7 +23115,8 @@ struct hwrm_ring_aggint_qcaps_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -21988,7 +23265,8 @@ struct hwrm_ring_cmpl_ring_qaggint_params_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -22094,7 +23372,8 @@ struct hwrm_ring_cmpl_ring_cfg_aggint_params_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -22250,7 +23529,8 @@ struct hwrm_ring_grp_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -22334,7 +23614,8 @@ struct hwrm_ring_grp_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -22414,7 +23695,8 @@ struct hwrm_cfa_l2_filter_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -22476,6 +23758,22 @@ struct hwrm_cfa_l2_filter_alloc_input {
                (UINT32_C(0x2) << 4)
        #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_LAST \
                HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_ROCE
+       /*
+        * Setting of this flag indicates that no XDP filter is created with
+        * L2 filter.
+        * 0 - legacy behavior, XDP filter is created with L2 filter
+        * 1 - XDP filter won't be created with L2 filter
+        */
+       #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_XDP_DISABLE \
+               UINT32_C(0x40)
+       /*
+        * Setting this flag to 1 indicate the L2 fields in this command
+        * pertain to source fields.  Setting this flag to 0 indicate the
+        * L2 fields in this command pertain to the destination fields
+        * and this is the default/legacy behavior.
+        */
+       #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_SOURCE_VALID \
+               UINT32_C(0x80)
        uint32_t        enables;
        /*
         * This bit must be '1' for the l2_addr field to be
@@ -22579,13 +23877,31 @@ struct hwrm_cfa_l2_filter_alloc_input {
         */
        #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
                UINT32_C(0x10000)
+       /*
+        * This bit must be '1' for the num_vlans field to be
+        * configured.
+        */
+       #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_NUM_VLANS \
+               UINT32_C(0x20000)
+       /*
+        * This bit must be '1' for the t_num_vlans field to be
+        * configured.
+        */
+       #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_NUM_VLANS \
+               UINT32_C(0x40000)
        /*
         * This value sets the match value for the L2 MAC address.
         * Destination MAC address for RX path.
         * Source MAC address for TX path.
         */
        uint8_t l2_addr[6];
-       uint8_t unused_0[2];
+       /* This value sets the match value for the number of VLANs. */
+       uint8_t num_vlans;
+       /*
+        * This value sets the match value for the number of VLANs
+        * in the tunnel headers.
+        */
+       uint8_t t_num_vlans;
        /*
         * This value sets the mask value for the L2 address.
         * A value of 0 will mask the corresponding bit from
@@ -22784,13 +24100,45 @@ struct hwrm_cfa_l2_filter_alloc_output {
         */
        uint64_t        l2_filter_id;
        /*
-        * This is the ID of the flow associated with this
-        * filter.
-        * This value shall be used to match and associate the
-        * flow identifier returned in completion records.
-        * A value of 0xFFFFFFFF shall indicate no flow id.
+        * The flow id value in bit 0-29 is the actual ID of the flow
+        * associated with this filter and it shall be used to match
+        * and associate the flow identifier returned in completion
+        * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
+        * shall indicate no valid flow id.
         */
        uint32_t        flow_id;
+       /* Indicate the flow id value. */
+       #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
+               UINT32_C(0x3fffffff)
+       #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
+       /* Indicate type of the flow. */
+       #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE \
+               UINT32_C(0x40000000)
+       /*
+        * If this bit set to 0, then it indicates that the flow is
+        * internal flow.
+        */
+       #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
+               (UINT32_C(0x0) << 30)
+       /*
+        * If this bit is set to 1, then it indicates that the flow is
+        * external flow.
+        */
+       #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
+               (UINT32_C(0x1) << 30)
+       #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
+               HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
+       /* Indicate the flow direction. */
+       #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR \
+               UINT32_C(0x80000000)
+       /* If this bit set to 0, then it indicates rx flow. */
+       #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
+               (UINT32_C(0x0) << 31)
+       /* If this bit is set to 1, then it indicates that tx flow. */
+       #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
+               (UINT32_C(0x1) << 31)
+       #define HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
+               HWRM_CFA_L2_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX
        uint8_t unused_0[3];
        /*
         * This field is used in Output records to indicate that the output
@@ -22825,7 +24173,8 @@ struct hwrm_cfa_l2_filter_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -22887,7 +24236,8 @@ struct hwrm_cfa_l2_filter_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -23014,7 +24364,8 @@ struct hwrm_cfa_l2_set_rx_mask_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -23213,7 +24564,8 @@ struct hwrm_cfa_vlan_antispoof_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -23287,7 +24639,8 @@ struct hwrm_cfa_vlan_antispoof_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -23366,7 +24719,8 @@ struct hwrm_cfa_tunnel_filter_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -23602,13 +24956,45 @@ struct hwrm_cfa_tunnel_filter_alloc_output {
        /* This value is an opaque id into CFA data structures. */
        uint64_t        tunnel_filter_id;
        /*
-        * This is the ID of the flow associated with this
-        * filter.
-        * This value shall be used to match and associate the
-        * flow identifier returned in completion records.
-        * A value of 0xFFFFFFFF shall indicate no flow id.
+        * The flow id value in bit 0-29 is the actual ID of the flow
+        * associated with this filter and it shall be used to match
+        * and associate the flow identifier returned in completion
+        * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
+        * shall indicate no valid flow id.
         */
        uint32_t        flow_id;
+       /* Indicate the flow id value. */
+       #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
+               UINT32_C(0x3fffffff)
+       #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
+       /* Indicate type of the flow. */
+       #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE \
+               UINT32_C(0x40000000)
+       /*
+        * If this bit set to 0, then it indicates that the flow is
+        * internal flow.
+        */
+       #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
+               (UINT32_C(0x0) << 30)
+       /*
+        * If this bit is set to 1, then it indicates that the flow is
+        * external flow.
+        */
+       #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
+               (UINT32_C(0x1) << 30)
+       #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
+               HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
+       /* Indicate the flow direction. */
+       #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR \
+               UINT32_C(0x80000000)
+       /* If this bit set to 0, then it indicates rx flow. */
+       #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
+               (UINT32_C(0x0) << 31)
+       /* If this bit is set to 1, then it indicates that tx flow. */
+       #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
+               (UINT32_C(0x1) << 31)
+       #define HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
+               HWRM_CFA_TUNNEL_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX
        uint8_t unused_0[3];
        /*
         * This field is used in Output records to indicate that the output
@@ -23643,7 +25029,8 @@ struct hwrm_cfa_tunnel_filter_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -23702,7 +25089,8 @@ struct hwrm_cfa_redirect_tunnel_type_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -23813,7 +25201,8 @@ struct hwrm_cfa_redirect_tunnel_type_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -23919,7 +25308,8 @@ struct hwrm_cfa_redirect_tunnel_type_info_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -24134,7 +25524,8 @@ struct hwrm_cfa_encap_record_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -24247,7 +25638,8 @@ struct hwrm_cfa_encap_record_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -24289,7 +25681,7 @@ struct hwrm_cfa_encap_record_free_output {
  ********************************/
 
 
-/* hwrm_cfa_ntuple_filter_alloc_input (size:1024b/128B) */
+/* hwrm_cfa_ntuple_filter_alloc_input (size:1088b/136B) */
 struct hwrm_cfa_ntuple_filter_alloc_input {
        /* The HWRM command request type. */
        uint16_t        req_type;
@@ -24307,7 +25699,8 @@ struct hwrm_cfa_ntuple_filter_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -24456,6 +25849,12 @@ struct hwrm_cfa_ntuple_filter_alloc_input {
         */
        #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_MACADDR \
                UINT32_C(0x40000)
+       /*
+        * This bit must be '1' for the rfs_ring_tbl_idx field to be
+        * configured.
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_RFS_RING_TBL_IDX \
+               UINT32_C(0x80000)
        /*
         * This value identifies a set of CFA data structures used for an L2
         * context.
@@ -24638,7 +26037,14 @@ struct hwrm_cfa_ntuple_filter_alloc_input {
         * This is the ID of the filter that goes along with
         * the pri_hint.
         */
-       uint64_t        ntuple_filter_id_hint;
+       uint64_t        ntuple_filter_id_hint;
+       /*
+        * The value of rfs_ring_tbl_idx to be used for RFS for this filter.
+        * This index is used in lieu of the RSS hash when selecting the
+        * index into the RSS table to determine the rx ring.
+        */
+       uint16_t        rfs_ring_tbl_idx;
+       uint8_t unused_0[6];
 } __attribute__((packed));
 
 /* hwrm_cfa_ntuple_filter_alloc_output (size:192b/24B) */
@@ -24654,13 +26060,45 @@ struct hwrm_cfa_ntuple_filter_alloc_output {
        /* This value is an opaque id into CFA data structures. */
        uint64_t        ntuple_filter_id;
        /*
-        * This is the ID of the flow associated with this
-        * filter.
-        * This value shall be used to match and associate the
-        * flow identifier returned in completion records.
-        * A value of 0xFFFFFFFF shall indicate no flow id.
+        * The flow id value in bit 0-29 is the actual ID of the flow
+        * associated with this filter and it shall be used to match
+        * and associate the flow identifier returned in completion
+        * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
+        * shall indicate no valid flow id.
         */
        uint32_t        flow_id;
+       /* Indicate the flow id value. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
+               UINT32_C(0x3fffffff)
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
+       /* Indicate type of the flow. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE \
+               UINT32_C(0x40000000)
+       /*
+        * If this bit set to 0, then it indicates that the flow is
+        * internal flow.
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
+               (UINT32_C(0x0) << 30)
+       /*
+        * If this bit is set to 1, then it indicates that the flow is
+        * external flow.
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
+               (UINT32_C(0x1) << 30)
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
+               HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
+       /* Indicate the flow direction. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR \
+               UINT32_C(0x80000000)
+       /* If this bit set to 0, then it indicates rx flow. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
+               (UINT32_C(0x0) << 31)
+       /* If this bit is set to 1, then it indicates that tx flow. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
+               (UINT32_C(0x1) << 31)
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
+               HWRM_CFA_NTUPLE_FILTER_ALLOC_OUTPUT_FLOW_ID_DIR_TX
        uint8_t unused_0[3];
        /*
         * This field is used in Output records to indicate that the output
@@ -24713,7 +26151,8 @@ struct hwrm_cfa_ntuple_filter_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -24772,7 +26211,8 @@ struct hwrm_cfa_ntuple_filter_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -24884,7 +26324,8 @@ struct hwrm_cfa_em_flow_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -25216,13 +26657,45 @@ struct hwrm_cfa_em_flow_alloc_output {
        /* This value is an opaque id into CFA data structures. */
        uint64_t        em_filter_id;
        /*
-        * This is the ID of the flow associated with this
-        * filter.
-        * This value shall be used to match and associate the
-        * flow identifier returned in completion records.
-        * A value of 0xFFFFFFFF shall indicate no flow id.
+        * The flow id value in bit 0-29 is the actual ID of the flow
+        * associated with this filter and it shall be used to match
+        * and associate the flow identifier returned in completion
+        * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
+        * shall indicate no valid flow id.
         */
        uint32_t        flow_id;
+       /* Indicate the flow id value. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
+               UINT32_C(0x3fffffff)
+       #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
+       /* Indicate type of the flow. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE \
+               UINT32_C(0x40000000)
+       /*
+        * If this bit set to 0, then it indicates that the flow is
+        * internal flow.
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
+               (UINT32_C(0x0) << 30)
+       /*
+        * If this bit is set to 1, then it indicates that the flow is
+        * external flow.
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
+               (UINT32_C(0x1) << 30)
+       #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
+               HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
+       /* Indicate the flow direction. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR \
+               UINT32_C(0x80000000)
+       /* If this bit set to 0, then it indicates rx flow. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
+               (UINT32_C(0x0) << 31)
+       /* If this bit is set to 1, then it indicates that tx flow. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
+               (UINT32_C(0x1) << 31)
+       #define HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
+               HWRM_CFA_EM_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_TX
        uint8_t unused_0[3];
        /*
         * This field is used in Output records to indicate that the output
@@ -25257,7 +26730,8 @@ struct hwrm_cfa_em_flow_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -25316,7 +26790,8 @@ struct hwrm_cfa_meter_qcaps_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -25428,7 +26903,8 @@ struct hwrm_cfa_meter_profile_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -25705,7 +27181,8 @@ struct hwrm_cfa_meter_profile_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -25789,7 +27266,8 @@ struct hwrm_cfa_meter_profile_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -26059,7 +27537,8 @@ struct hwrm_cfa_meter_instance_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -26154,7 +27633,8 @@ struct hwrm_cfa_meter_instance_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -26246,7 +27726,8 @@ struct hwrm_cfa_meter_instance_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -26330,7 +27811,8 @@ struct hwrm_cfa_decap_filter_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -26654,7 +28136,8 @@ struct hwrm_cfa_decap_filter_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -26714,7 +28197,8 @@ struct hwrm_cfa_flow_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -26847,6 +28331,15 @@ struct hwrm_cfa_flow_alloc_input {
         */
        #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_PRI_HINT \
                UINT32_C(0x1000)
+       /*
+        * If set to 1 there will be no attempt to allocate an on-chip try to
+        * offload this flow. If set to 0, which will keep compatibility with the
+        * older drivers, will cause the FW to attempt to allocate an on-chip flow
+        * counter for the newly created flow.  This will keep the existing behavior
+        * with EM flows which always had an associated flow counter.
+        */
+       #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NO_FLOW_COUNTER_ALLOC \
+               UINT32_C(0x2000)
        /*
         * Tx Flow: pf or vf fid.
         * Rx Flow: vf fid.
@@ -26977,13 +28470,45 @@ struct hwrm_cfa_flow_alloc_output {
        uint16_t        flow_handle;
        uint8_t unused_0[2];
        /*
-        * This is the ID of the flow associated with this
-        * filter.
-        * This value shall be used to match and associate the
-        * flow identifier returned in completion records.
-        * A value of 0xFFFFFFFF shall indicate no flow id.
+        * The flow id value in bit 0-29 is the actual ID of the flow
+        * associated with this filter and it shall be used to match
+        * and associate the flow identifier returned in completion
+        * records. A value of 0xFFFFFFFF in the 32-bit flow_id field
+        * shall indicate no valid flow id.
         */
        uint32_t        flow_id;
+       /* Indicate the flow id value. */
+       #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_VALUE_MASK \
+               UINT32_C(0x3fffffff)
+       #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_VALUE_SFT 0
+       /* Indicate type of the flow. */
+       #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE \
+               UINT32_C(0x40000000)
+       /*
+        * If this bit set to 0, then it indicates that the flow is
+        * internal flow.
+        */
+       #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_INT \
+               (UINT32_C(0x0) << 30)
+       /*
+        * If this bit is set to 1, then it indicates that the flow is
+        * external flow.
+        */
+       #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT \
+               (UINT32_C(0x1) << 30)
+       #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_LAST \
+               HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_TYPE_EXT
+       /* Indicate the flow direction. */
+       #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR \
+               UINT32_C(0x80000000)
+       /* If this bit set to 0, then it indicates rx flow. */
+       #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_RX \
+               (UINT32_C(0x0) << 31)
+       /* If this bit is set to 1, then it indicates that tx flow. */
+       #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_TX \
+               (UINT32_C(0x1) << 31)
+       #define HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_LAST \
+               HWRM_CFA_FLOW_ALLOC_OUTPUT_FLOW_ID_DIR_TX
        /* This value identifies a set of CFA data structures used for a flow. */
        uint64_t        ext_flow_handle;
        uint32_t        flow_counter_id;
@@ -26998,6 +28523,34 @@ struct hwrm_cfa_flow_alloc_output {
        uint8_t valid;
 } __attribute__((packed));
 
+/* hwrm_cfa_flow_alloc_cmd_err (size:64b/8B) */
+struct hwrm_cfa_flow_alloc_cmd_err {
+       /*
+        * command specific error codes that goes to
+        * the cmd_err field in Common HWRM Error Response.
+        */
+       uint8_t code;
+       /* Unknown error */
+       #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_UNKNOWN         UINT32_C(0x0)
+       /* No more L2 Context TCAM */
+       #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_L2_CONTEXT_TCAM UINT32_C(0x1)
+       /* No more action records */
+       #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_ACTION_RECORD   UINT32_C(0x2)
+       /* No more flow counters */
+       #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_FLOW_COUNTER    UINT32_C(0x3)
+       /* No more wild-card TCAM */
+       #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_WILD_CARD_TCAM  UINT32_C(0x4)
+       /* Hash collsion in exact match tables */
+       #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_HASH_COLLISION  UINT32_C(0x5)
+       /* Key is already installed */
+       #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_KEY_EXISTS      UINT32_C(0x6)
+       /* Flow Context DB is out of resource */
+       #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_FLOW_CTXT_DB    UINT32_C(0x7)
+       #define HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_LAST \
+               HWRM_CFA_FLOW_ALLOC_CMD_ERR_CODE_FLOW_CTXT_DB
+       uint8_t unused_0[7];
+} __attribute__((packed));
+
 /**********************
  * hwrm_cfa_flow_free *
  **********************/
@@ -27021,7 +28574,8 @@ struct hwrm_cfa_flow_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -27034,7 +28588,9 @@ struct hwrm_cfa_flow_free_input {
        uint64_t        resp_addr;
        /* Flow record index. */
        uint16_t        flow_handle;
-       uint8_t unused_0[6];
+       uint16_t        unused_0;
+       /* Flow counter id to be freed. */
+       uint32_t        flow_counter_id;
        /* This value identifies a set of CFA data structures used for a flow. */
        uint64_t        ext_flow_handle;
 } __attribute__((packed));
@@ -27310,7 +28866,8 @@ struct hwrm_cfa_flow_info_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -27420,7 +28977,8 @@ struct hwrm_cfa_flow_flush_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -27448,6 +29006,15 @@ struct hwrm_cfa_flow_flush_input {
         */
        #define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_RESET_ALL \
                UINT32_C(0x2)
+       /*
+        * Set to 1 to indicate flow flush operation to cleanup all the flows by the caller.
+        * This flag is set to 0 by older driver. For older firmware, setting this flag has no effect.
+        */
+       #define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_RESET_PORT \
+               UINT32_C(0x4)
+       /* Set to 1 to indicate the flow counter IDs are included in the flow table. */
+       #define HWRM_CFA_FLOW_FLUSH_INPUT_FLAGS_FLOW_HANDLE_INCL_FC \
+               UINT32_C(0x8000000)
        /*
         * This specifies the size of flow handle entries provided by the driver
         * in the flow table specified below. Only two flow handle size enums are defined.
@@ -27544,7 +29111,8 @@ struct hwrm_cfa_flow_stats_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -27684,7 +29252,8 @@ struct hwrm_cfa_flow_aging_timer_reset_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -27733,7 +29302,7 @@ struct hwrm_cfa_flow_aging_timer_reset_output {
  ***************************/
 
 
-/* hwrm_cfa_flow_aging_cfg_input (size:256b/32B) */
+/* hwrm_cfa_flow_aging_cfg_input (size:384b/48B) */
 struct hwrm_cfa_flow_aging_cfg_input {
        /* The HWRM command request type. */
        uint16_t        req_type;
@@ -27751,7 +29320,8 @@ struct hwrm_cfa_flow_aging_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -27773,16 +29343,40 @@ struct hwrm_cfa_flow_aging_cfg_input {
        /* This bit must be '1' for the udp flow timer field to be configured */
        #define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_UDP_FLOW_TIMER \
                UINT32_C(0x4)
-       /* The direction for the flow aging configuration, 1 is rx path, 2 is tx path. */
+       /* This bit must be '1' for the eem dma interval field to be configured */
+       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_DMA_INTERVAL \
+               UINT32_C(0x8)
+       /* This bit must be '1' for the eem notice interval field to be configured */
+       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_NOTICE_INTERVAL \
+               UINT32_C(0x10)
+       /* This bit must be '1' for the eem context memory maximum entries field to be configured */
+       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_CTX_MAX_ENTRIES \
+               UINT32_C(0x20)
+       /* This bit must be '1' for the eem context memory ID field to be configured */
+       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_CTX_ID \
+               UINT32_C(0x40)
+       /* This bit must be '1' for the eem context memory type field to be configured */
+       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_ENABLES_EEM_CTX_MEM_TYPE \
+               UINT32_C(0x80)
        uint8_t flags;
        /* Enumeration denoting the RX, TX type of the resource. */
-       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH     UINT32_C(0x1)
+       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH       UINT32_C(0x1)
        /* tx path */
-       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)
+       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH_TX      UINT32_C(0x0)
        /* rx path */
-       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)
+       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH_RX      UINT32_C(0x1)
        #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH_LAST \
                HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_PATH_RX
+       /* Enumeration denoting the enable, disable eem flow aging configuration. */
+       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM        UINT32_C(0x2)
+       /* tx path */
+       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM_DISABLE \
+               (UINT32_C(0x0) << 1)
+       /* rx path */
+       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM_ENABLE \
+               (UINT32_C(0x1) << 1)
+       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM_LAST \
+               HWRM_CFA_FLOW_AGING_CFG_INPUT_FLAGS_EEM_ENABLE
        uint8_t unused_0;
        /* The flow aging timer for all TCP flows, the unit is 100 milliseconds. */
        uint32_t        tcp_flow_timer;
@@ -27790,6 +29384,21 @@ struct hwrm_cfa_flow_aging_cfg_input {
        uint32_t        tcp_fin_timer;
        /* The flow aging timer for all UDP flows, the unit is 100 milliseconds. */
        uint32_t        udp_flow_timer;
+       /* The interval to dma eem ejection data to host memory, the unit is milliseconds. */
+       uint16_t        eem_dma_interval;
+       /* The interval to notify driver to read the eem ejection data, the unit is milliseconds. */
+       uint16_t        eem_notice_interval;
+       /* The maximum entries number in the eem context memory. */
+       uint32_t        eem_ctx_max_entries;
+       /* The context memory ID for eem flow aging. */
+       uint16_t        eem_ctx_id;
+       uint16_t        eem_ctx_mem_type;
+       /* The content of context memory is eem ejection data, the size of each entry is 4 bytes. */
+       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_EEM_CTX_MEM_TYPE_EJECTION_DATA \
+               UINT32_C(0x0)
+       #define HWRM_CFA_FLOW_AGING_CFG_INPUT_EEM_CTX_MEM_TYPE_LAST \
+               HWRM_CFA_FLOW_AGING_CFG_INPUT_EEM_CTX_MEM_TYPE_EJECTION_DATA
+       uint8_t unused_1[4];
 } __attribute__((packed));
 
 /* hwrm_cfa_flow_aging_cfg_output (size:128b/16B) */
@@ -27836,7 +29445,8 @@ struct hwrm_cfa_flow_aging_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -27860,7 +29470,7 @@ struct hwrm_cfa_flow_aging_qcfg_input {
        uint8_t unused_0[7];
 } __attribute__((packed));
 
-/* hwrm_cfa_flow_aging_qcfg_output (size:192b/24B) */
+/* hwrm_cfa_flow_aging_qcfg_output (size:320b/40B) */
 struct hwrm_cfa_flow_aging_qcfg_output {
        /* The specific error status for the command. */
        uint16_t        error_code;
@@ -27876,7 +29486,17 @@ struct hwrm_cfa_flow_aging_qcfg_output {
        uint32_t        tcp_fin_timer;
        /* The current flow aging timer for all UDP flows, the unit is 100 millisecond. */
        uint32_t        udp_flow_timer;
-       uint8_t unused_0[3];
+       /* The interval to dma eem ejection data to host memory, the unit is milliseconds. */
+       uint16_t        eem_dma_interval;
+       /* The interval to notify driver to read the eem ejection data, the unit is milliseconds. */
+       uint16_t        eem_notice_interval;
+       /* The maximum entries number in the eem context memory. */
+       uint32_t        eem_ctx_max_entries;
+       /* The context memory ID for eem flow aging. */
+       uint16_t        eem_ctx_id;
+       /* The context memory type for eem flow aging. */
+       uint16_t        eem_ctx_mem_type;
+       uint8_t unused_0[7];
        /*
         * This field is used in Output records to indicate that the output
         * is completely written to RAM.  This field should be read as '1'
@@ -27910,7 +29530,8 @@ struct hwrm_cfa_flow_aging_qcaps_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -27986,7 +29607,8 @@ struct hwrm_cfa_tcp_flag_process_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -28051,7 +29673,8 @@ struct hwrm_cfa_pair_info_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -28171,7 +29794,8 @@ struct hwrm_cfa_redirect_query_tunnel_type_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -28275,7 +29899,8 @@ struct hwrm_cfa_ctx_mem_rgtr_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -28371,7 +29996,8 @@ struct hwrm_cfa_ctx_mem_unrgtr_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -28434,7 +30060,8 @@ struct hwrm_cfa_ctx_mem_qctx_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -28531,7 +30158,8 @@ struct hwrm_cfa_ctx_mem_qcaps_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -28556,7 +30184,15 @@ struct hwrm_cfa_ctx_mem_qcaps_output {
        uint16_t        resp_len;
        /* Indicates the maximum number of context memory which can be registered. */
        uint16_t        max_entries;
-       uint8_t unused_0[6];
+       uint8_t unused_0[5];
+       /*
+        * This field is used in Output records to indicate that the output
+        * is completely written to RAM.  This field should be read as '1'
+        * to indicate that the output has been completely written.
+        * When writing a command completion or response to an internal processor,
+        * the order of writes has to be such that this field is written last.
+        */
+       uint8_t valid;
 } __attribute__((packed));
 
 /**********************
@@ -28582,7 +30218,8 @@ struct hwrm_cfa_eem_qcaps_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -28614,7 +30251,7 @@ struct hwrm_cfa_eem_qcaps_input {
        uint32_t        unused_0;
 } __attribute__((packed));
 
-/* hwrm_cfa_eem_qcaps_output (size:256b/32B) */
+/* hwrm_cfa_eem_qcaps_output (size:320b/40B) */
 struct hwrm_cfa_eem_qcaps_output {
        /* The specific error status for the command. */
        uint16_t        error_code;
@@ -28630,40 +30267,64 @@ struct hwrm_cfa_eem_qcaps_output {
         * which are to be offloaded.
         * Note if this bit is set then the path_rx bit can't be set.
         */
-       #define HWRM_CFA_EEM_QCAPS_OUTPUT_FLAGS_PATH_TX     UINT32_C(0x1)
+       #define HWRM_CFA_EEM_QCAPS_OUTPUT_FLAGS_PATH_TX \
+               UINT32_C(0x1)
        /*
         * When set to 1, indicates the configuration will apply to RX flows
         * which are to be offloaded.
         * Note if this bit is set then the path_tx bit can't be set.
         */
-       #define HWRM_CFA_EEM_QCAPS_OUTPUT_FLAGS_PATH_RX     UINT32_C(0x2)
+       #define HWRM_CFA_EEM_QCAPS_OUTPUT_FLAGS_PATH_RX \
+               UINT32_C(0x2)
+       /*
+        * When set to 1, indicates the the FW supports the Centralized
+        * Memory Model.  The concept designates one entity for the
+        * memory allocation while all others ‘subscribe’ to it.
+        */
+       #define HWRM_CFA_EEM_QCAPS_OUTPUT_FLAGS_CENTRALIZED_MEMORY_MODEL_SUPPORTED \
+               UINT32_C(0x4)
+       /*
+        * When set to 1, indicates the the FW supports the Detached
+        * Centralized Memory Model.  The memory is allocated and managed
+        * as a separate entity.  All PFs and VFs will be granted direct
+        * or semi-direct access to the allocated memory while none of
+        * which can interfere with the management of the memory.
+        */
+       #define HWRM_CFA_EEM_QCAPS_OUTPUT_FLAGS_DETACHED_CENTRALIZED_MEMORY_MODEL_SUPPORTED \
+               UINT32_C(0x8)
        uint32_t        unused_0;
        uint32_t        supported;
        /*
         * If set to 1, then EEM KEY0 table is supported using crc32 hash.
-        * If set to 0 EEM KEY0 table is not supported.
+        * If set to 0, EEM KEY0 table is not supported.
         */
        #define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_KEY0_TABLE \
                UINT32_C(0x1)
        /*
         * If set to 1, then EEM KEY1 table is supported using lookup3 hash.
-        * If set to 0 EEM KEY1 table is not supported.
+        * If set to 0, EEM KEY1 table is not supported.
         */
        #define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_KEY1_TABLE \
                UINT32_C(0x2)
        /*
         * If set to 1, then EEM External Record table is supported.
-        * If set to 0 EEM External Record table is not supported.
+        * If set to 0, EEM External Record table is not supported.
         * (This table includes action record, EFC pointers, encap pointers)
         */
        #define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_EXTERNAL_RECORD_TABLE \
                UINT32_C(0x4)
        /*
         * If set to 1, then EEM External Flow Counters table is supported.
-        * If set to 0 EEM External Flow Counters table is not supported.
+        * If set to 0, EEM External Flow Counters table is not supported.
         */
        #define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_EXTERNAL_FLOW_COUNTERS_TABLE \
                UINT32_C(0x8)
+       /*
+        * If set to 1, then FID table used for implicit flow flush is supported.
+        * If set to 0, then FID table used for implicit flow flush is not supported.
+        */
+       #define HWRM_CFA_EEM_QCAPS_OUTPUT_SUPPORTED_FID_TABLE \
+               UINT32_C(0x10)
        /*
         * The maximum number of entries supported by EEM.   When configuring the host memory
         * the number of numbers of entries that can supported are -
@@ -28672,13 +30333,15 @@ struct hwrm_cfa_eem_qcaps_output {
         * number of entries.
         */
        uint32_t        max_entries_supported;
-       /* The entry size in bytes of each entry in the KEY0/KEY1 EEM tables. */
+       /* The entry size in bytes of each entry in the EEM KEY0/KEY1 tables. */
        uint16_t        key_entry_size;
-       /* The entry size in bytes of each entry in the RECORD EEM tables. */
+       /* The entry size in bytes of each entry in the EEM RECORD tables. */
        uint16_t        record_entry_size;
-       /* The entry size in bytes of each entry in the EFC EEM tables. */
+       /* The entry size in bytes of each entry in the EEM EFC tables. */
        uint16_t        efc_entry_size;
-       uint8_t unused_1;
+       /* The FID size in bytes of each entry in the EEM FID tables. */
+       uint16_t        fid_entry_size;
+       uint8_t unused_1[7];
        /*
         * This field is used in Output records to indicate that the output
         * is completely written to RAM.  This field should be read as '1'
@@ -28694,7 +30357,7 @@ struct hwrm_cfa_eem_qcaps_output {
  ********************/
 
 
-/* hwrm_cfa_eem_cfg_input (size:320b/40B) */
+/* hwrm_cfa_eem_cfg_input (size:384b/48B) */
 struct hwrm_cfa_eem_cfg_input {
        /* The HWRM command request type. */
        uint16_t        req_type;
@@ -28712,7 +30375,8 @@ struct hwrm_cfa_eem_cfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -28741,7 +30405,15 @@ struct hwrm_cfa_eem_cfg_input {
        /* When set to 1, all offloaded flows will be sent to EEM. */
        #define HWRM_CFA_EEM_CFG_INPUT_FLAGS_PREFERRED_OFFLOAD \
                UINT32_C(0x4)
-       uint32_t        unused_0;
+       /* When set to 1, secondary, 0 means primary. */
+       #define HWRM_CFA_EEM_CFG_INPUT_FLAGS_SECONDARY_PF \
+               UINT32_C(0x8)
+       /*
+        * Group_id which used by Firmware to identify memory pools belonging
+        * to certain group.
+        */
+       uint16_t        group_id;
+       uint16_t        unused_0;
        /*
         * Configured EEM with the given number of entries.  All the EEM tables KEY0, KEY1,
         * RECORD, EFC all have the same number of entries and all tables will be configured
@@ -28757,6 +30429,10 @@ struct hwrm_cfa_eem_cfg_input {
        uint16_t        record_ctx_id;
        /* Configured EEM with the given context if for EFC table. */
        uint16_t        efc_ctx_id;
+       /* Configured EEM with the given context if for EFC table. */
+       uint16_t        fid_ctx_id;
+       uint16_t        unused_2;
+       uint32_t        unused_3;
 } __attribute__((packed));
 
 /* hwrm_cfa_eem_cfg_output (size:128b/16B) */
@@ -28803,7 +30479,8 @@ struct hwrm_cfa_eem_qcfg_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -28822,7 +30499,7 @@ struct hwrm_cfa_eem_qcfg_input {
        uint32_t        unused_0;
 } __attribute__((packed));
 
-/* hwrm_cfa_eem_qcfg_output (size:192b/24B) */
+/* hwrm_cfa_eem_qcfg_output (size:256b/32B) */
 struct hwrm_cfa_eem_qcfg_output {
        /* The specific error status for the command. */
        uint16_t        error_code;
@@ -28844,7 +30521,17 @@ struct hwrm_cfa_eem_qcfg_output {
                UINT32_C(0x4)
        /* The number of entries the FW has configured for EEM. */
        uint32_t        num_entries;
-       uint8_t unused_0[7];
+       /* Configured EEM with the given context if for KEY0 table. */
+       uint16_t        key0_ctx_id;
+       /* Configured EEM with the given context if for KEY1 table. */
+       uint16_t        key1_ctx_id;
+       /* Configured EEM with the given context if for RECORD table. */
+       uint16_t        record_ctx_id;
+       /* Configured EEM with the given context if for EFC table. */
+       uint16_t        efc_ctx_id;
+       /* Configured EEM with the given context if for EFC table. */
+       uint16_t        fid_ctx_id;
+       uint8_t unused_2[5];
        /*
         * This field is used in Output records to indicate that the output
         * is completely written to RAM.  This field should be read as '1'
@@ -28878,7 +30565,8 @@ struct hwrm_cfa_eem_op_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -28974,7 +30662,150 @@ struct hwrm_cfa_adv_flow_mgnt_qcaps_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
+        * * 0xFFFF - HWRM
+        */
+       uint16_t        target_id;
+       /*
+        * A physical address pointer pointing to a host buffer that the
+        * command's response data will be written. This can be either a host
+        * physical address (HPA) or a guest physical address (GPA) and must
+        * point to a physically contiguous block of memory.
+        */
+       uint64_t        resp_addr;
+       uint32_t        unused_0[4];
+} __attribute__((packed));
+
+/* hwrm_cfa_adv_flow_mgnt_qcaps_output (size:128b/16B) */
+struct hwrm_cfa_adv_flow_mgnt_qcaps_output {
+       /* The specific error status for the command. */
+       uint16_t        error_code;
+       /* The HWRM command request type. */
+       uint16_t        req_type;
+       /* The sequence ID from the original command. */
+       uint16_t        seq_id;
+       /* The length of the response data in number of bytes. */
+       uint16_t        resp_len;
+       uint32_t        flags;
+       /*
+        * Value of 1 to indicate firmware support 16-bit flow handle.
+        * Value of 0 to indicate firmware not support 16-bit flow handle.
+        */
+       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_HND_16BIT_SUPPORTED \
+               UINT32_C(0x1)
+       /*
+        * Value of 1 to indicate firmware support 64-bit flow handle.
+        * Value of 0 to indicate firmware not support 64-bit flow handle.
+        */
+       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_HND_64BIT_SUPPORTED \
+               UINT32_C(0x2)
+       /*
+        * Value of 1 to indicate firmware support flow batch delete operation through
+        * HWRM_CFA_FLOW_FLUSH command.
+        * Value of 0 to indicate that the firmware does not support flow batch delete
+        * operation.
+        */
+       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_BATCH_DELETE_SUPPORTED \
+               UINT32_C(0x4)
+       /*
+        * Value of 1 to indicate that the firmware support flow reset all operation through
+        * HWRM_CFA_FLOW_FLUSH command.
+        * Value of 0 indicates firmware does not support flow reset all operation.
+        */
+       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_RESET_ALL_SUPPORTED \
+               UINT32_C(0x8)
+       /*
+        * Value of 1 to indicate that firmware supports use of FID as dest_id in
+        * HWRM_CFA_NTUPLE_ALLOC/CFG commands.
+        * Value of 0 indicates firmware does not support use of FID as dest_id.
+        */
+       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_NTUPLE_FLOW_DEST_FUNC_SUPPORTED \
+               UINT32_C(0x10)
+       /*
+        * Value of 1 to indicate that firmware supports TX EEM flows.
+        * Value of 0 indicates firmware does not support TX EEM flows.
+        */
+       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_TX_EEM_FLOW_SUPPORTED \
+               UINT32_C(0x20)
+       /*
+        * Value of 1 to indicate that firmware supports RX EEM flows.
+        * Value of 0 indicates firmware does not support RX EEM flows.
+        */
+       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_RX_EEM_FLOW_SUPPORTED \
+               UINT32_C(0x40)
+       /*
+        * Value of 1 to indicate that firmware supports the dynamic allocation of an
+        * on-chip flow counter which can be used for EEM flows.
+        * Value of 0 indicates firmware does not support the dynamic allocation of an
+        * on-chip flow counter.
+        */
+       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_COUNTER_ALLOC_SUPPORTED \
+               UINT32_C(0x80)
+       /*
+        * Value of 1 to indicate that firmware supports setting of
+        * rfs_ring_tbl_idx in HWRM_CFA_NTUPLE_ALLOC command.
+        * Value of 0 indicates firmware does not support rfs_ring_tbl_idx.
+        */
+       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_RFS_RING_TBL_IDX_SUPPORTED \
+               UINT32_C(0x100)
+       /*
+        * Value of 1 to indicate that firmware supports untagged matching
+        * criteria on HWRM_CFA_L2_FILTER_ALLOC command. Value of 0
+        * indicates firmware does not support untagged matching.
+        */
+       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_UNTAGGED_VLAN_SUPPORTED \
+               UINT32_C(0x200)
+       /*
+        * Value of 1 to indicate that firmware supports XDP filter. Value
+        * of 0 indicates firmware does not support XDP filter.
+        */
+       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_XDP_SUPPORTED \
+               UINT32_C(0x400)
+       /*
+        * Value of 1 to indicate that the firmware support L2 header source
+        * fields matching criteria on HWRM_CFA_L2_FILTER_ALLOC command.
+        * Value of 0 indicates firmware does not support L2 header source
+        * fields matching.
+        */
+       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_L2_HEADER_SOURCE_FIELDS_SUPPORTED \
+               UINT32_C(0x800)
+       uint8_t unused_0[3];
+       /*
+        * This field is used in Output records to indicate that the output
+        * is completely written to RAM.  This field should be read as '1'
+        * to indicate that the output has been completely written.
+        * When writing a command completion or response to an internal processor,
+        * the order of writes has to be such that this field is written last.
+        */
+       uint8_t valid;
+} __attribute__((packed));
+
+/******************
+ * hwrm_cfa_tflib *
+ ******************/
+
+
+/* hwrm_cfa_tflib_input (size:1024b/128B) */
+struct hwrm_cfa_tflib_input {
+       /* The HWRM command request type. */
+       uint16_t        req_type;
+       /*
+        * The completion ring to send the completion event on. This should
+        * be the NQ ID returned from the `nq_alloc` HWRM command.
+        */
+       uint16_t        cmpl_ring;
+       /*
+        * The sequence ID is used by the driver for tracking multiple
+        * commands. This ID is treated as opaque data by the firmware and
+        * the value is returned in the `hwrm_resp_hdr` upon completion.
+        */
+       uint16_t        seq_id;
+       /*
+        * The target ID of the command:
+        * * 0x0-0xFFF8 - The function ID
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -28985,11 +30816,18 @@ struct hwrm_cfa_adv_flow_mgnt_qcaps_input {
         * point to a physically contiguous block of memory.
         */
        uint64_t        resp_addr;
-       uint32_t        unused_0[4];
-} __attribute__((packed));
-
-/* hwrm_cfa_adv_flow_mgnt_qcaps_output (size:128b/16B) */
-struct hwrm_cfa_adv_flow_mgnt_qcaps_output {
+       /* TFLIB message type. */
+       uint16_t        tf_type;
+       /* TFLIB message subtype. */
+       uint16_t        tf_subtype;
+       /* unused. */
+       uint8_t unused0[4];
+       /* TFLIB request data. */
+       uint32_t        tf_req[26];
+} __attribute__((packed));
+
+/* hwrm_cfa_tflib_output (size:5632b/704B) */
+struct hwrm_cfa_tflib_output {
        /* The specific error status for the command. */
        uint16_t        error_code;
        /* The HWRM command request type. */
@@ -28998,54 +30836,16 @@ struct hwrm_cfa_adv_flow_mgnt_qcaps_output {
        uint16_t        seq_id;
        /* The length of the response data in number of bytes. */
        uint16_t        resp_len;
-       uint32_t        flags;
-       /*
-        * Value of 1 to indicate firmware support 16-bit flow handle.
-        * Value of 0 to indicate firmware not support 16-bit flow handle.
-        */
-       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_HND_16BIT_SUPPORTED \
-               UINT32_C(0x1)
-       /*
-        * Value of 1 to indicate firmware support 64-bit flow handle.
-        * Value of 0 to indicate firmware not support 64-bit flow handle.
-        */
-       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_HND_64BIT_SUPPORTED \
-               UINT32_C(0x2)
-       /*
-        * Value of 1 to indicate firmware support flow batch delete operation through
-        * HWRM_CFA_FLOW_FLUSH command.
-        * Value of 0 to indicate that the firmware does not support flow batch delete
-        * operation.
-        */
-       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_BATCH_DELETE_SUPPORTED \
-               UINT32_C(0x4)
-       /*
-        * Value of 1 to indicate that the firmware support flow reset all operation through
-        * HWRM_CFA_FLOW_FLUSH command.
-        * Value of 0 indicates firmware does not support flow reset all operation.
-        */
-       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_FLOW_RESET_ALL_SUPPORTED \
-               UINT32_C(0x8)
-       /*
-        * Value of 1 to indicate that firmware supports use of FID as dest_id in
-        * HWRM_CFA_NTUPLE_ALLOC/CFG commands.
-        * Value of 0 indicates firmware does not support use of FID as dest_id.
-        */
-       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_NTUPLE_FLOW_DEST_FUNC_SUPPORTED \
-               UINT32_C(0x10)
-       /*
-        * Value of 1 to indicate that firmware supports TX EEM flows.
-        * Value of 0 indicates firmware does not support TX EEM flows.
-        */
-       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_TX_EEM_FLOW_SUPPORTED \
-               UINT32_C(0x20)
-       /*
-        * Value of 1 to indicate that firmware supports RX EEM flows.
-        * Value of 0 indicates firmware does not support RX EEM flows.
-        */
-       #define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_RX_EEM_FLOW_SUPPORTED \
-               UINT32_C(0x40)
-       uint8_t unused_0[3];
+       /* TFLIB message type. */
+       uint16_t        tf_type;
+       /* TFLIB message subtype. */
+       uint16_t        tf_subtype;
+       /* TFLIB response code */
+       uint32_t        tf_resp_code;
+       /* TFLIB response data. */
+       uint32_t        tf_resp[170];
+       /* unused. */
+       uint8_t unused1[7];
        /*
         * This field is used in Output records to indicate that the output
         * is completely written to RAM.  This field should be read as '1'
@@ -29079,7 +30879,8 @@ struct hwrm_tunnel_dst_port_query_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -29177,7 +30978,8 @@ struct hwrm_tunnel_dst_port_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -29274,7 +31076,8 @@ struct hwrm_tunnel_dst_port_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -29382,6 +31185,53 @@ struct ctx_hw_stats {
        uint64_t        tpa_aborts;
 } __attribute__((packed));
 
+/* Periodic statistics context DMA to host. */
+/* ctx_hw_stats_ext (size:1344b/168B) */
+struct ctx_hw_stats_ext {
+       /* Number of received unicast packets */
+       uint64_t        rx_ucast_pkts;
+       /* Number of received multicast packets */
+       uint64_t        rx_mcast_pkts;
+       /* Number of received broadcast packets */
+       uint64_t        rx_bcast_pkts;
+       /* Number of discarded packets on received path */
+       uint64_t        rx_discard_pkts;
+       /* Number of dropped packets on received path */
+       uint64_t        rx_drop_pkts;
+       /* Number of received bytes for unicast traffic */
+       uint64_t        rx_ucast_bytes;
+       /* Number of received bytes for multicast traffic */
+       uint64_t        rx_mcast_bytes;
+       /* Number of received bytes for broadcast traffic */
+       uint64_t        rx_bcast_bytes;
+       /* Number of transmitted unicast packets */
+       uint64_t        tx_ucast_pkts;
+       /* Number of transmitted multicast packets */
+       uint64_t        tx_mcast_pkts;
+       /* Number of transmitted broadcast packets */
+       uint64_t        tx_bcast_pkts;
+       /* Number of discarded packets on transmit path */
+       uint64_t        tx_discard_pkts;
+       /* Number of dropped packets on transmit path */
+       uint64_t        tx_drop_pkts;
+       /* Number of transmitted bytes for unicast traffic */
+       uint64_t        tx_ucast_bytes;
+       /* Number of transmitted bytes for multicast traffic */
+       uint64_t        tx_mcast_bytes;
+       /* Number of transmitted bytes for broadcast traffic */
+       uint64_t        tx_bcast_bytes;
+       /* Number of TPA eligible packets */
+       uint64_t        rx_tpa_eligible_pkt;
+       /* Number of TPA eligible bytes */
+       uint64_t        rx_tpa_eligible_bytes;
+       /* Number of TPA packets */
+       uint64_t        rx_tpa_pkt;
+       /* Number of TPA bytes */
+       uint64_t        rx_tpa_bytes;
+       /* Number of TPA errors */
+       uint64_t        rx_tpa_errors;
+} __attribute__((packed));
+
 /* Periodic Engine statistics context DMA to host. */
 /* ctx_eng_stats (size:512b/64B) */
 struct ctx_eng_stats {
@@ -29451,7 +31301,8 @@ struct hwrm_stat_ctx_alloc_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -29475,6 +31326,11 @@ struct hwrm_stat_ctx_alloc_input {
         * shall be never done and the DMA address shall not be used.
         * In this case, the stat block can only be read by
         * hwrm_stat_ctx_query command.
+        * On Ethernet/L2 based devices:
+        *   if tpa v2 supported (hwrm_vnic_qcaps[max_aggs_supported]>0),
+        *       ctx_hw_stats_ext is used for DMA,
+        *   else
+        *       ctx_hw_stats is used for DMA.
         */
        uint32_t        update_period_ms;
        /*
@@ -29491,7 +31347,13 @@ struct hwrm_stat_ctx_alloc_input {
         * used for network traffic or engine traffic.
         */
        #define HWRM_STAT_CTX_ALLOC_INPUT_STAT_CTX_FLAGS_ROCE     UINT32_C(0x1)
-       uint8_t unused_0[3];
+       uint8_t unused_0;
+       /*
+        * This is the size of the structure (ctx_hw_stats or
+        * ctx_hw_stats_ext) that the driver has allocated to be used
+        * for the periodic DMA updates.
+        */
+       uint16_t        stats_dma_length;
 } __attribute__((packed));
 
 /* hwrm_stat_ctx_alloc_output (size:128b/16B) */
@@ -29540,7 +31402,8 @@ struct hwrm_stat_ctx_free_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -29602,7 +31465,8 @@ struct hwrm_stat_ctx_query_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -29702,7 +31566,8 @@ struct hwrm_stat_ctx_eng_query_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -29803,7 +31668,8 @@ struct hwrm_stat_ctx_clr_stats_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -29863,7 +31729,8 @@ struct hwrm_pcie_qstats_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -29970,7 +31837,8 @@ struct hwrm_exec_fwd_resp_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -30043,7 +31911,8 @@ struct hwrm_reject_fwd_resp_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -30116,7 +31985,8 @@ struct hwrm_fwd_resp_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -30204,7 +32074,8 @@ struct hwrm_fwd_async_event_cmpl_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -30273,7 +32144,8 @@ struct hwrm_nvm_raw_write_blk_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -30342,7 +32214,8 @@ struct hwrm_nvm_read_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -30412,7 +32285,8 @@ struct hwrm_nvm_raw_dump_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -30478,7 +32352,8 @@ struct hwrm_nvm_get_dir_entries_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -30540,7 +32415,8 @@ struct hwrm_nvm_get_dir_info_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -30601,7 +32477,8 @@ struct hwrm_nvm_write_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -30722,7 +32599,8 @@ struct hwrm_nvm_modify_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -30795,7 +32673,8 @@ struct hwrm_nvm_find_dir_entry_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -30897,7 +32776,8 @@ struct hwrm_nvm_erase_dir_entry_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -30957,7 +32837,8 @@ struct hwrm_nvm_get_dev_info_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -30991,7 +32872,12 @@ struct hwrm_nvm_get_dev_info_output {
        uint32_t        reserved_size;
        /* Available size that can be used, in bytes.  Available size is the NVRAM size take away the used size and reserved size. */
        uint32_t        available_size;
-       uint8_t unused_0[3];
+       /* This field represents the major version of NVM cfg */
+       uint8_t nvm_cfg_ver_maj;
+       /* This field represents the minor version of NVM cfg */
+       uint8_t nvm_cfg_ver_min;
+       /* This field represents the update version of NVM cfg */
+       uint8_t nvm_cfg_ver_upd;
        /*
         * This field is used in Output records to indicate that the output
         * is completely written to RAM.  This field should be read as '1'
@@ -31025,7 +32911,8 @@ struct hwrm_nvm_mod_dir_entry_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -31104,7 +32991,8 @@ struct hwrm_nvm_verify_update_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -31177,7 +33065,8 @@ struct hwrm_nvm_install_update_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -31340,7 +33229,8 @@ struct hwrm_nvm_flush_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -31413,7 +33303,8 @@ struct hwrm_nvm_get_variable_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -31548,7 +33439,8 @@ struct hwrm_nvm_set_variable_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -31613,6 +33505,12 @@ struct hwrm_nvm_set_variable_input {
                (UINT32_C(0x3) << 1)
        #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_LAST \
                HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_HMAC_SHA1_AUTH
+       #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_FLAGS_UNUSED_0_MASK \
+               UINT32_C(0x70)
+       #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_FLAGS_UNUSED_0_SFT         4
+       /* When this bit is 1, update the factory default region */
+       #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_FACTORY_DEFAULT \
+               UINT32_C(0x80)
        uint8_t unused_0;
 } __attribute__((packed));
 
@@ -31678,7 +33576,8 @@ struct hwrm_nvm_validate_option_input {
        /*
         * The target ID of the command:
         * * 0x0-0xFFF8 - The function ID
-        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
         * * 0xFFFF - HWRM
         */
        uint16_t        target_id;
@@ -31767,4 +33666,227 @@ struct hwrm_nvm_validate_option_cmd_err {
        uint8_t unused_0[7];
 } __attribute__((packed));
 
+/*****************
+ * hwrm_fw_reset *
+ ******************/
+
+
+/* hwrm_fw_reset_input (size:192b/24B) */
+struct hwrm_fw_reset_input {
+       /* The HWRM command request type. */
+       uint16_t        req_type;
+       /*
+        * The completion ring to send the completion event on. This should
+        * be the NQ ID returned from the `nq_alloc` HWRM command.
+        */
+       uint16_t        cmpl_ring;
+       /*
+        * The sequence ID is used by the driver for tracking multiple
+        * commands. This ID is treated as opaque data by the firmware and
+        * the value is returned in the `hwrm_resp_hdr` upon completion.
+        */
+       uint16_t        seq_id;
+       /*
+        * The target ID of the command:
+        * * 0x0-0xFFF8 - The function ID
+        * * 0xFFF8-0xFFFE - Reserved for internal processors
+        * * 0xFFFF - HWRM
+        */
+       uint16_t        target_id;
+       /*
+        * A physical address pointer pointing to a host buffer that the
+        * command's response data will be written. This can be either a host
+        * physical address (HPA) or a guest physical address (GPA) and must
+        * point to a physically contiguous block of memory.
+        */
+       uint64_t        resp_addr;
+       /* Type of embedded processor. */
+       uint8_t embedded_proc_type;
+       /* Boot Processor */
+       #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_BOOT \
+               UINT32_C(0x0)
+       /* Management Processor */
+       #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_MGMT \
+               UINT32_C(0x1)
+       /* Network control processor */
+       #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_NETCTRL \
+               UINT32_C(0x2)
+       /* RoCE control processor */
+       #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_ROCE \
+               UINT32_C(0x3)
+       /*
+        * Host (in multi-host environment): This is only valid if requester is IPC.
+        * Reinit host hardware resources and PCIe.
+        */
+       #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_HOST \
+               UINT32_C(0x4)
+       /* AP processor complex (in multi-host environment). Use host_idx to control which core is reset */
+       #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_AP \
+               UINT32_C(0x5)
+       /* Reset all blocks of the chip (including all processors) */
+       #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_CHIP \
+               UINT32_C(0x6)
+       /*
+        * Host (in multi-host environment): This is only valid if requester is IPC.
+        * Reinit host hardware resources.
+        */
+       #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_HOST_RESOURCE_REINIT \
+               UINT32_C(0x7)
+       #define HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_LAST \
+               HWRM_FW_RESET_INPUT_EMBEDDED_PROC_TYPE_HOST_RESOURCE_REINIT
+       /* Type of self reset. */
+       uint8_t selfrst_status;
+       /* No Self Reset */
+       #define HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTNONE \
+               UINT32_C(0x0)
+       /* Self Reset as soon as possible to do so safely */
+       #define HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTASAP \
+               UINT32_C(0x1)
+       /* Self Reset on PCIe Reset */
+       #define HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTPCIERST \
+               UINT32_C(0x2)
+       /* Self Reset immediately after notification to all clients. */
+       #define HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTIMMEDIATE \
+               UINT32_C(0x3)
+       #define HWRM_FW_RESET_INPUT_SELFRST_STATUS_LAST \
+               HWRM_FW_RESET_INPUT_SELFRST_STATUS_SELFRSTIMMEDIATE
+       /*
+        * Indicate which host is being reset. 0 means first host.
+        * Only valid when embedded_proc_type is host in multihost
+        * environment
+        */
+       uint8_t host_idx;
+       uint8_t flags;
+       /*
+        * When this bit is '1', then the core firmware initiates
+        * the reset only after graceful shut down of all registered instances.
+        * If not, the device will continue with the existing firmware.
+        */
+       #define HWRM_FW_RESET_INPUT_FLAGS_RESET_GRACEFUL     UINT32_C(0x1)
+       uint8_t unused_0[4];
+} __attribute__((packed));
+
+/* hwrm_fw_reset_output (size:128b/16B) */
+struct hwrm_fw_reset_output {
+       /* The specific error status for the command. */
+       uint16_t        error_code;
+       /* The HWRM command request type. */
+       uint16_t        req_type;
+       /* The sequence ID from the original command. */
+       uint16_t        seq_id;
+       /* The length of the response data in number of bytes. */
+       uint16_t        resp_len;
+       /* Type of self reset. */
+       uint8_t selfrst_status;
+       /* No Self Reset */
+       #define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTNONE \
+               UINT32_C(0x0)
+       /* Self Reset as soon as possible to do so safely */
+       #define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTASAP \
+               UINT32_C(0x1)
+       /* Self Reset on PCIe Reset */
+       #define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTPCIERST \
+               UINT32_C(0x2)
+       /* Self Reset immediately after notification to all clients. */
+       #define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTIMMEDIATE \
+               UINT32_C(0x3)
+       #define HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_LAST \
+               HWRM_FW_RESET_OUTPUT_SELFRST_STATUS_SELFRSTIMMEDIATE
+       uint8_t unused_0[6];
+       /*
+        * This field is used in Output records to indicate that the output
+        * is completely written to RAM.  This field should be read as '1'
+        * to indicate that the output has been completely written.
+        * When writing a command completion or response to an internal processor,
+        * the order of writes has to be such that this field is written last.
+        */
+       uint8_t valid;
+} __attribute__((packed));
+
+/**********************
+ * hwrm_port_ts_query *
+ ***********************/
+
+
+/* hwrm_port_ts_query_input (size:192b/24B) */
+struct hwrm_port_ts_query_input {
+       /* The HWRM command request type. */
+       uint16_t        req_type;
+       /*
+        * The completion ring to send the completion event on. This should
+        * be the NQ ID returned from the `nq_alloc` HWRM command.
+        */
+       uint16_t        cmpl_ring;
+       /*
+        * The sequence ID is used by the driver for tracking multiple
+        * commands. This ID is treated as opaque data by the firmware and
+        * the value is returned in the `hwrm_resp_hdr` upon completion.
+        */
+       uint16_t        seq_id;
+       /*
+        * The target ID of the command:
+        * * 0x0-0xFFF8 - The function ID
+        * * 0xFFF8-0xFFFC, 0xFFFE - Reserved for internal processors
+        * * 0xFFFD - Reserved for user-space HWRM interface
+        * * 0xFFFF - HWRM
+        */
+       uint16_t        target_id;
+       /*
+        * A physical address pointer pointing to a host buffer that the
+        * command's response data will be written. This can be either a host
+        * physical address (HPA) or a guest physical address (GPA) and must
+        * point to a physically contiguous block of memory.
+        */
+       uint64_t        resp_addr;
+       uint32_t        flags;
+       /*
+        * Enumeration denoting the RX, TX type of the resource.
+        * This enumeration is used for resources that are similar for both
+        * TX and RX paths of the chip.
+        */
+       #define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH             0x1UL
+       /* tx path */
+       #define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_TX          0x0UL
+       /* rx path */
+       #define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_RX          0x1UL
+       #define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_LAST        \
+               HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_RX
+       /*
+        * If set, the response includes the current value of the free
+        * running timer.
+        */
+       #define HWRM_PORT_TS_QUERY_INPUT_FLAGS_CURRENT_TIME     0x2UL
+       /* Port ID of port that is being queried. */
+       uint16_t        port_id;
+       uint8_t         unused_0[2];
+} __attribute__((packed));
+
+/* hwrm_port_ts_query_output (size:192b/24B) */
+struct hwrm_port_ts_query_output {
+       /* The specific error status for the command. */
+       uint16_t        error_code;
+       /* The HWRM command request type. */
+       uint16_t        req_type;
+       /* The sequence ID from the original command. */
+       uint16_t        seq_id;
+       /* The length of the response data in number of bytes. */
+       uint16_t        resp_len;
+       /*
+        * Timestamp value of PTP message captured, or current value of
+        * free running timer.
+        */
+       uint32_t        ptp_msg_ts[2];
+       /* Sequence ID of the PTP message captured. */
+       uint16_t        ptp_msg_seqid;
+       uint8_t         unused_0[5];
+       /*
+        * This field is used in Output records to indicate that the output
+        * is completely written to RAM.  This field should be read as '1'
+        * to indicate that the output has been completely written.
+        * When writing a command completion or response to an internal processor,
+        * the order of writes has to be such that this field is written last.
+        */
+       uint8_t         valid;
+} __attribute__((packed));
+
 #endif /* _HSI_STRUCT_DEF_DPDK_H_ */